t1lib-5.1.2/0000755000175000001440000000000010733501626011264 5ustar rmzuserst1lib-5.1.2/doc/0000755000175000001440000000000010733501626012031 5ustar rmzuserst1lib-5.1.2/doc/ut1lib.tex0000644000175000001440000061404310733501626013763 0ustar rmzusers%---------------------------------------------------------------------------- % ----- File: ut1lib.tex % ----- Author: Rainer Menzner (Rainer.Menzner@web.de) % ----- Date: 2005-05-18 % ----- Description: This file is part of the t1lib-documentation. % ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. % As of version 0.5, t1lib is distributed under the % GNU General Public Library License. The % conditions can be found in the files LICENSE and % LGPL, which should reside in the top level % directory of the distribution. Please note that % there are parts of t1lib that are subject to % other licenses: % The parseAFM-package is copyrighted by Adobe Systems % Inc. % The type1 rasterizer is copyrighted by IBM and the % X11-consortium. % ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) % ----- Credits: I want to thank IBM and the X11-consortium for making % their rasterizer freely available. % Also thanks to Piet Tutelaers for his ps2pk, from % which I took the rasterizer sources in a format % independ from X11. % Thanks to all people who make free software living! %---------------------------------------------------------------------------- \newpage \section{Using \tonelib} This section describes in detail how to use \tonelib. I have tried to to describe the stuff in the order a new user would learn best and a new user would need to use the functions. \subsection{Compiling and Linking \tonelib-Programs} \label{compilingprograms}% A program that wants to use functions from the library must include the appropriate headers at compile time and then be linked with the appropriate libraries. Since V. 0.6-beta the X11 interface is separated from the \tonelib\ pivotal stuff. This yields advantages for programs that don't use the X11 rastering functions on systems where X11 is installed. The following applies to programs that do not use the X11 rastering functions: \begin{itemize} \item Include the file \verb+t1lib.h+. All definitions and declarations needed at compile time are included in this file. \item \verb+libt1.a+ or \verb+libt1.so+ respectively must be linked to the program. \end{itemize} In contrast, a program that uses the X11 interface must adhere to the following scheme: \begin{itemize} \item \verb+t1lib.h+ and \verb+t1libx.h+ must be included in this order. Furthermore, \verb+t1libx.h+ includes \verb+X11/Xlib.h+ if it is not already included. \item The libraries \verb+libt1.a+/\verb+libt1.so+ and \verb+libt1x.a+/\verb+libt1x.so+ must be linked to the executable. The correct order is \verb+-lt1x -lt1+ since the X interface uses functions from the latter. Also, the X11 library must appear in the library list after \verb+-lt1x+. \end{itemize} The Makefiles for \verb+xglyph+ and \verb+type1afm+ are typical examples for both configurations. \subsection{Querying and Setting Fundamental Configuration Parameters of \tonelib} \label{queryconfiguration}% It might be necessary to know whether \tonelib\ is compiled with or without X11 interface. At compile time a programmer can check for the X11 interface by stating \begin{verbatim} #ifdef T1LIB_X11_SUPPORT \end{verbatim} after including \verb+t1libx.h+. If \verb+T1LIB_X11_SUPPORT+ is not defined, the X11 interface is not configured and compiled. At runtime, a program can check for the X11 interface by a call to \precorr \begin{verbatim} int T1_QueryX11Support( void) \end{verbatim}\index{\verb+T1_QueryX11Support()+}\postcorr It returns \verb+1+ if the X11 interface is present and \verb+0+ otherwise. Notice that querying X11 support at runtime and compile time tends to be pretty useless starting with V.~0.6-beta. Any decision can be done by examining the existence of the \verb+t1x+-library and the \verb+t1libx.h+ header file. The definition and the function described above are thus only provided for compatibility with pre-0.6 versions of \tonelib. Some remarks on the general data format of bitmaps and should be given here. \tonelib\ internally always generates bitmaps in the way that appears to be natural for them: The first pixel corresponds to the least significant bit in a byte (or word/longword). Bytes are always arranged in memory the way, that the first byte is at the lowest address and the next byte at the following address. This convention is called LSBFirst which stands for Least Significant Bit/Byte First. It is the natural way of data alignment on machines with {\em Little Endian} data representation. In contrast MSBFirst stands for Most Significant Bit/Byte First which is the natural kind of data representation on Big Endian machines. A glyph's scanlines are always aligned in LSBFirst-type, no matter on what machine \tonelib\ is running. What has been said above, strictly does only apply to non antialiased glyphs, i.e., real bitmaps. Antialiased glyphs have their gray values coded in the representation that is natural for the machine \tonelib\ is running on. For example, if \tonelib\ runs on a Big Endian machine, the gray values are in Big Endian. The X11 displaying functions automatically handle this correct. Scanlines of \tonelib-glyphs may be padded to 8, 16 or 32 bit. Padding to higher values will consume more memory for the glyphs, but might speed up concatenating of bitmaps as described in \ref{generatingbitmaps}. This applies to machines with Little Endian representation as, for example, Intel's $x$86 series. On these machines 16 or 32 bits can be placed into the target bitmap in one step. On machines with Big Endian representation, for example, Motorola 680$x$0 series, this is currently not possible. However, using a higher padding value could still yield a better performance since the application could work on larger units than a byte. The default padding value in \tonelib\ is 8 bit. The padding value can be specified at runtime by means of calling \precorr \begin{verbatim} int T1_SetBitmapPad( int pad) \end{verbatim}\index{\verb+T1_SetBitmapPad()+}\postcorr \verb+pad+ must be one of `8', `16' or `32'. The call will only be successful if executed before initialization of \tonelib. This a security mechanism which prevents from having glyphs with distinct padding values. The return value is 0 if successful and -1 if \verb+pad+ was invalid or \tonelib\ had already been initialized. There is a further restriction concerning the padding value. Setting it to 32 is only possible if the machine has an ANSI C integer type of 64 bits. This condition is automatically checked by the \verb+configure+ script of \tonelib. If such an integer type is not present (or has to be emulated as e.g.\ \verb+long long+ in \verb+gcc+) there would not result any performance gain. If a specified padding value is rejected, \verb+T1_errno+ is set appropriately. An application can query the current padding value by calling \precorr \begin{verbatim} int T1_GetBitmapPad( void) \end{verbatim}\index{\verb+T1_GetBitmapPad()+}\postcorr The returned value is the padding value. This function can be called before or after initialization of \tonelib. Another function usually be called near initialization is \precorr \begin{verbatim} int T1_SetDeviceResolutions(float x_res, float y_res) \end{verbatim}\index{\verb+T1_SetDeviceResolutions()+}\postcorr This function allows setting the resolution of your device (screen). The values must be given in dpi. The default resolution, 72 dpi, implies that a pixel in device space equals 1 bp. This function may be called before or after initialization. The only restriction is that no size dependent data must be available. Changing the resolution when bitmaps are already cached would result in inconsistent bitmap-sizes for bitmaps generated before and after the call to \verb+T1_SetDeviceResolutions()+. The function checks whether initialization has already been done. If not, all is OK since no size-dependent data for any font can exist. If initialization has been done, it checks for every font whether size dependent data exists. If there's any size dependent data for any font, \verb+T1_SetDeviceResolutions()+ will return \verb+-1+ without having set the new resolution. Otherwise the specified resolution will be set and the function will return \verb+0+. If you really need to set another resolution in the middle of a session, all size-specific data should explicitly be removed from memory beforehand. This can be achieved using \verb+T1_DeleteAllSizes()+ (see \ref{deletingdata}). Notice that the device resolution need not be set at all if the default resolution of 72 dpi in horizontal and vertical direction is OK. This function is primarily intended to be prepared for applications with a device aspect ratio different from 1. \subsection{Initialization of \tonelib\ and Related Things} \label{initialization}% In this section we should cover the initialization, part of which has already been described in \ref{runtimesetup} in some more detail. This gives the user the chance to fine-tune the initialization for specific applications. Prior to be able to do anything useful with \tonelib, the library has to be initialized. Generally speaking, the purpose of the initialization is to tell \tonelib\ which font files are associated with which font ID's. The existence or accessibility of the font files is also assured at this point. Hence, file name search paths for Type 1 font files, AFM files and encoding files have also to be known at this time. The configuration file and the font database file play a central r\^ole during initialization. While the configuration file contains path specifications and a font database specification, the font database file specifies the relation between font ID's and font filenames. The format of both these files is described in \ref{runtimesetup} and not repeated here. A further purpose of the initialization is to set certain flags that prevent other quantities from being modified at a later time. For example, the padding value must be unique to all glyphs and consequently it is not allowed to be changed after initialization has been performed. The initialization is started by a call to the function \precorr \begin{verbatim} void *T1_InitLib( int log) \end{verbatim}\index{\verb+T1_InitLib()+}\postcorr The parameter \verb+log+ can be interpreted as a mode specification that influences certain parts of the initialization. In fact it should consist of one or more \verb+#define+s from \verb+t1lib.h+. At minimum, \verb+log+ should be either \verb+LOGFILE+ or \verb+NO_LOGFILE+. If \verb+LOGFILE+ is specified, a log file is written while the application runs, and \verb+NO_LOGFILE+ suppresses the generation of a logfile. For information the \tonelib-logfile see \ref{logfile}. In addition to this, \verb+IGNORE_CONFIGFILE+ and \verb+IGNORE_FONTDATABASE+ can be bitwise OR'ed (using ``\verb+|+'') to the \verb+log+-value. The purpose of this is described later in this section. A further flag that might find its way into the value of \verb+log+ is \verb+T1_AA_CACHING+. A discussion of this topic is given in \ref{aacaching}. The \verb+T1_NO_AFM+ completely suppresses usage of AFM data, no matter if an AFM file could have been found using the current search paths or not. This saves time for loading a font and is recommended if an application is known to be restricted on functions that do not access AFM data. The consequences of using this flag are covered somewhat more detailed in \ref{generatingafminfo}. \subsubsection{Standard Initialization} \label{standardinitialization}% The term ``standard initialization'' means, that none of the path manipulating and font database manipulating actions described later has been performed. Also, a standard initialization excludes the use of \verb+IGNORE_CONFIGFILE+ and \verb+IGNORE_FONTDATABASE+. If these conditions are met, the following happens at initialization time: \begin{enumerate} \item The padding value, either being the default value or a value specified by the user before, is assigned. \item Next, depending on the value of \verb+log+, a logfile is tried to be opened. From this point on, depending on the loglevel and the value of \verb+log+ the actions are logged. \item The endianess of the machine \tonelib\ is running on is checked. \item A configuration file is searched in the following order: \begin{itemize} \item The process' environment is checked for the entry \verb+T1LIB_CONFIG+ and if found, its value is interpreted as the filename of the configuration file (see \ref{runtimesetup}). \item If no file was found, the user's home directory is searched for a file named \verb+.t1librc+. In case it exists, it is used as a \tonelib-configuration file. \item If still no configuration file was found, the global configuration file will be tried to be opened. \item If this also does not succeed, all file search paths are left to be ``.'' and the default font database is \verb+FontDataBase+. \end{itemize} It should be noted that the first match wins when searching the configuration file. Only the first one found is examined. \item The font database file(s) are tried to be opened and read. This process is in detail described in \ref{fontdatabase}. If after scanning the complete list of font databases, no font definitions have been performed, \verb+T1_InitLib()+ will return with a \verb+NULL+ pointer indicating the initialization has failed. \item The number of fonts declared in the database is stored. Note that this number of declared fonts must be greater than zero. \item A flag is set to indicate \tonelib\ is initialized and the pointer to the top most area of the global data structures is returned to the application. This pointer is guaranteed to be not \verb+NULL+. \end{enumerate} For some applications, the described initialization scheme appears to be too inflexible and overkill. It is well suited for large applications that use lots of fonts and where it should be possible to add new fonts without modifying the application itself. For small commandline applications like \verb+type1afm+ (see \ref{type1afm}), which are designed to read a few font file names from the commandline, the overhead in configuration file searching and path reading is much too large. Moreover, to insist on a font database file might grow to a real disadvantage. In the subsequent paragraphs we should thus discuss how we can deviate from the initialization scheme described above. \subsubsection{Fine Control over Font Databases and File Search Paths} \label{manipulatingpaths}% First, it is important to mention that it is generally possible to force \verb+T1_InitLib()+ to skip steps 4 and / or 5 as described above. The configuration file is discarded by OR'ing the parameter \verb+log+ of \verb+T1_InitLib()+ with \verb+IGNORE_CONFIGFILE+. The default paths or the paths explicitly specified by the application before are then left untouched during initialization. Discarding the font database specification from the configuration file is achieved by bitwise OR'ing \verb+log+ with \verb+IGNORE_FONTDATABASE+. The result after initialization will be an empty database. This is valid in V.\ 0.5 and newer since fonts may be added to the database at runtime. Using the two flags described above, an installed setup can be ignored and an application may have complete control over its search paths. There are a number of functions for this purpose and each of these functions allows to specify exactly {\em one} path element at a given time. Using special characters like white space or path separators in a path element is thus not an issue. The font database may explicitly be specified by the application using \precorr \begin{verbatim} int T1_SetFontDataBase( char *filename) \end{verbatim}\index{\verb+T1_SetFontDataBase()+}\postcorr \verb+filename+ is the pointer to a string containing the name of the font database file that is to be examined. This function replaces any set of font databases setup previously and is thus usually to be called before \verb+T1_InitLib()+. A call to this function after initialization will return the result -1 and \verb+T1_errno+ will be set to \verb+T1ERR_OP_NOT_PERMITTED+. For the special case that the font database is still epmty after initialization this function may also be called after initialization. But in any case, the database must be empty! For the latter cases, fonts specified in the new database file are then immediately inserted into the database. In case of success, the number of available fonts is returned. There is also the function \precorr \begin{verbatim} int T1_AddFontDataBase( int mode, char *filename) \end{verbatim}\index{\verb+T1_AddFontDataBase()+}\postcorr It can be called at any time and \verb+filename+ is the string of the new font database's file name. If called before initialization, the parameter \verb+mode+ can be either \verb+T1_APPEND_PATH+ or \verb+T1_PREPEND_PATH+ and the name of the new font database simply is either appended or prepended to the existing list of font databases. Then, the function returns $0$. If the function is called after initialization, the parameter \verb+mode+ is ignored and the new database is appended in any case, because this is the only meaningful action. Furthermore, the new database is immediately loaded and the function returns a number indicating the number of available fonts (which can also be 0). In the case of an error, \verb+T1_AddFontDataBase()+ returns $-1$. There is also a pair of functions that act on the list of XLFD font database files, \precorr \begin{verbatim} int T1_SetFontDataBaseXLFD( char *filename) \end{verbatim}\index{\verb+T1_SetFontDataBaseXLFD()+}\postcorr \precorr \begin{verbatim} int T1_AddFontDataBaseXLFD( char *filename) \end{verbatim}\index{\verb+T1_AddFontDataBaseXLFD()+}\postcorr These functions have exactly the same syntax and semantics as the functions just described above. Standard font database files and XLFD font database files are handled in separate lists internally, so that setting the XLFD font database will not affect explicit standard font database settings. However, the default standard font database (\verb+./FontDataBase+) will be cleared when at least one XLFD font database is specified. This is because the default font database is meant as a fallback, and the fallback case is no longer given if a XLFD font database has been specified. A similar manipulation as just described for font database files, is possible for the searchpaths. (Re-)Defining a search path is done by calling \precorr \begin{verbatim} int T1_SetFileSearchPath( int type, char *pathname) \end{verbatim}\index{\verb+T1_SetFileSearchPath()+}\postcorr before calling \verb+T1_InitLib()+, or respectively, before the database contains any fonts. An attempt to set the file searchpaths when the database is no longer empty is denied. The reason is that it is not wise to override the searchpaths which had been valid previously during the verification of the existence of font files. Such paths should thus not be removed. The parameter \verb+pathname+ points to the string that contains the pathname that should be used as searchpath. The parameter \verb+type+ is any OR'ed combination of \verb+T1_PFAB_PATH+, \verb+T1_AFM_PATH+ and \verb+T1_ENC_PATH+. These tell the function to set the search paths for Type 1 font files, AFM files and encoding files, respectively. In case of an error \verb+-1+ is returned and otherwise \verb+0+. Extending the file searchpaths before {\em and} after initialization is possible using \precorr \begin{verbatim} int T1_AddToFileSearchPath( int pathtype, int mode, char *pathname) \end{verbatim}\index{\verb+T1_AddToFileSearchPath()+}\postcorr This might be useful to locate font files that were of no interest at the time of initialization. \verb+pathname+ is the pointer to the string that should be added to the searchpaths. Only {\em one} particular path element may be specified in one call. What searchpaths are affected is determined by the parameter \verb+pathtype+. Again, similar to described above, any OR'ed combination of \verb+T1_PFAB_PATH+, \verb+T1_AFM_PATH+ and \verb+T1_ENC_PATH+ is valid. There are two ways to extend an existing searchpath which are specified by the \verb+mode+ parameter. It must be either \verb+T1_APPEND_PATH+ or \verb+T1_PREPEND_PATH+, which causes the new path element to be appended or prepended to the existent path respectively. Since an existent path specification is not overwritten by \verb+T1_AddToFileSearchPath()+, this function may be called at any time before or after initialization. It might also be of interest to query the current file search paths and font databases. \tonelib\ provides \precorr \begin{verbatim} char *T1_GetFileSearchPath( int type) \end{verbatim}\index{\verb+T1_GetFileSearchPath()+}\postcorr for querying search paths. Again, the parameter \verb+type+ determines what search path is returned. Exactly one of \verb+T1_PFAB_PATH+, \verb+T1_AFM_PATH+, \verb+T1_ENC_PATH+ and \verb+T1_FDB_PATH+ should be specified. If more than one path is specified, the first match wins and only one path is returned. The types will be checked in the order \verb+T1_PFAB_PATH+, \verb+T1_AFM_PATH+, \verb+T1_ENC_PATH+ and \verb+T1_FDB_PATH+. Here, \verb+T1_FDB_PATH+ indicates an interest in the list of font databases. The paths are separated using the current path separator. \subsubsection{Adding Fonts to the Database} \label{addingfonts}% Extending the font database is possible at any time after initialization. In addition to using \verb+T1_AddFontDataBase()+ (see above), it is done via a call to \precorr \begin{verbatim} int T1_AddFont( char *fontfilename) \end{verbatim}\index{\verb+T1_AddFont()+}\postcorr \verb+fontfilename+ is the pointer to the filename string. The following actions take place: \begin{itemize} \item The font file is searched using the current search path specifications. \item If the file has been located, it is checked whether the font database contains enough memory to hose an additional font. If so, the font filename is stored and the function returns \verb+new_ID+, which is the font ID that will be associated with this font in the future. \item If there was no free memory for an additional font, the memory is reallocated to a greater size. This involves also resetting the new area. Finally the value \verb+new_ID+ is returned. \end{itemize} If a negative value is returned the function failed. \verb+-1+ indicates the font file could not be located. \verb+-2+ or \verb+-3+ are returned if a memory allocation failure occurs. \subsubsection{Summary of Search Path Handling} Since the exact handling of search path specifications at the several stages may appear somewhat confusing we shall summarize the exact rules now: \begin{enumerate} \item {\bfseries Before Initialization}\\ Default paths are not yet setup. Each call of one of the \verb+T1_Set...()+ functions described above establishes a completely new respective path. Each call of one of the \verb+T1_Add...()+ functions extends the respective path in the desired manner, or creates a new respective path if previously no path existed. \item {\bfseries At the Beginning of the Initialization}\\ Each path type for which a path had not already been explicitly created using the\\ \verb+T1_Set...()+ or \verb+T1_Add...()+ functions receives a default value. This is ``\verb+.+'' for the file search paths and \verb+./FontDataBase+ for the font database. \item {\bfseries During Initialization}\\ Each path element read from the configuration file overwrites an existing respective default path but preserves an existing respective explicitly setup path by appending to the latter. The newly setup search path is used to locate files while scanning the font database file(s). \item {\bfseries After Inititialization but before the Database is being filled}\\ At this stage, all \verb+T1_Set...()+ and \verb+T1_Add...()+ functions still work as described under~(1). Notice that this phase usually is not accessible when using the standard initialization scheme. It only becomes accessible if no fonts have been added during initialization. \item {\bfseries After at least one Font is insterted into the Database}\\ Once there are fonts in the database, the paths setup up to now must be preserved in any case. Hence, the \verb+T1_Set...()+ may not be called any longer. The \verb+T1_Add...()+ functions {\em extend} the current set of search paths. In particular, possibly existing default search path elements, then, are not overwritten any longer because they might have been used before to verify the existance of required files. \end{enumerate} A call to \verb+T1_AddFontDataBase()+ will not only append the specified file name to the existing list of databases, but will also immediately locate the fonts specified therein and assign additional font IDs. \subsubsection{Bypassing the \tonelib\ File Search Machinery} \label{afmfilenames}% Usually, \tonelib\ takes care for locating files according to the path specifications in the configuration file. There might, however, arise the need to explicitly tell \tonelib\ which particular file to use. Forcing \tonelib\ to use particular Type 1 font files can be achieved using the function \verb+T1_AddFont()+, described just above. If a pathname passed to this function is a complete path, \tonelib\ will use this complete path to locate the font file, forgetting about its own search path list. A filename path is assumed to be complete if \begin{itemize} \item it starts with the directory separator character, usually ``\verb+/+''. In this case it is an {\em absolute} path specification, meaning that the start point is at the root of the filesystem, or \item if it starts with ``\verb+./+'' or ``\verb+../+'' (where it is assumed that ``\verb+/+'' is the directory separator character). Here we have a {\em relative} path specification in which ``\verb+.+'' refers to the current working directory while ``\verb+..+'' refers to the parent directory of the current working directory. Since the notion of the {\em current working directory} is fundamental for every process that has access to a filesystem, a relative path specification also uniquely identifies one particular file in the filesystem. \end{itemize} If a font file whose complete path had been specified could not be found by \tonelib, the paths from the configuration file are searched as a fallback mechanism. What can be done for the Type 1 font files is also possible for AFM files, which are needed on a per-font basis. The function \precorr \begin{verbatim} int T1_SetAfmFileName( int FontID, char *afm_name) \end{verbatim}\index{\verb+T1_SetAfmFileName()+}\postcorr allows to set the complete path of the AFM file belonging to the font identified by \verb+FontID+, overriding the internal search mechanism. This function is to be called after initialization but before the font \verb+FontID+ is loaded. It returns 0 if all goes right and $-1$ otherwise. In the latter case \verb+T1_errno+ will also be set appropriately. Notice that \verb+FontID+ must also be valid with respect to its upper limit, it is an error condition if the font database has less than \verb+FontID+ entries. There is also the function \precorr \begin{verbatim} char *T1_GetAfmFileName( int FontID) \end{verbatim}\index{\verb+T1_GetAfmFileName()+}\postcorr which allows to query the AFM filename of a font. It returns a pointer to the filename if it had explicitly been specified or \verb+NULL+ otherwise. \verb+NULL+ will also be returned if \verb+FontID+ was invalid. In this case also \verb+T1_errno+ will be set. Just for the sake of completeness we should mention that what has been said about absolute and relative path specification also applies to pathnames for encoding files (see \ref{encoding}). \subsection{The \tonelib-Logfile} \label{logfile}% Since version 0.2-beta \tonelib\ supports a runtime logfile. It implements an uncomplicated way to keep track of errors, warnings, statistics and debug messages without overloading stdout/stderr. As seen in \ref{initialization} the user must specify whether or not to use a logfile when calling \verb+T1_InitLib()+. Specifying \verb+LOGFILE+ as argument leads to using a logfile and \verb+NO_LOGFILE+ suppresses the use of a logfile. The name of this logfile is by default \verb+t1lib.log+. This name is defined in \verb+t1misc.h+ and can be changed there as the user likes. Basically \tonelib\ distinguishes 4 types of runtime messages. Each type is associated a ``loglevel'': \begin{itemize} \item {\sl Errormessages/Level1:}\/ They are considered that important that the user is in any case informed. Example: During initialization the memory allocation for one of the basic data structures of \tonelib\ failed. \item {\sl Warningmessages/Level2:}\/ They are considered important but it is not absolutely necessary to inform the user. Example: An AFM file could not be loaded for a given font. This imposes several restrictions on what can be done with that font but it is possible to generate bitmaps. \item {\sl Infomessages/Level3:}\/ They do not indicate a problem. Rather, the user is notified about some facts and statistics that might be of interest. Example: After loading a font the consumption of virtual memory is displayed. \item {\sl Debugmessages/Level4:}\/ These can be pointers, numerical data etc. Example: Print out the pointers that point to the memory area where the PostScript dictionaries for a font just loaded are located. \end{itemize} The decision what message to put into the logfile is done by examining the value of an integer variable whose values can be \verb+T1LOG_ERROR+ (=1), \verb+T1LOG_WARNING+ (=2), \verb+T1LOG_STATISTIC+ (=3) or \verb+T1LOG_DEBUG+ (=4). All messages whose level is below or equal to this value are put into the logfile. The user may set this loglevel by calling \precorr \begin{verbatim} void T1_SetLogLevel( int level) \end{verbatim}\index{\verb+T1_SetLogLevel()+}\postcorr The default value is \verb+T1LOG_WARNING+ which means that error and warning messages are stored in the logfile. If the usage of a logfile has been specified, \tonelib\ tries first to open it in the current directory. If this fails for some reason \tonelib\ tries to create it in the user's home directory. If this fails too, an error message is printed to stderr and no logfile is used. If the application programmer chose not to create a logfile, it would be hardly possible for a user to track down possible problems, e.g. in file searching. To overcome this disadvantage, the user may set an environment variable \verb+T1LIB_LOGMODE+ at runtime. This variable is evaluated by \tonelib\ when \verb+T1_InitLib()+ is called. If its value is one of the four strings \verb+logDebug+, \verb+logStatistic+ \verb+logWarning+ and \verb+logError+, the respective loglevel is set by \tonelib\ and a log file is created, even if the programmer chose not to do so. However, if the programmer had altered the log level after calling \verb+T1_InitLib()+, this cannot be catched by setting the environment variable. A log file is created anyhow so that at least error messages will be logged. The user himself may also put some messages into the logfile. This can be achieved using \precorr \begin{verbatim} void T1_PrintLog( char *func_ident, char *msg_txt, int level, ...) \end{verbatim}\index{\verb+T1_PrintLog()+}\postcorr where \verb+func_ident+ is a pointer to a string identifying the function that generates the message. \verb+msg_txt+ points to the text string to put out. The distinction between a function identifier and a message text is only formal, indicating the user should identify the function that generates the message. The string \verb+msg_txt+ may contain format character sequences, \verb+%..+ , as known from the \verb+printf+- or \verb+scanf+ standard \verb+C+ functions. In this case, the ellipses indicate that a variable list of further arguments may follow. The \verb+level+ specification works as described above: The message is only put out if the internal loglevel is equal or greater than \verb+level+. Here is a typical example of a log file after a (short) \verb+xglyph+-session in which the loglevel was set \verb+T1LOG_STATISTIC+. Among several informative messages of type S, also two messages of type W have been generated. They stem from trying to raster the character ``\ss'' which was not in the current encoding. \par\noindent {% \tiny \begin{verbatim} (S) (Mon Jul 14 18:27:34 1997) T1_InitLib(): Initialization started (S) (Mon Jul 14 18:27:34 1997) T1_InitLib(): Initialization succesfully finished (S) (Mon Jul 14 18:27:44 1997) T1_LoadFont(): VM for Font 0: 35132 bytes (S) (Mon Jul 14 18:27:44 1997) CreateNewFontSize(): New Size 100.000000 created for FontID 0 (antialias=0) (S) (Mon Jul 14 18:27:53 1997) CreateNewFontSize(): New Size 100.000000 created for FontID 0 (antialias=1) (S) (Mon Jul 14 18:27:53 1997) CreateNewFontSize(): New Size 200.000000 created for FontID 0 (antialias=0) (W) (Mon Jul 14 18:27:53 1997) T1_SetChar(): No black pixels found for character 223 from font 0, returning NULL (W) (Mon Jul 14 18:27:53 1997) T1_SetStringX(): T1_SetChar() returned NULL-pointer! (S) (Mon Jul 14 18:27:55 1997) T1_DeleteSize(): Size 200.000000 deleted for FontID 0 (antialias=0) (S) (Mon Jul 14 18:27:55 1997) T1_DeleteSize(): Size 100.000000 deleted for FontID 0 (antialias=0) (S) (Mon Jul 14 18:27:55 1997) T1_DeleteSize(): Size 100.000000 deleted for FontID 0 (antialias=1) \end{verbatim} } \subsection{Generating Bitmaps} \label{generatingbitmaps}% At this point, you are able to generate a bitmap. As said before, a character- or string-bitmap is given to the user as an object of type \verb+GLYPH+. We should briefly explain \verb+GLYPH+ here. The type is defined by \begin{verbatim} typedef struct { char *bits; struct { int ascent; int descent; int leftSideBearing; int rightSideBearing; int advanceX; int advanceY; } metrics; void *pFontCacheInfo; unsigned long bpp; } GLYPH; \end{verbatim} \verb+bits+ is a pointer to the bitmap data. The bitmap is organized in lines, starting with the uppermost line. Each bitmap pixel is usually represented by one bit. If the width of the bitmap is not an integer multiple of 8, the lines are padded with zeros, so that each line starts at a byte boundary. Note that the bitmap has no margins taken into account. The bitmap occupies the minimum area the character needs to be painted. The bitmap pointer may also be the \verb+NULL+-pointer. In this case, the glyph contains no foreground pixels. The metrics of the corresponding glyph should be valid, though. Typically, this appears for the space character as well as in situations where an undefined or unencoded character had been substituted by the \verb+.notdef+-character within the rastering functions. Note that the \verb+pixmap+-entry which has been present in version 0.3-beta, has been removed with version 0.4-beta. See the discussion on the X11-interface in \ref{x11interface} for an explanation of this. The struct \verb+metrics+ contains metric information that is needed to position the character and to describe the character origin with respect to the bitmap. The members in detail: \begin{itemize} \item \verb+metrics.ascent+: describes how many lines the bitmap ranges above the line $y=0$. \item \verb+metrics.descent+: describes how many lines the bitmap ranges below the line $y=0$. Width below $y=0$ counts negative so that the difference \verb+ascent+ $-$ \verb+descent+ is the total height of the bitmap, the number of lines. \item \verb+metrics.leftSideBearing+: The amount of spacing between the origin of a character and the x-coordinate of its leftmost painted pixel. One could also name it ``left margin'' of the character. \item \verb+metrics.rightSideBearing+: The horizontal difference between the origin of a character and the x-coordinate of its rightmost painted pixel. This definition stands in contrast to some other interpretations of the right side bearing, where it is assumed as the difference between the glyph's width and its right most pixel. \item \verb+metrics.advanceX+: The amount of position increment in horizontal direction after this character bitmap (or string bitmap) has been placed. It is almost always larger than the bitmap width because most characters contain a certain amount of margins. Note that this value is not suitable for internal computations of character positions since it contains the horizontal escapement rounded to the pixel grid. Using this value for such computations leads to accumulating positioning errors. \item \verb+metrics.advanceY+: The amount of position increment in vertical direction after this character bitmap (or string bitmap) has been placed. Upper direction counts positive. \end{itemize} As seen, the width of the bitmap is given as the difference between \verb+rightSideBearing+ and \verb+leftSideBearing+ and the values \verb+metrics.leftSideBearing+, \verb+metrics.descent+,\\ \verb+metrics.rightSideBearing+ and \verb+metrics.ascent+ effectively describe the bounding box of the glyph. The entry \verb+pFontCacheInfo+ is not currently used but will probably later when font caching is really implemented. Moreover, there's a certain chance that some other entry will be added in future releases. The member \verb+bpp+ is used to store the depth of the bitmap. For true bitmaps, it is always 1. See \ref{antialiasing} for an explanation. There are three basic functions which produce pointer to glyph objects. In order to generate the glyph for a single character you would use the function \precorr \begin{verbatim} GLYPH *T1_SetChar( int FontID, char charcode, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_SetChar()+}\postcorr As in most other functions, \verb+FontID+ is a valid identification number of a font. It can range from 0 to $n-1$, where $n$ is number of fonts declared in the font database file. The second argument \verb+charcode+ determines the character that will be rasterized. As mentioned earlier, the encoding mechanism is used for accessing the output character. This means, if \verb+'A'+ is given as the character code, the machine representation of \verb+'A'+ is used as an index into the current encoding vector. In this encoding vector, the characters' name is looked up. Encoding vectors may be changed by the user (see \ref{encoding}). The parameter \verb+size+ is interpreted in Postscript's bigpoint-unit (bp). By default, 1 bp equals one device pixel. \verb+transform+ specifies the transformation that will be applied to the character before rastering. If this pointer is \verb+NULL+, no transformation is used. Otherwise it should point to a valid \tonelib-transformation matrix. Please refer to \ref{transformations} for information on how to easily create \verb+T1_TMATRIX+ matrices. Hinting is only performed if the transformation is a pure rotation and if the the angle is one of 0, 90, 180 or 270 degrees. Otherwise font level and character level hinting information is ignored. Bitmaps of transformed characters are never saved in cache memory since I assume that they are rarely needed. The overhead to manage transformed characters in cache would be overkill and would significantly increase memory consuming. Anyhow, this would only work for some dedicated transformations. \verb+T1_SetChar()+ in fact does some more things than simply rastering the specified character: \begin{itemize} \item It checks whether the font in question is already loaded. If not, it is loaded. \item If the size dependent data structures for the size in question do not exist, it creates them and inserts them in the linked list of size dependent data structures. \item It checks if the character is already existent in cache. If so, it returns the data from cache. \end{itemize} Some words concerning memory management: The memory used by the \verb+GLYPH+-structure is static in this function. The memory required for the bitmap is also allocated by the function itself. This means, the user doesn't need to free any memory by himself. Every time \verb+T1_SetChar()+ is called, it starts by giving the memory needed for the last generated glyph free or respectively setting metric values to 0. Thus, do not free the returned glyph pointer since later \verb+T1_SetChar()+ will free memory that is no more allocated and probably used for some other purpose. If you really like to free the memory, set the pointer to \verb+NULL+ afterwards. If an error occurs at some point, \verb+T1_SetChar()+ returns a NULL-pointer to the user. Frequently it is advantageous to raster a series of characters at once. This has the advantage that internal accuracy may be used and the overhead for the user is minimal. For such cases, the function \precorr \begin{verbatim} GLYPH *T1_SetString( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_SetString()+}\postcorr is provided. It can be considered an extended version of \verb+T1_SetChar()+. The same as said above applies to the arguments \verb+FontID+, \verb+size+ and \verb+transform+. But a few additional arguments are needed here. \verb+string+ is a series of bytes representing the indices into the current encoding vector. The \verb+len+-parameter is needed because we cannot imply that string is always an object like a string in C. For example, the Computer Modern Roman fonts contain the uppercase Greek Gamma (\char0) at position 0 in their internal encoding. In a string to be typeset the value 0 is thus a valid value and deserves no special treatment. Hence, we cannot not use the C-function \verb+strlen()+ to compute the length of the string. However, since in most usual encodings the special value 0 is not encoded (``\verb+.notdef+''), it makes sense to switch between standard situations and non-standard situations: \begin{itemize} \item If \verb+string+ is a string conforming with C-semantics, \verb+len+ can be set to 0. Then, the length of the string is internally computed. \item If \verb+string+ contains one or more control characters which make processing impossible, the \verb+len+-value must be specified explicitly. \end{itemize} The \verb+spaceoff+ parameter is important for word processing purposes. The value specified here is interpreted as an offset to the space width used during rastering. It is interpreted in charspace units, i.e., $1/1000$ bp. Every time a space character is requested, this amount of horizontal escapement is added to the natural spacewidth of the current font. Note that the space character itself is actually not rastered. All requests to the character with the charactername ``\verb+space+'' are caught by \tonelib\ and converted to a simple horizontal escapement. For computation of the resulting spacewidth, the width of the space-character is taken from the AFM data and merged with the specified offset, which may also be negative.\footnote{One consequence of this handling is, that---with a little tricking---fonts that do not define a space character themselves may be used for typesetting. This applies to the dc-fonts, which only define a visible space, but no real space (see \ref{fonts}).} The \verb+modflag+ argument may be used to specify some option to the rastering function. It is generally 0 or an OR'ed combination of the following names: \begin{itemize} \item \verb+T1_KERNING+: As the name implies, this argument determines that pairwise kerning information from the AFM file is to be taken into account during string rastering. Not specifying \verb+T1_KERNING+ means: ``omit kerning''. It is generally recommended to use kerning information since this improves the optical appearance. However, many lower quality fonts do not have kerning information. With \tonelib\ V.\ 0.4-beta, kerning information is accessible much faster than before because it is based on char codes rather than on characternames. \item \verb+T1_RIGHT_TO_LEFT+: Setting this flag will invert the writing direction. In {\em Right-To-Left} mode the escapement in writing direction (left) is inserted before placing the character with the result that the character laps over to the left side. This principle is kept for all characters in the string. Note that metrics of fonts that are intended for {\em Right-To-Left} typesetting have the same meaning as for fonts intended for standard ({\em Left-To-Right}) typesetting. \item \verb+T1_UNDERLINE+: The string to be rastered is to be underlined according to the line specifications of the current font. \item \verb+T1_OVERLINE+: The string to be rastered is to be over lined. \item \verb+T1_OVERSTRIKE+: Same here for overstriking. \end{itemize} For a description of underlining and such, see \ref{underlining}. Notice also that the \verb+modflag+ argument is a replacement of the \verb+kerning+ argument from pre-0.7 versions of \tonelib. Concerning glyph-memory considerations, the same applies as said under the description of \verb+T1_SetChar()+: Never free a pointer to memory which was returned by \verb+T1_SetString()+. Or, alternatively, if freeing the pointer cannot be avoided set it to NULL after freeing it.\footnote{For example, {\tt XDestroyImage()} gives the pixel memory for the image data free although it might not have been allocated by any X11-function.} There are two generic ways how a string-glyph can be produced. The first is to take the paths of all characters needed, concatenate them, insert space and kerning amounts as needed and raster the resulting whole path. This will yield the best results since the average position accuracy of the pixels will be optimal. This applies especially for rotated strings. The drawback is, that every character must be rastered every time it is needed. There is no way to access the bitmap data of a character inside a rastered string separate from others. And the caching of string-glyphs at this programming level doesn't make any sense. So this principle takes significantly longer than concatenating bitmaps from a cache area. However, it is done when the specified rotation angle is not equal to $0^\circ$ or when even further transformation are to be applied. This condition should limit the total number of situations when this happens to an amount we can easily bear. If the \verb+transform+-argument is \verb+NULL+ we know transformations or rotation should not be applied and another approach is used. We are then able to construct the resulting bitmap by adjusting already existent bitmaps into proper positions. If a character does not already exist in the cache, it is generated just the way \verb+T1_SetChar()+ works. The calculation of the character-bitmap positions in the output bitmap is done with char space-precision. Nonetheless, there may be differences in the output compared with output of the above method. These are caused by the fact that rounding to pixel accuracy has already been achieved when generating the character bitmap. Thus, the output of the above principle should always be better since the positions of the black pixels are rounded with respect to the whole string, and not with respect to a single character glyph. On the other hand, concatenating character glyphs takes significantly less time than rastering a complete string. Theoretically, differences of up to two pixels horizontal shift may appear in the output of the two principles. You can check the effect by running the program \verb+xglyph+. Specify a string of enough length and raster it at angle $0^\circ$. Then specify a very small angle from 0 different, say, $0.001^\circ$, and raster the string again with the new setting. You might find that the representation of the string is a little different now. The third function that creates a glyph object is \precorr \begin{verbatim} GLYPH* T1_SetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_SetRect()+}\postcorr Calling this function yields a filled rectangle. It is intended for situations where a \TeX-style \verb+\vrule+ would be appropriate, or, for equations in mathematical typesetting. First, the argument \verb+FontID+ identifies a valid font. At this time, it is not obvious why a valid font is required in order to create a rectangular glyph. The reason is, that some of the parameters that are associated to a particular font are also relevant for creating rectangles in the context of that font. Hence, specifying a font identifier in this case is a means of stating ``{\em draw a rectangle that visually fits to the style of the font \verb+FontID+}''. Aside from this, I assume that each application that uses \tonelib\ deals with at least {\em one} font so that the \verb+FontID+ parameter actually does not hurt. The size of the rectangle is to be specified in charspace units by means of the parameters \verb+width+ and \verb+height+, and is moreover subject to scaling through the parameter \verb+size+. By definition, the typographical fundamental area of a font, known as the {\em em-square}, is just as high and as wide as the design size of the font. In charspace units, this rectangle exactly maps to a $1000 \times 1000$ grid. Or alternatively spoken, one charspace unit is 0.001bp (Big Point). For example, in order to draw an em-square for some font at 13 points, the correct parameters are \hbox{\verb+size+ $= 13$}, \hbox{\verb+width+ $= 1000$} and \hbox{\verb+height+ $= 1000$}. If absolute physical dimensions are desired, the scaling explicitly must be calculated by the user. For instance, in order to produce a $ 1 \mathrm{cm} \times 1 \mathrm{cm}$ square we find \begin{displaymath} h = w = 1\mathrm{cm} \frac{72\mathrm{bp}/\mathrm{in} \times 1000\mathrm{cs}/\mathrm{bp}}{2.54\mathrm{cm}/\mathrm{in}} \approx 28346\;\mathrm{cs.} \end{displaymath} Here ``cs'' designates charspace units and \verb+size+ is assumed to be $1$. Note that still the device resolution must be properly setup in order to make the dimensions appear accurately on the device. The parameter \verb+transform+ is a pointer to a \tonelib\ transformation matrix. If it is \verb+NULL+, the current transformation of the font in question is used. Depending on the kind of actual transformation, the rectangle might also image as a nonrectangular shape. This happens, if the current font is slanted, then the rectangle will be skewed. Glyphs produced by the rectangle function are never cached because there is no means in doing so. With respect to memory management, the same applies as for \verb+T1_SetChar()+ and \verb+T1_SetString()+. Since rectangles rarely are used to produce normal text flow, the glyphs produced by the rectangle function do not cause any escapement. If two glyphs with arbitrary orientation exist, \precorr \begin{verbatim} GLYPH *T1_ConcatGlyphs( GLYPH *glyph1, GLYPH *glyph2, int x_off, int y_off, int modflag) \end{verbatim}\index{\verb+T1_ConcatGlyphs()+}\postcorr can be used to concatenate them. First the size of the resulting glyph is computed and its metric values are filled. Then, the two glyphs are placed at their appropriate positions in the newly created bitmap. In order to be able to work, the following conditions must be met: \begin{enumerate} \item Either glyph must be different from \verb+NULL+. \item Both glyphs must have identical \verb+bpp+-values. If antialiased and non-antialiased glyphs are to be concatenated, have a look at \item There must be enough memory for the new glyph (naturally). \end{enumerate} The quantities \verb+x_off+ and \verb+y_off+ describe the $x$- and $y$-component of an optional offset to be inserted between the two glyphs. This offset is interpreted as device pixels. The \verb+modflag+ argument is used to specify the direction in which the two glyphs are to be concatenated. That is, only the bit \verb+T1_LEFT_TO_RIGHT+ / \verb+T1_RIGHT_TO_LEFT+ is respected by this function. If problems occur, \verb+NULL+ is returned. It is generally not recommended to produce large glyphs with this function because the char space precision in placing the character bitmaps is lost. For example, three times rounding up an advance by 0.3 pixels accumulates to 1 pixel position error. A similar effect shows up when two rotated and underlined glyphs are concatenated with this function. There might be a slight shift in the baseline at the point where the two glyphs touch. A dilemma occurs, if two antialiased bitmaps have distinct background colors. Then, it is not clear what the transparent color is. \verb+T1_ConcatGlyphs()+ always assumes the {\em current} background color to be transparent. There is one more function that generates pointers to glyphs: \precorr \begin{verbatim} GLYPH *T1_CopyGlyph(GLYPH *glyph) \end{verbatim}\index{\verb+T1_CopyGlyph()+}\postcorr As mentioned earlier, the user doesn't have the possibility of keeping the glyphs longer than to the next call of the respective rastering function. If someone wants to keep a bitmap some time longer, \verb+T1_CopyGlyph()+ may be used to copy the glyph to another area which is then completely under user's control. This function simply does the following: \begin{itemize} \item Allocates the memory for the glyph-structure. \item If bitmap data is present, it allocates memory for the bitmap data, taking the member \verb+bpp+ into account (see \ref{antialiasing}). \item Copies the structure and the bitmap data to the respective locations. \item Initializes the pointer \verb+glyph.bits+. \end{itemize} Return value is the pointer to the allocated glyph-structure. If something goes wrong, NULL is returned to indicate an error. A glyph pointer, returned by a call to this function should be freed by a call to \verb+T1_FreeGlyph()+ (see \ref{deletingdata}). \subsection{Loading Fonts Explicitly} \label{loading}% Usually there is no need for a user to load a font into memory since this is done automatically as needed by the rastering functions. But there are two situations where it makes sense to explicitly load a font before generating any size dependent data: \begin{itemize} \item A font is to be reencoded immediately after loading (see \ref{encoding}). \item A font is to be transformed (see \ref{transformations}). \end{itemize} These operations require a font being loaded but not having any size specific data. Loading a font explicitly is done by the function \precorr \begin{verbatim} int T1_LoadFont( int FontID) \end{verbatim}\index{\verb+T1_LoadFont()+}\postcorr Loading a font involves several actions: \begin{itemize} \item Locating and loading the Type 1 font file. \item Locating and loading the font metrics data from AFM file. \item Computing and filling the values of the \verb+FONTPRIVATE+ structure as described in section \ref{internals}. \item Setting up some tables for fast access of metrics information. \end{itemize} \verb+T1_LoadFont()+ returns \verb+0+ if successful or \verb+-1+ if the font could not be loaded. A failure may be due to \tonelib\ not having been initialized or due to problems with file locations and file parsing. If a font refuses to load, the logfile should be examined first. Furthermore, in case of a failure \verb+T1_errno+ will be set appropriately. \subsection{Functions for Encoding Handling} \label{encoding}% As mentioned earlier, the encoding mechanism used in the PostScript-language allows a font to contain more than 256 different characters, although only 256 are accessible at a given time. The characters which are accessible are given by the elements of the current {\em encoding vector}. In order to maximize flexibility, \tonelib\ allows for changing the current encoding vector. This is also called ``Reencoding a font''. A new encoding vector is defined and made known to the library by creating an encoding-file and loading its contents into memory. Before describing the functions needed for this, we should briefly describe the format of an encoding file. An encoding file is an ASCII text file. No assumptions about filename extensions are made. Here are the rules for scanning the file: \begin{itemize} \item The file contents are completely ignored until a line is encountered that starts with the string \verb+Encoding=+. This string may optionally be immediately followed by a string that is assumed to be the identifier of the {\em encoding scheme} that this file defines. Any further text on this line is ignored. \item Now, 256 lines have to follow, each line describing one character's name. The string ranging from the beginning of the line to the first white space character is assumed to be a character name. The remainder of the lines is ignored and may (should) be used for comments, thereby describing the current character code. \item All further lines of text are ignored. \end{itemize} As well known from PostScript, non-existent characters have to be named \verb+.notdef+. Here's an example of such an encoding file: \begin{verbatim} Sample encoding file for t1lib! The first two lines are considered to be comments! Encoding=ISOLatin1Encoding .notdef /* '000 000 "00 */ .notdef /* '001 001 "01 */ .notdef /* '002 002 "02 */ . . . . . . greater /* '076 062 "3E */ question /* '077 063 "3F */ at /* '100 064 "40 */ A /* '101 065 "41 */ B /* '102 066 "42 */ . . . . . . yacute /* '375 253 "FD */ thorn /* '376 254 "FE */ ydieresis /* '377 255 "FF */ \end{verbatim} Since V.~1.2, \tonelib\ is also able to load encoding files in the format used by \verb+dvips+. This makes a large set of existing encoding files available to the user. When parsing \verb+dvips+ encoding files, \tonelib\ requires PostScript syntax. This means white space may be interspersed freely and line comments are defined by the character \%. The mark-characters, \verb+[+ and\verb+]+, are considered as special tokens and need not be preceded or followed by white space. Similarly, the literal escape character \verb+/+ delimits a preceding token without interspersed white space. When parsing \verb+dvips+ encoding files, \tonelib\ tolerates less than 256 character name definitions. If characters are missing, they are substituted by \verb+.notdef+ until the counter reaches $256$. Aside from comments, no PostScript tokens are allowed after the encoding definition in a \verb+dvips+ encoding file is complete. With the defining terms above, it turns out that a file which has successfully been scanned as a \verb+dvips+ encoding file, cannot specify a valid \tonelib\ encoding after the PostScript encoding definition is complete (because no valid character name can start with \% and because at least a line such as \verb+Encoding=+, would have to follow the PostScript encoding). Hence the file format are mutually exclusive and it is possible to read both format using one function. In a first pass \tonelib\ tries to read the file as a \verb+dvips+ encoding file, and if that fails, it assumes to have a \tonelib\ encoding file. Once such an encoding file of either type has been created, it can be loaded into memory. This is done with the function \precorr \begin{verbatim} char **T1_LoadEncoding( char *filename) \end{verbatim}\index{\verb+T1_LoadEncoding()+}\postcorr The function will use the search path definitions read from the configuration file during initialization (see \ref{runtimesetup}, \verb+ENCODING=+). If no errors occur, an array of pointers to strings is created and initialized. The start address of this pointer array is returned as a double pointer to a char. This pointer is intended to be used to reencode a font via \verb+T1_ReencodeFont()+. If the encoding data structure could not be created, \verb+NULL+ is returned to indicate the error. The memory allocated by \verb+T1_LoadEncoding()+ is organized in two continuous blocks. One block is the pointer array of size 257\footnote{This number results from 256 charactername pointers plus one pointer to the encoding scheme identifier.} and the other block contains the character name strings plus the encoding scheme specification, separated by ASCII-zeros. This memory can be returned to the system using the function \precorr \begin{verbatim} int T1_DeleteEncoding( char **Encoding) \end{verbatim}\index{\verb+T1_DeleteEncoding()+}\postcorr \tonelib\ does not check whether a valid pointer value was passed. So be careful to pass the correct pointer. An error in this function should almost always be followed by a segmentation violation. A newly loaded encoding is applied to an existent font by calling \precorr \begin{verbatim} int T1_ReencodeFont( int FontID, char **Encoding) \end{verbatim}\index{\verb+T1_ReencodeFont()+}\postcorr \verb+FontID+ must be a valid font identification and \verb+Encoding+ a pointer returned from a successful call to \verb+T1_LoadEncoding()+. There are two requirements in order to reencode a font: \begin{enumerate} \item The font must already have been loaded into memory. \item No size-dependent data exists for this font. If it does, it must be removed explicitly prior to calling \verb+T1_ReencodeFont()+. \end{enumerate} It follows that there are two ways to reencode a font. The first is to load a font explicitly and reencode it before any size dependent data is created. The second is to use an automatically loaded font and delete all of its size dependent data before reencoding it. The user may also specify the special pointer NULL as the \verb+Encoding+-argument. This would reencode the font to its internal encoding vector. In case of success, the function returns 0, otherwise -1 is returned. Reencoding a font takes a considerable amount of time since the mapping tables have to be reorganized. In situations where it is \`a priori foreseeable that the font will be reencoded using some standard encoding vector, it makes sense to assign that particular encoding vector as the default encoding vector, thereby overwriting the internal encoding vector of each font at load time before the mapping tables are setup. Setting the default encoding can be achieved using \precorr \begin{verbatim} int T1_SetDefaultEncoding( char **Encoding) \end{verbatim}\index{\verb+T1_SetDefaultEncoding()+}\postcorr Here \verb+Encoding+ encoding is assumed to be a valid \tonelib\ encoding vector, e.g., created by a call to \verb+T1_LoadEncoding+. \verb+T1_SetDefaultEncoding()+ has to be called after initialization. It returns \verb+0+ if this condition is fulfilled and \verb+-1+ otherwise. In the latter case \verb+T1_errno+ is set appropriately. Notice that the internal encoding of the font is still accessible by reencoding the font using \verb+NULL+ as encoding specification (see above). Note further that the default encoding vector is only applied to those font that have \verb+StandardEncoding+ as internal encoding. This is to prevent fonts like ZapfDingbats, Symbol or Sonata\footnote{A musical notation font.} from being reencoded automatically at load time because this would be surely inappropriate for such fonts. It is also possible to query the encoding scheme that the font associated with \verb+FontID+ uses. This is achieved with the function \precorr \begin{verbatim} char *T1_GetEncodingScheme( int FontID) \end{verbatim}\index{\verb+T1_GetEncodingScheme()+}\postcorr The return value is a pointer to a string which describes the encoding scheme in question. The are 3 possible cases: \begin{itemize} \item The font uses Adobe StandardEncoding, which is internally known by the rasterizer. Then, \verb+StandardEncoding+ is returned. \item The font defines its own encoding by \hbox{\verb+dup+ $n$ {\em LiteralName} \verb+put+} statements. In this case no particular name is associated with the encoding scheme and \verb+FontSpecific+ is returned. \item The encoding is externally loaded by \verb+T1_LoadEncoding()+. Then the encoding scheme entry of this file is returned. If this (optional) entry is not specified in the file, \verb+Unspecified+ is returned. \end{itemize} Notice that the name of the encoding scheme is also accessible as \verb+Encoding[256]+ where \verb+Encoding+ is the pointer returned by a successful call to \verb+T1_LoadEncoding()+. \subsection{Deleting Data} \label{deletingdata}% In frequently appearing cases, it may be wise to return some memory which was explicitly or automatically allocated by the library back to the system.\footnote{This is especially true, since there is presently no caching algorithm which automatically takes care of this.} For this purpose some functions are available. To understand how size dependent data for a font is organized, see (\ref{internals}). The memory amount required by the size-dependent data of \verb+size+ and font \verb+FontID+ is freed by calling the function \precorr \begin{verbatim} int T1_DeleteSize( int FontID, float size) \end{verbatim}\index{\verb+T1_DeleteSize()+}\postcorr The data deleted includes the metric information for 256 characters, some pointers, associated bitmap data (if already existent) as well as the font matrix for that size. As described in section \ref{internals}, the data structures containing size-dependent information of a particular font are organized as a linked list. \verb+T1_DeleteSize()+ takes care that a properly linked list is left after deleting the data. If the combination of \verb+size+ and \verb+FontID+ does not exist, -1 is returned. If the operation was successful, the return value is 0. For the purpose of removing all size-dependent data for a particular font, there is the function \precorr \begin{verbatim} int T1_DeleteAllSizes( int FontID) \end{verbatim}\index{\verb+T1_DeleteAllSizes()+}\postcorr It recursively removes all size-dependent data for the font \verb+FontID+. This may be appropriate if a user knows some font not to be needed any longer. This function is also to be used, if one intends to reencode a font for which size dependent data has already been generated. In addition, font transformations such as {\em slanting} and {\em extending} require a font having no size-specific data. \verb+T1_DeleteAllSizes()+ recursively calls \verb+T1_DeleteSize()+ to do its job. It returns the number of sizes removed (including 0 if no sizes were existent) or -1 if an error occurred. It is also possible to remove the entire data associated with a particular font from memory using \precorr \begin{verbatim} int T1_DeleteFont( int FontID) \end{verbatim}\index{\verb+T1_DeleteFont()+}\postcorr \verb+T1_DeleteFont()+ goes one step beyond the above functions and removes all the data associated with the font \verb+FontID+. This includes: \begin{itemize} \item All size dependent data. \item All data from the Type 1 font program, held in memory. \item All AFM data kept in memory. \end{itemize} The memory reserved for a font in hierarchy-level 1 is not returned to the system since it is simply one element in the array of structures of type \verb+FONTPRIVATE+ (see \ref{internals}). But all entries in this structure are reset to initial values. Whether it is useful or not, a font that has been removed using \verb+T1_DeleteFont()+ may also be loaded again, explicitly or implicitly. There is a restriction, which has not yet been mentioned: A font may only be removed if it is a physical font (to be explained later) to which no logical fonts refer or if it is a logical font.\footnote{See \ref{logicalfonts} for explanation of logical fonts.} A reference counter is maintained in each physical font to check for this. If the font to be removed is a logical font, the \verb+FONTPRIVATE+ area is reset and the reference counter of the referenced physical font is decremented. Of course, size dependent data is removed in every case. \verb+T1_DeleteFont()+ returns 0 if the font has been removed correctly or if the font was not loaded. $n$ ($>0$) is returned if the font was physical and was referenced by $n$ logical fonts. A return value -1 indicates an invalid \verb+FontID+. The function \precorr \begin{verbatim} int T1_FreeGlyph( GLYPH *glyph) \end{verbatim}\index{\verb+T1_FreeGlyph()+}\postcorr returns memory allocated by \verb+T1_CopyGlyph()+ back to the system. This function should not be applied to the pointer to a glyph returned by one of the rastering functions. As said earlier, these functions manage the memory areas by themselves. Similarly, the function \precorr \begin{verbatim} int T1_FreeCompCharData( T1_COMP_CHAR_INFO *cci) \end{verbatim}\index{\verb+T1_FreeCompCharData()+}\postcorr returns memory associated to the composite caracter data structures, as allocated and returned by \verb+T1_GetCompCharData()+ or \verb+T1_GetCompCharDataByIndex()+ (see Section~\ref{subsec:CompositeCharacters}), to the system. In order to avoid memory leaks, each call of the latter two functions should be followed by a call to this function. In order to close the library and return all memory to the system, \precorr \begin{verbatim} int T1_CloseLib( void) \end{verbatim}\index{\verb+T1_CloseLib()+}\postcorr should be used. If no problems occur, 0 is returned. The value 1 indicates problems during freeing data. In this case the logfile should be examined. After having freed all data the file search paths, if different from the defaults, are restored. Last, the logfile is closed. \subsection{Underlining, Overlining and Overstriking} \label{underlining}% \tonelib\ supports underlining, overlining and overstriking for the string rastering functions. These lines are always drawn on the fly as the bitmaps are generated. In writing direction, the lines range from the glyph's origin to the glyph's width. The vertical dimensions are set the following way by default when a font is loaded: \begin{itemize} \item {\bf Underlining}: Underline position and thickness are taken from the Fontinfo dictionary of the respective font. The rule is vertically centered with respect to the mathematical line given by the position value. \item {\bf Overlining}: The position is computed to be $y=a+|u|$ where $a$ corresponds to the typographic ascender and $u$ is the underline position from the Fontinfo dictionary. As above, the rule is vertically centered around this position value. The thickness is set to underline thickness. \item {\bf Overstriking}: The position is $y=a/2$ where again $a$ is the typographic ascender of the font and vertical alignment of the rule is done by centering around the computed position. The thickness is set to underline thickness. \end{itemize} As all information in AFM files, thickness and position specifications are interpreted in charspace units. Notice that the typographic ascender is not determined by the Type 1 font program. It has to be guessed by \tonelib. The problem of guessing the typographic ascender is discussed in more detail in \ref{writingafmfiles}. When loading a font, this typographic ascender is assumed to be the vertical coordinate of the upper right corner of the bounding box of the letter ``d''. This is not as advanced as the procedure described in \ref{writingafmfiles}, but it suffices because the underlining positions can later be overwritten by the user (see below). From the mathematical point of view, the line rules are an integral part of the rastered path. It follows that line rules may appear sheared if a font has been artificially slanted and the size and/or thickness is sufficiently large. A look into real Type 1 font files shows that even fonts of the same family possess incompatible values for underlining. For example, Bitstream Charter Roman defines underline thickness to be 61 and its bold variant assigns a value of 90. Underlining text consisting of Roman and bold words will not be very pleasing using these values. For this reason \tonelib\ provides a way for explicitly setting and overwriting the default values for line ruling on a per-font level. The functions \precorr \begin{verbatim} int T1_SetLinePosition( int FontID, int linetype, float value) \end{verbatim}\index{\verb+T1_SetLinePosition()+}\postcorr and \precorr \begin{verbatim} int T1_SetLineThickness( int FontID, int linetype, float value) \end{verbatim}\index{\verb+T1_SetLineThickness()+}\postcorr set the respective value for font \verb+FontID+ to \verb+value+. The \verb+linetype+ argument is assumed to be an OR'ed combination of \verb+T1_UNDERLINE+, \verb+T1_OVERLINE+ and \verb+T1_OVERSTRIKE+. While it generally does not make sense to specify identical positions for two or three distinct line rule types, it is meaningful to specify identical thickness values for two or all rules types. However both functions accept combinations of linetype specification. It follows that consistent line ruling for several fonts can be achieved by setting the line rule parameters of the involved fonts to identical respective values. Currently active line rule parameters can be queried using the functions \precorr \begin{verbatim} float T1_GetLinePosition( int FontID, int linetype) \end{verbatim}\index{\verb+T1_GetLinePosition()+}\postcorr and \precorr \begin{verbatim} float T1_GetLineThickness( int FontID, int linetype) \end{verbatim}\index{\verb+T1_GetLineThickness()+}\postcorr In case more than one line rule type is specified for \verb+linetype+ the first matching value is returned, since obviously the functions can only return {\em one} value. The order the argument is checked is \verb+T1_UNDERLINE+, \verb+T1_OVERLINE+ and finally \verb+T1_OVERSTRIKE+. These functions called with \verb+T1_UNDERLINE+ as line type argument should not be confused with the functions \verb+T1_GetUnderlinePosition()+ and \verb+T1_GetUnderlineThickness()+ respectively. The latter functions will always return the values from the Fontinfo dictionary as opposed to the former which will return the currently active values. Since line ruling is done on the fly, it is possible to change the involved parameters in the middle of a session without confusing the cache or removing size dependent data. \subsection{Common Information on Fonts and Characters} \label{common}% This subsection describes some functions making common information available. This includes Type 1 and AFM data. Thus, these functions partially depend on the existence of AFM data. In order not to have to specify this data every time, here are a few conventions: \begin{enumerate} \item \verb+FontID+ is the valid ID of a declared font. \item All functions that require a character index as argument use the currently active encoding vector to determine the character's name belonging to this index and use the character's name to search for the information required. \item Some functions do not allow to use the return value for error checking. For this reason every function described in this subsection will set \verb+T1_errno+ appropriately if something goes wrong. See \ref{errorhandling} for the description of the possible values of \verb+T1_errno+. \item None of the functions described in this subsection will load a font automatically. \end{enumerate} \subsubsection{Information from FontInfo-Dictionary} \label{fontinfodict}% \precorr \begin{verbatim} char *T1_GetFontName( int FontID) \end{verbatim}\index{\verb+T1_GetFontName()+}\postcorr This function returns the string object \verb+FontName+ from the fontinfo-dictionary of the specified font or a NULL pointer if the font is not loaded. The memory for the returned string is static in this function and should thus not be freed by the user. As another consequence, the returned string is only constant until the function is called the next time. \precorr \begin{verbatim} char *T1_GetFullName( int FontID) \end{verbatim}\index{\verb+T1_GetFullName()+}\postcorr This function returns the string object \verb+FullName+ from the fontinfo-dictionary of the specified font or a NULL pointer if the font is not loaded. The memory for the returned string is static in this function and should thus not be freed by the user. As another consequence, the returned string is only constant until the function is called the next time. \precorr \begin{verbatim} char *T1_GetFamilyName( int FontID) \end{verbatim}\index{\verb+T1_GetFamilyName()+}\postcorr This function returns the string object \verb+FamilyName+ from the fontinfo-dictionary of the specified font or a NULL pointer if the font is not loaded. The memory for the returned string is static in this function and should thus not be freed by the user. As another consequence, the returned string is only constant until the function is called the next time. \precorr \begin{verbatim} char *T1_GetWeight( int FontID) \end{verbatim}\index{\verb+T1_GetWeight()+}\postcorr It returns the Weight entry from fontinfo dictionary. It is a string entry and represents a verbatim classification of the font rather than a numerical quantity. In case of an error \verb+NULL+ is returned. \precorr \begin{verbatim} float T1_GetItalicAngle( int FontID) \end{verbatim}\index{\verb+T1_GetItalicAngle()+}\postcorr The returned value is the italic angle of the font in degrees as a float. Notice that the meaning of ItalicAngle is related to the slanting of fonts, but not in the sense of \tonelib\ (see \ref{transformations}). An italic font may be artificially slanted and an artificially slanted font in the sense of \tonelib\ may have an italic angle of zero. \precorr \begin{verbatim} int T1_GetIsFixedPitch( int FontID) \end{verbatim}\index{\verb+T1_GetIsFixedPitch()+}\postcorr This function returns 0 if the font's spacing is proportional and 1 if it is fixed. \precorr \begin{verbatim} BBox T1_GetFontBBox( int FontID) \end{verbatim}\index{\verb+T1_GetFontBBox()+}\postcorr This function returns the bounding box of the font identified by \verb+FontID+. It is the bounding box that results if all characters of a font are overlayed with their reference point falling on the point (0,0). All values are in charspace units. The members \verb+lly+ and \verb+urx+ represent the fonts overall descent and ascent, respectively. The font's bounding box is part of the AFM information as well as member in the font's private dictionary. It turns out that the information from \verb+.afm+- and \verb+.pfa+/\verb+.pfb+-file is not consistent for some fonts. \tonelib\ returns the information stored in the font-file itself, since I assume it is more consistent to the font's data. \precorr \begin{verbatim} float T1_GetUnderlinePosition( int FontID) \end{verbatim}\index{\verb+T1_GetUnderlinePosition()+}\postcorr This function returns the underline position of the specified font as given in the fontinfo-dictionary. The value is to be interpreted in charspace units. If the font is not loaded, 0 is returned since an underline position of 0 can be considered impossible for most fonts. \precorr \begin{verbatim} float T1_GetUnderlineThickness( int FontID) \end{verbatim}\index{\verb+T1_GetUnderlineThickness()+}\postcorr This function returns the thickness of the underlining rule for this font or 0 if the font is not loaded. 0 is a safe index for an error since a rule of height 0 would not be visible anyhow. \precorr \begin{verbatim} char *T1_GetVersion( int FontID) \end{verbatim}\index{\verb+T1_GetVersion()+}\postcorr The version string from the Type 1 font file is returned. The memory where the string is located is managed by the function itself. \precorr \begin{verbatim} char *T1_GetNotice( int FontID) \end{verbatim}\index{\verb+T1_GetNotice()+}\postcorr The notice string from the Type 1 font file is returned. Again the user should not touch the memory where the string is located. \subsubsection{Metric Information on Glyphs} \label{metricinformation}% \precorr \begin{verbatim} int T1_GetCharWidth( int FontID, char char1) \end{verbatim}\index{\verb+T1_GetCharWidth()+}\postcorr The character width according to the AFM information is returned in charspace units. If no AFM information is available, 0 is returned. The width of a character is the amount of horizontal escapement that the next character is shifted to the right with respect to the current position. This information is not given in the character's bounding box. Also, the width corresponds to the entry \verb+characterWidth+ in the \verb+glyph+-structure, as described in \ref{generatingbitmaps}. But since \verb+T1_GetCharWidth()+, returns its result in charspace units, the accuracy is much higher than using the value of the \verb+glyph+-structure which has only pixel-accuracy. If there is an extension specified for the font in question, the characters width is corrected correspondingly. \precorr \begin{verbatim} BBox T1_GetCharBBox( int FontID, char char1) \end{verbatim}\index{\verb+T1_GetCharBBox()+}\postcorr The character's bounding box of \verb+char1+ is returned with the elements to be interpreted in charspace units. The bounding box of a character is defined to be smallest rectangle aligned parallel to the $x$- and $y$-axis of the character coordinate system which encloses the painted area of the character completely. This rectangle is completely specified by specifying its lower left and its upper right corner. From a programmer's point of view, a characters bounding box is defined by the following struct of type \verb+BBox+: \begin{verbatim} typedef struct { int llx; /* lower left x-position */ int lly; /* lower left y-position */ int urx; /* upper right x-position */ int ury; /* upper right y-position */ } BBox; \end{verbatim} In case the character is not encoded or no AFM data is available, a box containing only zeros is returned. The bounding box is corrected if an extension value has been applied to the font in question. Since version 0.3-beta, slanted fonts are fully supported, meaning that for slanted fonts too a correct bounding box will be returned. This is however quite time expensive since the characters' real outline must be considered. See the discussion on slanting a font (\ref{transformations}) for an explanation of this. \precorr \begin{verbatim} int T1_GetStringWidth( int FontID, char *string, int len, long spaceoff, int kerning) \end{verbatim}\index{\verb+T1_GetStringWidth()+}\postcorr \precorr \begin{verbatim} BBox T1_GetStringBBox( int FontID, char *string, int len, long spaceoff, int kerning) \end{verbatim}\index{\verb+T1_GetStringBBox()+}\postcorr These two functions represent the complement to the above functions on the level of strings. All parameters that take influence on the resulting width and bounding box must be given in the argument list. Their meaning is identical to the meaning they have when calling string rastering functions (see \ref{generatingbitmaps}). \precorr \begin{verbatim} METRICSINFO T1_GetMetricsInfo( int FontID, char *string, int len, long spaceoff, int kerning) \end{verbatim}\index{\verb+T1_GetMetricsInfo()+}\postcorr In certain situations bounding box and width of a glyph are required both. In these cases it is more convenient to call \verb+T1_GetMetricsInfo()+ which returns a structure that contains all information. \verb+METRICSINFO+ is defined in \verb+t1lib.h+ as: \begin{verbatim} typedef struct { int width; BBox bbox; int numchars; int *charpos; } METRICSINFO; \end{verbatim} All numbers are to be interpreted in character space units --- they are directly taken from AFM data. \verb+width+ is the glyph's width and \verb+bbox+ its bounding box which in turn is a struct as defined some paragraphs above. \verb+numchars+ is assigned number of characters in string. If the argument \verb+len+ is different from 0, \verb+numchars+ is assigned that value. \verb+charpos+ is a pointer to an integer array of size \verb+numchars+ allocated by \verb+T1_GetMetricsInfo()+. During execution this array is filled step by step with the horizontal escapement in character space units of the respective character relative to the start point of the string glyph which corresponds to 0. \verb+charpos+ remains valid until \verb+T1_GetMetricsInfo()+ is called the next time. The user should not free this memory because this is handled automatically. The terms concerning the bounding box of slanted fonts mentioned under the description of \verb+T1_GetCharBBox()+ apply here as well. The first and the last character of \verb+string+ have to be observed spending high effort. But nevertheless the correct bounding box is returned. \precorr \begin{verbatim} int T1_GetKerning( int FontID, char char1, char char2) \end{verbatim}\index{\verb+T1_GetKerning()+}\postcorr This function returns the amount of kerning for the specified character pair \verb+char1+ and \verb+char2+. If an extension has been specified for the font (see \ref{transformations}), the amount of kerning is automatically corrected using the extension factor. The value returned has to be interpreted in charspace units. If no AFM information is available for the font in question, simply 0 is returned. The same applies if the font is not loaded. The implementation of this function requires that the kerning pairs in the AFM file are sorted in alphabetical order. I am not sure whether this condition is found in the specification of the AFM file format. If this function doesn't work although AFM kerning data is available, this might be the reason. \precorr \begin{verbatim} int T1_QueryLigs( int FontID, char char1, char **successors, char **ligatures) \end{verbatim}\index{\verb+T1_QueryLigs()+}\postcorr This function implements the interface to the ligature information in the AFM data. Ligatures are special character-symbols which are substituted if special pairs, triples or whatever groups of characters appear in a string. For example, ``f{}i'' is replaced with the ligature ``fi''. In this example, the ``i'' is called {\em successor} and the ``fi'' is the associated ligature. \verb+char1+ is the character which has to be checked for ligatures, i.e., the first character of a possible ligature group. \verb+successors+ and \verb+ligatures+ should be addresses of pointers to \verb+char+s. These pointers are modified by the \verb+T1_QueryLigs()+. First, \verb+T1_QueryLigs()+ checks how many ligatures are defined for the character given by \verb+char1+. Assuming this number is $n$, it then defines memory for two arrays of type \verb+char+ with size $n$. These arrays are filled with the indices of the successor-characters and with the indices of the associated ligatures, respectively. The current encoding vector is used for this. The addresses of these two arrays are written to the addresses of the respective pointers \verb+successors+ and \verb+ligatures+. They are thus later available to the user in order to access the memory where the successor-character and ligatures are specified. The value $n$ is returned in order to tell the user how many ligatures were found and to give the user information about the end of the two arrays. If the font is not loaded or AFM data is not available, -1 is returned. Since this may seem to be a little complicated, here is a programming example: \begin{verbatim} char *succ, *lig; int n_lig, i; char char1='f'; /* Get ligature information of character 'f' in font 0: */ n_lig=T1_QueryLig( 0, char1, &suc, &lig); /* print out indices of characters and their ligatures */ for ( i=0; i ligatur: %d\n", char1, succ[i], lig[i]); \end{verbatim} Notice that the arrays where the successor indices and the respective ligature indices are stored are static in \verb+T1_QueryLigs()+. Thus, they may not be freed and moreover they are only valid until the next time \verb+T1_QueryLigs()+ is called. \subsubsection{Character-Encoding Relation} \label{characterencodingrelation}% \precorr \begin{verbatim} char *T1_GetCharName( int FontID, char char1) \end{verbatim}\index{\verb+T1_GetCharName()+}\postcorr This function returns the name of the character indexed by \verb+char1+ according to the current encoding vector. As said above, the memory where the string is stored is static to this function so that the user should not free the returned pointer. If the font is not loaded, NULL is returned. \precorr \begin{verbatim} int T1_GetEncodingIndex( int FontID, char *char1) \end{verbatim}\index{\verb+T1_GetEncodingIndex()+}\postcorr This function is the complement to the above function. It returns the lowest index of the character with the specified name in the current encoding vector as an \verb+int+. If the charactername is not found in the current encoding vector or if the font is not loaded, the value -1 is returned. \precorr \begin{verbatim} int *T1_GetEncodingIndices( int FontID, char *char1) \end{verbatim}\index{\verb+T1_GetEncodingIndices()+}\postcorr This function is an extension of the above function. It is meant for cases where all appearences of \verb+char1+ in the encoding vector are requested. The return value is an integer array whose elements contain the encoding indices where \verb+char1+ appears in increasing order. The first negative entry in this array indicates that no more valid indices will follow. In the most extreme case we can think of (i.e., where the complete encoding vector is occupied by {\em one} character), \verb+T1_GetEncodingIndices()+ will return an array of size 257 where the first 256 elements bear their own index and the 257th element is $-1$. If font \verb+FontID+ is not loaded, this function returns \verb+NULL+ and \verb+T1_errno+ will be set appropriately. If \verb+char1+ was not found in the encoding vector, a valid array is returned but the first element will be $-1$. \precorr \begin{verbatim} char **T1_GetAllCharNames( int FontID) \end{verbatim}\index{\verb+T1_GetAllCharNames()+}\postcorr As described in \ref{encoding}, not all characters of a font need to be encoded. A Type 1 may contain the outlines of an arbitrary number of characters, but only 256 can be encoded---and thus accessed---simultaneously. Since the characternames are inside the encrypted portion of the Type 1 font file, there is no easy way to find out which characters a font defines. \tonelib\ provides \verb+T1_GetAllCharNames()+ for situations where a programmer needs to know what characters are defined in the font file identified by \verb+FontID+. The value returned is a pointer to an array of \verb+char+ pointers which in turn point to the characternames. The array's size is $(n+1)$ where $n$ is the number of defined outlines. The $(n+1$)th pointer is \verb+NULL+ to indicate the end of the array. An application programmer may use these characternames to construct a specialized encoding vector. Here is an example of how to use \verb+T1_GetAllCharNames()+. It prints a list of all defined characternames in font 0. \begin{verbatim} char **ptr; int i; . . . ptr=T1_GetAllCharNames( 0); i=0; while (ptr[i]!=NULL){ printf("Charstring %d = %s\n", i, ptr[i]); i++; } \end{verbatim} The memory for storing the pointers and the charactername strings is static in\\ \verb+T1_GetAllCharNames()+. Thus it remains valid until the function is called the next time. The user should not free this memory or if he does, he should set the pointer to \verb+NULL+ to indicate the memory has already been freed. \precorr \begin{verbatim} int T1_GetNoKernPairs( int FontID) \end{verbatim}\index{\verb+T1_GetNoKernPairs()+}\postcorr This function returns the number of kerning pairs defined for the font identified by \verb+FontID+. The number -1 is returned if an error occured and \verb+T1_errno+ will be set. All positive numbers including 0 should be considered valid return values. \subsubsection{Administrative Information} \label{administrativeinformation}% \precorr \begin{verbatim} int T1_GetNoFonts( void) \end{verbatim}\index{\verb+T1_GetNoFonts()+}\postcorr Usually, this function returns the number of fonts declared in the font database file, i.e., the integer quantity from the first line of the font database file. However, if some new fonts have been created using \verb+T1_CopyFont()+ (see \ref{logicalfonts}) or if some fonts have been added to the database after initialization (see \ref{addingfonts}), these are also taken into account. The number returned by \verb+T1_GetNoFonts()+ minus 1 is thus the largest valid font ID specification. \precorr \begin{verbatim} int T1_CheckForInit( void) \end{verbatim}\index{\verb+T1_CheckForInit()+}\postcorr Use this function in order to check whether \tonelib\ is initialized. It returns $0$ if initialization has already happened and $-1$ otherwise. \precorr \begin{verbatim} int T1_CheckForFontID( int FontID) \end{verbatim}\index{\verb+T1_CheckForFontID()+}\postcorr This functions gives information on the load status of the font associated to \verb+FontID+. It returns $0$ if the font \verb+FontID+ has not yet been loaded, $1$ if it has already been loaded. Finally, a return value of $-1$ indicates that either \verb+FontID+ is an invalid specification or \tonelib\ is not initialized. \precorr \begin{verbatim} char *T1_GetFontFileName( int FontID) \end{verbatim}\index{\verb+T1_GetFontFileName()+}\postcorr This function returns a pointer to the fontfilename identified by \verb+FontID+. In no case, this pointer may be freed since the memory is static to this function. The string also is only valid up to the next call of this function. \precorr \begin{verbatim} char *T1_GetFontFilePath( int FontID) \end{verbatim}\index{\verb+T1_GetFontFilePath()+}\postcorr This function returns a pointer to the fully qualified path of the font file identified by \verb+FontID+. In no case, this pointer may be freed since the memory is static to this function. The string also is only valid up to the next call of this function. \precorr \begin{verbatim} char *T1_GetAFMFilePath( int FontID) \end{verbatim}\index{\verb+T1_GetAFMFilePath()+}\postcorr This function returns a pointer to the fully qualified path of the AFM file of the font identified by \verb+FontID+, as used by \tonelib. In case of an error \verb+NULL+ is returned. It may also happen that there exists no AFM file for the font either because AFM information was generated on the fly at the time the font was loaded, or because AFM processing had been disabled at initialization time. For those cases \verb+T1_errno+ is not set. In no case, the returned pointer may be freed since the memory is static to this function. The string also is only valid up to the next call of this function. \precorr \begin{verbatim} char *T1_GetLibIdent( void) \end{verbatim}\index{\verb+T1_GetLibIdent()+}\postcorr This function returns the identifier string for the version of \tonelib. For example, this could be \verb+0.8-beta+. The string is static in this function and should thus not be freed by the user. \subsection{Transformation of Fonts} \label{transformations}% Transformation of Type 1 fonts is generally accomplished by means of concatenating so-called transformation matrices. For example, rotation is equivalent to concatenation of the standard transformation matrix with a special matrix whose elements are trigonometric functions evaluated at the rotation angle. In the sense of \tonelib, we distinguish between {\em fontlevel transformations} and {\em characterlevel transformations}. \subsubsection{Fontlevel Transformations} \tonelib\ supports three transformations that operate globally on a font's data. After applying such a transformation to a font all characters generated from then on will be rendered according to that transformation. Moreover, these transformed characters are saved in cache for fast future access. This principle is thus meant for transformed fonts which are semantically used as ordinary text fonts. Creating a font Times-Oblique by slanting a Times-Roman would be a typical example. The first fontlevel transformation is called ``extension'' since it extents a font horizontally---makes its characters wider. A font is extended by a call to the function \precorr \begin{verbatim} int T1_ExtendFont( int FontID, double extend) \end{verbatim}\index{\verb+T1_ExtendFont()+}\postcorr A font that is to be extended may not have size dependent data. If size dependent data exists, it must explicitly be removed before applying an extension-factor. This is simply a security mechanism which prevents the user from mixing up extended and non-extended bitmaps. If the font is not loaded or size-dependent data is existent, -1 is returned. Otherwise, the function returns 0. All information on character metrics is automatically adapted to an extension-factor different from 1 (see \ref{common}). Applying an extension-factor to a font is implemented by replacing the current extension-factor---initially 1---with the supplied value. Thus, an extension can be deleted by specifying a factor 1. Moreover, extending a font two times, say, with factor 2, does not yield a font extended by 4. Rather the last specified extension, here 2, is applied. The second type of fontlevel transformation supported by \tonelib\ is {\em slanting}. It is done by a call to the function \precorr \begin{verbatim} int T1_SlantFont( int FontID, double slant) \end{verbatim}\index{\verb+T1_SlantFont()+}\postcorr The slant-factor $s$ tells the rastering algorithm to advance the $x$-coordinate of a given point by the product of $s$ with the $y$-coordinate of that point. Such fonts are sometimes called {\em oblique}. Another interpretation is that we state: $s=\tan(\alpha)$, where $\alpha$ is the well-known italic-angle of the font. Just as above, no size-dependent data may be existent and the font must be loaded. In that case 0 is returned, otherwise -1. As above, the slanting operation is implemented by {\em setting} the slant-factor so that a slant may be reset by means of specifying a slant-factor of 0. There is one thing that makes handling of slanted fonts more difficult than handling of extended fonts. When typesetting strings by concatenating bitmaps, exact information on character metrics is necessary. By slanting a character the character's width is not affected. But the bounding box is. And while extension---which means strictly horizontal scaling independent of the respective y-coordinate---simply leads to an extension of the bounding box, there is no way to compute the bounding box of a slanted character from the bounding box of the respective unslanted character. Here is an example. \begin{itemize} \item Let the character be \verb+\+. When slanting this character with a value of 1, the resulting character will be similar to a vertical line. The bounding box will thus be small in horizontal direction. \item If character is \verb+/+, the resulting slanted character will tend to be more horizontal. Thus the resulting bounding box will be much extended in horizontal direction. \end{itemize} In conclusion we can say that the effect of slanting on the bounding box of a given character depends on the shape of the character itself. Since version 0.3-beta the problem with the bounding box of slanted characters is handled as follows. The character in question is internally rastered at 1000 bp and the bounding box of the resulting ``edgelist'' is examined. But no bitmap is generated for the character, this limits the computational effort. However the difference in time performance between getting a bounding box from a ``simple-shaped'' slanted character like ``i'' and getting a bounding box of a ``complex-shaped'' character like ``Q'' is clearly noticeable. The positioning algorithm for string bitmaps has been slightly improved in \tonelib\ V.\ 0.3-beta so that now exclusively bitmap metrics are used where the bounding boxes are needed. The limitation of slanted fonts appears thus only if a user explicitly requests a bounding box of a character/string in an artificially slanted font. The third and most common type of fontlevel transformation allows arbitrary linear transformations. This is done by a call to the function \precorr \begin{verbatim} int T1_TransformFont( int FontID, T1_TMATRIX *matrix) \end{verbatim}\index{\verb+T1_TransformFont()+} \postcorr The transformation is specified by \verb+matrix+ (as described below). This function acts by setting the font's transformation matrix to the matrix pointed to by \verb+matrix+. As a final consequence of what has been described so far in this section it turns out that \verb+T1_TransformFont()+ overrides whatever slant and extension values might have been set before. Conversely, if \verb+T1_SlantFont()+ or \verb+T1_ExtendFont()+ are applied to a font after a call to \verb+T1_TransformFont()+, the respective values are simply overridden, there will be no concatenation. In the following description of transformation matrices and their usage, we will also describe how to concatenate an arbitrary series of linear transformations. There are also functions for querying the current values of the quantities described above for fontlevel transformations. \precorr \begin{verbatim} double T1_GetExtend( int FontID) \end{verbatim}\index{\verb+T1_GetExtend()+}\postcorr and \precorr \begin{verbatim} double T1_GetSlant( int FontID) \end{verbatim}\index{\verb+T1_GetExtend()+}\postcorr return the current extension and slant values. The function \precorr \begin{verbatim} T1_TMATRIX T1_GetTransform( int FontID) \end{verbatim}\index{\verb+T1_GetTransform()+}\postcorr Returns the current transformation matrix as a structure of type \verb+T1_TMATRIX+ which will be described in detail in the next subsubsection. \subsubsection{Transformation at Rastering Time} This kind of transformation is the most generic one and allows arbitrary transformations. A transformation $(x',y')^T$ of a given location $(x,y)^T$ is given by the following set of linear equations: \begin{eqnarray*} x' & = a_{11} x + a_{21} y \\ y' & = a_{12} x + a_{22} y \end{eqnarray*} Here, the matrix \begin{displaymath} \mathbf{A}= \left( \begin{array}{cc} a_{11} & a_{21} \\ a_{12} & a_{22} \end{array} \right) \end{displaymath} is referred to as the {\em transformation matrix}. In \tonelib\ the following type definition is used for such transformation matrices: \begin{verbatim} typedef struct { double cxx; /* corresponds to a11 */ double cyx; /* corresponds to a21 */ double cxy; /* corresponds to a12 */ double cyy; /* corresponds to a22 */ } T1_TMATRIX; \end{verbatim} Each of the rastering functions expects to get a pointer to an object of type \verb+T1_MATRIX+, or \verb+NULL+ if no transformation is to be applied. If any transformation has been specified, the resulting glyph is never kept in cache memory. Thus, if for some reason caching should be disabled for non-transformed characters, simply a pointer to the unity matrix %$\left( %\begin{array}{cc} %1.0 & 0 \\ %0 & 1.0 %\end{array} %\right)$ could be specified to the rastering function to achieve this. The user has the possibility of either allocating and creating the transformation matrices by himself or to use predefined functions of \tonelib. There are 8 different functions for generating transformed characters. Figure \ref{figure:transformations} gives an example of each function using the character ``g''. \begin{figure}[t] \hfill \includegraphics[scale=0.5]{mirrorh} \hfill \includegraphics[scale=0.5]{mirrorv} \hfill \includegraphics[scale=0.5]{shearh} \hfill\break \noindent\vrule width 0pt\hfill\verb+T1_MirrorHMatrix()+\hfill \verb+T1_MirrorVMatrix()+\hfill \verb+T1_ShearHMatrix()+\hfill\break % line 2 \vskip0.5cm \hfill \includegraphics[scale=0.5]{shearv} \hfill \includegraphics[scale=0.5]{extenth} \hfill \includegraphics[scale=0.5]{extentv} \hfill\break \noindent\vrule width 0pt\hfill\verb+T1_ShearVMatrix()+\hfill \verb+T1_ExtendHMatrix()+\hfill \verb+T1_ExtendVMatrix()+\hfill\break % line 3 \vskip0.5cm \hfill \includegraphics[scale=0.5]{rotate} \hfill \includegraphics[scale=0.5]{arbitrary} \hfill\break \noindent\vrule width 0pt\hfill\verb+T1_RotateMatrix()+\hfill \verb+T1_TransformMatrix()+\hfill\break \vskip3mm \hrule\vskip3mm\small \caption{\label{figure:transformations}Typical examples for the predefined functions for generating transformation matrices in \tonelib, applied to the character ``g''.} \end{figure} Before describing each particular function we should discuss the first argument because this is common to all matrix transformation functions. This first argument, in case it is not \verb+NULL+, is expected to be a pointer to an already existent valid \verb+T1_TMATRIX+ object. The transformation to be applied is then done by multiplying the existent matrix with the new matrix. In other words, the existent matrix is replaced by the concatenation of the two matrices. If a \verb+NULL+ is specified as argument, the new matrix is allocated by the respective function and then set to the concatenation of the unity matrix with the desired transformation. Thus, to remove a matrix from memory, the pointer simply has to be given to \verb+free()+, no matter how many transformations have been applied to this matrix before. We should now describe the functions for generating transformation matrices: \precorr \begin{verbatim} T1_TMATRIX *T1_MirrorHMatrix( T1_TMATRIX *matrix) \end{verbatim}\index{\verb+T1_MirrorHMatrix()+}\postcorr and \precorr \begin{verbatim} T1_TMATRIX *T1_MirrorVMatrix( T1_TMATRIX *matrix) \end{verbatim}\index{\verb+T1_MirrorVMatrix()+}\postcorr simply change the sign of the matrix coefficients $a_{11}$ and $a_{22}$ respectively. This has the optical effect of mirroring the character at the horizontal line $y=0$ or at the vertical line $x=0$, respectively. These functions represent a specialized form of \precorr \begin{verbatim} T1_TMATRIX *T1_ExtendHMatrix( T1_TMATRIX *matrix, float extent) \end{verbatim}\index{\verb+T1_ExtendHMatrix()+}\postcorr and \precorr \begin{verbatim} T1_TMATRIX *T1_ExtendVMatrix( T1_TMATRIX *matrix, float extent) \end{verbatim}\index{\verb+T1_ExtendVMatrix()+}\postcorr These functions allow arbitrary scaling in the respective coordinate direction. Specifying \\ \verb+extent=-1+ exactly yields mirroring at the corresponding axis. Furthermore, there are two transformations where one coordinate depends on itself and on the other coordinate. This is called shearing, slanting or also obliqueing. It is possible in both directions using the functions \precorr \begin{verbatim} T1_TMATRIX *T1_ShearHMatrix( T1_TMATRIX *matrix, float shear) \end{verbatim}\index{\verb+T1_ShearHMatrix()+}\postcorr and \precorr \begin{verbatim} T1_TMATRIX *T1_ShearVMatrix( T1_TMATRIX *matrix, float shear) \end{verbatim}\index{\verb+T1_ShearVMatrix()+}\postcorr In case of horizontal shearing, the factor \verb+shear+ is equal to $\tan(\alpha)$, where $\alpha$ may be interpreted as the italic angle. It is measured from the positive vertical axis in mathematical negative direction. Correspondingly, for vertical shearing \verb+shear+ equals $\tan(\beta)$, where $\beta$ is the angle measured from the horizontal axis in mathematically positive direction. Rotation of glyphs is achieved using \precorr \begin{verbatim} T1_TMATRIX *T1_RotateMatrix( T1_TMATRIX *matrix, float angle) \end{verbatim}\index{\verb+T1_RotateMatrix()+}\postcorr This function evaluates the trigonometric functions at the value of \verb+angle+ and concatenates the transformation matrix with \begin{displaymath} \left( \begin{array}{cc} \cos(\alpha) & -\sin(\alpha) \\ \sin(\alpha) & \cos(\alpha) \end{array} \right) \end{displaymath} $\alpha$ is expected to be specified in degrees. It is measured according standard mathematical conventions. There is one more function which allows to set all matrix coefficients explicitly. It gives thus complete control over the transformation. This might be necessary to typeset text in a circle, for example. The syntax of this function is \precorr \begin{verbatim} T1_TMATRIX *T1_TransformMatrix( T1_TMATRIX *matrix, float cxx, float cyx, float cxy, float cyy) \end{verbatim}\index{\verb+T1_TransformMatrix()+}\postcorr \subsubsection{{\tt t1lib} and PostScript: Notes on Transformation Matrices} In order to avoid confusion about transformation matrices, we should briefly discuss the differences between \tonelib- and PostScript transformation matrices. In \tonelib-nomenclature a coordinate description is assumed to be represented by a column vector $(x,y)^T$. In contrast, PostScript assumes a coordinate to be represented by a row vector $(x,y)$. This leads to an exchanged meaning of the second and third matrix element between \tonelib\ and PostScript. From the mathematical point of view this is caused by matrix transposition. To make this clear, let me quote the matrix \begin{displaymath} \mathbf{A}_{\mbox{\footnotesize PostScript}}= \left( \begin{array}{ccc} a & b & 0\\ c & d & 0\\ t_x & t_y & 1 \end{array} \right) \end{displaymath} from the PostScript Language Reference Manual (Adobe, Red Book). If we forget about translation which in this sense is not implemented by \tonelib, we only have to consider the top left submatrix consisting of $a$, $b$, $c$ and $d$. The \tonelib-equivalent to this matrix would be written as \begin{displaymath} \mathbf{A}_{\mbox{\tt\footnotesize t1lib}}= \left( \begin{array}{cc} a & c \\ b & d \\ \end{array} \right) \end{displaymath} I.e., the meaning of $b$ and $c$ is exchanged. Notice that font matrices as found in Type 1 font files have to be interpreted according to the PostScript notation. But a user should never come close to something other than the \tonelib\ transformation matrices \subsection{Stroking of Character Outlines} \label{stroking}% Most available Type 1 fonts internally specify the numeric value \verb+PaintType+ as $0$. This indicates that the mathematical outline definitions of the characters consist of paths that represent the left and right---or inner and outer---borders of the character area to be filled with ink. In particular, this means that every subpath of a character definition must be closed. When filling characters, the curves that describe the outline are infinitely thin and the area between paths is of interest. By contrast, there are fonts that specify \verb+PaintType+ as $1$. These are also known as {\em stroked fonts}. Basically, their characters' shapes are generated by travelling along the mathematically thin defining curves using a pen with some finite width. The penwidth used here usually is specified in the font itself by means of the quantity \verb+StrokeWidth+. Using a somewhat unusual implementation, \tonelib\ can \begin{itemize} \item image stroked fonts with \verb+PaintType+ 1, \item stroke fonts that have \verb+PaintType+ 0, \item deal with variable strokewidths for both paint types. \end{itemize} In particular at low resolutions and when using large penwidths, the results of stroking may fall short of the quality of other general graphics tools like e.g.~native PostScript interpreters. Also hinting generally is disabled when creating stroked character outlines. For the interested reader, the implementation of stroking is outlined in \ref{strokingimplementation} (page~\pageref{strokingimplementation}). The process of stroking in \tonelib\ is treated similar to the process of transformation. Therefore, firstly, a font can be generally switched to be a stroked font. This is achieved using \precorr \begin{verbatim} int T1_StrokeFont( int FontID, int dostroke) \end{verbatim}\index{\verb+T1_StrokeFont()+}\postcorr Here, \verb+FontID+ identifies the font to be switched. The parameter \verb+dostroke+ determines the future rastering behavior. If it equals 0, the font's characters will be filled and for any other value the characters will be stroked. The function returns 0 in case of success. \verb+T1_StrokeFont()+ requires the font \verb+FontID+ to be loaded. If the font is not loaded \verb+T1_errno+ will be set appropriately and the function returns -1. After switching a font to {\em stroked}, its characters are cached as usual. It is therefore important that, at the time where \verb+T1_StrokeFont()+ is called, no size-dependent data does exist. If this condition is violated, the function will fail too and set \verb+T1_errno+ to \verb+T1ERR_OP_NOT_PERMITTED+. The second method to control the rasterizer mode for the font \verb+FontID+ is to use the function pair \precorr \begin{verbatim} int T1_SetStrokeFlag( int FontID) \end{verbatim}\index{\verb+T1_SetStrokeFlag()+}\postcorr and \precorr \begin{verbatim} int T1_ClearStrokeFlag( int FontID) \end{verbatim}\index{\verb+T1_ClearStrokeFlag()+}\postcorr for enabling and disabling stroking, respectively. These two functions return 0 on successful completion and -1 in case of a failure. They can only fail if \verb+FontID+ is not valid, in which case \verb+T1_errno+ is set to \verb+T1ERR_INVALID_FONTID+. Using these functions, switching the stroking is hence possible at any time. The netto effect is that caching will be disabled if the actually selected rasterizer mode does not match the one of the cached characters. The performance then will degrade for the rasterizer mode that is not the base mode of the font in question. If stroked characters and filled characters are required for one particular font while preserving good performance, using logical fonts is the tool of choice (see Sec.~\ref{logicalfonts}, page~\pageref{logicalfonts}). The currently active rasterizer mode for the font \verb+FontID+ can also be queried. This is done using \precorr \begin{verbatim} int T1_GetStrokeMode( int FontID) \end{verbatim}\index{\verb+T1_GetStrokeMode()+}\postcorr If \verb+FontID+ is not valid, $-1$ is returned and \verb+T1_errno+ is set to \verb+T1ERR_INVALID_FONTID+. In any other case, the following values may be returned: \begin{itemize} \item \verb+0+: The rasterizer mode is {\em Fill} and filled characters are cached. For stroked fonts with a \verb+PaintType+ of $1$, of course, the characters are stroked and these stroked characters are cached anyhow. \item \verb+1+: Stroking is enabled, while filled characters are cached. Each rasterization request is performed on the fly, as for nontrivial transformations. \item \verb+2+: Filling is enabled but stroked characters are cached. Rasterization again is performed on the fly. \item \verb+3+: Stroking is enabled and stroked characters are cached. \end{itemize} The width of the virtual pen used to trace the character outlines can also be adjusted. The function \precorr \begin{verbatim} int T1_SetStrokeWidth( int FontID, float strokewidth) \end{verbatim}\index{\verb+T1_SetStrokeWidth()+}\postcorr sets up \verb+strokewidth+ as the pen width used to stroke characters from font \verb+FontID+. It is interpreted in charspace units and hence directly comparable to the \verb+StrokeWidth+ parameter of stroked fonts. If this function succeeds, $0$ is returned. The function call might also be unsuccessful, in which case $-1$ is returned. The value of \verb+T1_errno+ then gives a hint to the reason of the failure. If set to \verb+T1ERR_INVALID_FONTID+, the font was not loaded. The value \verb+T1ERR_INVALID_PARAMETER+ indicates that a negative strokewidths has been specified. Finally, \verb+T1ERR_OP_NOT_PERMITTED+ may appear if stroked characters are cached for the font in question, size dependent data exists, and the requested strokewidth did not equal the one used at the time where the cache data initially has been built. Allowing to setup an arbitrary strokewidth under the latter circumstances might fillup the cache for one font with characters rasterized using inconsistent strokewidths, which has to be avoided. From this discussion it becomes suggesting not to cache stroked character at all, if stroking should be done using variable strokewidths. The pen width for a given font \verb+FontID+ may be queried at any time using \precorr \begin{verbatim} float T1_GetStrokeWidth( int FontID) \end{verbatim}\index{\verb+T1_GetStrokeWidth()+}\postcorr If the value $0.0$ is returned, this either indicates that the characters are filled or that the font in question is not loaded. Then, \verb+T1_errno+ is also set to \verb+T1ERR_INVALID_FONTID+. \subsection{Antialiasing} \label{antialiasing}% \subsubsection{General Description} When fonts are displayed on screen at low sizes, the shapes of characters often get damaged because of rounding errors---a pixel can generally present two states: painted or non-painted. But the human eye can be fooled in a way that it ``thinks'' sub-pixel accuracy is given on the screen. This is done by considering which pixels are filled with ink to what degree and giving the physical pixel an appropriate shade of gray. For example, a pixel whose area would be covered 50\% would get a 50\% gray shade. This technique is called {\em antialiasing}. There are several ways to implement antialiasing. \tonelib\ implements antialiasing by internally generating a bitmap larger than needed and then subsampling. Depending on the subsampling factor which may be 2 or 4, this principle yields glyphs with 5 or 17 shades of gray including black and white. There are three functions for generating antialiased glyphs: \precorr \begin{verbatim} GLYPH *T1_AASetChar( int FontID, char charcode, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_AASetChar()+}\postcorr \precorr \begin{verbatim} GLYPH *T1_AASetString( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_AASetString()+}\postcorr \precorr \begin{verbatim} GLYPH* T1_AASetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_AASetRect()+}\postcorr Note the ``\verb+AA+'' in the functions names which stand for \underline{A}nti\underline{A}liasing. The usage is identical to the usage of the functions \verb+T1_SetChar()+, \verb+T1_SetString()+ and \verb+T1_SetRect()+. So see \ref{generatingbitmaps} for an explanation of the arguments and their interpretation. When an antialiased glyph is requested, the supplied \verb+size+-value is multiplied by the current subsampling factor. For now, let us assume it is 2. Then the respective function for generating non-antialiased glyphs is called with all other arguments unchanged. The result is a bitmap twice as high and twice as wide as the user requested. Now, a $2\times2$ mask is moved over this bitmap and the number of painted pixels in this mask is considered at each place. According to the number of painted pixels one of 5 different gray shades is assigned to the resulting pixel. Since the mask is moved with an increment of 2 pixels in horizontal and vertical direction, the bitmap is at the same time subsampled by 2. Thus, the resulting bitmap is just of the size the user requested and its pixels each contain one of 5 gray shades. Conceptually, the same applies for subsampling with 4. In this case the mask is of size $4\times4$ and there will be 17 distinct gray shades including black and white. The computational effort is considerably larger so that 4 $\times$ subsampling should only be used for very small sizes. When moving the mask over double-sized bitmap it is aligned properly with respect to the characters' baseline (zero height) rather than with the characters' top or bottom line. This principle ensures, that the most important visual guideline in running text, the baseline, is represented in a consistent manor. This is especially important if one is using a serif-font. Thanks to Raph Levien, the algorithm described above in a verbose manor has been replaced by a much faster lookup-algorithm in \tonelib\ V.\ 0.4-beta. \subsubsection{Setting Operating Parameters} Applications can use both $2\times$ and $4\times$ antialiasing arbitrary mixed. Switching between the two modes is achieved using \precorr \begin{verbatim} int T1_AASetLevel( int level) \end{verbatim}\index{\verb+T1_AASetLevel()+}\postcorr The argument \verb+level+ should be either \verb+T1_AA_LOW+ ($=2$) or \verb+T1_AA_HIGH+ ($=4$). Any other values are ignored and \verb+T1_errno+ is set appropriately. This function is to be called after initialization. The default value after initialization is \verb+T1_AA_LOW+. The current value can also be queried by issuing a call to \precorr \begin{verbatim} int T1_AAGetLevel( void) \end{verbatim}\index{\verb+T1_AASetLevel()+}\postcorr The returned value is current level. Switching between the two antialiasing modes should be quite fast since apart from a little error checking essentially only one simple variable is set. There is one more value that may be specified for \verb+level+, namely \verb+T1_AA_NONE+. \verb+T1_AA_NONE+ is identical to 1 which means that no subsampling at all is done. But the resulting glyph, having only fore- and background colors is returned as a bytemap instead of as a bitmap. This is intended for situtations where an antialiased glyph should be concatenated with a (possibly large) non-antialiased glyph using the function \verb+T1_ConcatGlyphs()+. In that case, the depths of the two glyphs have to be identical. There is probably not much more sense in setting \verb+level+ to \verb+T1_AA_NONE+. As described before, the result of the \verb+T1_AASet..()+ functions is strictly spoken no longer a bitmap since more than one bit is used to represent one pixel. The function \precorr \begin{verbatim} int T1_AASetBitsPerPixel( int bpp) \end{verbatim}\index{\verb+T1_AASetBitsPerPixel()+}\postcorr allows the user to specify how many bits should be used to represent one pixel. Allowed values for \verb+bpp+ are 8, 16, 24 and 32. However, if 24 is specified, internally 32 will be used since the pixel are then addressed as objects of type \verb+long+. Antialiased glyphs may grow quite large, especially when using \verb+bpp+ = 32. The value of \verb+bpp+ is written into the member \verb+bpp+ of the \verb+glyph+-structure (see \ref{generatingbitmaps} on page \pageref{generatingbitmaps}). That way a user can check whether a glyph is antialiased or not. It is possible to work with antialiased and non-antialiased glyphs at the same time. It is also possible to directly query the value of bits per pixel by using \precorr \begin{verbatim} int T1_AAGetBitsPerPixel( void) \end{verbatim}\index{\verb+T1_AAGetBitsPerPixel()+}\postcorr The value returned is the number of bits per pixel used. In order to make the handling of antialiased glyphs as flexible as possible, the values to be written into the pixels for different gray values may (and must) be explicitly specified. For low level antialiasing this is done by calling the function \precorr \begin{verbatim} int T1_AASetGrayValues( unsigned long white, unsigned long gray75, unsigned long gray50, unsigned long gray25, unsigned long black) \end{verbatim}\index{\verb+T1_AASetGrayValues()+}\postcorr For lower \verb+bpp+ values only the lower bits are used. For high level antialiasing this kind of graylevel specification is not economical since 17 arguments would have to be specified. Instead, another function is used which expects a pointer an array of \verb+unsigned long+'s: \precorr \begin{verbatim} int T1_AAHSetGrayValues( unsigned long *grayvals) \end{verbatim}\index{\verb+T1_AAHSetGrayValues()+}\postcorr The array \verb+grayvals+ points to must contain 17 entries. Element 0 is expected to specify the background color's pixel value and element 16 represents the foreground color. Calling one of these two functions involves also a new setup of the lookup tables. It should thus only be done if some color value really has changed. In case the antialiasing level is set to \verb+T1_AA_NONE+ as described above, the function \precorr \begin{verbatim} int T1_AANSetGrayValues( unsigned long bg, unsigned long fg) \end{verbatim}\index{\verb+T1_AANSetGrayValues()+}\postcorr must be used to set foreground and background color. In conclusion, it turns out that each antialiasing level has its own lookup tables which have to be initialized as soon as either foreground color, background color or both have changed. Each of the three graylevel sets described above can also be queried by the user. This is done using one of the functions \precorr \begin{verbatim} int T1_AAGetGrayValues( long *pgrayvals) \end{verbatim}\index{\verb+T1_AAGetGrayValues()+}\postcorr \precorr \begin{verbatim} int T1_AAHGetGrayValues( long *pgrayvals) \end{verbatim}\index{\verb+T1_AAHGetGrayValues()+}\postcorr \precorr \begin{verbatim} int T1_AANGetGrayValues( long *pgrayvals) \end{verbatim}\index{\verb+T1_AANGetGrayValues()+}\postcorr Here, \verb+pgrayvals+ is the start address of an array of \verb+long+-values to which the respective grayvalues are written. This memory must thus be supplied by the user. These functions will write 5 (\verb+T1_AAGetGrayValues+), 17 (\verb+T1_AAHGetGrayValues+) and 2 (\verb+T1_AANGetGrayValues+) respectively to the location given by \verb+pgrayvals+. These functions are to be called after initialization. If something goes wrong -1 is returned and \verb+T1_errno+ will be set accordingly. Otherwise 0 is returned. \subsubsection{Smart Antialiasing} \label{smartantialiasing}% Antialiasing improves legibility for small sizes but is not that much useful for large sizes. To make a compromise between computation time, system resources and optical appearance it might be advantageous to use \verb+T1_AA_HIGH+ for small sizes, \verb+T1_AA_LOW+ for medium sizes and \verb+T1_AA_NONE+ for large sizes. Of course, for large sizes the non-antialiasing functions could be used which still need less resources. In order to free the user from having to switch the antialiasing level explicitly, \tonelib\ can be told to do this switching automatically, depending on the size requested. This is called {\em Smart Antialiasing}. It is disabled by default and can be toggled by a call to \precorr \begin{verbatim} int T1_AASetSmartMode( int smart) \end{verbatim}\index{\verb+T1_AASetSmartMode()+}\postcorr The quantity \verb+smart+ should be either be \verb+T1_YES+ (which corresponds to 1) or \verb+T1_NO+ (which corresponds to 0. Notice that the current antialiasing level as set by \verb+T1_AASetLevel()+ is not affected by this. After having switched off smart antialiasing the former antialiasing level is restored. When smart antialiasing is active still has to take care for setting the lookup tables after a color change has happened. The numerical limits of the requested size at which \tonelib\ will switch between the different antialiasing levels may be specified using \precorr \begin{verbatim} int T1_AASetSmartLimits( float limit1, float limit2) \end{verbatim}\index{\verb+T1_AASetSmartLimits()+}\postcorr Here, \verb+limit1+ is the value of size at which \tonelib\ switches from \verb+T1_AA_HIGH+ to \verb+T1_AA_LOW+ and \verb+limit2+ is the value of size at which \tonelib\ switches from \verb+T1_AA_LOW+ to \verb+T1_AA_NONE+. The default values are 20.0 for \verb+limit1+ and 60.0 for \verb+limit2+. This means for sizes smaller than 20.0 \verb+T1_AA_HIGH+ will be used and for sizes equal to or greater than 60.0 \verb+T1_AA_NONE+ will be used. The intermediate range is covered by \verb+T1_AA_LOW+. These values are suitable for applications that display on screen when the device resolution has been left at the default value of 72 dpi. \subsubsection{Caching of Antialiased Character Glyphs} \label{aacaching}% Generally, antialiased glyphs are not cached in \tonelib\ because this involves several problems which are hardly to solve. One main problem is shown in figure \ref{figure:subpixelpositioning}. \begin{figure} \centerline{\includegraphics[scale=10]{Tee}}\relax \vskip3mm \hrule\vskip3mm\small \caption{\label{figure:subpixelpositioning} The string ``Tee'' (which is the German word for ``tea'') rastered at 13~bp, using $4\times$ antialiasing. Notice the different representations of the character ``e''.} \end{figure} Obviously the character ``e'' appears twice in different representations. This is intentional and is referred to as sub pixel positioning. In the left ``e'' the letter is perceived somewhat more to the left with respect to the pixels that represent the character. Conversely, the second ``e'' seems to lie somewhat more to the right within the pixels. The advantage of this technique is that characters can be shifted by some fractional amount of a pixel at low sizes.\footnote{The opinions whether this and antialiasing in general is of advantage for readability vary, so please consider this the opinion of the author. } On the other hand the problem is introduced that each character can have more than one representation in graylevels, depending on how much subpixel shift is needed. One further problem caused by subsampling is that certain information is irreversibly lost in the graylevel representation. For example, if you have a graylevel pixel of intensity 50\% (whatever the real color is), then, in case of $2\times$ antialiasing, you will know that in the $2\times 2$ input bitmap two pixels had been set to foreground, but you would not know {\em which} two these had been. But this information is important for concatenating and blitting of antialiased bitmaps: it may well happen that two pixels with 50\% gray that lie over each other had to produce an output pixel of 50\%, 75\% or 100\% gray (where 100\% gray means full foreground intensity). To avoid these problems, \tonelib\ generally does not cache antialiased glyphs. Instead, it works on true bitmaps which are then subsampled at the last possible stage to an antialiased glyph. Applications that do not use anything more than the functions that yield char bitmaps or bytemaps, could profit from caching of antialiased characters. Such applications could specify \verb+T1_AA_CACHING+ as an additional ingredient to the \verb+log+ argument of the function \verb+T1_InitLib()+ which initializes \tonelib. This is done by OR'ing the value of \verb+log+ with \verb+T1_AA_CACHING+ as described in \ref{initialization}. If this flag had been specified at initialization time, \verb+T1_AASetChar()+ will cache the bytemaps it has generated and will take them from cache in future requests. When caching antialiased glyphs, each size gets up to four distinct cache areas, one for bitmaps and one for $1\times$, $2\times$ and $4\times$ subsampled bytemaps each. As soon as a string-generating function is called these cached antialiased glyphs cannot be used for the reasons discussed before. The developer of an application should thus carefully think about whether a possibly marginal performance gain is really worth this much higher effort. If in doubt, simply check it out. Applications like \verb+xdvi+ which place isolated character glyphs on a sheet could use this feature, however, and profit from it. \subsection{Interface to Outlines} \label{outlines}% Although \tonelib\ is meant for generating bitmaps from Type 1 outline fonts, there is a set of functions for accessing outline data. There are several reasons for this. Firstly, outline descriptions are, within the given arithmetic constraints, mathematically exact. Secondly and related to the previous point, in certain cases where exact subpixel positioning is needed, the functionality of grid-fitting before rasterization is needed. This can only be done accurately based on outlines. To illustrate this, consider figure \ref{figure:whyoutlines}. % -parameters for this figure: size 50.0 % angle 35 % arg: --checkConcat[Glyphs|Outlines] % \begin{figure}[t] \hfill a) \includegraphics[scale=1.0]{concatglyphs} \hfill b) \includegraphics[scale=1.0]{concatoutlines} \hfill\break \vskip3mm \hrule\vskip3mm\small \caption{\label{figure:whyoutlines}Two concatenated bitmaps, a) concatenation done based on bitmaps by blitting and b) based on outlines and then filled.} \end{figure} When looking at the concatenated glyph a), it appears that the underline rule has a small step where the two words touch.\footnote{Depending on the resolution and quality of the hardcopy you are reading, the effect might be hardly or not all noticeable.} The reason is, that the second part of the glyph had been rastered with respect to a pixel coordinate of exactly $(0,0)$. Since the start of the second word in the resulting glyph does not exactly fall on an integer pixel location, bitmap blitting causes an artifact in the visual line of the underlining rule. Strings rotated at angles that are not multiples of $90^\circ$ are prone to produce such effects. In contrast the concatenated glyph b) does not show such effects because both partial glyphs are placed mathematically exact and then filled. Thirdly, if the outline of a character is available, it can be used for whatever. For example, the outline can be filled by another rasterizer, it can by altered, it can be stroked and so on. \tonelib\ makes outlines as they are internally used by the rasterizer available. We will discuss how to interprete and access outlines in the remainder of this section. \subsubsection{Outline Format} \label{outlineformat}% Before going into implementation details the general structure of a Type 1 outline is described. We will consider the simple fictive character whose outline is shown in figure \ref{figure:generaloutline}. \begin{figure}[t] \hfill \includegraphics[scale=1.0]{outlines} \hfill\break \vskip3mm \hrule\vskip3mm\small \caption{\label{figure:generaloutline}The outline of a fictive character.} \end{figure} We assume that scaling, grid fitting and hinting has already been carried out. Then, the outline is given by set of points $P_i$ and segments connecting those points. There are: \begin{itemize} \item Move-segments (type = \verb+T1_PATHTYPE_MOVE+): These are straight segments which cause the current position to be displaced by some offset. Since the starting point of a segment is always implicitly the current point, only one argument is needed, $P_{dest}$, the destination point. In the figure, $P_1$--$P_2$ and $P_{2}$--$P_{12}$ are Move-segments. In this simple case they displace from the characters origin to some starting point of the outline and from the ending point of the outline to the point where the next character would have to be placed (the horizontal escapement). \item Line-segments (type = \verb+T1_PATHTYPE_LINE+): These are part of the path to be filled later. In analogy to the Move-segment, one argument, $P_{dest}$, is required for Line-segments. In the figure, $P_{11}$--$P_2$ is a Line-segment. \item Bezier-segments (type = \verb+T1_PATHTYPE_BEZIER+): These are curve segments. Their shape is defined by a starting point (always the current point here), an ending point $P_{dest}$ and two control points $P_B$, $P_C$. These four points are the parameters of what is called a third order Bezier spline.\footnote{The mathematical defining equation represents a special case of a Bernstein polynom which was exploited by {\sc Bezier} in the context of solid modeling. The curve especially has the property that it may be approximated efficiently by straight line segments in a few iterations.} The resulting curve has the following properties: \begin{itemize} \item It starts at the first point $P_{current}$. \item It ends at the fourth point $P_{dest}$. \item The line that goes through the points $P_{current}$ and $P_{B}$ is the tangent to the curve from the right side at the starting point $P_{current}$. \item In analogy, the line that goes through the points $P_{C}$ and $P_{dest}$ is the tangent to the curve from the left side at the ending point $P_{dest}$. \item The resulting curve will be enclosed completely by the convex area that is defined by connecting the definition points with straight line segments. \end{itemize} Our fictive character outline in figure \ref{figure:generaloutline} has three Bezier-segments, $P_{2}$--$P_{3}$--$P_{4}$--$P_{5}$, $P_{5}$--$P_{6}$--$P_{7}$--$P_{8}$ and $P_{8}$--$P_{9}$--$P_{10}$--$P_{11}$. Notice that it is easily possible to achieve a smooth tangent transition from one curve-segment to the next by choosing the involved points from a straight line. \end{itemize} For Type 1 fonts in general, the following rules for interpreting coordinate specifications hold: \begin{itemize} \item All point specifications are relative to the {\em current point}. \item For Bezier-segments, $P_{B}$, $P_{C}$ and $P_{dest}$ all are relative to $P_{current}$. \item Initially, i.e. when a character outline is started, the current point is at the origin $(0,0)$ of the character. \end{itemize} Additionally, for this special rasterizer implementation, the following terms apply: \begin{itemize} \item The vertical coordinate is---in contrast to PostScript---inverted, i.e., the $y$-axis points down. \item Once hinted and gridfitted, the outline point coordinates are described in {\em fractional pixels}. A ``fractpel'' is of type \verb+long+ and describes the location in $2^{16}$th fractions of a pixel. To convert from pixel to fractional pixel and vice versa, the macros \verb+T1_TOPATHPOINT(p)+\index{\verb+T1_TOPATHPOINT()+} and \verb+T1_NEARESTPOINT(fp)+\index{\verb+T1_NEARESTPOINT()+} are provided. \end{itemize} Before describing the functions for retrieving outlines the format in which outlines are presented in C will be described. A point specification is done in the following structure: \begin{verbatim} typedef struct { T1_int32 x; T1_int32 y; } T1_PATHPOINT; \end{verbatim} \verb+x+ and \verb+y+ are fractional pixels as described above. An outline is represented by a linked list of structures which describe path segments of the type described above. Line- and Move-segments are described by the following structure: \begin{verbatim} typedef struct pathsegment { char type; unsigned char flag; short references; unsigned char size; unsigned char context; struct pathsegment *link; struct pathsegment *last; T1_PATHPOINT dest; } T1_PATHSEGMENT; \end{verbatim} \verb+type+ is either \verb+T1_PATHTYPE_MOVE+ or \verb+T1_PATHTYPE_LINE+. \verb+flag+, \verb+references+, \verb+size+ and \verb+context+ are internally used by the rasterizer. \verb+link+ is a pointer to the next segment structure or \verb+NULL+ in case it is the last structure in the list. Finally, the \verb+last+-entry is a pointer to the last structure in the linked list. \verb+last+ is only set in the first segment and is reset to \verb+NULL+ in the remaining segment structures. A Bezier-segment is described by the following structure: \begin{verbatim} typedef struct bezierpathsegment { char type; unsigned char flag; short references; unsigned char size; unsigned char context; T1_PATHSEGMENT *link; T1_PATHSEGMENT *last; T1_PATHPOINT dest; T1_PATHPOINT B; T1_PATHPOINT C; } T1_BEZIERSEGMENT; \end{verbatim} Obviously, the format is identical to that for straight path segments, extended by the entries \verb+B+ and \verb+C+ which specify the control points as described earlier in this subsection. The common return type for the outline retrieving functions is a pointer to \verb+T1_OUTLINE+, which is in fact identical to \verb+T1_PATHSEGMENT+. This purely for convention. Although it is quite unlikely, an outline might start with a Bezier-segment. To access Bezier-segment elements, a cast must be used. \subsubsection{Using Outlines} \label{usingoutlines}% \tonelib\ provides three functions for retrieving outlines. The first is \precorr \begin{verbatim} T1_OUTLINE *T1_GetCharOutline( int FontID, char charcode, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_GetCharOutline()+}\postcorr The meaning of the arguments is as in the \verb+T1_SetChar()+-function. Notice that the size specification is also required here. Outlines are, by their nature in Type~1, generally defined in a $1000\times 1000$ grid and then scaled down by the fontmatrix to 1 bp. The space is known as the charspace. The reason for specifying a size at this place, instead of scaling the outline later, is, that hinting is performed according to the scaled outline. The returned outline is then hinted for the given size. If necessary, it may still be scaled later. The outline for a complete string can be retrieved by \precorr \begin{verbatim} T1_OUTLINE *T1_GetStringOutline( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_GetStringOutline()+}\postcorr The meaning of the arguments is as in \verb+T1_SetString()+. Finally the ``outline'' for a displacement is available by the function \precorr \begin{verbatim} T1_OUTLINE *T1_GetMoveOutline( int FontID, int deltax, int deltay, int modflag, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_GetMoveOutline()+}\postcorr This function is intended to be used for concatenation of outlines. It needs all the arguments because some quantities which are given on the font level are required for constructing the outline. \verb+deltax+ and \verb+deltay+ are the horizontal and vertical displacement measured in charspace units. From the \verb+modflag+-argument, especially the underlining parameters are evaluated. Although $x$- and $y$-displacement may be specified, the resulting outline is still subject to scaling with \verb+size+ and transformation according to \verb+transform+. Arbitrary outlines may be concatenated by using the function \precorr \begin{verbatim} T1_OUTLINE *T1_ConcatOutlines( T1_OUTLINE *path1, T1_OUTLINE *path2) \end{verbatim}\index{\verb+T1_ConcatOutlines()+}\postcorr Notice that this concatenation is done with high precision so that we can expect that visual artefacts are reduced to a minimum (remember figure \ref{figure:whyoutlines}). Scaling of outlines is done by the function \precorr \begin{verbatim} T1_OUTLINE *T1_ScaleOutline( T1_OUTLINE *path, float scale) \end{verbatim}\index{\verb+T1_ScaleOutline()+}\postcorr \verb+T1_ScaleOutline+ does nothing more than linearly scaling the coordinate data with \verb+scale+ and storing the result in fractional pixels. No care is taken for hinting (see above). An outline may be duplicated using the function \precorr \begin{verbatim} T1_OUTLINE *T1_CopyOutline( T1_OUTLINE *path) \end{verbatim}\index{\verb+T1_CopyOutline()+}\postcorr This is a direct entrypoint into the rasterizer. It works by allocating and duplicating each segment of \verb+path+. This function may be useful if one wants to do several things with one outline because the process of filling an outline also consumes that outline. An outline that that a user decides not to fill can be destroyed by the function \precorr \begin{verbatim} void T1_FreeOutline( T1_OUTLINE *path) \end{verbatim}\index{\verb+T1_FreeOutline()+}\postcorr It iterates through the segment list and frees each segment. This must not be done after filling an outline because the filling process consumes the outline! Finally, there are two functions that produce glyphs from outlines, namely \precorr \begin{verbatim} GLYPH *T1_FillOutline( T1_OUTLINE *path, int modflag) \end{verbatim}\index{\verb+T1_FillOutline()+}\postcorr and \precorr \begin{verbatim} GLYPH *T1_AAFillOutline( T1_OUTLINE *path, int modflag) \end{verbatim}\index{\verb+T1_AAFillOutline()+}\postcorr Their usage does not need any explanation. The value of \verb+modflag+ is required for {\em Right-To-Left} typesetting. If the bit \verb+T1_RIGHT_TO_LEFT+ is set, the dimension of the glyph are recomputed accordingly. All other bits from \verb+modflag+ are ignored such that in the usual case of {\em Left-To-Right} typesetting simply 0 can be specified. While \verb+T1_FillOutline()+ produces bitmaps of depth 1, \verb+T1_AAFillOutline()+ produces antialiased bytemaps of the current graphics depth. It should be mentioned that Smart Antialiasing (see \ref{smartantialiasing}) does not work with this function. The reason is that \tonelib\ has no notion of the quantity ``size'' when it gets the outline to process. Hence, Smart Antialiasing can't work in this case. As noted above, the outline is consumed by the filling functions so that there is no need to free it explicitly. \subsubsection{Manipulation of Outlines} \label{outlinemanipulation}% \tonelib\ provides some limited further functionality to process outlines. First of all, a user would expect a character to be defined in a coordinate system in which $x$ points to the right and $y$ points up. Further, a representation of the glyph where all points are specified in absolute coordinates would be advantageous for manipulating outline-points. This is because most transformations, linear or nonlinear, need to have an absolute $x$-value to compute an $y$-value or vice versa. The function \precorr \begin{verbatim} void T1_AbsolutePath( T1_OUTLINE *rpath) \end{verbatim}\index{\verb+T1_AbsolutePath()+}\postcorr does exactly what has been described just before, (a) conversion of relative coordinates into absolute coordinates and (b) inverting the $y$-direction. Once a path has been converted into an absolute path, it is suitable for possibly nonlinear manipulation.\footnote{A linear manipulation of path points would rather be realized using the transformation matrices as described in \ref{transformations}.} As an example of what can be done, have a look at figure \ref{figure:manipulation}. \begin{figure}[t] \hfill \includegraphics[scale=1.0]{manipulate} \hfill\break \vskip3mm \hrule\vskip3mm\small \caption{\label{figure:manipulation}A string with nonlinearly scaled coordinates.} \end{figure} The string displayed has been generated by essentially applying the transformation $y'= y(1+cx^2)$, with appropriate $c$. To allow such transformations by the user, \tonelib\ provides the function \precorr \begin{verbatim} void T1_ManipulatePath( T1_OUTLINE *path, void (*manipulate)(long *x,long *y, int type)) \end{verbatim}\index{\verb+T1_ManipulatePath()+}\postcorr Here, \verb+path+ should be an absolute path as described above. Notice that \tonelib\ has no way to check whether the path is relative or absolute, this is in the responsibility of the user. The second argument is a pointer to a function that has a return type of \verb+void+ and that expects three arguments: two pointers to \verb+long+-values one integer \verb+type+. \verb+T1_ManipulatePath()+ works by iterating through all outline points of \verb+path+ and calling the function \verb+*manipulate()+ for each outline point. When the function \verb+*manipulate()+ is called, \verb+x+ and \verb+y+ are pointers to the $x$- and $y$-coordinates respectively of the outline point to be processed. That way, \verb+*manipulate()+ can alter the outline points arbitrarily. The \verb+type+-argument will be set to the segment type by \verb+T1_ManipulatePath()+. As described earlier, the segment type can be one of \verb+T1_PATHTYPE_MOVE+, \verb+T1_PATHTYPE_LINE+ and \verb+T1_PATHTYPE_BEZIER+. Of course, the function \verb+manipulate()+ has to be written by the user. To make it clear, we consider a function which stretches an outline horizontally by 1.5. The code fragment for this could be: \begin{verbatim} . . . void h_stretch( long *x, long *y, int type) { double dx; dx=(double)*x; dx *=1.5; /* scale x coordinate by 1.5 */ *x=(long)dx; } . . . T1_OUTLINE *path=NULL; path=T1_GetStringOutline(FontID,(char *)SomeString, 0,0,T1_KERNING,20.0,NULL); T1_AbsolutePath( path); T1_ManipulatePath( path, &h_stretch); T1_RelativePath( path); glyph=T1_FillOutline( path, Modflag); . . . \end{verbatim} As the example above already has shown, an absolute path, manipulated or not, must converted back to a relative path before it finally can be interpreted by the rasterizer. This conversion is done using \precorr \begin{verbatim} void T1_RelativePath( T1_OUTLINE *apath) \end{verbatim}\index{\verb+T1_RelativePath()+}\postcorr As already mentioned with respect to \verb+T1_AbsolutePath()+, \tonelib\ cannot check whether the \verb+path+ specified is really absolute. The user has to take care for this. A few general comments about manipulating paths are appropriate. Although the mechanism implemented by \verb+T1_ManipulatePath()+ allows arbitrary manipulation of path points, one must be very careful in doing so. Figure \ref{figure:outlineproblems} exhibits some of the problems that may arise. A text string aligned to a sine function is displayed. %- parameters of figure: string: Text aligned along a sine wave function % size: 50 % kerning on \begin{figure}[t] \hfill a) \includegraphics[scale=0.5]{outlineproblems1} % period=500, \hfill\break \hfill b) \includegraphics[scale=0.5]{outlineproblems2} % period=200 \hfill\break \hfill c) \includegraphics[scale=0.5]{outlineproblems3} % period=100 \hfill\break \hfill d) \includegraphics[scale=0.5]{outlineproblems4} % period=50 \hfill\break \hfill e) \includegraphics[scale=0.5]{outlineproblems5} % period=500 \hfill\break \hrule\vskip3mm\small \caption{\label{figure:outlineproblems}The string ``Text aligned along a sine wave function'' using a period of (a) 500, (b) 200, (c) 100, (d) 50 pixels and (e) again 500 pixels with underlining. The sine amplitude was 30 pixels (in screen resolution).} \end{figure} In part (a), a pleasing smooth text flow is shown and this also applies for (b) where the period of the sine has been reduced to 200 pixels. In (c), where the period has been reduced to 100 pixels, some artefacts already show up. For example, the top bar of the uppercase ``T'' has noticeable variance in thickness. In (d), where the period has been reduced again, the result is hardly readable. Another artefact appears in figure \ref{figure:outlineproblems} (e): since the underlining rule is defined by four points only, these points and nothing else is transformed with the result that the out coming line is still straight and not curved as we would like. From this discussion we conclude, that such transformations can only be done with reasonable results if the maximum distance between the outline points of a shape is small compared to the variance of the outline points that the transformation results in. This rule, although being very fuzzy and non-mathematical, should give a good estimation of which transformations are valid. Another completely independent topic is that, at the level where \tonelib\ provides outlines, their representation is strictly descriptive with respect to points and their connections. There are no such things like \verb+closepath+-segments which would take care that a path is really closed, no matter what the transformation had been. This means, that identical points $P_1 = P_2$ have to be transformed to identical points $P_1'=P_2'$, no matter where they appear in the outline. However, if the transformation is done by by a function $(x',y')=f(x,y)$ as suggested, this should never be a problem. Finally, one should remember that all computations in the user function \verb+manipulate()+ have to be done in units of fractional pixels, rather than in pixels. When designing a sine wave as in figure \ref{figure:outlineproblems}, this must be taken into account with respect to periodicity. \subsection{Logical Fonts} \label{logicalfonts}% It sometimes may be necessary to have a font and an extended or slanted variant simultaneously. To enable such configurations without needing to declare the fonts two or even more times in the font database file, \tonelib\ provides the function \precorr \begin{verbatim} int T1_CopyFont( int FontID) \end{verbatim}\index{\verb+T1_CopyFont()+}\postcorr It copies the top level data structure of the font given by \verb+FontID+ to another location. The newly created font refers in fact to the same physical memory as the font \verb+FontID+ as far as Type 1 and AFM data are concerned. However, no size specific data is copied from font \verb+FontID+, you can thus do with the new font whatever you want to. It will get its own size-specific memory area when the first bitmap is generated using its ID. It is also possible to reencode a copied font without affecting the original font. This is possible because a logical font gets its own mapping tables. This allows configurations with one font at different encodings simultaneously. In order to keep track that another font is referring to data from font \verb+FontID+, a reference counter is managed for every font. The reference counter for font \verb+FontID+ is incremented after a call to \verb+T1_CopyFont()+. If the font \verb+FontID+ is not loaded into memory, the function returns $-1$. Only {\em physical} fonts---those fonts defined in the font database file or added via \verb+T1_AddFont()+---may be copied to another font. If a user tries to copy a font which is already logical, the function returns $-2$. If no memory is available for the new font the function return $-3$. But this should not happen. If all goes the right way, \verb+T1_CopyFont()+ returns an integer---lets call it \verb+new_ID+---which is from now on a valid font identification number. \subsection{Missing or Invalid AFM Files} \label{missingafmfiles}% \tonelib\ heavily relies on AFM information every time the relative position of bitmaps is of importance. Because AFM information is of high resolution, accumulating positioning errors are avoided in contrast to what the X11 text drawing functions do. On the other hand, there are many freely available Type~1 font programs that come without AFM files. This problem has been addressed in \tonelib\ 0.5. \tonelib\ is now able to generate AFM information on the fly and it even can generate AFM files from Type 1 font files. \subsubsection{Remarks on AFM Files} \label{remarksonafmfiles}% Information in AFM files is only relevant for placing character glyphs but not for rasterizing. The metric values are based on the same coordinate system as used in Type 1 font files, the so called {\em charspace coordinate system}. One unit is $1/1000 \mbox{bp}$ when a font is not scaled or scaled to 1~bp, respectively. Information in AFM files can divided into several groups: \begin{enumerate} \item {\em Global Font Information:} This information is generally not needed to place characters. Furthermore, most of this information is also contained in a Type 1 font file itself. This area is thus of marginal importance for \tonelib. \item {\em Character Width's and Bounding Boxes:} These both are crucial for accurately placing the character glyphs. Fortunately, these are dimensions are exactly defined by the character outlines themselves. It is thus possible to compute them spending some computational effort. \item {\em Ligature Information:} For \ae sthetic reasons, certain character groups are often replaced by ligatures and a font file may define several ligatures. It is however not intuitively clear what character groups should be replaced by what ligatures.\footnote{Well, at least not without some expert knowledge like ``I know this ligature's name is `f{}i', so I replace every series of `f' and `i' with it.''} Fortunately, ligatures are not crucially needed for quality typesetting. \item {\em Pair Kerning Information:} This information is quite important for \ae sthetic reasons but it is entirely independent from the outline descriptions and can thus not be extracted from a font file. \item {\em Track Kerning Information:} This information gives hints of how to typeset text generally closer or wider at varying point sizes. \tonelib\ does not use track kerning information and I personally do not consider using track kerning a good typographical style. \item {\em Composite Character Data:} This is needed to construct characters from two single characters. Typical examples are accented characters. \tonelib\ currently does not deal with composite characters. Most of the composite characters needed are already existent internally. \end{enumerate} To come to a conclusion, for our purposes it is sufficient to generate the characters' widths and their bounding boxes and we have all information we need to construct string glyphs. \subsubsection{Generation of AFM Information} \label{generatingafminfo}% Next lets consider how to generate the AFM information. It is a series of entirely independent steps: \begin{itemize} \item When we generate AFM information, we want to do this once and forever when the font is loaded. Consequently all characters, have to be examined, not only those that are currently encoded. We start by fetching all character names the font defines. This done with \verb+T1_GetAllCharNames()+ (see \ref{characterencodingrelation}). This yields a list of possibly more than 256 character names. \item Each of the character addressed by the names above is now rastered at size 1000~bp. By rastering at 1000~bp we match exactly the charspace coordinate system which the character outline descriptions are based on. Width and bounding box are easily examined and saved at appropriate places. \item The kerning pair area and ligatures are explicitly set to zero. \end{itemize} At the end of this procedure, there is a data area identical to what would have been built when reading an AFM file without kerning-section and ligature specifications. The decision of building AFM data is done on the fly without any user interaction. Here is what happens on the metrics-area when loading a font: \begin{itemize} \item \tonelib\ tries to open an AFM file reading metrics and kerning pair information. \item If this does not succeed, it tries to rescan the AFM file in a {\em sloppy} way, only requesting metrics information. \item If this fails too, metrics information is generated on the fly as described above. \end{itemize} It should be noted that generating metric information the way described above takes significant amount of time since every character has to be rastered at 1000~bp. %~derekn If the \verb+T1_NO_AFM+ flag is passed to \verb+T1_InitLib()+, \tonelib\ will neither attempt to open AFM files nor generate AFM information. This is useful to speed up applications which do not need the metrics data. However, this slows down access to certain features, mostly related to the string processing functions, and completely disables the features that only are contained in AFM files (like kerning and ligatures). Obivously, the \tonelib\ functions that use the AFM data will not work correctly in this case and should not be used. %~derekn \subsubsection{Writing AFM Files} \label{writingafmfiles}% In order to reduce the situations where AFM data has to be generated on the fly, \tonelib\ provides the following function: \precorr \begin{verbatim} int T1_WriteAFMFallbackFile( int FontID) \end{verbatim}\index{\verb+T1_WriteAFMFallbackFile()+}\postcorr It writes an AFM file for the font identified by \verb+FontID+. This is done executing the following steps: \begin{enumerate} \item The AFM filename is constructed by taking the fontfilename, cutting off the extension and appending \verb+.afm+. \item A pointer array of size $256 + n$, where $n=\mbox{number of characters}$, is allocated and set to NULL. The leading 256 entries are reserved to point to encoded characters' metrics. The remaining entries are intended to point to metrics of unencoded characters. We see that this is a worst case speculation: The pointer array is large enough for the extremely unusual case that no characters are encoded. \item Next the function steps through all character names and gets their encoding index $i$. If $i\geq0$, the character is encoded and the $i$th pointer element in the array is set to point to the metrics of this character. If $i=-1$, the character is not encoded and the lowest unused pointer in the second area is set to point to the metrics of this character. \item Next the AFM file is opened and the header information as well as a comment by \tonelib\ are written. There are 5 entries that are not trivially to extract from the font file: \verb+Ascender+, \verb+Descender+, \verb+XHeight+, \verb+CapHeight+ and \verb+EncodingScheme+. Their discussion is deferred to later in this section. \item After the header, the metrics information is written in the format required for AFM files. This is done by stepping through the pointer array until the first NULL pointer in the unencoded characters' area is reached. \end{enumerate} The result is a list of char-dimensions entries which is leaded by the encoded characters in ascending order of their encoding index, followed by a list of unencoded characters in alphabetical order. As seen above, the current encoding takes influence on the order the characters appear in the AFM file. One should thus not produce AFM files from reencoded fonts, although this is possible. This yields non-standard AFM files and gives no performance gain, even not when used with \tonelib. The entry \verb+EncodingScheme+ is not always contained in the fontfile itself. It is generated by comparison between encodings. \tonelib\ has only one builtin encoding, \verb+AdobeStandardEncoding+, which is recognized. Every further encoding, defined by the font itself or applied by a user, is always marked as \verb+FontSpecific+. The entries \verb+CapHeight+, \verb+XHeight+ \verb+Ascender+ and \verb+Descender+ are not fully determined by a Type 1 font file although they are existent with high probability. As rough definitions can be considered: \begin{itemize} \item \verb+CapHeight+: The height a capital `H' reaches to. \item \verb+XHeight+: The height a lower case `x' reaches to. \item \verb+Ascender+: The height a lower case `d' reaches to. \item \verb+Descender+: The depth a lower case `p' reaches down. \end{itemize} It is obvious that these definitions make only sense in certain font definitions. For example, a musical notation font might not necessarily define an ascender since no capital letters are provided. In the Type 1 notion these dimensions are referred to as top alignment and bottom alignment values respectively. The corresponding alignment ``zone'', i.e., an interval, is defined by the alignment height and a corresponding overshoot position. The alignment zones are specified in the BlueValues array for top alignment zones and the OtherBlues array for bottom alignment zones. A Type 1 font may define up to 7 top alignment zones and 5 bottom alignment zones. It is unfortunately not defined which of these alignment zones refer to \verb+CapHeight+, \verb+XHeight+, \verb+Ascender+ and \verb+Descender+. \tonelib\ tries to get out of this dilemma by making a best guess: \begin{enumerate} \item For each of the characters `H', `x' and `d' it fetches the largest y-value and compares the result with each alignment zone in the BlueValues array. The alignment zone closest to the observed character dimension is assumed a candidate for the respective quantity. \item It checks whether the difference between the alignment zone just selected and the character dimension is within a certain tolerance area. This tolerance width is $\pm 30$ charspace units. If the result is positive, the quantity in question is assigned the numerical value of the standard height (not the overshoot) of this alignment zone. Since we are currently considering top alignment zone, this will always be the lower value. \item If the value is out of tolerance or the font even does not define the character, the corresponding entry in the AFM file is left out. \item A comparable procedure is then done for \verb+Descender+, this time examining the OtherBlues array. \end{enumerate} Note that if the values do not seem to be correct, the corresponding lines can be removed from the AFM file without doing any harm. These entries are optional only. \verb+T1_WriteAFMFallBackFile()+ can indicate a number of error conditions by returning appropriate values. These are: \begin{itemize} \item \verb+0+: No error occurred, AFM file was successfully written. \item \verb+-1+: The AFM data for the font in question has been generated by reading an AFM file, there is no need to generate a new one. If you really want to force an AFM file to be written, take care that \tonelib\ does not find an AFM file when loading the font. \item \verb+-2+: The font in question is not loaded. \item \verb+-3+: The font in question is loaded but AFM data has not been generated. This definitely is an error condition because it indicates not all characters of the font could be rastered, either because the font file is damaged or because there were insufficient system resources. In any case the application should generate a logfile and this file should be examined. \item \verb+-4+: The AFM file could not be opened. This could be a permission problem or something else. The file is always opened in the current working directory. \item \verb+-5+: The file has successfully been opened but there was an error writing to the file. \item \verb+-6+: A memory allocation error occurred. This should not happen because it indicates there are no system resources. \end{itemize} \subsection{Font Subsetting} \label{Font Subsetting}% When applications have to setup Postscript files for printing, the problem is that these files often grow large. Each font which is not known to the Postscript interpeter, i.e., usually each font that is not part of the set of 35 standard fonts, has to be downloaded as part of the file. The size of a particular font file often can be reduced by font subsetting, because usually only a small subset of the available character descriptions is actually needed. \subsubsection{Font File Organization and Subsetting} \label{Font File Organization and Subsetting}% Each Type~1 font file is a special Postscript program defining three Postscript-dictionaries: \begin{itemize} \item \verb+FontInfo+\\ Global font information like font and family name and encoding scheme is stored here. This data is required even for a subsetted font. However, as will be described later, the encoding scheme may be reduced to those characters that are in the desired subset. \item \verb+Private+\\ This dictionary is in the encrypted part of the file and stores global font data too. This data includes quantities parameterizing hinting and subroutines that might be called by the character descriptions. This data is required also. \item \verb+Charstrings+\\ For each character defined in the font a binary and encrypted byte string (charstring) coding the character outline is stored in this dictionary. The number of charstrings may be considerably larger than the size of the encoding vector. This dictionary usually constitutes the largest part of the font file and, consequently, it is the place to reduce storage requirements. \end{itemize} The main principle in subsetting is to decrypt the font and reorganize it, leaving out charstrings that are not required in the current context. For example, if a document uses only the character 'A' from the font Garamond, then this font may be subsetted preserving the character outline for 'A' only. The resulting file, which will be much smaller than the original file, can then be included verbatim into the Postscript file containing the document. At the same time, optionally, the encoding vector could be redefined to contain only the entry for 'A' at the appropriate location and \verb+.notdef+ otherwise. A still more consequent subsetting would involve leaving out those subroutines from the \verb+Private+-dictionary that are not needed by the preserved charstrings. Leaving out some subroutines on the other hand would require to interprete and check all charstrings for the subroutines they require and all preserved charstrings would have to be adapted to the reorganized index. Since the subroutines usually do not consume that much memory this is not considered worth the effort. \subsubsection{Functions for Subsetting} \label{Functions for Subsetting}% There are two ways to obtain a subsetted font from an existing file. The user can (1)~do it step by step which requires reading, decrypting, reorganizing and encrypting of the font file, and (2)~use a high level function to do it without having to know anything about the details. For font subsetting, \tonelib\ provides the function \precorr \begin{verbatim} char *T1_SubsetFont( int FontID, char *mask, unsigned int flags, int linewidth, unsigned long maxblocksize, unsigned long *bufsize) \end{verbatim}\index{\verb+T1_SubsetFont()+}\postcorr It returns a pointer to a memory block containing the subset data. The memory is allocated in the function and it is the responsability of the user to free this memory. The parameter \verb+FontID+ as usual is used to tell \tonelib\ which file or font is to be used for the operation. \verb+mask+ points to an array of characters which has to be setup by the user. This array must comprise exactly 256 characters and for the index of each non-zero entry the charstring resulting from the current encoding is preserved in the subsetted font. To give an instance, if the subset should consist in the character 'A' only and we assume the current font specifies \verb+StandardEncoding+, then the \verb+mask+-array should be initialized to zeroes and \verb+mask['A']=1+ or some other non-zero value. The \verb+flags+ parameter allows to control the subsetting operation. It usually should be set to \verb+T1_SUBSET_DEFAULT+. In this case, the subset is ASCII-hex encrypted, that is, as in a \verb+.pfa+-file. It is thus well-suited for the verbatim insertion into a Postscript file. If the source font file in question defines the encoding to be \verb+StandardEncoding+, the encoding is not adjusted to the subset specified by \verb+mask+. By contrast, if the font defines a \verb+FontSpecific+ encoding, this encoding will be adjusted according to the subset. This default behavior---which mimics what e.g.~\verb+dvips+ seems to do---may be overwritten by OR'ing \verb+flags+ with \verb+T1_SUBSET_FORCE_REENCODE+, which leads to adjusting the encoding vector in any case. Conversely, reencoding can be suppressed unconditionally by OR'ing \verb+flags+ with \verb+T1_SUBSET_SKIP_REENCODE+. If \verb+flags+ is OR'ed with \verb+T1_SUBSET_ENCRYPT_BINARY+, a buffer of mixed ASCII, binary and EOF segment types is created and encryption is performed in binary mode. The buffer's contents in this case represents a valid compact binary format file (\verb+.pfb+). It is considerably smaller than a comparable \verb+.pfa+-file but it is not suitable to be inserted into Postscript files. The parameter \verb+linewidth+ is used to specify the line length if ASCII-hex encryption is used. Since---according to the Adobe speification---the first 8 encrypted bytes have to be stored one after the other without interspersed white space, the allowed range of \verb+linwidth+ is limited to 8 at the lower bound. It is also limited at the upper bound by 1024, because writing that long lines does not preserve the readability of the produced file. The parameter \verb+maxblocksize+ is important if binary encryption is used. Then, this value specifies the maximum allowed segment size. For similar reasons as discussed above, this value must be equal to or larger than~4. There is no limit at the upper bound, because the maximum segment size can be derived automatically follows from the target font file. \verb+bufsize+ must be a valid pointer to an \verb+unsigned long int+ in the context of the calling function. The size of the memory area to which the function returns a pointer, is written to \verb+bufsize+. The calling function needs this number to process to buffers contents, e.g., to write it to a file. If errors occur in this function, \verb+NULL+ is returned and \verb+T1_errno+ is set to an appropriate value. If the font corresponding to \verb+FontID+ is not loaded, \verb+T1_errno+ is set to \verb+T1ERR_INVALID_FONTID+. \verb+T1ERR_INVALID_PARAMETER+ is used to indicate that one of the further arguments is out of range. \verb+T1ERR_ALLOC_MEM+ and \verb+T1ERR_FILE_OPEN_ERR+ may also be set in this function. Finally, \verb+T1ERR_UNSPECIFIED+ may also be set if the charstring definition for \verb+.notdef+ could not be located. This is considered to be a fatal error. An example of how to use the function described above is given in the file \verb+subset.c+ in the \verb+examples/+ subdirectory of the distribution. \subsubsection{Further Functions for Subsetting} \label{Further Functions for Subsetting}% For the sake of completeness, there are a few further functions in the subsetting module. The function \precorr \begin{verbatim} char *T1_GetCharString( int FontID, char *charname, int *len) \end{verbatim}\index{\verb+T1_GetCharString()+}\postcorr returns a pointer to the charstring of the character with name \verb+charname+ of the font identified by \verb+FontID+. In case of an error, \verb+NULL+ is returned and \verb+T1_errno+ is set to \verb+T1ERR_ALLOC_ERR+ if there was not enough memory for storing the charstring, \verb+T1ERR_UNSPECIFIED+ if the charstring was not found in the dictionary, \verb+T1ERR_INVALID_FONTID+ if the font in question is not loaded or \verb+T1ERR_INVALID_PARAMETER+ if \verb+charname+ or \verb+len+ is \verb+NULL+. The memory pointer which is returned is managed static in this function. Thus, it should not be free'd by the user, or, in case the memory block is free'd, the pointer must be set to \verb+NULL+. In order to decrypt a charstring, the \verb+lenIV+-value of the font in question must be known. It can be obtained using the function \precorr \begin{verbatim} int T1_GetlenIV( int FontID) \end{verbatim}\index{\verb+T1_GetLenIV()+}\postcorr The returned value indicates how many leading random bytes are used for charstring encryption in the font \verb+FontID+. According to an undocumented Adobe convention, the value $-1$ is also valid and indicates that the charstring is not encrypted at all. Hence the return value $-2$ is used to indicate an error. In this case, \verb+T1_errno+ is set to \verb+T1ERR_INVALID_FONTID+, which indicates that the font in question is not loaded. \subsection{Composite Characters} \label{subsec:CompositeCharacters}% This section discusses the composite character information that may be present in AFM files and how this information is represented, accessed and handled in \tonelib. \subsubsection{General remarks} \label{subsubsec:General Remarks}% Composite characters are defined by the fact that they are constructed from at least two independent symbols. In practice there frequently appear two components, a base character and an accent, e.g., as in ``\"A''. Usually, the accents (or secondary pieces) of a composite character are typeset first without causing any horizontal escapement and finally the base character itself is typeset and causes its escapement to become the escapement of the whole composite character. Although some people recommend that the character definition of an accent itself should not cause escapement, this generally is not respected in real fonts and \tonelib\ does not require this condition to be fulfilled. In order to construct a composite character the characters to be put together have to be known and metric information about how to put these characters together has to be known too. \tonelib\ defines two structures as new data types for this purpose. The first is \begin{verbatim} typedef struct { int compchar; int numPieces; T1_COMP_PIECE *pieces; } T1_COMP_CHAR_INFO; \end{verbatim} Here, \verb+compchar+ is the index in the encoding vector of the composite character. \verb+numPieces+ specifies how many pieces are required to build the composite character. The third element is a pointer to an array of type \verb+T1_COMP_PIECE+, whose actual length is given by \verb+numPieces+: Each piece (or symbol) receives one slot in this array. \verb+T1_COMP_PIECE+ is defined by \begin{verbatim} typedef struct { int piece; int deltax; int deltay; } T1_COMP_PIECE; \end{verbatim} It contains the encoding index of the symbol in \verb+piece+ and information where to place this symbol with respect to the composite character's orgin in \verb+deltax+ and \verb+deltay+. The first slot is filled by what I refer to as the base character, it is the one that causes spacing. As can be seen in these data structures, composite character handling in \tonelib\ is based on encoding indices rather than on character names, which, by contrast, are used for the definition of composite character data in AFM files. The presence of composite character information in AFM files does not tell anything about whether a font has an internal definition of this character or not. For example, the font \verb+TimesRoman+ internally defines the CharString \verb+Adieresis+ and hence this font provides the letter ``\"A'', assuming an appropriate encoding, without any knowledge about composite characters. However, the file \verb+TimesRoman.afm+ may still provide composite character information for \verb+Adieresis+, just to tell an application that this glyph consists of more elementary pieces and how to construct it. On the other hand, if \verb+TimesRoman+ had no CharString-definition for \verb+Adieresis+, the composite character information of \verb+Adieresis+ provides an application with enough information to be able construct \verb+Adiereis+ from the elementary units \verb+A+ and \verb+dieresis+ that the font provides. \subsubsection{Accessing Composite Character Data} \label{subsubsec:Accessing Composite CHaracter Data}% This section describes a few functions that provide access to composite character data of a font file. The data they return can be considered a mapping of the original AFM data with respect to the current encoding. As usual, \verb+FontID+ must be the identifier of a font loaded into memory, otherwise an appropriate error indicator is returned. The functions described in the following may also return some other error types. Firstly, \precorr \begin{verbatim} int T1_GetNoCompositeChars( int FontID) \end{verbatim}\index{\verb+T1_GetNoCompositeChars()+}\postcorr tells the user how many composite character definitions are given in the AFM file. This, of course, does not depend on the current encoding vector and it is even possible that the current encoding vector does not incorporate any composite character at all. The function \precorr \begin{verbatim} int T1_QueryCompositeChar( int FontID, char char1) \end{verbatim}\index{\verb+T1_QueryCompositeChar()+}\postcorr checks whether composite character information exists for the encoding index \verb+char1+. If so, it returns the index within in the AFM composite character data array as a number equal to or greater than zero. If the result is valid but no composite character information has been found for \verb+char1+, $-1$ is returned. In case of an error, $-2$ is returned and \verb+T1_errno+ is set to an appropriate value. The previous function does not tell anything about whether the font \verb+FontID+ incorporates a character definition for the composite char or not. This can be queried using \precorr \begin{verbatim} int T1_IsInternalChar( int FontID, char char1) \end{verbatim}\index{\verb+T1_IsInternalChar()+}\postcorr It returns $1$ if there exists a CharString for \verb+char1+ and $0$ if not. In the latter case, the application is responsible for the construction of the composite character (see later). \verb+T1_IsInternalChar()+ also might return $-1$ and set \verb+T1_errno+, which indicates that the font in question is not loaded. The information required to construct a composite character is retrieved by calling the function \precorr \begin{verbatim} T1_COMP_CHAR_INFO *T1_GetCompCharData( int FontID, char char1) \end{verbatim}\index{\verb+T1_GetCompCharData()+}\postcorr It returns a pointer to a meaningfully filled struct of type \verb+T1_COMP_CHAR_INFO+ as described above. The composite character and the number of pieces as well as a pointer to the array of type \verb+T1_COMP_PIECE+ are stored in this structure. Once this information is obtained the composite character can be constructed by \begin{itemize} \item placing the accent symbols in a loop that ranges from $1$ to \verb+numPieces+$-1$. In practice this loop will often be executed only once. The initial current point must always be restored. In this loop positioning information is accessed by \verb+ptr->pieces[+$i$\verb+].deltax+ and \verb+ptr->pieces[+$i$\verb+].deltay+, where \verb+ptr+ is the pointer returned by the above function. \item placing the base character (\verb+pieces[0]+), which then also causes the horizontal escapement of the composite character. \end{itemize} In cases where \verb+char1+ is not a composite character, the \verb+compchar+ entry is set to \verb+char1+ itself and \verb+numPieces+ becomes $1$, as would be expected. The \verb+pieces+ pointer is then set to \verb+NULL+. In case of errors, this function returns \verb+NULL+ and \verb+T1_errno+ is setup correspondingly. The pointer returned by this function should always be free'd using \verb+T1_FreeCompCharData()+ in order to avoid memory leaks (see also Section~\ref{deletingdata}). A function that provides the same functionality is \precorr \begin{verbatim} T1_COMP_CHAR_INFO *T1_GetCompCharDataByIndex( int FontID, int index) \end{verbatim}\index{\verb+T1_GetCompCharDataByIndex()+}\postcorr In this case, the information is requested by means of an index \verb+index+ in the AFM composite character data array. This function is thus well-suited for scanning the complete composite character information of a given font in a given encoding. \verb+index+ may, for example, be obtained by a call to \verb+T1_QueryCompCharData()+ as described above. The valid range for \verb+index+ is from $0$ to the value returned by \verb+T1_GetNoCompositeChars()+ minus one. The range of \verb+index+ is validated and in case of an error \verb+T1_errno+ is to \verb+T1ERR_INVALID_PARAMETER+. There may also appear other errors and under any erroneous condition, \verb+NULL+ is returned. The parameter \verb+compchar+ of the \verb+T1_COMP_CHAR_INFO+ structure that is referenced by the returned pointer, bears somewhat more information for this function than in the case of \\ \verb+T1_GetCompCharData()+. As said it contains the index in the encoding vector where the composite glyph is encoded. It may also have the vaue $-1$, which means that the composite character is not encoded. Note that this is not an error condition. \subsubsection{Transparent Handling of Composite Characters and User Extensions} \label{subsubsec:Transparent Handling of Composite Characters and User Extensions}% Aside from the fact that composite character information may be accessed in \tonelib, \tonelib\ can automatically---and completely transparently with respect to the user---compose characters if it finds information on how to do so. To give an instance, let us examine the font ComputerModern Roman (cmr10). Because this font is specially encoded for the use with early (7-bit) \TeX-systems, it does not incorporate a definition for \verb+Adieresis+. The definition simply was not required because \TeX\ itself constructed the composite character by means of its \verb+\accent+-primitive. If a font like cmr10 is reencoded e.g.~to IsoLatin1 encoding, the character ``\"A'' will show up as a blank because there is no definition for \verb+Adieresis+. Now, if the corresponding AFM file is extended with the following lines, it becomes possible to access an \verb+Adieresis+: \begin{verbatim} StartComposites 1 CC Adieresis 2; PCC A 0 0; PCC dieresis 100 200; EndComposites \end{verbatim} This line in an AFM file provides information about how to construct an \verb+Adieresis+ from the \verb+A+ and \verb+dieresis+ glyphs, and \tonelib\ can utilize this information to construct the requested glyph without that this will be be noticed by the user. Composite character are treated just the same way as standard characters. They are cached, they can be scaled, transformed etc. Let us assume that the cache is still empty and a character, identified by its encoding index, now is to be rastered. The following happens in the rastering function: \begin{enumerate} \item \tonelib\ looks up the character's name in the encoding vector and tries to locate the CharString for that character. If this succeeds all works as usual, notwithstanding the fact that there might have been composite character information for that char. This means, font-internal CharString-definitions have highest priority: One cannot, for example, re-define an \verb+Adieresis+ by raising the umlaut ``\"{ }'' via a composite character definition, if \verb+Adieresis+ is defined internally. \item However, if the CharString is not found, composite character information is examined and if possible, elementary units are used to construct the requested composite character by concatenating paths. \end{enumerate} In any case, the resulting character is put into the cache and is from then on available as any other character. If pieces of a composite character are not found in the CharStrings dictionary, those pieces are substituted by \verb+.notdef+, so that for extreme cases the whole composite character might be substituted by a \verb+.notdef+. Then, an appropriate message is put into the log file with priority \verb+T1LOG_WARNING+ and \verb+T1_errno+ is set to \verb+T1ERR_COMPOSITE_CHAR+. In the same way \tonelib\ composes characters without user intervention, the functions for character metrics are aware of composite character information and the returned result are also valid for those functions. \subsubsection{Caveats} \label{subsubsec:Caveats}% Although handling of composite character is widely automated, problems may arise. Most importantly it is the responsibility of the user to take care that font file and AFM file provide consistent data. Alas, this is not always true for existing font and AFM files. If, for example, an AFM file is extended by composite character definitions and these composite character definitions reference symbols that are not defined in the CharsStrings dictionary, errors will result. If composite character information is added to an AFM file, the following rules have to be respected: \begin{itemize} \item The name of the composite character has to be encoded because it could not be accessed otherwise. Furthermore, no internal definition in the CharStrings dictionary may exist because this would override the composite character definition from the AFM file. \item The user should verify that all components of a composite character definition have entries in the CharStrings dictionary. This can be checked for example by using\\ \verb+T1_GetAllCharNames()+ or by disassembling the font file. \item Even being more restrictive, the user should take care that all pieces of a composite character are encoded. For \tonelib\, this is really irrelevant because, internally, characters may be accessed by the name of their CharString. This means \tonelib\ simultaneously has access to all characters defined in a font. However, an application that exports PostScript files can only access character definitions via their position in the encoding vector. Composing a character from pieces of different encodings will require two font definitions in a exported PostScript file for typesetting one character, which cannot be termed a clean strategy. \end{itemize} \subsection{Error Handling} \label{errorhandling}% Although every function usually returns meaningful values, there are situations where indicating an error via the return value is not possible. For example, requesting a charspace bounding box from a char of a font which is not loaded will return a bounding box containing all zeroes. This cannot be considered an error-condition since for characters like ``space'' it is correct to return a bounding box containing all zeroes. Furthermore, there's no consistent scheme which value should indicate what type of error. In order to allow a unified error handling in applications, the global variable \verb+T1_errno+ has been introduced. The functionality of \verb+T1_errno+ is analogous to that of the global \verb+errno+ in C programs. \verb+T1_errno+ is once set to 0 when the library is initialized and never reset by any \tonelib-function. It is set to specific values when specific types of errors appear. An application may then act appropriately and reset \verb+T1_errno+. The errors that might appear can be roughly split into three categories as described below. \subsubsection{Type 1 Font File Scan-Errors} These types of errors can only appear at the time a font file is loaded. These kinds of errors are indicated by negative values: \begin{itemize} \item \verb+T1ERR_SCAN_FONT_FORMAT+ (-5): A Multiple Master Font was attempted to be loaded. These are not supported by \tonelib. \item \verb+T1ERR_SCAN_FILE_OPEN_ERR+ (-4): This value indicates that the Type 1 font file could not be opened by the parser. It usually does not mean that the file does not exist because this problem would have shown up at the time the font database had been built. It is more likely a permission problem. Anyhow, the C library variable \verb+errno+ should be examined for getting an idea of what the problem was. \item \verb+T1ERR_SCAN_OUT_OF_MEMORY+ (-3): A Type 1 font program required more than 262144 bytes of VM. This is a limit imposed by \tonelib\ because it usually means there goes something wrong. Typical values of VM consumption are between 30000 and 60000 bytes depending on the fonts' complexity. If this limit really does not suffice the constant \verb+MAXTRIAL+ (defined in \verb+lib/type1/fontfcn.c+) may be set to some larger value. \item \verb+T1ERR_SCAN_ERROR+ (-2): An error occurred during scanning the font file. It usually means that the font file is damaged or does not comply to the conventions of Type 1 font files. For example, an encountered token might have been too long. Another reason could be, a literal name follows a literal name where a number was expected. There is no way to recover from this error. One last resort could be to disassemble the font (e.g., using \verb+t1disasm+ from the \verb+t1utils+ package) and scan the resulting human-readable file for possible violations of the Type 1 font format specifications. However, some knowledge about the format is in force. \item \verb+T1ERR_SCAN_FILE_EOF+ (-1): A premature end of file was encountered during parsing. The file is damaged. \end{itemize} \subsubsection{Path Generation Errors} Small positive number are reserved for errors that might appear during path construction and rasterization. \begin{itemize} \item \verb+T1ERR_PATH_ERROR+ (1): An error occurred during path construction. The font file is most probably damaged. \item \verb+T1ERR_PARSE_ERROR+ (2): This kind of error describes a kind of ``semantic'' error in the font file. A typical candidate for this is a font that does not define a character named \verb+.notdef+, although this is required by the format specification. Since under usual conditions the \verb+.notdef+ character is never accessed, this error would not show up. But if for some reason the \verb+.notdef+ has to be substituted for some other character the problem becomes evident. \item \verb+T1ERR_TYPE1_ABORT+ (3): The \verb+abort()+-function of the rasterizer has been called. This may happen at several places during hinting, converting to edgelists etc. There is a certain chance that unfreed memory has been left. If this error appears and a logfile is used, an error string giving some more info is placed into the logfile. This error should not appear, normally. If it does, either the font file is damaged or the font contains invalid outline descriptions such as unclosed paths. Especially the latter is quite unlikely. Of course this error can be raised, when an outline has been modified manually in an invalid way and is then rastered (see.~\ref{outlinemanipulation}). \end{itemize} \subsubsection{\tonelib-Errors} The remaining types of errors are detected by the management of \tonelib. Their numbering starts with 10 (decimal). The list could be extended in future releases. \begin{itemize} \item \verb+T1ERR_INVALID_FONTID+ (10): An invalid font ID has been specified. The exact meaning of this error depends on the specific situation, in any case the operation requested cannot be realized with the identified font. Possible reasons are: \begin{itemize} \item The font ID points to a font which is not loaded and which must be loaded in order to perform the operation. \item The specified font ID is a number which is generally out of the range of the valid font IDs, either because it is $<0$ or because it is $>$ the value of \verb+no_fonts+. \item The library is not yet initialized so that no font ID at all is valid. \end{itemize} \item \verb+T1ERR_INVALID_PARAMETER+ (11): One or more of the parameters specified to a function call were assigned invalid values. For example, a size-value specified to a rastering function must always be $>0$. Just the same way, \verb+T1_ConcatGlyphs()+ cannot concatenate two glyphs if one of them is the \verb+NULL+ pointer. \item \verb+T1ERR_OP_NOT_PERMITTED+ (12): An operation that was not allowed {\em at that time} has been requested. This error could result, for example, if an application tries to set a new bitmap padding value after \tonelib\ has been initialized. \item \verb+T1ERR_ALLOC_MEM+ (13): This error indicates that \tonelib\ ran out of memory and a memory allocation failed. This error should not appear. \item \verb+T1ERR_FILE_OPEN_ERR+ (14): A file that was needed could not be opened by \tonelib. The file might have been necessary for reading data or writing data. For example, \verb+T1_WriteAFMFallbackFile()+ returns this value if the AFM file could not be opened for writing and \verb+T1_LoadEncoding()+ returns it if the encoding file specified as argument could not be opened. Notice that there is no indication of the reason why the file opening failed. The C library variable \verb+errno+ should be examined to analyze this further. It should be mentioned that \verb+T1ERR_FILE_OPEN_ERR+ is only set if a file operation failed which was really in force. This means that at the time a font is loaded a missing AFM file does not cause \verb+T1_errno+ caused to be set to \verb+T1ERR_FILE_OPEN_ERR+. This is because \tonelib\ can automatically recover from this by generating AFM information on the fly (at the cost of computation time). \item \verb+T1ERR_UNSPECIFIED+ (15): This value indicates nothing apart from that an error occurred and this error was not one the other errors. It can be considered a fallback. \item \verb+T1ERR_NO_AFM_DATA+ (16): A function has been called which needs AFM information and AFM information is not available, either because all attempts to generate AFM data failed or because the flag \verb+T1_NO_AFM+ has been specified as part of the flag for \verb+T1_InitLib()+. \item \verb+T1ERR_X11+ (17): An error in an X11 library function occured. This could be caused by calling a function of the X11 interface without prior initialization of the X11 interface via \verb+T1_SetX11Params()+. \item \verb+T1ERR_COMPOSITE_CHAR+ (18): A request to compose a composite character could not be fulfilled without problems because at least one part of the composite character was not found in the \verb+CharStrings+ dictionary. This is bad because it indicates that font file and AFM file do match. Further errors or unsatisfactory rastering results have to be expected. \item \verb+T1ERR_SCAN_ENCODING+ (19): Scanning an encoding file failed. Since \tonelib\ uses a fallback approach---DVIPS-encoding is tried first and afterwards \tonelib-encoding---it is not clear at which place exactly a failure occured. However, further hints about what \tonelib\ thought about the file in question may be found in the log file. \end{itemize} In analogy to the Standard C Library function \verb+strerror()+, \tonelib\ provides the function \precorr \begin{verbatim} const char *T1_StrError( int t1err) \end{verbatim}\index{\verb+T1_StrError()+}\postcorr It returns a pointer to a string describing the error corresponding to \verb+t1err+. Usually, the argument should be directly specified as \verb+T1_errno+. The memory where the returned string is stored is static in \tonelib\ so that it may not be \verb+free()+'d. \subsection{Other Useful Functions} \label{otherfunctions}% This subsection describes a few functions that had not been described up to now but which however could be useful. \precorr \begin{verbatim} int T1_CheckEndian( void) \end{verbatim}\index{\verb+T1_CheckEndian()+}\postcorr This function may be used to check the endianess of the hardware \tonelib\ is running on. The return value is \verb+0+ for Little Endian and \verb+1+ for Big Endian machines. \precorr \begin{verbatim} void T1_DumpGlyph( GLYPH *glyph) \end{verbatim}\index{\verb+T1_DumpGlyph()+}\postcorr This function might be useful for debugging and testing \tonelib. It dumps an ASCII representation of the glyph pointed to by \verb+glyph+ to the standard output. A background pixel is represented by \verb+.+ while a foreground pixel is represented by \verb+X+. After the number of bits that correspond to the current padding value, an empty column is inserted. See the output of the programming example in \ref{programmingexample}. In this case the padding values has been 16. Note that the size of the glyph should be small enough that its padded width does not exceed the terminals line width. Otherwise the result might become illegible. \precorr \begin{verbatim} void T1_DumpPath( T1_OUTLINE *path) \end{verbatim}\index{\verb+T1_DumpPath()+}\postcorr This function dumps a description of an outline to the standard output. It is exclusively intended for debugging purposes. \precorr \begin{verbatim} void T1_SetRasterFlags( int flags) \end{verbatim}\index{\verb+T1_SetRasterFlags()+}\postcorr This function allows to enable or disable certain features of the rasterizer. Let me emphasize that this is exclusively intended for debugging and error tracking. The default value of \verb+flags+ is 0 which means that no debugging output is shown and hinting is performed as suggested in the {\em Adobe Type Font Format}. However there may arise situations where fiddling with the \verb+flags+ might be helpful in rasterizer and font debugging. \verb+flags+ usually is an OR'ed combination of the following definitions: \begin{itemize} \item \verb+T1_IGNORE_FORCEBOLD+ \item \verb+T1_IGNORE_FAMILYALIGNMENT+ \item \verb+T1_IGNORE_HINTING+ \item \verb+T1_DEBUG_LINE+ \item \verb+T1_DEBUG_REGION+ \item \verb+T1_DEBUG_PATH+ \item \verb+T1_DEBUG_FONT+ \item \verb+T1_DEBUG_HINT+ \end{itemize} The \verb+T1_IGNORE_...+ types allow to selectively disable hinting. They might be useful if parts of a font are not properly rendered. For example, substituting a font's alignment zones by the family's alignment zones might result in visual artifacts if the values for \verb+FamilyBlues+ are not correct. Disabling family alignment might reveal the problem in such cases. The \verb+T1_DEBUG_...+ types produce debugging output from the intermediate rasterizing steps. Notice that to understand this output a thorough understanding of what happens in the rasterizer is in force. Moreover, be prepared that thousands of lines might be written to the terminal, depending on the particular option. %%% Local Variables: %%% mode: latex %%% TeX-master: "t1lib_doc" %%% End: t1lib-5.1.2/doc/intro.tex0000644000175000001440000002534210733501626013714 0ustar rmzusers%---------------------------------------------------------------------------- % ----- File: intro.tex % ----- Author: Rainer Menzner (Rainer.Menzner@web.de) % ----- Date: 2001-06-03 % ----- Description: This file is part of the t1lib-documentation. % ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001. % As of version 0.5, t1lib is distributed under the % GNU General Public Library License. The % conditions can be found in the files LICENSE and % LGPL, which should reside in the toplevel % directory of the distribution. Please note that % there are parts of t1lib that are subject to % other licenses: % The parseAFM-package is copyrighted by Adobe Systems % Inc. % The type1 rasterizer is copyrighted by IBM and the % X11-consortium. % ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) % ----- Credits: I want to thank IBM and the X11-consortium for making % their rasterizer freely available. % Also thanks to Piet Tutelaers for his ps2pk, from % which I took the rasterizer sources in a format % independent from X11. % Thanks to all people who make free software living! %---------------------------------------------------------------------------- \newpage \section{Introduction} \subsection{What Does \tonelib\ Do?} \tonelib\ is a library written in the C programming language allowing a programmer to generate bitmaps from Adobe (TM) Type 1 fonts quite easily. These bitmaps are returned in a data structure with type {\ttfamily GLYPH}. This special {\ttfamily GLYPH}-type is also used in the X11 window system to describe character bitmaps. It contains the bitmap data as well as some metric information. But \tonelib\ is in itself entirely independent of the X11-system or any other graphical user interface. Given that the X11-system is probably the most frequently used window system in the UNIX-world, and furthermore assuming that most graphical applications run under window systems, it appears that \tonelib\ implements functionality already provided by the graphical user interface, the X11-system. Thus the question arises: Why not use X11 directly for rastering characters? Well, the answer is quite simple; the X11 Font machinery appears to be too {\em static} in order to use it for certain purposes. Moreover X11-calculations and positioning of characters are based on bitmap dimensions and are thus subject to error accumulation. Here is a list of features which are supported in the current release of \tonelib. \begin{itemize} \item Rasterizing is done as characters get requested. The X11-server, in contrast, rasters a font completely at a given size when it is loaded. {\em Rastering on demand} saves time when the font is loaded the first time and saves memory since often only the alphabetic letters and a few other characters are needed. \item The encoding mechanism of PostScript is fully supported. The user may use the fonts' internal or some other encoding. Additional encoding files can be loaded at runtime and fonts can be reencoded at runtime. The syntax of encoding files is straight-forward and simple. \item The library makes use of Adobe Font Metric data in the form of AFM files. This may seem a disadvantage, but in order to make decent typesetting possible, some more information than that contained in Type 1 font files is needed. Besides, Adobe makes these AFM files freely available on their ftp-server for all registered Type 1 fonts. \item In case AFM files are missing, \tonelib\ is able to generate metrics information in charspace accuracy by rastering each character at 1000~bp. \item In addition to generation of character bitmaps, there is a way to directly raster strings of any length in a given font. The space-width may explicitly be corrected by the user. This may be needed by word processing applications. \item Strings may be rastered optionally using pairwise kerning information from the AFM file. Kerning is an important feature of good quality typesetting. Kerning information can also be requested by the user without rasterization. \item Ligature information is made available to the user in an efficient way. Use of Ligatures is another characteristic of good typesetting. As to my knowledge, only \TeX\ and all related macro-packages are able to handle ligatures in a natural and efficient way. \item Rotation and arbitrary transformation on the fly is supported. \item \tonelib\ supports antialiasing. In this case, a pixel is represented as a byte, word or double word. Antialiasing is implemented by subsampling with factor 2 or 4 alternatively. If you use the X11-interface introduced in \tonelib\ V.\ 0.3-beta, even colored antialiasing between any pair of colors is provided in a completely transparent way. \item In addition to transformation on the fly, two transformation types---{\em slanting} and {\em extending}---are possible on the fontlevel including bitmap caching. Horizontal expansion of fonts is fully supported and since version 0.3-beta also {\em slanting} of fonts is nearly fully supported. For restrictions and drawbacks of slanting fonts see \ref{transformations} on page \pageref{transformations}. \item Paths, the library searches for the different needed file types are specified at runtime by means of a configuration file. They may thus be changed without needing to recompile the application. For example, the directories of the X11-system's Type 1 font files may be specified there in order to use these fonts with the library. A user may have his own configuration file and as a fallback/default there is a system wide configuration file. This should be setup when the library is installed. \item Since of version 0.3-beta a special set of functions is provided which implements a more comfortable X11-interface. This is due to the fact that X11 is the only standard window system in the UNIX world. However, as before \tonelib\ may be compiled and used without even having X11 installed. \item Some decorations like {\em underlining} are supported by simply setting a flag for the rastering functions. \item {\em Right To Left} typesetting is supported. \item Font subsetting is easily achieved using a high level function. This makes it easier for application to efficiently export Postscript files. \item Composite character information can be retrieved. Moreover, \tonelib\ transparently handles and realizes composite character definitions from AFM files. \end{itemize} There are also some problems and features not yet implemented, but likely to be implemented in the future. The main problem up to now is: \begin{itemize} \item The font cache isn't a font cache really. At this time all bitmaps are saved by always allocating more memory from the system. No automatic removal of bitmaps no longer needed is done. However, the user has the possibility of explicitly removing data, if he thinks it is not needed anymore. \end{itemize} \subsection{Copyrights and Credits} There are some copyrights on parts of the library and there are some programmers (or corporations) which I want to give credit. The library uses: \begin{itemize} \item[--] all internal parts of the X11-rasterizer donated to the X11-project by IBM. This rasterizer does the {\em real} hard work of scan-conversion. \item[--] the modifications to the rasterizer done by Piet Tutelaers in his ps2pk-package. The main purpose was decoupling the sources from the X11-system sources. \item[--] the \verb+parse_AFM+ software which was made freely available by Adobe. This is used to parse the AFM files (what a surprise) and to generate the data structures the information is saved in. \end{itemize} Raph Levien (\verb+raph@acm.org+) contributed an algorithm for sampling down non-antialiased bitmaps to antialiased bitmaps in a very efficient manor. This makes antialiasing a lot faster. Fred L.\ Drake, Jr. (\verb+fdrake@acm.org+) wrote a Python interface to \tonelib, which is distributed with \tonelib. This wrapper is called \verb+t1python+ and allows Python-programmers to use Type 1 fonts. I can not tell anything more on this topic since I do not know the Python language. All questions concerning the Python interface should thus be addressed to Fred L.\ Drake, Jr. Evgeny Stambulchik (\verb+fnevgeny@plasma-gate.weizmann.ac.il+), maintainer of the \verb+grace+-project---a descendent of \verb+xmgr+, never gets tired of finding and reporting (and fixing) bugs in \tonelib. Other members of this project spent time in porting \tonelib\ to further systems: \begin{itemize} \item Ed Vigmond (\verb+vigmonde@IGB.UMontreal.CA+): IRIX-port, \item John Hasstedt (\verb+John.Hasstedt@sunysb.edu+): VMS-port, \item Alexander Mai (\verb+st002279@hrzpub.tu-darmstadt.de+): OS/2-port. \end{itemize} Hirotsugo Kakugawa (\verb+h.kakugawa@computer.org+) added support for GNU \verb+libtool+ to \tonelib. David Huggins-Daines (\verb+bn711@freenet.carleton.ca+) spent effort in finding memory leaks and maintains a Debian-package of \tonelib. \begin{center} \Large Thanks to all these people \\ and to all those contributors not mentioned here! \end{center} \subsection{Motivation} The idea of writing this library was due to the SciTeXt-project which was founded in 1996. They needed a font raster system with some more functionality than X11 provided. You may find that some things (for example the format of the font database file) is really closely related to SciTeXt. In February '{}97 the SciTeXt developers decided to migrate from C to Java and did not need a font rasterizer any more. Since I thought there could be other applications for this library I continued the work on it and voila. I have removed the history description which followed at this place in some previous versions. The history can be roughly viewed in the file \verb+Changes+ which is located in the toplevel directory of the distribution. \subsection{How to Reach the Author/How to Get \tonelib} If you have questions, comments or bug reports, you can reach me by eMail. The address is \begin{center} \verb+Rainer.Menzner@web.de+ \end{center} If you have bug-reports, it would be best if you could reproduce the error using the test program \verb+xglyph+ (see \ref{xglyph}). \tonelib\ is available by anonymous ftp as\\[5mm] \verb+ftp://sunsite.unc.edu/pub/Linux/libs/graphics/t1lib-+$x.y[.z]$\verb+.tar.gz+ \\[5mm] Here, $x.y.z$ is the version identifier and the brackets around $z$ indicate that this entry is optional. %%% Local Variables: %%% mode: latex %%% TeX-master: "t1lib_doc" %%% End: t1lib-5.1.2/doc/t1lib_doc.pdf0000644000175000001440000300036610733501626014374 0ustar rmzusers%PDF-1.2 6 0 obj << /S /GoTo /D (section.1) >> endobj 8 0 obj (Introduction) endobj 10 0 obj << /S /GoTo /D (subsection.1.1) >> endobj 12 0 obj (What Does t1lib Do?) endobj 14 0 obj << /S /GoTo /D (subsection.1.2) >> endobj 16 0 obj (Copyrights and Credits) endobj 18 0 obj << /S /GoTo /D (subsection.1.3) >> endobj 20 0 obj (Motivation) endobj 22 0 obj << /S /GoTo /D (subsection.1.4) >> endobj 24 0 obj (How to Reach the Author/How to Get t1lib) endobj 26 0 obj << /S /GoTo /D (section.2) >> endobj 28 0 obj (Getting Started) endobj 30 0 obj << /S /GoTo /D (subsection.2.1) >> endobj 32 0 obj (Building, Installing and Removing the t1lib-Package) endobj 34 0 obj << /S /GoTo /D (subsection.2.2) >> endobj 36 0 obj (Notes on Using GNU libtool) endobj 38 0 obj << /S /GoTo /D (subsection.2.3) >> endobj 40 0 obj (Runtime-Setup) endobj 42 0 obj << /S /GoTo /D (subsubsection.2.3.1) >> endobj 44 0 obj (Searchpath and Environment Setup) endobj 46 0 obj << /S /GoTo /D (subsubsection.2.3.2) >> endobj 48 0 obj (The t1lib Configuration File) endobj 50 0 obj << /S /GoTo /D (subsubsection.2.3.3) >> endobj 52 0 obj (The Font Database File) endobj 54 0 obj << /S /GoTo /D (subsubsection.2.3.4) >> endobj 56 0 obj (Alternative Runtime Setups) endobj 58 0 obj << /S /GoTo /D (subsection.2.4) >> endobj 60 0 obj (A Very Simple Programming Example) endobj 62 0 obj << /S /GoTo /D (section.3) >> endobj 64 0 obj (The Program xglyph) endobj 66 0 obj << /S /GoTo /D (subsection.3.1) >> endobj 68 0 obj (Common Parameter Dialogs and Toggle Buttons) endobj 70 0 obj << /S /GoTo /D (subsection.3.2) >> endobj 72 0 obj (Buttons that Influence the X11 Rastering Functions) endobj 74 0 obj << /S /GoTo /D (subsection.3.3) >> endobj 76 0 obj (Buttons that Generate Actions) endobj 78 0 obj << /S /GoTo /D (subsection.3.4) >> endobj 80 0 obj (The Message Window) endobj 82 0 obj << /S /GoTo /D (subsection.3.5) >> endobj 84 0 obj (The Output Window) endobj 86 0 obj << /S /GoTo /D (subsection.3.6) >> endobj 88 0 obj (xglyph Commandline Parameters) endobj 90 0 obj << /S /GoTo /D (subsection.3.7) >> endobj 92 0 obj (Fonts Included in the t1lib-Package) endobj 94 0 obj << /S /GoTo /D (subsection.3.8) >> endobj 96 0 obj (Some General Remarks on xglyph) endobj 98 0 obj << /S /GoTo /D (section.4) >> endobj 100 0 obj (The Program type1afm) endobj 102 0 obj << /S /GoTo /D (section.5) >> endobj 104 0 obj (Using t1lib) endobj 106 0 obj << /S /GoTo /D (subsection.5.1) >> endobj 108 0 obj (Compiling and Linking t1lib-Programs) endobj 110 0 obj << /S /GoTo /D (subsection.5.2) >> endobj 112 0 obj (Querying and Setting Fundamental Configuration Parameters of t1lib) endobj 114 0 obj << /S /GoTo /D (subsection.5.3) >> endobj 116 0 obj (Initialization of t1lib and Related Things) endobj 118 0 obj << /S /GoTo /D (subsubsection.5.3.1) >> endobj 120 0 obj (Standard Initialization) endobj 122 0 obj << /S /GoTo /D (subsubsection.5.3.2) >> endobj 124 0 obj (Fine Control over Font Databases and File Search Paths) endobj 126 0 obj << /S /GoTo /D (subsubsection.5.3.3) >> endobj 128 0 obj (Adding Fonts to the Database) endobj 130 0 obj << /S /GoTo /D (subsubsection.5.3.4) >> endobj 132 0 obj (Summary of Search Path Handling) endobj 134 0 obj << /S /GoTo /D (subsubsection.5.3.5) >> endobj 136 0 obj (Bypassing the t1lib File Search Machinery) endobj 138 0 obj << /S /GoTo /D (subsection.5.4) >> endobj 140 0 obj (The t1lib-Logfile) endobj 142 0 obj << /S /GoTo /D (subsection.5.5) >> endobj 144 0 obj (Generating Bitmaps) endobj 146 0 obj << /S /GoTo /D (subsection.5.6) >> endobj 148 0 obj (Loading Fonts Explicitly) endobj 150 0 obj << /S /GoTo /D (subsection.5.7) >> endobj 152 0 obj (Functions for Encoding Handling) endobj 154 0 obj << /S /GoTo /D (subsection.5.8) >> endobj 156 0 obj (Deleting Data) endobj 158 0 obj << /S /GoTo /D (subsection.5.9) >> endobj 160 0 obj (Underlining, Overlining and Overstriking) endobj 162 0 obj << /S /GoTo /D (subsection.5.10) >> endobj 164 0 obj (Common Information on Fonts and Characters) endobj 166 0 obj << /S /GoTo /D (subsubsection.5.10.1) >> endobj 168 0 obj (Information from FontInfo-Dictionary) endobj 170 0 obj << /S /GoTo /D (subsubsection.5.10.2) >> endobj 172 0 obj (Metric Information on Glyphs) endobj 174 0 obj << /S /GoTo /D (subsubsection.5.10.3) >> endobj 176 0 obj (Character-Encoding Relation) endobj 178 0 obj << /S /GoTo /D (subsubsection.5.10.4) >> endobj 180 0 obj (Administrative Information) endobj 182 0 obj << /S /GoTo /D (subsection.5.11) >> endobj 184 0 obj (Transformation of Fonts) endobj 186 0 obj << /S /GoTo /D (subsubsection.5.11.1) >> endobj 188 0 obj (Fontlevel Transformations) endobj 190 0 obj << /S /GoTo /D (subsubsection.5.11.2) >> endobj 192 0 obj (Transformation at Rastering Time) endobj 194 0 obj << /S /GoTo /D (subsubsection.5.11.3) >> endobj 196 0 obj (t1lib and PostScript: Notes on Transformation Matrices) endobj 198 0 obj << /S /GoTo /D (subsection.5.12) >> endobj 200 0 obj (Stroking of Character Outlines) endobj 202 0 obj << /S /GoTo /D (subsection.5.13) >> endobj 204 0 obj (Antialiasing) endobj 206 0 obj << /S /GoTo /D (subsubsection.5.13.1) >> endobj 208 0 obj (General Description) endobj 210 0 obj << /S /GoTo /D (subsubsection.5.13.2) >> endobj 212 0 obj (Setting Operating Parameters) endobj 214 0 obj << /S /GoTo /D (subsubsection.5.13.3) >> endobj 216 0 obj (Smart Antialiasing) endobj 218 0 obj << /S /GoTo /D (subsubsection.5.13.4) >> endobj 220 0 obj (Caching of Antialiased Character Glyphs) endobj 222 0 obj << /S /GoTo /D (subsection.5.14) >> endobj 224 0 obj (Interface to Outlines) endobj 226 0 obj << /S /GoTo /D (subsubsection.5.14.1) >> endobj 228 0 obj (Outline Format) endobj 230 0 obj << /S /GoTo /D (subsubsection.5.14.2) >> endobj 232 0 obj (Using Outlines) endobj 234 0 obj << /S /GoTo /D (subsubsection.5.14.3) >> endobj 236 0 obj (Manipulation of Outlines) endobj 238 0 obj << /S /GoTo /D (subsection.5.15) >> endobj 240 0 obj (Logical Fonts) endobj 242 0 obj << /S /GoTo /D (subsection.5.16) >> endobj 244 0 obj (Missing or Invalid AFM Files) endobj 246 0 obj << /S /GoTo /D (subsubsection.5.16.1) >> endobj 248 0 obj (Remarks on AFM Files) endobj 250 0 obj << /S /GoTo /D (subsubsection.5.16.2) >> endobj 252 0 obj (Generation of AFM Information) endobj 254 0 obj << /S /GoTo /D (subsubsection.5.16.3) >> endobj 256 0 obj (Writing AFM Files) endobj 258 0 obj << /S /GoTo /D (subsection.5.17) >> endobj 260 0 obj (Font Subsetting) endobj 262 0 obj << /S /GoTo /D (subsubsection.5.17.1) >> endobj 264 0 obj (Font File Organization and Subsetting) endobj 266 0 obj << /S /GoTo /D (subsubsection.5.17.2) >> endobj 268 0 obj (Functions for Subsetting) endobj 270 0 obj << /S /GoTo /D (subsubsection.5.17.3) >> endobj 272 0 obj (Further Functions for Subsetting) endobj 274 0 obj << /S /GoTo /D (subsection.5.18) >> endobj 276 0 obj (Composite Characters) endobj 278 0 obj << /S /GoTo /D (subsubsection.5.18.1) >> endobj 280 0 obj (General remarks) endobj 282 0 obj << /S /GoTo /D (subsubsection.5.18.2) >> endobj 284 0 obj (Accessing Composite Character Data) endobj 286 0 obj << /S /GoTo /D (subsubsection.5.18.3) >> endobj 288 0 obj (Transparent Handling of Composite Characters and User Extensions) endobj 290 0 obj << /S /GoTo /D (subsubsection.5.18.4) >> endobj 292 0 obj (Caveats) endobj 294 0 obj << /S /GoTo /D (subsection.5.19) >> endobj 296 0 obj (Error Handling) endobj 298 0 obj << /S /GoTo /D (subsubsection.5.19.1) >> endobj 300 0 obj (Type 1 Font File Scan-Errors) endobj 302 0 obj << /S /GoTo /D (subsubsection.5.19.2) >> endobj 304 0 obj (Path Generation Errors) endobj 306 0 obj << /S /GoTo /D (subsubsection.5.19.3) >> endobj 308 0 obj (t1lib-Errors) endobj 310 0 obj << /S /GoTo /D (subsection.5.20) >> endobj 312 0 obj (Other Useful Functions) endobj 314 0 obj << /S /GoTo /D (section.6) >> endobj 316 0 obj (The X11-Interface) endobj 318 0 obj << /S /GoTo /D (subsection.6.1) >> endobj 320 0 obj (Why a Special X11-Interface?) endobj 322 0 obj << /S /GoTo /D (subsection.6.2) >> endobj 324 0 obj (Initialization of the X11-Interface) endobj 326 0 obj << /S /GoTo /D (subsection.6.3) >> endobj 328 0 obj (Rastering Functions) endobj 330 0 obj << /S /GoTo /D (subsection.6.4) >> endobj 332 0 obj (Creating XPM-Files from t1lib-Glyphs) endobj 334 0 obj << /S /GoTo /D (subsection.6.5) >> endobj 336 0 obj (Limits of the X11 Interface) endobj 338 0 obj << /S /GoTo /D (section.7) >> endobj 340 0 obj (Internals \(incomplete\)) endobj 342 0 obj << /S /GoTo /D (subsection.7.1) >> endobj 344 0 obj (Level 0: Global Data) endobj 346 0 obj << /S /GoTo /D (subsection.7.2) >> endobj 348 0 obj (Level 1: Size-Independent Font Data) endobj 350 0 obj << /S /GoTo /D (subsection.7.3) >> endobj 352 0 obj (Level 2: Size-Dependent Font Data) endobj 354 0 obj << /S /GoTo /D (section.8) >> endobj 356 0 obj (Stroked Characters) endobj 358 0 obj << /S /GoTo /D (subsection.8.1) >> endobj 360 0 obj (Approach) endobj 362 0 obj << /S /GoTo /D (subsection.8.2) >> endobj 364 0 obj (Computation of Parallel Paths) endobj 366 0 obj << /S /GoTo /D (subsection.8.3) >> endobj 368 0 obj (Connection of Path Segments and Prolongation) endobj 370 0 obj << /S /GoTo /D (equation.20) >> endobj 372 0 obj (Function Index) endobj 374 0 obj << /S /GoTo /D [373 0 R /Fit ] >> endobj 378 0 obj << /Length 379 0 R /Filter /FlateDecode >> stream xÚ¥R;OÃ0Þû+<:Rsõ_ÉØ"ŠtA bHÛ"”¤J³þ<ç8€y¸‡¿ï»‡BñAáIøÌùL욊x^ćwùˆ4Vƒ5!ú˜’& ²"Õ2gÆÿ¢¡Hå"õrEAbUÌkÌð™Åa„ûYàm½M‹ëÅšXÆ€6.ܧ–ÀêÐOzÄÞ'ɪ?Õ]›¤š¼´€ ‚kå[0NnÊz=Ìæñ†”²S-С `ƵH¤¼A§ÜX`É o%wÔ—ý9Zº>:WU[õåP·OAMhð–ÙZáwì‹ç²/wC5áWõДÇÓ¤ÒwÍHã0wßxË}·e”’UÀ:Y$åùÈÆ”•Í:Éäá5Éá4Íd¾,w¥4‹{d¢ø]Y·±£\nªö5Lœ]Ÿï…¹T^¤Ž‚Ô¿?Ó;˜@“‡endstream endobj 379 0 obj 339 endobj 373 0 obj << /Type /Page /Contents 378 0 R /Resources 377 0 R /MediaBox [0 0 595.273 841.887] /Parent 383 0 R >> endobj 1 0 obj << /Type /Encoding /Differences [ 24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39 /quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron 164 /currency 166 /brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior /ordmasculine 188 /onequarter /onehalf /threequarters 192 /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 ] >> endobj 2 0 obj << /Type /Font /Subtype /Type1 /Name /ZaDb /BaseFont /ZapfDingbats >> endobj 3 0 obj << /Type /Font /Subtype /Type1 /Name /Helv /BaseFont /Helvetica /Encoding 1 0 R >> endobj 4 0 obj << /Fields [] /DR << /Font << /ZaDb 2 0 R /Helv 3 0 R >> >> /DA (/Helv 10 Tf 0 g ) /NeedAppearances true >> endobj 376 0 obj << /D [373 0 R /XYZ 72 786.278 null] >> endobj 375 0 obj << /D [373 0 R /XYZ 72 761.372 null] >> endobj 377 0 obj << /Font << /F19 380 0 R /F21 381 0 R /F23 380 0 R /F24 382 0 R >> /ProcSet [ /PDF /Text ] >> endobj 388 0 obj << /Length 389 0 R /Filter /FlateDecode >> stream xÚí\]sÛ¸}ϯУ4Sa‰oà©c;qÖÝd7ngÚ>p%ZâX"=•ûë{I4MÀM»¦ek2ë¢܃{Ï=÷BxäÁ?<’d$•@DªÑlýÌ¿«QùèxÍŒdœ"βg;NË‘SÊ‘<|ñî§SÂG˜!ÊÄèâ2{1ÿ×ø$Ž&”ŒÓÀüÙLþsñ·w.ª«y£)aˆñüþÌ |mùè—âÒb„=¤=]¿4žL5áã3så$žLáï|;KCøÎÆ×(Ž8Ñ»'GF’™q÷3k^~Êh6HŒ¦Ö†·Îs×\Ì{„Œ_ú)Ì„Òñ{˜‘ã _3¸Yûœ"ˆKQ|8Å«ð3èÎÅ)ÓbÐûø¯Í»Æ”"©ÔîUáˆz¸¶(Î) É”{^íÓÚ~ñ‘ï zéÆòM üþå»­,qجËÞ£aØÌ9Θî4Rí$¾ž5¾IÂÅrBt¶7vlìGóì H‚yhïXLbŠï¾YŒ‘W¢ë`óòP×Ä‹bsÜ/|@¼Ð/Ÿã4ü>áb컬”ˆ`Òð â-ƒâÁ—n,4e™%Y‰QÄ ýgNçOãjÒØDº¯?›@¨[š§é20޶é2N~Ê>£›Ÿù¤Ž¸Hà¥ÍÀxg2‚˜èÀÒd_¢^ÓG?€Åz^”´°/Ÿ#†ÏaÓ0Z€•Ÿ§~’sk~E”wˆAÙnÑx'¡“í„®äIÅ获áj3ú‹ «gÑ&õW+3Ex^ÅÛ¯Á:ÎvÁ÷â-³\Ljc¾ƒüä¤dˆÓ/Ù®3›ì*÷á‹ÀO),w¯©FZ‹—àÁ-bw†{ÅW9˜g$û5Nƒ‚‚AxÍíÿmSAáã¯ßPÀ€R\Y€ÆñÊZé!B:– 7˜›Èç°W´ìõ$Àá}pSò²¯Û(§ïá:˜žéöºyKZ"OtHìÐu}ÈòJ¤áìyƒ ØI>ÆãÐ<4aá5ð“Y–×~º¼èøCŽ«ïaGëÀ`̸''ʈ3 ¬S@÷ fM‡ª=ˆ”zÿÌN ³_8y—ÀiM‰ÞŠ{ÿö0[l“:ðø4\vHrÙEiÂø¡æj,¹ê=(ph 8¹ 8¨œ¦€ë(ÕJ?õÿð7åû.0Õíž%ÒB¾†@ômˆ±ö Ò’[c;;ÊÇ<6X£U$‘Ÿ‰D* ÔÈI-vØš¢PÝ4E–'e¯£XnB"©ž OeJ‘çȸ„LÉyv®¯W…°ó%‰‰¿^WIð‡~þ®E*DZÕE«yèÚw\4ç½öù· ôGÂ%G?\É¡FÉ1ÑBUævpÍV¸øØÅêæziÝ6Qí‚gÅÆÁ›1Nvi=˜ÛbL4ÃOoèÓJì9‰×kÃ„ØØˆ.0ñzöÁ!Cú&U€ë<.%>C†WekÏÚO®nëÚXqŽXž³´hJ#å‘.ÔYHýêŠØN}P=7VÛßÃú©BéÍu€ý˵³ÝCwH§¨çÝli?¢¶.ļ¼×¥÷”¹™²éãpTÜ0RUƒ¶³YMyˆ{]æ(<ÄÔî9²§×¾x]ûº­Æ&:þFWîÀTÁ 臅[!Á®¥º”—<®ö9X”…Û‡»6\èà•‚ö÷mÜØýpçU# `¨Çæ~ÞŠ¦ 0ÎtƒÜšàsé Í›ÙYÛ¤Nº0a? ?iVz0ýAÍËûX·”Ì΢0 ýUøßÊ>Äm ]4*u>ÔRë\ù©¡±Y•`cû¢ Sï4¤¦b/9„Õ§ôŒõêS!b¸¢2¯7(¥`b?™›mÝ€’¥-Ãçî"’(Ìßh§#E„‘}DDÙ»tZ)'E*›ÄE(È|Ïþ+Ëm§yaÍÕ¦Ò,Áå +¦NmzâªÓ_2EÎO—–C¡G^—C…Àfñÿ_”kv}šÓ~––ÃZºl6:šÏ+Rà.ʃ U]­ê@²ê.º]¶èÀÚ>t=,Êæ¢óízí—$Àê;UÕvªW}¬?¹sáÒ›:ñÁ“¿u0°ýyaÿã›k³Ùq0g-ÈŠ?„@Zn¿ÓçâH„À£\I)é‚!öÏY-°%H¯Âõ†Ì ëÕWL>øœÔ§x‘e“ŽæUšWáÊUéÕVï둨—…î…7<`J[Vo‹vЇéÚwtµÀL§?¦ìP´}ò¢-%Cú&Q€åSìßá±ô¥ã?®Wá,LW7®f)%;%B³7ìr¬^9Õ^¼nŒ2w µU'`Ž’Ë8)OeÍÌïÂÜ‚ê>¦‹$S‚vëžf‡"þNpè!ÁQZß«àVÏ’^Wê/:y ÂÎÃkõ”hXº^]¬  !]@è[4ðåàño…lf^lbÊ77i^¹2jà9‚ŠNÜXªýt4O—R3:$°3jœS8‹ º¬ë器Vt»ËVª¢îÉÒOü™«wŒ°¬viÖ` ¿tÅqRê~?úņÔRà5<™ æ0÷e¯mƒgæïÜ„ø g¿ ש%Gk¹§?£#E;o16cóž¶&ÆÖŸðÙ³òDÊ=ÛücÖrå8® d ßøUœ½{òÆ<&ÞðÔ€ rÕÓ"yPµä!¯œ»ª©’uK2‘Ìï0¿Øü̘ÿh¾Vä­q6»î¬('ÚëÄ·ÆÇLú-ï·Ã òxvÐ0#{ùùÒÄ6Ípéây– å!.y§ßËÓê B= Åñ#»tÉhJÒkíúÉ/ÂÇv¦dÄÞ±¶æÛÿ`42Æendstream endobj 389 0 obj 2480 endobj 387 0 obj << /Type /Page /Contents 388 0 R /Resources 386 0 R /MediaBox [0 0 595.273 841.887] /Parent 383 0 R /Annots [ 390 0 R 392 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R ] >> endobj 390 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [72 725.955 157.529 733.53] /Subtype /Link /A << /S /GoTo /D (section.1) >> >> endobj 392 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 712.405 222.151 719.981] /Subtype /Link /A << /S /GoTo /D (subsection.1.1) >> >> endobj 395 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 696.735 224.848 706.432] /Subtype /Link /A << /S /GoTo /D (subsection.1.2) >> >> endobj 396 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 685.307 165.575 692.762] /Subtype /Link /A << /S /GoTo /D (subsection.1.3) >> >> endobj 397 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 669.031 330.832 679.94] /Subtype /Link /A << /S /GoTo /D (subsection.1.4) >> >> endobj 398 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [72 645.179 175.355 654.875] /Subtype /Link /A << /S /GoTo /D (section.2) >> >> endobj 399 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 631.629 370.18 641.326] /Subtype /Link /A << /S /GoTo /D (subsection.2.1) >> >> endobj 400 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 618.08 258.59 627.656] /Subtype /Link /A << /S /GoTo /D (subsection.2.2) >> >> endobj 401 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 604.531 185.424 614.107] /Subtype /Link /A << /S /GoTo /D (subsection.2.3) >> >> endobj 402 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 590.982 318.878 600.679] /Subtype /Link /A << /S /GoTo /D (subsubsection.2.3.1) >> >> endobj 403 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 577.433 290.211 587.13] /Subtype /Link /A << /S /GoTo /D (subsubsection.2.3.2) >> >> endobj 404 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 566.005 261.908 573.581] /Subtype /Link /A << /S /GoTo /D (subsubsection.2.3.3) >> >> endobj 405 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 550.335 281.939 560.031] /Subtype /Link /A << /S /GoTo /D (subsubsection.2.3.4) >> >> endobj 406 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 536.785 297.181 546.482] /Subtype /Link /A << /S /GoTo /D (subsection.2.4) >> >> endobj 407 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [72 512.024 200.544 522.024] /Subtype /Link /A << /S /GoTo /D (section.3) >> >> endobj 408 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 498.778 346.211 508.475] /Subtype /Link /A << /S /GoTo /D (subsection.3.1) >> >> endobj 409 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 485.229 362.302 494.926] /Subtype /Link /A << /S /GoTo /D (subsection.3.2) >> >> endobj 410 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 473.801 261.711 481.377] /Subtype /Link /A << /S /GoTo /D (subsection.3.3) >> >> endobj 411 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 458.131 218.121 467.827] /Subtype /Link /A << /S /GoTo /D (subsection.3.4) >> >> endobj 412 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 444.581 214.06 454.278] /Subtype /Link /A << /S /GoTo /D (subsection.3.5) >> >> endobj 413 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 430.729 275.059 440.729] /Subtype /Link /A << /S /GoTo /D (subsection.3.6) >> >> endobj 414 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 417.483 289.423 427.18] /Subtype /Link /A << /S /GoTo /D (subsection.3.7) >> >> endobj 415 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 403.631 278.166 413.631] /Subtype /Link /A << /S /GoTo /D (subsection.3.8) >> >> endobj 416 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [72 379.173 211.998 389.173] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 417 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [72 355.018 152.508 364.714] /Subtype /Link /A << /S /GoTo /D (section.5) >> >> endobj 418 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 341.468 305.241 351.165] /Subtype /Link /A << /S /GoTo /D (subsection.5.1) >> >> endobj 419 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 327.919 453.483 337.616] /Subtype /Link /A << /S /GoTo /D (subsection.5.2) >> >> endobj 420 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 314.37 316.847 324.067] /Subtype /Link /A << /S /GoTo /D (subsection.5.3) >> >> endobj 421 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 302.942 256.575 310.518] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.3.1) >> >> endobj 422 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 289.393 418.484 296.969] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.3.2) >> >> endobj 423 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 273.723 292.727 283.42] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.3.3) >> >> endobj 424 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 260.173 314.939 269.87] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.3.4) >> >> endobj 425 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 246.624 357.787 256.321] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.3.5) >> >> endobj 426 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 233.075 199.817 242.772] /Subtype /Link /A << /S /GoTo /D (subsection.5.4) >> >> endobj 427 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 219.526 209.833 229.102] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 428 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 205.977 231.242 215.674] /Subtype /Link /A << /S /GoTo /D (subsection.5.6) >> >> endobj 429 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 192.428 271.727 202.125] /Subtype /Link /A << /S /GoTo /D (subsection.5.7) >> >> endobj 430 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 178.879 180.424 188.576] /Subtype /Link /A << /S /GoTo /D (subsection.5.8) >> >> endobj 431 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 165.329 309.999 175.026] /Subtype /Link /A << /S /GoTo /D (subsection.5.9) >> >> endobj 432 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 153.902 337.757 161.477] /Subtype /Link /A << /S /GoTo /D (subsection.5.10) >> >> endobj 433 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 138.231 328.757 147.928] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.10.1) >> >> endobj 434 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 124.682 292.196 134.379] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.10.2) >> >> endobj 435 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 111.133 287.817 120.83] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.10.3) >> >> endobj 436 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 99.705 279.696 107.281] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.10.4) >> >> endobj 437 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 86.156 228.939 93.732] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 385 0 obj << /D [387 0 R /XYZ 72 786.278 null] >> endobj 384 0 obj << /D [387 0 R /XYZ 72 739.61 null] >> endobj 386 0 obj << /Font << /F25 380 0 R /F26 391 0 R /F15 393 0 R /F27 394 0 R >> /ProcSet [ /PDF /Text ] >> endobj 441 0 obj << /Length 442 0 R /Filter /FlateDecode >> stream xÚí\]sÛ6}ϯÐ#õ ”ÀÅg_:Ù4Îfo:µ2éL»ŒB[œP”‡¢;m~ýHÉ$%Á´Æ6Çú0mAÄÁ½çœ{< õž2’#"äd±z'öçˤzö‹~Ï^I FÍ«#Î(&(”b2†$gæzó¾ùí—Iõì—ÿš¿øá ³ ‘ Õd~Y¾?ÿüGÀÆOgœÒàl*i°Î¦DEÿeãt: Á|*!È£ls¹ÎWQ‘¬³Íôóÿ¼x=¯Ç‚™BX’ãƒfHj/Û?.4±0Üy Jµß¼çïàÏ7…€™ð7åÀÌàÖ¶×ÜØàHõD±¨hO½ ¢Â"@ˆŽîÜ+(ÏŠ0Ü…L(¦ï"ë…rš(ÑOÃÒŠ`:|ØqfŒ…ÒShM¡C¹²öc‘ârDK&R/uÙ %ÃZ\´¢œ6[¹/¢„z-÷±4€“#§Ã#ŽžGYr}“î’–pýa&^(Õú„“Ðé !\ ÊF˜e#ïÖWÉ¢ò,lJ±ü¤5ÿR"!¥—/-ž¥(¹¯Æ¢i,‰pP,q‹¥ód³Í°NÃk°œ ^ÈÎî®Ü™Í‘éâ>Ý‚IŽŸ±IÚ’(qŇ„ë‰G1^.qí~²Ã±Å5FEÔ¦“px™l¦©¸|~„R   ±yä:Êc-'T%'þ­5CÚî3?œiÊkj±ñacBƒ×q¶éÚ”\ã„a/Ù!ï “–îCúM—xºêæ*[ƒ0;¿¢veK¿K±Ý˜1Zn¨A9¢²ñužW ^Úa)qX íð#z¾ zä°% U‘ƹ‰9ÿØàÛøŽmpßoEAp±ˆ²Y ½Ž~pæç~sÄù2%N×>84c´}ÿÅÒµð6j_{fŸê¤¨¾`d܉æ <0$zïM%Òµñ™‹ö„ %ü4…f·0VDNß<,ñ€`Ih‰Ìû­Ï©ÆåMÚåy¶,/~8ÈÖ7 ÉFÏëtž—¼GݵLÙ:½7‘’Ðo?§ÒŸ7:L@ÁØ¡2¯ò8Úîÿý×ó™mp³¥æ|½êP˜…n×…¿ س b굉ðqwUwª{õÕK1uçˆ9ؼKVIQõI»M:.û”De·Ï~_ bÔ·qZâçÅä;Oœß,÷%íÂ’vÃÓ‰A¥Kßÿ Y˜d‹õê:‹X¿j«Qˆùlì½(‘Gù»:=5wû¿Ð¼õ&]²ätVV1Ñ<\xu ËÑyˆ<`=GÔŒ¾ìÐs‘|5‰ÿ;§^?»åÌ·¼úÎâ}èUUœ¶|û;+2$> d?—èP:\ÍŸz¢ÃH„—_@§wX(DÞMz(0\š•6Í–§ šL[žÇ"áPÛ !ˆù4ˆƒiW`G“«:bŽõ`š²Î­/¯¯óµ9ˆFËV“ö;Ws £|ßSn€j z‰5 ?"ëLkzžnŠã¬:ï,Mã´~G™JhG±ûy¬z ä©û&§+w*6$@ H–Å‹ ÐÀ‡­‹“à"¾Z™l+‚JoOàÍ×é:»êÜJ˜–*Œúd[J¾÷hÕª<蛨z‘p¥:wn󞾚ËfgSÅ+×ÔdRþwÇáÃûäP­dÕ­SX;?UïD–ç·Ï€  ôhÅSß…ÝbmÞ£UxÏÿ9Hçªendstream endobj 442 0 obj 2232 endobj 440 0 obj << /Type /Page /Contents 441 0 R /Resources 439 0 R /MediaBox [0 0 595.273 841.887] /Parent 383 0 R /Annots [ 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R ] >> endobj 443 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 750.413 272.636 757.989] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.11.1) >> >> endobj 444 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 734.742 312.969 744.439] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.11.2) >> >> endobj 445 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 721.193 423.271 730.89] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.11.3) >> >> endobj 446 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 707.644 260.878 717.341] /Subtype /Link /A << /S /GoTo /D (subsection.5.12) >> >> endobj 447 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 694.095 170.484 703.792] /Subtype /Link /A << /S /GoTo /D (subsection.5.13) >> >> endobj 448 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 680.546 243.56 690.243] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.13.1) >> >> endobj 449 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 666.997 291.696 676.572] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.13.2) >> >> endobj 450 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 653.448 238.151 663.144] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.13.3) >> >> endobj 451 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 639.898 344.681 649.595] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.13.4) >> >> endobj 452 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 628.47 212.03 636.046] /Subtype /Link /A << /S /GoTo /D (subsection.5.14) >> >> endobj 453 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 614.921 222.484 622.497] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.14.1) >> >> endobj 454 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 599.251 219.09 608.948] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.14.2) >> >> endobj 455 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 585.702 268.424 595.399] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.14.3) >> >> endobj 456 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 572.153 177.151 581.85] /Subtype /Link /A << /S /GoTo /D (subsection.5.15) >> >> endobj 457 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 558.604 253.969 568.3] /Subtype /Link /A << /S /GoTo /D (subsection.5.16) >> >> endobj 458 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 547.176 260.181 554.751] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.16.1) >> >> endobj 459 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 533.626 302.59 541.202] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.16.2) >> >> endobj 460 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 517.956 239.666 527.653] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.16.3) >> >> endobj 461 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 504.407 189.121 514.104] /Subtype /Link /A << /S /GoTo /D (subsection.5.17) >> >> endobj 462 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 490.858 332.393 500.555] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.17.1) >> >> endobj 463 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 477.309 265.333 487.006] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.17.2) >> >> endobj 464 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 463.76 304.939 473.456] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.17.3) >> >> endobj 465 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 450.21 219.393 459.907] /Subtype /Link /A << /S /GoTo /D (subsection.5.18) >> >> endobj 466 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 438.782 227.075 446.358] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.18.1) >> >> endobj 467 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 423.112 326.636 432.809] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.18.2) >> >> endobj 468 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 409.563 476.605 419.26] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.18.3) >> >> endobj 469 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 398.135 185.696 405.589] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.18.4) >> >> endobj 470 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 382.465 186.121 392.162] /Subtype /Link /A << /S /GoTo /D (subsection.5.19) >> >> endobj 471 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 368.915 288.666 378.612] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.19.1) >> >> endobj 472 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 357.488 261.348 365.063] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.19.2) >> >> endobj 473 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [113.454 343.938 210.635 351.393] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.19.3) >> >> endobj 474 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 330.389 224.666 337.965] /Subtype /Link /A << /S /GoTo /D (subsection.5.20) >> >> endobj 475 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [72 305.931 188.635 313.507] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj 476 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 290.261 255.605 299.958] /Subtype /Link /A << /S /GoTo /D (subsection.6.1) >> >> endobj 477 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 278.833 273.484 286.408] /Subtype /Link /A << /S /GoTo /D (subsection.6.2) >> >> endobj 478 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 263.162 209.06 272.738] /Subtype /Link /A << /S /GoTo /D (subsection.6.3) >> >> endobj 479 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 249.613 305.378 259.31] /Subtype /Link /A << /S /GoTo /D (subsection.6.4) >> >> endobj 480 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 238.185 243.09 245.761] /Subtype /Link /A << /S /GoTo /D (subsection.6.5) >> >> endobj 481 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [72 211 210.568 221.909] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 482 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 200.178 214.136 207.754] /Subtype /Link /A << /S /GoTo /D (subsection.7.1) >> >> endobj 483 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 184.508 289.363 194.204] /Subtype /Link /A << /S /GoTo /D (subsection.7.2) >> >> endobj 484 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 170.958 281.636 180.655] /Subtype /Link /A << /S /GoTo /D (subsection.7.3) >> >> endobj 485 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [72 148.621 194.538 156.197] /Subtype /Link /A << /S /GoTo /D (section.8) >> >> endobj 486 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 132.951 159.545 142.648] /Subtype /Link /A << /S /GoTo /D (subsection.8.1) >> >> endobj 487 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 119.402 259.605 129.099] /Subtype /Link /A << /S /GoTo /D (subsection.8.2) >> >> endobj 488 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [88.363 105.853 340.817 115.55] /Subtype /Link /A << /S /GoTo /D (subsection.8.3) >> >> endobj 489 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [72 83.516 167.764 91.091] /Subtype /Link /A << /S /GoTo /D (equation.20) >> >> endobj 438 0 obj << /D [440 0 R /XYZ 72 786.278 null] >> endobj 439 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F26 391 0 R >> /ProcSet [ /PDF /Text ] >> endobj 493 0 obj << /Length 494 0 R /Filter /FlateDecode >> stream xÚÝZK“ã¶¾ûü…¹…S5¢ €Ïäà²co¼±7å²åØ©$ i˜¥H$w<þõé(R£õTnÞÔT A°4úù¡!u“ÀŸº)ôMQæ±.Ê›úø‘ºá¿·7¡õô1eš™8KñíÂM Ü˜,.ó é?Û~ôñ+ݨ46i~³Ýív÷ÏHÝn”Òiôº»5*}»çnªÇ¦ïnÿ½ýëǯLq£T\eÛè4.2Å£ã0þ‡;ÂÐ">ç)Ü £ËÅh•¨8+µ¬=ª¶¹¿²ð­S#DŸ÷Ÿ0‰’$®’ I6Êäq ;Úè$Ϊôr>•-ˆ’Jæk`/7‘ÅGÁoý¾¨èÑ7ãè:&hä9>8nü™'ß¼=›îÀ­í“=•ŽlÛö·ºŒçïv=Îy™·ççÁuÎÛÑ!ã 3æö£0€áûf<Úpê"Úûþˆ­<út×ßßn Ëñ—%Y²}ÿ¿o‘‰§Ó™¤ŒäË««h”)ššQæpvhÚ§ÛÒDñí¦ÐY´}pƒ ^°‘GÖK¯wãä;·Ã·ŒD†óX~ììhiW ï'­hCÃèÁ¼&œÂj|àÖ¸bù¹Ò«"ÎuÐã_¾þÇ7_^Q¶.ãÜäBóÄÛÒzQFÎ^F®nl{e…¼Œ3ó?­°93]FŽáÅ@ íÐsÏ4 ˆè['{}íÿ¨ƒÙõ¨˜GaõiÝÛÚ Y‡Ö&NÓ•4wn¨}sÖ×`‚õ-ðÁz[hlØ%Ú‹Q1IôzB´„2mÓ ÜCl`[±©e‰Ì‹¸ZÛ2mèú£ãÖѾ©¹ÝtûÞ-Æ\^•ÑgÓxEök#ù_Ö…^ú²IY¨FGÍ8¸vmƒÆÆ»öI¾v;'Æ-Þ9Óö2†• PÊf–¿É¢Þs¿¥QO2 È¥ûôÐÔ`S´¨ÛÏœ¡«9¿·µ‹Y‰*‹ ØÏr·iÞ‘DaÚ[Lµ3Á®%GÚT´u|BT¹·÷¸Emò@^DÇ~™`ïÝO“c6˜,˜#¶–F‡ïóiBR]ñðýß^ÿ¸‘=äqu±²‰Þ·»;ØzV¬Ðä³4ÚO%uìÉã3â0L>³L6‹„Ì4ö-å‰N§ÞЄ&õSÇŸ&P¥ç¦ì¥$ÞËpw%5(œ2Á‰Ù ¬¸‡¸ynœ…‰U•?Ï[kÛTq^©`›ÇSëŽbf4¹It”Wm ˜ ‰¸h½³;|)H¡8ä]³#AϽضY0f!!ìg‹Ã ¯Èw'ÚJÒ¸,‹eV‘¬¦†Þ™AâÞ>àÓÀŸg:0¢0½Yß nø#ŒH4ä~´ É¡]?rc$#r„ƒÆœ±yiÈ3¡·°º—t©ÖÑkøäŠö~¸-SŒ>hheðÚ½sàÀäùã° ›©åOðRéó@‰Á&z…3÷sh€ž£e~HÒÈx¡.Œ!¥r ž2¾`'z„œji(`-‰äC°ìúZ¢©â:Äž(qhð06xh†¬ª*’j%#‘¾!SG±Š¸!è;Ÿ{O“çÍô N1€7à¨lƒ³0s‰`nõÔÎ~ˆ¡Ÿœ'’Yü8ë’ëeF C½ØÇ½Åpô\Ídk\C*ÂȺkÀ¥Yâ+¯oÂlÃgó…ïÃ:€ò0<ùÞóç=Gu[×Ó9”½qœ¾â¾t¼J*™‡±A9\¤’½³q„ì\•D°bÙ[êýHÁ˜9™I2J£zò^8S@J¤æ$5í¯„+øƒÒ^ˆWP >úb;Ÿ#é›$Nê¿pâIñbá¤aÌ*¯ó¿¿\ ƒ¹³—Ï3H–.&_m!Lþ-Ç_Èòt•p~¬»ôãB)ð¼´Eì;¸‘É)YÂT;„*¡·o+ “οÃÁÎßa'ƒ9šRBF2úTIP&,“à}ÅÖëãÒÈX¥Ì"J‰‹,¿T„ðuh~qÜz|}Œ Ë„gÛÛnãyôÑÃE$w›!® 8M2r<|îÜýë¹á¨$§€#ñË¢P8X ÌÌØ/LÉžåˆSÆ©Z{Ö,š…w…=¬°Y •úàn²Ð9b§\°>rt>žÄåš®ž]‡{è¶]ûtm{z°ÑóÈa|¦! #‰`²äsUÚ™jŸ…A\&®Î¹ °¥—@t Ļɂ€—ýö}‘|&Mfלw³iÈ tÍ€Ù$§ˆ‰Ïo?ãwpœ9Lކ€3í§õƒ]ë nšCrš—d„ÓÉ*Ÿø…²!~á|þÃ5x0TÇ4åä>☬˜Õ «}bM*8žï†z<Á…,° ¹%Íò¨¶OvÆÐ;;@&!ž}‘s¶| ºn†‹S¾)ÃüÐ8Ï/Þù¢u CÏj”r¢XÊH2<ɹñg&¥¤W΂¨Â&Ëå&a\#Ï"es Ô8n˜j³~'±ïê~¹ý¿¸‡ÎËséIçh®oCÄÂod°Ø@Ñê¼X•{°ÿViæ ‰=oæ3w1ŸØ NQy8ÄåhøþÈ-žºŒ>}õ†y]Q‘ÀHÑ gW—ÁÁùðzÔK!Ý6ƒÝ½»ÿ°b"‡0=7QÌ®àÀù2 Yh(ƒáA 2™«å/TĆ€ï"1[YzFŸCs߆õÄUSÉÉ赈+{€³²¦Šp&Uå²DB¢X¤øi{QùQTaÃÇþ|„€·³ (© ©jŽö€2ªè37Àqo@Ƶ^©I¦¯#×ä°Iš[.q% €‹‡Ô&‰cIÓZÍ€³aâFÕ~< Ú‘öÍE¶ 8ôÐ p)z»Ô'?ÆJ0zÁõ࿯Q\°™Z x"jÐKMÃwNìÐ86`—Ýáî NWiAP(y±æ¥ÓeÍ §gý銞s!™W¥p00‡K»‡¯bÃÀq@$ÃÉÖÏTQÅyº¬àù0‹¨ûE lytKr–³;¿]”!Ét¶©$Id¶ÓûMÂäqÂ÷‚IÀÉÙJÒ_èä zá~PÕsù¨P¦½ã7DŽ›ŒˆƒK͵6;+BÉZjYb1¡²Âmȹ '™†—!|.n*€Þ®;P]^IyUñaD­#ð|›bY) úɤ6ÍŽ§ÉÎiçr?cI¯aVUº€%@Y÷·Á7;[œJžC'"½yÉæZè;¯g–¥0:¾áÃÙœo WJI+q8¨vä¿|X–"ßo¹)¸J?Ëýn¶ È"ÇÙ¢T­R룊ú#[Ö‚nLq²lB~â¼å¥D©s‡T¸Ï’´ÆS\$µøŠf¿ sê’Ïqk'ïÇù|`CÆ~©È01aVF9—ž‡ÙùL. ÝšõÓ¸ ÿœ«W¶U~ÝDWÆäFcä—p8â–T ð0tF6¹DÅpÙfŠY~’ ÁTzºßÕÍlBÇ2Äò…(ì/úžs~)A¼˜Y–®"ۅâ¦@9G}€OTYÐ)OßY Ebßû í§g`¢cˆyÐ~ÛñuHëvŒÂu ˆï‰SäqVqèØ¤%±û}ÀÜ«nν?ò(.³è€5U#í(\ÙYœgæ"׾ߜ¸þ–”t•™¹ú” ´k»Ð×.¥¬Ey&”Z:üîÞæ:Ð…F%º¦Ñ ~ò!%¿íÇÙ-̲8B~Õ@?ê°Ý°r¡æçÛL¢M3¬ŠÓy¨´¼O\ZÇ`Øß”¸.n–_Æ×Å|³¨/ Ë[ß±´`‡àz© >”a¸ À#Á6÷œšŸ]»«w'0d¹ ÑÞ†’┌<Ù%.éåny×Oè4ág#¸…+÷±»(.6ÁaƒOÙâ¶²¦ô"i,»Ýˆæ‘ò³ hí!”O@¦%ÊÈkÊÛR-màØŠÿ_:z½çYžˆÝéJø”«¬DŒ5«¨¿ºçänéض›j.ч+g¯ÂÄ&Ó/ÛF–…;¸¿Ç<_›üâb´¨£<‹_ tLQ÷mïÃòö¹è³2 ð5ŽuüÊ#É`ùâ=à­Ê6ru®›h½a}7µ¾I¾7W—0ÅÉ®/›VQÓüJÔ,T\–/ÞÁA6NRóRdK/—ѺŠÓª|$ø/áùùûendstream endobj 494 0 obj 3220 endobj 492 0 obj << /Type /Page /Contents 493 0 R /Resources 491 0 R /MediaBox [0 0 595.273 841.887] /Parent 383 0 R >> endobj 490 0 obj << /D [492 0 R /XYZ 72 786.278 null] >> endobj 5 0 obj << /D [492 0 R /XYZ 72 761.372 null] >> endobj 9 0 obj << /D [492 0 R /XYZ 72 739.61 null] >> endobj 491 0 obj << /Font << /F25 380 0 R /F37 380 0 R /F38 495 0 R /F27 394 0 R /F15 393 0 R /F39 496 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 501 0 obj << /Length 502 0 R /Filter /FlateDecode >> stream xÚÕZÝã¶Oö_Ø·È@¬I}ö©IÚC.¹‡d hŠ‚kÑkveÉ äÛÛKÿøÎ—dy­½m€´ÍÁ¢†CŠäÌüæƒVW üÔU¡¯Š2uQ^möŸ¨+þÝ]­o€Æœifâ,Å·g×#çÚdq™gÏñ«<6¹áy¿¸þäÅKc®TWIuu½%žëúoÑV¿þú“¿\Oò8ͲçWƒlélr•-Lþª]­µÖ‘­k?øŽÞ’hè˜:ÛöÛ.ìíØ§¢NF ;ÇŸ•=¬Ê4ú ÞÓ4VºŒîWºˆ>0 1=ै\ÿ/Ü"l¿š­Ðàé$FÖÙ7¶|{ËŒg[1Uœ%Zøl[/Ì¥ÇíºwƒkëåyÒ4®t!Œ´"¨NâÂ諵BÁVü‰O“4âÕw}ïo!áöðI‡“&&Úv:4î->]Ãý¾Ý4GZ¼êèÆ{{à»Á³ÛAg¼ZçY}Õÿ^æ± s¹w8TÏß3Q·=ÿ\/ŸéiÉÙú·Ç¦yX­ ˆª?dap5Óð¡‘E=,Òq“×ø{HHb³¾‘@,“lÓwKG¯ó8!=|FŒi—éȇûÁIi?íǤ9î‡È­³aÜÓۉY„:Ïã²*ù2šý%jk`1QpýüUg7ã ÕÁ’.ß HÊèNúiq07C§Mrijã'çÛ®NËX+P(Ønžô ;ï®ÆÖ70Ø,Vêñ¤ªŠM•>&ÎMþ"ˆañ{{±z\t"3üÂe_.šyž\ôÓsŧ¸MâDW l›¬øp÷ ê‰v=€¦)3 SdQão‚ ¨Ð(4è9£C•*rаÀ]Ó€ÚÿÎÇzǔֹš¬øœÓF8Ï1—û ̰³?°9o<‡[™2Ùý^Øoh®tÙ;ÛösPR‘eÛt-N}{ â°×G@—D×;÷À¼{ËóÓ˰×c/XÉë°ÄžmoqÁ8ß½vÝqà<ˆ cѧá3¸M·?øÆ-,žµª"{84~Cëĵ™1Ã0fTpJïìþÐ8]ª²Ó¨ÚÃä 5.)€âøQ©uÿÐnÿ)möŒâ…ÂLŠ#öñ”Ì;ÏlŒlÓᘢ\ika™à…XÊ]¨]ÞŽŸÇÞMì½Ì7cxÅ£æñ¢‹Å¤¼ ÐplèÉçÓtGM’EòŽ^Ø»… ¾ÀØ‘·]Ò…™49éyªF–D–Ü…Ž,?¶¶iÊ«èîEí¶öØ Ì8ž 0±‹Qã¶ l¸–/|` °ï4/A•}oÊÙˆwÿ9ºŠáx`÷r¿sÁ|®Ð8‚‘Ñ·=„8º3<Ôĵàdª$VBýöáð‰5JÅ6Ïó˜cŽ’…TꙢcx„pœÜ5ζ=¶“‹/>Cè>„Õá­gÀÆûgPáWv¾Gx-XñO_ÝwÁ]Z € `ô`)$4™!“÷ Ï.lí5$K2ÖàHy1ÀYea6b<`Ø ];;Lóžn B) Êà`°j~»÷mÍfµ¤™£¢Ãq.èÑ®açýîÕÜâ¸>45ê9XÂWÝíK„>ãIÈø€,"ÛÊi½x 1öyxXäcØ7(Ðô¥_Ç:É„ ¤ ‘Ùðà!ÀŽÛEïJ0Ûð©eõâ80Ìʸʫ³S=´l‰OSxÇGþŸ™^nâ$ù2À:òé&‰jðŒ h=‹°ñwhn!¬WIçzÌÎŽ-8Æ·Ë‘}VÄÅSö„“_ä@»}ö£ém7HŠÅL;­8*Ò££…½ êd= âË®Obðò#Ð|NÇÈ95lñfÚzj8ßħ³½G]Dž1=G¨Û¨™zì§A–;¶ ¤GÖ‚sè´Tf?€sìí¡¼zY~£'l£¢_b÷,Ze "8å~¿ñâ»È” AˆÌK™H×ý&øÃÀ¢–`óËÈ? .÷Ûû V›±m§ŠçªsŒ„çõ©<‹6¶eæÉÁàKpCðâ#Èj} Ž­;…±àþ¼\L?ëå`ÓdX4;XÊì*.rÓB5£M\ÅÕ¦ÚEp¶ñï)aÜ<:ò£c@å¨J¾õS1§Ðí¹óó—ßrc®gf¯4­áZ¢i;5°:D­žýM¦0ø‚(iß GíæÎÇà„Üv“èxz Ë0¬ª?ãÀçæ(¼£ãâ8(‘€*™E —s,Ø•‡o¸2 } n“©{;2ÊŽø…ãy3c+¡GýŸ4®BÅ&ýl‹ 5å,SEŒ¢&àŸëÛO¥Ç>É^Dã\¨· •“  È Oø3VR€ƒÜ6<î™TpÞšŒmRÌJðÂëJNÅœ…ïÁÉÝ»ßCÍ]?%YB¡2´!Öão»^’ú )Ï Ö2‰U©ÎÄŠ½•) Õ9‘òæaØQUÂÑÙ=wÝȘôó™rƒ.åïÈD{p¡ö`iÒ_²ÌVN$%¬ LD*“)ÜA,Uá—N@c1åôÙŸâÌ&W³?Á´9'}hò–Áú<ž.Åk—ãmi‰•×Y•Iêé˜VUq‘=Ôjˆú¬/Ë.þj©NZ•O{³n²Üendstream endobj 502 0 obj 3100 endobj 500 0 obj << /Type /Page /Contents 501 0 R /Resources 499 0 R /MediaBox [0 0 595.273 841.887] /Parent 383 0 R /Annots [ 503 0 R 504 0 R ] >> endobj 503 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [347.484 707.644 366.878 717.341] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 504 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [411.12 707.644 422.029 717.341] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 498 0 obj << /D [500 0 R /XYZ 72 786.278 null] >> endobj 13 0 obj << /D [500 0 R /XYZ 72 310.83 null] >> endobj 499 0 obj << /Font << /F33 497 0 R /F15 393 0 R /F39 496 0 R /F27 394 0 R /F37 380 0 R >> /ProcSet [ /PDF /Text ] >> endobj 508 0 obj << /Length 509 0 R /Filter /FlateDecode >> stream xÚÕYKsܸ¾où Ê)T•‰!@ u’×OÙëlÊÖn9µ»Ì3ƒˆCNø°$W~|ºÑàˆ#Q–+·-l ôëënˆŸ$ðÇO´8ѹbBç'«Ýü„þ®NÆÑ{ ÑJ™¥,“øõÄÂx\§ËU†ë¼üañšg'¯ì `ÖŒ#í>¦ÏÜËE{»>I„ÐÅù¶ýº–¬âÒ´»®7eÏʹ´ÀµhKªõçO q§WJ¥±P ŸB¼÷¼umÓwÃàB½7WÃÆ`J¿FÀ2HMO¤’ó%[vå7_›óU³ÛP2°¦ÝÌ:gZ¨É­ép(0]Á£nØnO“릥Á›ü2w^°,ïÙ7Í\â–b¢pɹ4ȸàO`í½|Aù8…+ˆãZå¥A5~qˆS"‰Þ›«»ø%VÑS.pÑùxe­9?_·ÖÖ¶g+ÓV¶oj|xÑARèÙþÅ+‡>ùû2tÊsL}M{KK*k®ºàK:eyq,¬©6O‹  ÁÊK»t¦Ž÷f…>vu ¹ŠÖC:QƒN¾#õ=4Ç4¾9˜4ÇBIƒ’o$¹oÇ~6‰}DÉR©¦±¹5õ•·ª¢ü ¿Æ÷HØÚŸ&϶;²¤LQø"WC<¥]Î3jˆ‘ÂÞ«¹uË¡oÚp4µ "ÓQÍ¿ Ü °#¦ fÎ ¬¡XÒhNQ0u^³ô4ÝÉèCÓ»/§ l…¼fô„HXVdA Ã"r¥Å"4Í©üƒßëÖ…ú.Õ¡nB2Xµ5èe2Uˆ<:2±(7Dè‰y}Z¹Kl%ìç>>®»pÙõÖQ3Îõhx®›¡öHƒ|Ñíñ—…b3=ƒÞ¯%”¹ÖﱡŸus&øj d–ÆTjá8‹®tIDm|å´ÐÂh=Ô+T«©\š&Q8­ßúfS§ÑgΉ„RšØjÔ ò/Ô@3ÐüÎPWôPŠi A`ìs|6Þ†,Qo:¢"y°ÅÅÌvè¦ð¡ÆþP!ïF&TgÓIê‰\šÞ,Mæð• ³T7«+±ê–h« ü›>p¢‚~¬œ‰â‚7è¾n‡.:ÙkO^¶ƒ!üJ¢¿štÙãÝD(C/S5ûI±ï'VŽÌûÃá; [x­ÛfGÓ/ˆ@«’è%vD ÑD¥›“"8ÓÞåhdèg¢\ø"‡s_©ÑÌýDAm±ö†^}اðÄÔ ú6Û +lÂ’Uèî3=éçᣠÞf¿¯ÜÊŒo ™¢ôŒÔ‘²1!S€cz¸8Ú/®ÂÒÐTw¨äPbÌçÁ6å“릜‡—* ÞY>Z4º-žŒØÃ]qÒç΃þ¹Á:׎Â5äX_¼œÚØn®ÔJaÕXòOðØÖÑoÕøû­|Ï_£Ç<‚’(¥kçQV*E²‚¹8ÒÊ]kœ©íø4 Úd3 0 ©/ ©O†Ô÷¶9õ®è¡Ú4íG õKʽ0z„>< ®Úî‘÷÷¼±}86Ÿ+”ÐBEž{ÃÝ„qoqÿ!ZýVúèzúts®Æ½­ÖR4•ƒ‡­–ÁÀ¶­ïŸ`8t¾Ã݇éþp ð€”¶›‰úãu³©n÷Û¹W(¨a‹Ió‘tÖ>hëñ Vgú$NK”D3Ñ;TÖGï¿Ñf§s=¼|¼‡œ#lîùœ/½×à|×Ë› oácÒ‡Ò’Ó² ñ¸_®}£t~»k† ë~æºÙKF%¹Ñ‚° vœ-ÝPw®· ŠI|‚Yì‡åâ'W7 ¸r·›î»…!H”LAß¡¯â7g·seÆ’dlž›a’²d|Œ8û:à ‡}\ðÇŒ|¸lyYoZ¶™ã‚M“* j nå-Ô/ÏæäÊ¡·šŠUÊüåf59±¢Pc)5ÍÆDpeè¤&J¬ŒêË¡²»PøøÌGÿÞè_Ób2w_¸F–Î4¯D™æ S_ù ¢ÒžF$€Û}ªcT4’›=õšåXe Àt Ž/µ~êULÉ™>õ.¦îŸ# ÝÊ"> endobj 511 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [131.878 261.92 137.332 272.829] /Subtype /Link /A << /S /GoTo /D (section.3) >> >> endobj 505 0 obj << /D [507 0 R /XYZ 72 786.278 null] >> endobj 17 0 obj << /D [507 0 R /XYZ 72 515.97 null] >> endobj 21 0 obj << /D [507 0 R /XYZ 72 357.77 null] >> endobj 506 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F20 510 0 R /F37 380 0 R /F38 495 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 520 0 obj << /Length 521 0 R /Filter /FlateDecode >> stream xÚÕZ[ë¶~Oú}‰ sÅ›Dõ­)rkÒ6H¶@Ц(´¶v-¬,’|výï;Ã!)ɦwOŠ4Ákš ‡œÛ7Có›þøM.nr“1‘››Íþ~CO7~ô Ì¥Ò’i…ßÞ \{ʵÔÌdé?»ûäö ¡o¸bRe7w–önû¯D¬Öœ •|YcÝ>®Ö2WÉcÙÕvõÜ~!óÎY¡5½¶ŠåšÓËŒ»×?;ÖÍÞ‡ Dòu;ŒeÓ8†")Û-tò}µïVR$ïÃZã®rë˜Ù:"KY.µräM}‘F‘.Ñú;d\nV’'O«L&å£ãÌaã)+ÒßY‹‚3U(¤LÃ'¾û§„QEÒ=à§IÞ¯„Iª~¨»–&R&Ö÷«µÈ“j,q“ZN’‹|ÆŸƒP*ÍœPåqì6]ûDvxî…?€àÀýi¥3+¸§hõãPmifìhxþ”rõxì-iîNžÜ£&h´spz}ÙŸVF',"²P†eF8Qê}ù=8š/R}³æ`_šhRkÛ‘2›®}¬zÇÃÁžX‡¶ÄVkåÉ+#“c’õû®¯ð$ ¢½‹x®Ç–j€‰”«ƒj ¥¿üÛ?"[’º`Zx-ÀþÇ®kbJPŒçžÌïÆ7¬÷Ðõøì=•,Oí]–|_¶å#I-¥?ãõ€›Î’jS£‚6ø7xü=ùž±Bf >_UV‰@f^»7þL“Vå0é+½;Á &?‹™¡V,+òKZl_€â¥ßþ‘à“ÏïB$gç©a:}38Án@DŠM6Ö,Vñ±†³ó SF¿Ò4SZ½ÅýÏ»²µŽggvy$Z°\G}Ç#Ç‘…².¹­ûj3vè7*¹,Â6X„LóìãœøEOèûcõ~–J,ì£UmãÊåùd‚…·èÑ\&w;kµ¶žk°D;²¡lWmЊŸhê„ãîØÓ·á4ŒÕþSû¢I†j<èY¶ÖÉcÕV}9¢>u~%ÔŠ œ©ð¢ÿÂÖCÝT×B­§œàŸÈµeQ0£åÂ%·ÕCylÆwäeîìmDË ®Ž7Öνgqj ›H¤t!8„‡ºœ{—G¯)4 »Ð…°"ü@ÁâÈà ƒLÄž9ÜGí5˜ëPÞ7ÕÚI{y (Úû:ŵó˜ù\óK†´Ó8Ã~KØ™p@ø! Aí!>nT4ÑFÆ…àq÷ÄÄ)3ï}¯™!ä ÎŒZFQg}™°‰§¯<éL9 À´³(Ê%¬Š`ÞÈÞ9PnÙŒ5©”Xøô _@v|prÊASåþý8lÀÀ›ÔòùŽAl¬â”ônµá¸ZùÔ±&[280»Þ™5mÊCy_75SÐCor~?˜t¬“Í“ˆ¢œåƒä®é´Cd0ßá³Í¯q©”{§Æ/iòÔ†¬‚ÏÀxnû@HG 2BDkµ3±îé•°•óà‹DJù!Ö‰ÑH JŒT§ÖwåHëY<3[Ê­¥%`œs‹Û”­ËÌd5Sš£ÛÛYîp€ØÔ÷¤Ù“§<ñúsaæëvÓõ˜Àà”RÉwMUzÝõÕñ ÂO©NÏ Øœ ë°lÆ1SPŽO!¡øÑ7¯æ&qΣÅõìtHHhŽ6Ïmع0°Éyuò#ç4ó\·Û­þ™ËÈ2‚O0çP‘5)tôöŒ ÍÇj¤I÷~Ä ŒaEnÞPR°,Ä`¿>‚þ=ÆLâD2x£ý uÇY첈 qˆ@uÙÐ íÜ,ñ4ÆBB™E40\ðýóŽÐ¤ÁýZà9}ª¤z94õ¦­TF€™D°­†šÜÕø(ƒlg1ü"T9Ž@ožbÊ"¸·î8®_bx"g2”@“#zæREæñ8Œ¬ú¬ü‰’žOq¬ :V&‚êe¬Ú­çC‡ ÓËCµúá)Ô—ˆæ úºõ!ÓCôó?=å±FòÃCß=öe̪¸âP²z«zylN‡]̬òЪ¦(›Áù7ém^@À…á$ªÝÓ¶ª¶N\Øð%‚U©bJòtÊ ýq ¬üÿ@Xž«`GÑò`:Ž&ìªS]³" ‡©~†bµôs.r¶Ž£œvsÜRõ—ùRH!8¡ånŽûªÅ6ZÄáÖ£°ffyÓ½I©0±+ñ± T}æ,5K„ú­;s¦’Û 2SpøŸB¹f{1 El%K º³ d aV:柇Ydèg\­9lB¸FLº¨6©âPNæ–øñò*U7MWf i`®ËµÚ;ó¶]‰"S=)s¤S®T^¹àÃS} ´ëÑ /߃_SàµòOâ1}$ßQ¿¨ïÜ\ç ëB1#ôÅÉ/z Æ9àÿ4ôèàÜäO_Ü©â¬mo™ÐÞ™"Oþ‰•uwüÔ“Cܼ‡’ã„ß„ _ô¶çà‘¢|H[é!?ô4ú5<•ìÌcêYOÒ!;W™L²ij½á$"AütTë½v[ö[z¹é¬(kXQª4O¾ê0ƒ=[Ç}¿²@€ PjZ ³–­å¾tØŸ„Œ‡_g„¥ÅÅHkóº«3çÉØmŽÌWØÞUO#+GI6<  E~bŸGÊÍè‰Á ©Âc”·µIDØ]ì‰Èâ䉨±¨÷•õ=‘üйM¹©Â îmÂ(—›˜Â"øá\üe "Éš}™óÐ5 !ÂàÌá”mźk3X¤héÁ¶so‚Úc~Á ñç8FfX.^k«}pÂM >skØú¥[ÿþœ?ƒÿ!f,öœNÓ[ìžrVÆñ[®|Þ÷¸¶ÌèT\0:׋† bS¦ÜûX׃¥¡•c áè=¤ŒIèôß>ÄRXÊd€ûÍ•tέäT‹(™-€åà»’Ç¡$v S`n,ÄèT®ù“4å8ÚH§s‹?ÁÇT‘:\ˆ#à¸*Q §=~£ØÒ5دÂi‚Oƒcî_¥EòIJ½¸7xS¬Œ‡ÖákZ…boò ÷ñsM9Ÿ,)²V0,+–5¸_ô­¦•É((ÈA¾½ˆ÷† ÛƒœóŒI-^‘¼¤~!ø‚6ˆU±4É3:÷K쫲%—Ê÷FÁµ¡â_ûimû>øØi0ØÙ@|aļp»¼ ZH+ÍìØQiyx^ŸgC9Údº£ŒÑ¸”Õ¸¼ðm¨Ï„o¥"™£MG½c4ÖcwHAô|jÎÛù©nÆØïw¸ùü²å¼±jÉ õs¯ïÞ[ðÐר0*žÝFôoU}Ï»:œ¤”¡¼Ÿuü\—:²^ØÀíqèo›nS6·ñ†I7|—(Ü-‡’Uò_W²Š\ëˆÕʽi op¦$èhšoíâü®k¶–DxìxQ°k¨-åyöz‰æÃP¾â¯¶Øñ^\r‹‡Í…r~•ɇØéžPÿε½À–€|fáBæØÓ¡z }]HÐp`»5HREÕ?XT‰SÇv08÷%=> ½ -7ٵ͉˜ÎŒýúp¶Ö¼9ÁªOSÒÆ»a¨ï›jqO4ëÕøk Ì917ƒóÉ[ü60¡í‡²]ûfZÏâZs㺅¶zi…yÆT&ι¿\c?%è&úý —)(}àz3íÒWú´&…ƒ)}8øå¢R—W17¹m¸Xvú·ÒˆÉX–å¿d¡TÏ%ŽÌÇÈ%è ¬È– ÑY^qbDã뫹ŽüÍä–´p]^]ïòš¬iÙä½½Úë]T<`ÑYVØF¡JÍÆS3¿Eïe‘fñ;šÃ ‚‹iNÈQ®]{$ƒ`|ösœ°õŸ{Óˆd5ûÅu÷Ýñ:0ŠœÉàÜxíƒ dár"Kª—jsKŠœÆÝâ€ÛS[îÊÑ&¢X$c¿EFÀ;ç+åþÜ(—g¯<gÊÈ9Ë—8O[æ¨ùï#@•#ýÈ¡v?v˜[°õõæÀž»Ô‚a¨pa©;ú aÈqˆµÆ…k!~H2‡ð&œÉe:¿¯Û+°ÖLÚOçózÌÑÙôS…Y¨%Þ‚°ábñ"Ôhdâ·j0&;Dä Á±Š!¸<µ]z׃=*^>ìßJ3¡CîošË½•‡CS‡Î™¿xŠ€g|~1k=)ïú  L^Í øÛì®gØoQo«Àß0©7Ûëùù2BLÙ]Yà¿×hÈ> endobj 522 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [462.484 526.401 476.423 537.31] /Subtype /Link /A << /S /GoTo /D (subsection.2.2) >> >> endobj 517 0 obj << /D [519 0 R /XYZ 72 786.278 null] >> endobj 25 0 obj << /D [519 0 R /XYZ 72 761.372 null] >> endobj 29 0 obj << /D [519 0 R /XYZ 72 736.82 null] >> endobj 513 0 obj << /D [519 0 R /XYZ 72 659.937 null] >> endobj 514 0 obj << /D [519 0 R /XYZ 72 635.3 null] >> endobj 515 0 obj << /D [519 0 R /XYZ 72 463.541 null] >> endobj 516 0 obj << /D [519 0 R /XYZ 72 427.552 null] >> endobj 518 0 obj << /Font << /F25 380 0 R /F37 380 0 R /F38 495 0 R /F15 393 0 R /F27 394 0 R /F28 523 0 R /F30 512 0 R /F33 497 0 R /F39 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 528 0 obj << /Length 529 0 R /Filter /FlateDecode >> stream xÚÕZKä¶¾;‡ü…I.ÑnŽøÒ#·í5œ¬m ; Ä¡‘ØÓʪ¥¶¤öîüûT±Šzô¨=ëKÅ#Š,‘EÖë«bË›þäMªnÒ,*ÍnÊãgò†þÞÝ„Ö? (ÕÂ|{pgL˜ä7;mE–Ø—è¥qÎóþíþ³»×ZßÈXäq~s¿÷4÷Õ¿¢?ÞþûþïŸ}u?}f…±öenÌ,&—vcòW·;¥T4œ ‘FUÝ»rìú'ên‹£«pù»×*]|-ãD˜Ìð£lꇑé|A¦Ð‰fª_7æ±"–‹ ¬HžÆ{_í"± \Ôñ\ö®kxÑQÝRçxpÔXmPF'xdQd*ø+ îèùp ƒOó Ï7 b%²4gŠóØ•]»ßàÔ€BȰV -q*´T7;‰ú•ó)Ù$*úºxh¶Ö31œHØqUŒìgk5˜PJ&û)¶qåöŹ·gLò £»óÐß5]Y4wáèÝÆÔ¹‰¶óÔòv§¥‰Š¶Â†Š z ú¾Ç¦{(lëÎç§XšÇs_Œu×b§Œ°gs¿;%aA‡–gäõMàA×[JV%õB+tŽŠ0ŒEÓ „uî¥Ù;q»K”‰¾ëFGDã¡Ãxøð9¿¹œfm;¦ïöÔQ´¬2ørh }3’Ä™5¿ëù;0•AåëèIv GƒϧÐOxxmÆÎ¢:Öm=ŒÀ[×óÏ3j»²Þ?ñ á«S1†5õ46< £;þ‡µŒîý¢§%KÒï$^ dß‘ý੘œuÁdÑ«×ßRƒä†ùù'wM³ìͦÜp:I.lž-ΆôµF"×–?†ªnW¬€`L£ìëÒ1ÍÐ ëá“ÆAVa/E4úX'«#x®&ʵ†vJ*OR•¬4_÷ü‰®hÀUOÔé>€=ÏFG÷‡0Wx¢‘ìÔ»_ý¡ú3ä‰ö}w¤Våç™{.A¯¿Úë¯úçi´!U—¡hÎh—g"Sù§ìL‚]¶ˆÏ•-MEšZu冦)%”² ?ƒsOÑÇ$}°“¬+YE“Èè=z!"H‚¯ô“]*•Iâ…¯ Ʊˆãµ&ön¨+´5¥•÷ýƒÃ؇Â%ßÒÝÂ?ÒôߨU2­rôÉ> ¢kžzÓ™Y~Zg|1G¤ÈÉLtïyLDœ žÍü}5ußÌ?Þî¤#Å ^š½Œ†>âNê‰ÿ¼±º6ƒ÷‰fW‘á—ç#«qTÿ¹¤ãT.½ÊÏ oQýZoÅ–Îd ÷|ȳ#÷Ð[P‡ŒZç*BQ€ ã\äh3sxì‹Ó¡.2¼ÙS‹·o°½¥«Ðz ^Ævnˆ v&ÁÈP"ùoŠ-%±åb#©eR“7sïKbS$¶ä#ÄF4»¡;÷%íßFˆ@üæÈiêEÿÓ¦'2fÒŸ€'úýmb ΡAžé…woµ*õÑ0÷.z¼›‡gïŽ ÞŠ”Z‹\D¤LdÂD%ˆ%@ÄçžÞ`;  zK'€• ­àKQ"W‡š÷QØÁµX6‰7€žLèY³reÇâLm!’ž[–üÆ>²¼“œ²€1†c¤JeäC"°Ø¾#Ø%ŒÀÆN¾OCdʾæÍTL÷Ì[òÜßïéûipŸ£›1|6ø÷]ÿŽ_»¶y"úz¿µoæþ¾ÝzÂxŽ+Û`ö]KN"Í>Ès(@¤„ƒ€ºªÿ^dŽð`aéÞèzö:@ë¡‘6 ƒÐõÔGî ˆå"È¿`2&H@Ȥ½‡21|ۨѰ‚4ç‘d"·Š÷ø-È_7[iˆ…’!øîÏ=úDœ£û k2@‘›˜Ù÷,ý£ƒÞ-“ÉE*CfU6®h·$žC"„¹¡÷„TŠº6D^k쬶‰5óY5Å8Ò†| Ø‘ãÅâÂBU¯)Àk€Öž ”nKÕRHAcõÒAÇ’§¾‡¸„’:08$€ -ò@ÛÅp¡$`¶Œ.¦Xf¢ ®Þ­êç`¹ú¶éy¤e-Ù­¸”“sD„¨ühAùÔwÞ\ Ö®N0Ió¼ì»/ô^ç°¶8÷žÞË‚öº½¥ ¨S*xXÊWÏ›Iõ….P–‘Apµ•W›µ‘M:9{Ì«jGdQ31š! º2@¥{L%±×}(ާÆq7&(Ø;tG×µ~¸œföuÀY¼¯á젉Ы¤^/U߉兊fo×}íXϳT$ù:°+R&æJŽÎ£üµÑPSǤHF›ÐÙ¼PÌ ù¡Þýr®{G/Ó¼EUÕ¨'…‡oi( 5)ÒÖmå8)†Vð¡øqH7'üh ‰JÀŽY#¡7“þf*i¯4Á£ÜË;ðÓƒû¹Ø·ð)úÝeéÄŒœ¨ï¤ÓÌä«ÄÕL>ƒ#oÎLŸpÖ?Yl”jø6¡,ñû!;´ »µßcˆYh3òðV\óø¡˜½ ™ÚEp+»S=Áánå.Pe‹"$hÀݵðê0XÆîy’Q>Ô(apóà±D•‚Iy CLÒþsð¢¥Ò¾º„»J!d"ó©~à( Àãëï~à)³Å”2DœÚ™ç±ëšmÐD„; ›Ûçäk¨èx qÇúñÀŠk¤ ,RÝÔyð¬4sÕ ÚÄÝ£k;ô‡D{`É©´U¤T`VQùq³ždbEj³--»,&ÏyBÏŽÀ)±/{o¢‹Ò38]%§ûD/”8(½H€½‡síKÅJ2ä€pJm¹ÓYCåE[Î#ëœòd•ÃI÷]û(¨tù úêÜDÇniõΦ€®AÀ;Œ¿$ûwÔ;tÍ”Õà{Èj°ìT•Olà]…З3¬Á H#j`ÐÇIÌéžWá8”„Px!/m ~„ÚÃ_lH <åžHñùV(Éî¾xýæÕ×o· àòÖæ¥YÞ|¹Å‡…û%”¬¦ý›/¯±bây"±éýÕ\za'¿¡É±š(®’%\ýV "õ“ºð‰\LWI@syUV‡Y®]–)™ŠlºÆÀÞ°åa2_Yd±¡Ò‹sÌ >Õd¼÷©òRÐ(¨3âØý¹ U¦Dµ¾XB«¶¤©áŒ'îð줺­Ãƒ8ºrXäj¸ÊÆ7n>ܺçËüµèa0 _;ÈgÐì‹“2z[kp÷`ï™ð¬"<ªHR«5À“T?Â~v0ØÇ8Ñ­+Ïã•{6p9ÖÝ´_Éè¦á —Îë–nuÃE¾YpJªJ"¥ ¥;|#<ÐÈâš¾ ½T!è[ó²~,Ƴ¯ü"zl#‹]€EžïU±l*zPb¢é ĉùF]žÁoPÊ¿çÝl\b¥A®"þˆ_müˆõ´/^ë݆5å\ùæI~ndrÒ «/tòcÅá·¢/J§°«;x|©*þ6¿¼g†8Iz,4ÎÊEñ†Ž.ôDšaÍ3Íå*P©ÂýwÓ'ßÑû(°*œÕí”KÖýÒ`pŸ®\ê‹û™©zu(|­UfüÎýxÿvt§ÏWJ:W^PFó)(£kËß¡G‰Î‚!N÷z”²á/.îìýÏúÞžú B -øWSå/N¡çá<òÏ8èoÿýD˜j_g}"J°á ל̲^Qs”˜ê`xSå\1À8¢sE³¨V~iÍ®×Úr~¦ Õôuïæóp+<,ãÓrg×îåu–.m=Kü¯› ’;#ýÁâB.=fÎ-†8Ÿqu žÜ$QeÉ®¯B#y¹O¬yý·ÎmdoœÒ6þÆ+ÄI0whôXø>êð˜#™j_‰^žBb–ü%z> zðý‰Ê”*Ö¥øúùkš‰úˆù†Í”á— Sìu~u&®º®{i.düâoB”2"6ú%ýÈ.—Q[G¸Wø/+}Ôendstream endobj 529 0 obj 3398 endobj 527 0 obj << /Type /Page /Contents 528 0 R /Resources 526 0 R /MediaBox [0 0 595.273 841.887] /Parent 524 0 R >> endobj 525 0 obj << /D [527 0 R /XYZ 72 786.278 null] >> endobj 33 0 obj << /D [527 0 R /XYZ 72 458.656 null] >> endobj 37 0 obj << /D [527 0 R /XYZ 72 313.702 null] >> endobj 41 0 obj << /D [527 0 R /XYZ 72 292.809 null] >> endobj 526 0 obj << /Font << /F33 497 0 R /F15 393 0 R /F27 394 0 R /F39 496 0 R /F28 523 0 R /F30 512 0 R /F37 380 0 R /F38 495 0 R /F26 391 0 R >> /ProcSet [ /PDF /Text ] >> endobj 540 0 obj << /Length 541 0 R /Filter /FlateDecode >> stream xÚíZ[ܶ~ÏKÿ¼Eveñ&Qúà$Þ`Ç)РТ-íŒvGˆæRIcgûë{nÔe¤õبS´@°ÀŠ"ÈCžÃï|<µJàO­2½Ê|ëֻ̯/ÔŠÿ~^…ÒwPÇ’Ö™ØY|» x$¯‹}êPþ«»/^Þ(·RIœ'ùêîdï6‹n÷/®¶Ñ¡Ù” MÔ¸ª+ëúÅ?îþøòFg£/3ûÜÉ窫{štot¬2%Bï·eSJŸÛ²¥¢‹þž([—-×A †ÁµÖEWn¸¦Ú÷ŸrA>|j»rw…UiTpËú°ÇÆÇSStÕ¾Ó"ΧöTÔõ*¼ºVI'i \¯œTݨPšñ"¤itêdQÉ•mÙaÁG§#>´‚®O,ÉúÔ©-›øÅµ³6z…í´W;8Ú—å»TITív如ê'–94ü<’Ú¶ºM5ˆ¡Y“Fw[æáPÃÐ0òûjÿÈÝkt +~ÆV‘>ÖÅZŠ´}h@Øà¿?_ÏaŽ7ƒ»ä °&ØòùµVñù8>¶Þ]v5[g/õNk¢³t°ŸÎl°ŸÎxïb{S,969V½{á-šª¸¯ËlS™‹µNÃ@êÍíW?}ýÃÛ›Ûo0.Sqf‚ìCsØñ2–‹ŽÍá±)v_¶\_îÑ@ïªæ°ßa9:42 !NˆNÛ4ÎS=q8Ö¸>¡9aì€g·­Z.€ë§5:â•¿°w•kS¨"Xƒçk& +tu,ºí¾Ø Uðc®F à àÓó%5™üøP¼Ð>Nûµœyè !R^'Õ¿ª“ÞÂâYؤ´¶X¸àyUÿ‘~g ¶f"[þRµ]{…Ž” ƒ³`Y¦"÷#G ½ü¼GG| º¢çÌ”…š `qŽ¿×±€*¸ë6,PSk—MœxøÆ‚_‰WîË l€,SDB¬Õ€ª-ÉØhêYE›&›n=Ój†•ÈY ¨í1ÂÚ$Lª‹ÈÃQú¢µ€')æqL–¡ù$“‰ ë@Ûº†ÉÏmé’8±½3“Ë7ëC‚œ6Vä§mbƒ ш/[.o;©ÝT lçÌÈ[Ø(שËÅ×\o?;Q³>ÞãJ–lEm8Ž•Ô˜Âzw\O«HîdHaJ ©Ÿ,Äc}¸/°/ãæÈ`M¯ÂƪÖê£Ä¤L4p¹…C[“7nù­ç-JA™Ú«ßt€Õ°ã ~Ì1=ÍLM…69Ö´§õx o¯„ý`uY€Ã[ "-ĬZëòA>/ä¹)ŠS݉ ²ÞÅØX›ùqX8ßBq¦³)ÃÃAö¢uïÁ k¬7Y’‡Cƒ èÛ=ám ,S8 `ÿÄûq§¸)øÝ‚—;§*¨¿¼9ì»o`ˆ¯pˆù<|«aždf´»!@`¦J­‹=›D´êçÆèz%ÔpÛÃ\Õ‰§œ©|­ 0š|ŠÜwê§[8¦¼©îÑF´Ä ÛTƒÏ‡mÚÀ25{9Füxûã›7×¼-)ÁªÓi3Å ƒ¯§–ߪý¦nÍXy±çʦ!Æ EðÙM…ÞJg,'„o±ÁE%šŠ#½ÚíáT£_XÚB{.Þá*Ú4¬âº8µ‹Õ ˆrvùÜkUîň; Êö²ã3¥…bÚfÅ© y#Ï‚"öØŸV¢âûªƒIt,NKƒbm+g’Š71C¶³±ÎÏ0à!µÞñáíö›vÊ §ÍrÚžs2còXà çRõy8™ùU9Ù«¶=íd1=¹&<ækÚï4à”€í‰{އe:Ì  Ca´ùdNžû)°rþ·Â ©•»¦óÝ»pŒ³`‚mSŠ;Áù‹ëVBçÀ«óƒÁ˜›‡#Á±hZ> ÑÎ PÓ”uÉÄjøí˜ý®'ýš”†ÂÎÖxæÜüwؼýU=çÇ–Ý&7b´\G!ÎA±Ʊ®p!h}sÃË­òÅÒ *'¨+áÐAt´ám›r9ÞåfÌs¸‚ }.¹Éºl[æÜJ`Ója|å~-¯èœHþJvD¢ÎðzGþ{ ‘«?z®IŒK»êqè:¼RNƒ‹÷ã>0EBdN³ãBûöÔˆž¦?O§2R36œQ 'Ù)iÓ”bŒOLôêæ{–ì=6•Ÿ€† ™ú`M¨Ûœš¾—iâ†ÀÇI4AÏsݧû 𠀑á# F ¼Ãä” ÁºQ×HºQæý6Ñ#x@bæ؈M±æX‹Vu»â8Û)0¥ØWù$Rì?DŠõ)ÖLŠýåi¬¹ŒåÕFP’R/Ìò(7­ÇQmpµεMb.Gs¡u!°'ë}ž8VÅIÔA”¼ÔÉI§Žùš‡ÙZñÚƒù¬$5L¬_\+ ŸaçœMl§j>ñI×0qßóѯg°åMtSÕK<ö:Oã,ËA§$v9ëtÛq’žÜ\‡ü+ާw(l_¾È¨Ý ²Ñí]ÊeÅ@Ρj8ŠÈ0ÔÚ BBð•#œ¸óÉŸ)%ôÀöYØÃó4ÜR´‡è$'×V»c-VíoÛ5á$hC_,šÍÅÀC§£{? cË;I÷†t¢ÕãtâÒÉÜûå1±<¯ð×4rÅ"窱ŠOÁPè_ät%AVJUd>âÏ}ôãÛÛ¿pGüû]„KŸºÁ4\ÙtE%`$©ÿAV*$»±îÏÜ ¾äƒR¤ÇsÛh¤®ØÔ$‘øõĕŤm¹«hN“nz7Ór€¿ÆB`¹Hî´¶qr9žÏ~Ý¢óØæþy~÷o’ƒ/endstream endobj 541 0 obj 3459 endobj 539 0 obj << /Type /Page /Contents 540 0 R /Resources 538 0 R /MediaBox [0 0 595.273 841.887] /Parent 524 0 R /Annots [ 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R ] >> endobj 542 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [357.704 734.136 371.643 745.045] /Subtype /Link /A << /S /GoTo /D (subsection.5.3) >> >> endobj 543 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [416.972 734.136 427.881 745.045] /Subtype /Link /A << /S /GoTo /D (subsection.5.3) >> >> endobj 544 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [398.297 621.663 403.03 633.182] /Subtype /Link /A << /S /GoTo /D (Hfootnote.1) >> >> endobj 545 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [463.089 454.992 467.821 466.209] /Subtype /Link /A << /S /GoTo /D (Hfootnote.2) >> >> endobj 546 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [239.339 314.716 244.071 326.539] /Subtype /Link /A << /S /GoTo /D (Hfootnote.3) >> >> endobj 537 0 obj << /D [539 0 R /XYZ 72 786.278 null] >> endobj 530 0 obj << /D [539 0 R /XYZ 72 716.71 null] >> endobj 531 0 obj << /D [539 0 R /XYZ 72 680.645 null] >> endobj 533 0 obj << /D [539 0 R /XYZ 72 551.858 null] >> endobj 534 0 obj << /D [539 0 R /XYZ 72 513.672 null] >> endobj 45 0 obj << /D [539 0 R /XYZ 72 426.178 null] >> endobj 532 0 obj << /D [539 0 R /XYZ 88.587 132.837 null] >> endobj 535 0 obj << /D [539 0 R /XYZ 88.587 110.919 null] >> endobj 536 0 obj << /D [539 0 R /XYZ 88.587 99.96 null] >> endobj 538 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F28 523 0 R /F26 391 0 R /F33 497 0 R /F29 547 0 R /F40 548 0 R /F43 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 553 0 obj << /Length 554 0 R /Filter /FlateDecode >> stream xÚÕY_o9ïË}… ÷âµ<ÒüЇ´M¶½kÓÖÀîáöpm9t<ã‘›8Üg_R¤Æ3ö$é=‹‘F¢$’â¤hyÀŸ¼HÕEš%B¥ÙÅrûB^Ðß— ßû;Œe‡"Žðë©§œ†±È’ø9z™ˆ0 iß7ó³Û0¼Èƒüb¾v4óÕ?'¹ü×üo/næÝ²XDqü<7Hõ6—ñÈæ7zy©²ÉærÊlR•Á^:i­nlQÝÓ—ù¦—¶<ÑCa7ÈÒìV¥½eˆ P¼ïíç»ù»ëùõ›ëŸn^õàü4¹§Ý^ªt²o-Ÿ¼»œGfY¬ù@MͲ.ëjÚšn´5+ϱ_W¯id]W—*ŸX<ôbª¤.¦o&wç­´Õ Ý:I£É¯ŒJSé­iiÖCNìÆP§1[]T+ÓÐ'ÔÍGNkâr…é䮦¡‡Mayu»ÓK&,ø]–5jýÿ‘$Ñdbƒ¦-*ƒ&L5¢æ0ÏA„U7¦Ú\È(ãy]­HQ‰$z Âp²ÓvC=§ü•jYj[ÔÕ+šZì-ul£‹’L#T¤áQÒ% ½¤9 »®Ä©)Ãa€@¸ž(i¨þd€Q`Ô0ªõ(`¢\¤A<˜_>Þ¾»Y"Mòب3Ø(‚ƒMØÁF¡5P¾Q:4J`>y6`LCØà´ÝhKSzµ1 “ÙÚÏòÊæwˆƒ_¤¤ùõ}±Ô%ÍÜ^f!Âäá-ß<¯*Ða[”:¤ºC`s" îcÇ|µ*jUž#ØéP+jqˆm»lË*O-ãÐjqpAZ·<‘>‚Z•J‘…ê Ôf"“jÓ³„P:Þó¡!”î2;ɲ!ØÿgÔv’ŠN¹©ˆsé¶›o8¿8¢ƒ¾nV8˜LüdU[êèŠ'àFØÇ@¯»âã>ôáwÉ¢(Ÿ€å‚IáGL K[u\º³ØÔÔiq‡÷&œss†4ºœö Ç«Ê4èõ+Ú>j&EúÀëqˆã ´Gà—É4}Ÿ-Ì(ašx÷ Ä>Ì7ÀdK$º¥Õ€Y&õ§™¯NMÍ>~°ÓZk¶bDšŸ,˜“vdZQ :*€‘¦(WŒr‡ðp²Õx+šaç¡QšÑSD«Ñr‘¨¨¨­+CóKIJŒî÷³bbNçxžoŒsl1n„üš|,Ž$nkXéÓÙ­všGOòŠÖ;n°¦VWÔ’.°×»Løê' sÆ;´Ôž îŽBoç œ…ò=4º–6;qY>31k½/-a´í.¿Ž·„ íq†6v¿ã(Mü¬ë†çº ¦mÜ•)Ž~"8Ë0Aú'Î×eIòÔè/¨‹~ž¥Ôwt÷(ˆ5» Cj«,”eñ„lq §…aJV’¼“M‚;޳ÎZ¢8ï>–x‘à´ÃÎâùpëÅÎÓ“·ÇÞÊ,KMÛ¶4‚Ž%Åh«¸7{h™Š&xk²CÇ# úÏ´Àò$"GyzæÇYA»I<'Ø3¥Ù¢¿Óm‰¦àv±/œÉQAèAÿI~Æ\KªúrìItðî–`Á9 ‰t|¤Þ±¼š—÷9‡ÕˆéËÎÑ@€‰8ã`‹äm wñj`âÑ’Rz] °*‘BÈŸ&)´òqk~ÚÂãž…oáóüx#_Ïöm3ß?¯`ÛÙü°3òj¶©·fLÓI5‚û o~ÛCÈ‹!Z–æèj"VÐ8æ:<3PL{¦’ œ»H”ú3bLü½ óPqZSnDX˜ C×)*N3qAµLDvž£É.ë†Ì¸ÆÌœÎ ó~Ö¤àsXÀ}åÒ…ö"Ìö˜j‰—°ÑMÃg–åVø%»ÔÏqJ©_.Éö¡¥[fž9›LbDCOÁωs2Ë0'SÅlY®¶-èÔpÕƒíoûÚ%Ù†No¡×ÚÆ%©Ø÷.áæ–îÛnnUïyç€v䃅X5öjNrÏVÒË%ƾޘÖÒŸ±Ûãš—ÏynŠwïM3xî†ô 8Æ}štö ƒ~ %Í!W>©Þ—+NÉOãdC×8ö ¦éWluIËc.– úvu&ffÄݧHYƒW\ÝsCý{~ ^Ãò¹šø¡„‡³š–SÒ,šð–rVce*Ð]žû¢“•²©uq?æBc!3ïc]Ñk¨FCÎhàG‰g|!_Èë=ëúýçO7ÓUh¨›Ã£F›†‚èÿËdÿJfGåìùVSCÊéMZhS®‡Q;VÂûÂ]û’Ar²1-/°5uøãjLwT[@öïGÌ´‹n~ ~Ær¸òÁ›.ȳó}oàÕíl{Ø5õý ñõ›oð±yîToîÞ~~÷áîqY/u9ÑÊa9Çx5òž¿¾ýôÔ*½Þ^‰ÇS·ÇÖ{ë´E«ŸL}¯)\“‘-a«»t Ó_o½d¢_‹¦®¶¦ÿ‡¤9[)ôÂÃuXú À g>µ˜ËÞüûíç»Û?Œý,¢ø ´œDýÃŽÙ¸÷^XˆW#LÀF‰ñI(Ø}e{î³åFþ;{ êÁI¸s‰Hr/·]¶›‘}”‚žÏ]Y†ÑÍ 'I0À|ÛÕ˜Nœ ðú»xŸf=îØZèÇY÷nÑ’³É Õ{–+ªÿ‹Nüs‘¯åžWŽ/\™rE«·êü ÛývETÜp”.c@mªà¸/QõŠRØ\D2V j®Šg“Ÿ7¦âŸäŒu?mœ+*OEÆßmÛ2ó +xk]uòRåRl¬¼RµÏÞWÔ‘\…v‰^Spn¹â}¸Øˆ+)…ÊŸ7J]¨F’Ö/‰äð 8ù‘¬(WÞ|Ûip¹uåŠá䮶ŲsÚŽR‘9LºàÉnÿD3¡ru6"ª|‰÷˜Vx^ñœQvNB!z9©ÀëäÏUÕdx`ÏÕÕdpz„BžÕu»ßIÿ endstream endobj 554 0 obj 2590 endobj 552 0 obj << /Type /Page /Contents 553 0 R /Resources 551 0 R /MediaBox [0 0 595.273 841.887] /Parent 524 0 R >> endobj 550 0 obj << /D [552 0 R /XYZ 72 786.278 null] >> endobj 551 0 obj << /Font << /F33 497 0 R /F15 393 0 R /F27 394 0 R /F39 496 0 R /F26 391 0 R >> /ProcSet [ /PDF /Text ] >> endobj 558 0 obj << /Length 559 0 R /Filter /FlateDecode >> stream xÚÕYIsܸ¾;‡ü•sa»L97§<ªÑÌ$‡XI¹*Îj¢ÕŒ¹t¸HV~}Þpi±eÏR5Õ%ëððÞ÷ˆ«~âJË+&ÔéÕ¾~%®ø÷ùÊ•~†6«(P1Ö¾2Ðw#ýHi¢püŸo_}w-“+Y˜]ÝhìmñOOQí|!”ðnfçGiä]ï²Äk›]$½[ÞçC~—÷Ô{×eevÿºýé»k¡V4}*SDùöXö0\¥3 h¸P·-} E\;¬>í|©½¶òf'SZÚsû퇼ÆW†²6ÁÎW2ôn¸eŸW-í„O"Šp ™1©Ì+æc`?-þš+w°vê™}>RwNdêü3îÆôxd<¤@þftHGNG‘W˜}•w¦ÀšôʿˆØâŽ‹åÏM‹d®­ýmUÞuy÷´K•Õ±ðþl£9´Ÿî- TÉ<#ï{ ÛÙ—ùPÂÎ芢lqEQ¢¥{ù…ÙÁµã–wJzTÁ­Çžk°Ó£ÅôDHÏþªp'±±r„qÁ°ë†n†›÷é Ž%4(ïе5gnã æv€ÌQV¸¡Ÿ'òˆþdo½Ä±û‰lñÀ_G-E—·m©`Ί€©žH>|{ˆ•”t†¶ÇÞ†D?нÜèþ"ó%ßÜÖ•é¿G‚¯~¸Td/­¾ " ¢$b¬ Ý_Ý¢Óý?žÓWA¬ÔׇŠâg ÀÄ)ñÚd&=ŸÈÛ·¬ÔyÙôÜ‘ó‡ï íKâ$Ü/Y³Ì½é¸a¾¬Ã N&æaˆ5þ¿#qÓð&qÀBU±yVUìDUer(XZOÈXö\ûI ð*{¾@¤‚_ÜI·Ô Î(€cYö ‚õAQvjE*&-Ã}Ø…H*H`ÃG!üþ©Lœ_&ðìŠL‚0‰"óŽ\JP«¤„•]"6Ä(.„ˆøIqíâ~ 6dä-L4›|¿“‰w$} -,ÐpP`*ÊóÊ€ÜúK‰AÆôã;ŽB‘ãÍd´i,Yó-öÒ +ï.õCÇkE)Áiaª².”Jì¾Ã5ž¸ûñívÖ)ß]?‚#°ÔÁ:ž ×¥î»0ÖDF£aÚ¤$ܘ»- ¬5ymV.ÎÇf­M9}Žû(çalïô X\"ú\'bu’:l 4Làþ¾­ÉF™/ƒiúÉÀ­d ì›NõDÐO”›>ËØÁÎ;ô<Ðl‚Û0)éj½, ²4½¸ùÕZ«Íû'ðN˜3díÃxæ;VȾC§õ3¬­­K"¹’0æV†ZÆb ­9V&«$´‡ƒ­X¿; ˆ8rÕyúBð`Ú‘àKL.I;Tá@½)ÞZMØäV¤dÆ0 ^º—Xi,–¦VØó!à ÑŠí,⠢©Á·ü$ç Z‡±k˜³åpÜ1'K;òíVFnw¸às2R™Ö3•»-*JéZøn¾  e^•ÿµ^© :IWš~-,-{Ħ±¬`nI‘à˜n:¢l&©ˆ,[¨ÄˆEÖŒD³çÑ™~¬ Er}0!@„ ©¸Ö‡²Ù£ÕMSï~µ,àÛã”ï 6‚ÿ"’µ¾¯mßBß_3%Oü>£X¶n,¸QÃýV±[¨s‹ÄX™“zÊž½R¬ìÛúT™]Aˆ™PáJž{íϹâK0Ò14­€@@°å%KÀWç%W-{OŸQ¥RôrPíSæv°É§Ó„ò°!ÁCÛ)ÂJåÂÇ€Êã±íí‹>P*Z¦Ú´vÊ1ŸÄ-³=qef0÷ÙY¢aЖ….:L - ùX SSŒV<ÙfM.䃵Ép2g÷BMwLZð÷¿Þ|´ÞQÙ=&G™üøGì«(½òbèä.ÄúˆÛ 8¶ lÑz/Ðo%ø¾lf"Ä㙈æp›Ûž-°rhl7âh_£2øî‘Sv˜ï›¶coG2Ðcë¤mx‰k†¹ûUgA Ú,ü( hë¹xêÚû.¯ØÖÙû%L}xEÒZÆX+é kf,æ maú}WZËYpÎÔÛ•†Ärq.ÔSs3qZœg@•±)LGOâÂS¶Å1l~´‹—öË|&Aª{TTçfáû¯t鞀¯whCd’Y‚¥íÐFë “’>ìËkŒn¶=¦T8é³17ßâ–|Jç­H’,áwì)PƒR1²¤ÉÄA?;3­ØIaŸÝ0 ‚mÝâ›7<î(ÙTð… ‘u¼vA@vè&÷¦ïÛΚ«³4š/² 2ÿáKŽ€“db˺ÕŽOßsFà a ‡¨óŠeü0Ã3f•æ¬Ô–¶}øØÕyÞóÔ«&ª@fê2 ½ RjRÀ­4È’d‰Qñ$JphåÂä‡*Èõ…®òr_ñB×4íŒÇÔY”€æª@A2§"¥ž#,—ýV¼!`– ÒÝlØà ¼!;ŠDwU›@”Z‘zâBg™hù÷ØS_äÄ3^ƒ@×SÊËT16âx0ÀžÚŠ-ÐX+È¡Ÿ|€²ä†s !ŒrŽï%‡C¦¤œ9m+-E RµNôMº ³Ì“[º ai½Ð…0E]Àr~Kµî¨¢ßFDß2—`¡2t.8£Úóà¼aùéT•.·'1wÜÚeòÒŽãÏa¬Ð˜¦ÌÉQSÕÿ¥¼?Õ‡žïû¶Û/‡½ß»1Žñ;¿A-«|ÿO~H¿ü•}›¦*óá*ÅK€õßTx¶öÍ,ÝÓlØÁ›—vP~óÊoÝÂ{S—pz-•÷æÂé ò ‡W:y v7WžÎŽ«¾yóÂúå7¯¿Àöss rŸŠxz»ŠíÛÕ»j0]CÉxp­ þÛÈoXem>˜a<õßðtE!yæu#«ˆE^½@aß¹ç‡m9WWžNãŒPæ’gø†€(– “X>o³/¹jß pð½86Ç ¹å¦Àì‰ñÅÌ2¾R¨ÉZ³D,*˼Æç’Ò÷ÐÊCÉx[>åü™„ƒ*MV—±´@záêj&°'» ;ËÚ«ZZJ³{”6åÌmÇö/ÂÐ9ï9\Ô“V õ©0ã>êq#ežrJ¨X2lÛí¢æ7);öÈIñ3 ìíXÙ@w¿(õ–;[Ìñ9¦ìpc¤5”?,­“Ïxrñ®œÞŸ s0£g¿ã’PÆq CN€„YúëeRÑ3šøÜÙoËgJ¤!R±€`)ÊÄ×2'RŠ ¢”⋹!Î’à¿HùBnæ ­qœendstream endobj 559 0 obj 2887 endobj 557 0 obj << /Type /Page /Contents 558 0 R /Resources 556 0 R /MediaBox [0 0 595.273 841.887] /Parent 524 0 R /Annots [ 560 0 R 561 0 R ] >> endobj 560 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [246.132 134.539 251.586 144.236] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 561 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [395.787 107.44 409.726 117.137] /Subtype /Link /A << /S /GoTo /D (subsection.5.3) >> >> endobj 555 0 obj << /D [557 0 R /XYZ 72 786.278 null] >> endobj 49 0 obj << /D [557 0 R /XYZ 72 761.372 null] >> endobj 53 0 obj << /D [557 0 R /XYZ 72 195.909 null] >> endobj 556 0 obj << /Font << /F26 391 0 R /F15 393 0 R /F39 496 0 R /F33 497 0 R /F27 394 0 R /F43 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 565 0 obj << /Length 566 0 R /Filter /FlateDecode >> stream xÚXmoÛ6þÞý #û¢´#R¢%!Í€¶K2¯^R,î€aÙ¦m®’hè%i6ô¿ïŽ/¶”*iQør:Þ=÷Ü#&tÀÅl'cÂâd´(žÑ‘ùù8r£·°f,#áì+†¾³ôCN’1Gû׳gÇça<¢”¤œf+m;[þå1ú”²È{uè‡qäýq˜Fž¨îqƽkYlsavÞUj]eE!Ë5.„ÞÙ§Lïþ=ûõøœò H¤Æ»ÏÂS®Ï˜mÀgÌ[© ˜öŽR¿bæá­\Š¥Ý±>šÍPb,JIG6f S=[t¡±µóëvn*#+±hÖ@ǽڟ¥KY7•œ·T6q–’)í%žÕ‘Á~ÂÒâ64JÁ³ð|¯d¢eƒ™Xó¶n k1 (Š™,T±•9ↆH|*°áÜûò4f+U™cœõ*«—rY~ÔÄ´;w²Ù˜[‘Ÿ0¡Ѻ¡ª ` '’ œYCI6TŸ põQÕ0 á8ì9ªÕc•N¬Ý„†^%ê­.8  ‘óûÃ$B°£(ò®JcW(lyõ}݈+rÃ܈ À 0ÒP<;›í•‰“AI þ„à=®m _4aFµ¦õÒwš¶X`?rÏWæ¹§–]Ÿ˜'!ÇØålˆ{{ÚÝ÷óƽBnXŸ1]K £Þ¨6GŠÐÔ["Õ@{dƒp†©w~˜„XDX ³ùdÔ®”¢\ ˜ (•Èj…’jM¨xtúâ·ì£X¿‰,‡ZhL¢ÔñGZ§²\ä­V •2ÕÜ«ª5îhZak˜Žç1a,ìÑ}Gˆºi0„ÑgÂʼ•¹ætWÛ(h5¹ÈrÇ6ôHÇ$™íú{…à4ØÌÊ(J`# q„œåø½À;`ž›ÙR|hTbr Ú´M»5Ãù­%g;‰`º÷Ûr©½BÀDîÈî}®Û*Ó‚‹ÌÕ\£8ÚfndãøFmë&hØbt!1`­”ÉÑ@¶ÌšlžÕÂì™mcÂ×Õ­gy­ì¨²èçæûºÈ]cX‘¶‘ùZŒ¡ÅØ7|,Rèe÷Q1ߊ¸ÃWÉ^ûÛîõøˆŽãïé# _iÿ-§M»¾¬›¥Tdó“>èqêKKè÷o2Õ÷´„¼ãçfýR¥º©p¼‹<3|©ÍÊócw‹I&¦#ËÆì™’ñÀÌn•\ÂŒvc2ŒùÏ´ Õ…èzº˜þùî{Ò:¿ßnNÚ'O‚q ] k¥ÚÊ Dy++U½ßX•Å›Œ6ø7‚Ý.4ÌJ®Í¥ÉB²’>·-x¹Ýq0£ÓÉë›7W—ç“‹SrlJ`ü Bý<Ò^ï2[Œ¹lŠl[÷C§ãÝf}d·6.T±ÊÚÜf3ö¾É½dÿÊIÌè @øZ 1쳡ã/CîC?AÁÈrù¯p_¨ÝÇHk*´Êâ.WÿªR¶Vj±h«š˜É¥M6Wë}!î¤cìÜÜ\hlz´“ÃZ”¢2úÑÉÓïZBº0Kü…ä1‰©œãìòêfzuq>™žaæ§§—ï§SáoŸÊ³WÛ ˆºÂ÷¡;!5[žƒ:V‡uº«/ZexÝû@èìs¤{)× â>ÝÛøÑ|~¢\çtq+¯AÃ]“•ieÝæã0¶õµ‹Ø»ÎSõÀÞº‹Ôì`&êæÀz³10n+½µŒx_[_oEU‚3»<Ó]d[lûͦL÷¶pg„FÏvWÿž<íªá"î¤ãjªÚæq^9¨jß9ò48±£—À° Ñܔꡮ-ñ¨ÛñâIré€NM‹^k8;§8¢i í$xð„Wßžý~9¹¼8r·çè}2¬ ?´xþþȵ~'ßäÊÕÓý©Ñ‹U%¿\Ó# ‡Ô‹»0µSÛÀ Ö¾,:9tÌ??¼€7ÎÆúoϯükƒ1JB:î\ü×Á\({x \Pùãÿ<ù{³w‘endstream endobj 566 0 obj 1670 endobj 564 0 obj << /Type /Page /Contents 565 0 R /Resources 563 0 R /MediaBox [0 0 595.273 841.887] /Parent 524 0 R >> endobj 562 0 obj << /D [564 0 R /XYZ 72 786.278 null] >> endobj 57 0 obj << /D [564 0 R /XYZ 72 761.372 null] >> endobj 563 0 obj << /Font << /F37 380 0 R /F15 393 0 R /F27 394 0 R >> /ProcSet [ /PDF /Text ] >> endobj 570 0 obj << /Length 571 0 R /Filter /FlateDecode >> stream xÚ…TKÜ ¾Ï¯È‘H  !Io]µ#õuêH=´=Ð<&h3aD`Gý÷µvšÕ*ŒýÙþü ,+ácY󦕔7mÖŸv,‹ß]öOú ºˆ¬jAë o¯‹JH*Ë:+DM[Y#þö°»Ù³:c%íÊ.;L{~ïy[‘1/*ΈÚ6J²›•‰uD¯ñts0•¤÷ÖŽkÎ[’ƒ¶cïŒýóhToñTñøY²jó_‡O7{Þ> endobj 567 0 obj << /D [569 0 R /XYZ 72 786.278 null] >> endobj 568 0 obj << /Font << /F15 393 0 R /F27 394 0 R >> /ProcSet [ /PDF /Text ] >> endobj 576 0 obj << /Length 577 0 R /Filter /FlateDecode >> stream xÚÍW[KÃ0~߯ȣw\²¤k…¾ˆÔׂDdÚ ‡Î‰Æüõv½ž¦ ½lS[h›Óäû’“/ç$œ £›³±`c×1vÙó¢ÇYr¿²ìë6²%5¥’ÛRMÅT.xžÃ#®£ìõí ¤R ÕYÐ;¹cƇà =Ìâ*Axt>YMfËÏÅduÚ(¡Žþø4_ùÃ㢸YM}^”×ËÏðkþÙœÂø1 £rÿ!¸‰€|;L/&¸zÛ|¼\¿Ï–)þ‹ÏÝ´ÙÚ—2ýŒš‡ÓðΗ®°tAÒ´Ëb%p*FÛ"DWöÄ®hiç0ùƒÙ» Úá  ¿‡ÿ1·e[2´‚‹Ë©‘¨‡šM:1£8É£èr§±ZáZº.sP8Ü æ}¤3Ñ ®˜½òÄbG8³ìR¥tô]UÅV¸:I7B«Ñ æ+ꤙëˆß‰“ÌKŒü2ÀýmºP\KެOuÓÛ-ì–De@‚a[]Ó@€’ÀaH $¬~ÁK¢ÃÑà–g<µUÖ…„ìô Šû"!X42‰í{&KlÔ9©°KІ£â $ù«L½+IeSRÍs»˜Ò&‚žqwAe$ædJ¹7,mÅöARU—æÓ2i¢`4Š‹z¦²¿iÈQ  áÊû%BBÖ•Ý[½‹ ? F|Žç¢îä)‡wȹ‘+ù‘KBŒ¡ìgÛ4V¾endstream endobj 577 0 obj 552 endobj 575 0 obj << /Type /Page /Contents 576 0 R /Resources 574 0 R /MediaBox [0 0 595.273 841.887] /Parent 572 0 R >> endobj 573 0 obj << /D [575 0 R /XYZ 72 786.278 null] >> endobj 574 0 obj << /Font << /F27 394 0 R /F15 393 0 R >> /ProcSet [ /PDF /Text ] >> endobj 581 0 obj << /Length 582 0 R /Filter /FlateDecode >> stream xÚÍZéë¶ïçhÿԢό(’:ZäC®×lÓ#À[ Ú¢ÐÚ´Wˆ,¹’¼G?¾sQ’×Ú}¯ ‚ ¬xŒÈápŽßŒ¬W1üéU–¬²O£[¸Ù,ò»¶óêjÆ)( Ý~ž®¿/{~q\¡)žIªf[mÊÁ÷ß#ÛB÷­i­,ºx$¬8Ü]%Ü÷Ú¦\œªzËÍêŒu¹ XfSY(Å}áÜuM’‚á¶á'sˆ²ÛûÛýS?x”}Zˆìq!”mš†•ó¨?$‹¶“÷îèÜÐhZñǺÚT± }žox‰mÕ— [8¼³.ú´®ŽÒøïûQþïÛS·!ãÉ]Tvž=qªÁË|VË­ß•§zàÁû+—Fe} KõB4Ü•DaÃýÙ™:BgC „rît§†—e͟딜†—4†^ÎYéydÒn“ UÀÌÏÈå•è -ªSU€±ÏW¾†ýmŒìõ[)ï…ClË6T[l¾"œ+ëΗÛ'yÚƒgÒ’›S?´i·Í¿bm÷§ŽXÁÁ$‘Z6"má†<{”*¨ð¦‚…er×ò±#Y8ʶÊ[:†qZ6xƒ9ŽNWââ¨Á‘=ÀÄt+.‰@ní‹3»®=pk\¥?ñ=l«Îo†”ìÒ±‚€h”,Dsך+]ßJžh¾¨úÐU·§é ÁŒŠ]~vò¿ß‘m$Ž9öf£Ì)Sïe(S…Î… ⨧0ô-žî¡ã†¸RÁæ@v_umsÀv LáùÆå£ÓXÅ6DÂýçëÏþóùßþúöú Le‰Jr-´âˆ;|ÊvÛ–/‘ þù{1Šô¬S©us‡Moƒ‹*·äXSÜ[z®‡¨º ÇÐÀš¶ ÇøD}LñTþïªý©´ËUš·IÓiw–Þ™XÉå2Zd´Úމ¶íø)ŠÎ›d±ÊÍ´Ü+i/¨.RKøÃk®ÑØÑ™\Ø-»eÃcâÀœºnR ˜ <Û‹>°X'+°c†7{J廲~n ¡FžC#ƒÐiŸ&É–ŒÿØ·]õY3 TÌ^Ë=ǯ ä5¢=НÊÀ5kU –ì&“p݆¡¤Ò&?oP–Dß\¡ãº€˜_TeÝî‘õ,À’ÌE7Wxûýž¤™Ùè³Ó0´M¿ ' ’X¹Âi‘Óà´ä„UKHU·Õçr-:>‹m<nbIò9ð©' ÛO`ˆ•ƒ#غoÂľnoi] a ê*ŒÏ ǵ5©ð{Ó8 -Š ‹Ê_ƒ¶`30Ÿ!ð›“èt‰Ý #pÍ] °£c¾`<`ßž»¤¢ðܴ䣤æR,›6š„ ³[ßoÀñ²l™ j^ŒÌ€Jÿ€Ðé¶÷aÀÐ\Y D\3¢g² ­Í|³ñ‹h+Ÿ@ÔüÌÐÏLî! á^eÿ]6{¤½€ªmãQejRHÜÁ][×-Êm‚CÇ Ó=÷Á»ÞÉ$è“÷·œÄÀü]I@Ü <Â'z€Ó¤1¡7Ú» ×F´0Ð˃OÙ ²vH'ž]EuðÁ=Œ¤ ø ÷‚.š]]ÛÔÉŠ/¡¥µ6újôKÕ¹§¬«^<é£1BÛŽÆn‚±ã4zÿ{dû£/oÆäM»( â&ïKsÁAèçt˜Ò[cÎ\‘ß>ßÀ) ·ýbÓ×±™”[e„2€ ùªó«L¯Uä…ŒƒÀ-Àš›äc’kIºÀÚÛ«"EÆ€qýEàÓ‚‹Íó—·Xepž—ŽU¡}œ<ó£¥)õ²ãea[£Gád’æX‘-0Û‡hIŽÕ†x‡¯$¥`‡=8”L—·*Ôn;JØ`½å+êÙšìGp(è,MÉÿ…ërãIas©j7æ*80¼þ¢çFA[Ð-´b~À±9üÅs¤Rh•Ž(GpЙæp2ý«%¨ÏP¥~ÃlE‚̹.ƒé$uïF®žEÙ4ƒ#†rÐRÚ™«$Qx̰q‡Ìàú &i¡=0-ª =CL9ßÈMÈ7òoÀ!—’ÓOèÒ²ŸÑF3ƒ-ÂA§”-‹xÒW èàóc¼ù‹xü—//ݶjÀNÖDzB{Š1>ºxAxE®l„󸇫µNÓèi ª¤*Op‚Å4oH– OHH›~×vòqÂiiœL¬û&“è?'{v‚ž§_à>„¦Ø_*¸©¢µËß-ÂXÁ"Ay(Ÿ^‘B¢•µÉL Š1ö[¬ ±v®Ð+“œ]•°!!&À˜ŸAqÆS±J~ÌÔI_T{¥3÷ºÞë`Ÿ°i^”ñ<î<* ³˜5gˆ‘e6ÕR m°fQÔ1–ªÍÒ•Q…ãÓÿf9«2”ÑD„’tYô®âº¬}O˜¿ë¥`‰ßEÁÏÆç’W³[Jžg ã?l4¾ì¨hùT‡æü[ŽÄb3^)¯ ´ê7§¾—âÿE´/¢Îʪá+….„·Û+ —áª÷þy8ЙJM¶Z;K¥tð‘œYÇBëëWü¦SZ_¬Y€+¶ïÿø ™ }=}Õ1‡ÂÃó³l¬ÒXVø?Ù¾dši^dúåµ.¹ p L”ÓéÏÉGr·Â2‰¹¨N8ްù å_>¾A ]h> åEª´Í_Þˆbt¶’Ç%Ÿg±<û°ÅWX´‚ÕU8iäØMÉŠðYòcVŒ€Þ°±3UÀSt %ÕÃqJSK9•E`Ë"`йà^L$ž!m|£Z²U8:Ô?3¬b÷àK,óÙDjÎ8&uÊÄNFcï“`AÚ÷~æ™`ˆ ,šjlBÔ;ÑÇ«ÑQo‡;à?ƒþNêú P6á$¼BÄ– »—Ù,½y~uF‰ÉY<°¯¤¤Rj`=•.(æ6‚¹í/ÀRµ1ÊjýS™ê hÀMtë¿”CW=Ž<' ‰Ä}¨Á.°ûC,–«Š‰scU1q6ÚW÷h•ž¦ð;ÄáX{Ôì}.ÞáO~ºe£øÍk1D†©áìÄ2œ•å«!ÿ úø3šB!•¹–Ÿ³/s)c¹ì,6ø{ üÎ0„î™Ûá¤Ý!³ýTÈŸgÑ—§éÚaöù2ÔñûAL×`6]W^ ¼ÜñW;²Àðq€Åü²áe9xü÷V“ÁF¿,h÷|ŸÄ$*I^1¾ÿ”Ò×>endstream endobj 582 0 obj 3283 endobj 580 0 obj << /Type /Page /Contents 581 0 R /Resources 579 0 R /MediaBox [0 0 595.273 841.887] /Parent 572 0 R /Annots [ 584 0 R 585 0 R ] >> endobj 584 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [116.909 227.21 136.303 236.361] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 585 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [180.545 227.21 191.454 236.361] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 578 0 obj << /D [580 0 R /XYZ 72 786.278 null] >> endobj 61 0 obj << /D [580 0 R /XYZ 72 761.372 null] >> endobj 65 0 obj << /D [580 0 R /XYZ 72 559.634 null] >> endobj 579 0 obj << /Font << /F25 380 0 R /F44 495 0 R /F27 394 0 R /F15 393 0 R /F37 380 0 R /F33 497 0 R /F26 391 0 R /F30 512 0 R /F34 583 0 R >> /ProcSet [ /PDF /Text ] >> endobj 589 0 obj << /Length 590 0 R /Filter /FlateDecode >> stream xÚÍZÝܶO€ö_XøIܪ¢(êEÜ&.IQ#¾¢’<è$Þ®j­´‘´>Ûõßù¢¤ÝÕÆ‡K ¼äpH©™ß|ðÔ*€j•„«$ý0IWÅî+µâ¯W®õ=И32Ú7ö>¸vœkûQb>Ưb_Çš×ýëíWz¡õJ~d«Û{â¹-òþxõËíw_}{;N3~dÌeip8Z)å«dÃjiº |¥«Î®îetmüDÅB1Ò4áa·Gê§Q8“,Œ$ûÑöWkjï§o^ÞüâÄ4‰áå-ÖÚ× Ó:ö•2 Ž·)|Êøa¦GI`ι$·[{µŽ”ò:Û·õa¨Úû×ÞóïÀ @8 ûÃí óJû¦*dâÏ ú¢³¶–BZèíò«0õÞ1ÃÝÕ:L<áî÷ÐK=[T?*²%S«†×¶UÏ”²Êëvã_­ãÄxÿì«f3‰×Ò¯ªLF§(í}~¨A8­CïÍ•‰½¼>XìFt$'!÷Ë}ń͛^xbÖÞÝžQ üí«÷²LÑvpE,}Û”=-ÿÚ·y1ÔïNVsׄÄ}õÖÖþ©FÂÍ€!…¤÷Aüyõ>ð H†¨²%Ågê†WoôÿÕú_U9l€Q惺\^Ûi2þ$ ¢i<«ÄG4¾¢—ŠŽa;ñHë’;y]·¨ÀÂÈ_9õz;öÌBf´=kwCüt6?ô¶d†û¶cR?tíkRdì8a›w 7¶ëAÑ#“z7÷nu'ã‘\@<×ý÷¶k¯q<ð¶/ Ý0óh0YÃÌ™ r×H†9É$ ÓòNQ€º¶¥L:4µí{Ùo\áP7âÞ¡)mÇìEÛôôr$-"sÃ+ÂðåEãÂ×bnÛ|í…T a›Óº wÉ죫(ðS•ʧ™WÍpûnR›ÐxáÅóŽ”%‰HéyÚe«ýUôXmú”‹îJ)gXx¢'í·M€ ÜlÖ/ªÚ:Q˜Ÿfwqfi|¤ 2>Í|-Z\è5ùNZˆða¢¼¼á¾%yÔäERÀZ,ìèœtN8gtNa¢Ù9%“sB« #ï¦)êC‰*‰3ª†'HYÚVwâ;Ø kjÙ†\6XëU=6ˆ›¾ýŒ¦Q>œæã ºŽ¢Ð»!û3htx´½gŠj –7eÞ¡uÁÁþ­“On §„ßœÅvd{À…Ýù]-‹Þ±³??’_ÁXÊAÕÕÝÂQÂÔu<·50¬Pû¡ÎޝDÀ±iå—@p‘ÀrS½!ðh˜¼µ½æ‡ÁÛɨØ~¨jÃÓÚ kò’EÞ4-OìI#™Ô‰\CÞ‰—ÒËo³€~§×ßÒé tÜç‹Â%F:{º §` §-aä.§þkî‘‹ô´A+x™_1ÐÚ®Ék¦m†*êû|JEREÎIáÜ%H/Ç0Èa¶Ü.4ªÝQp6jì[áou{“Âäð À^ú‰Ž?ö>o6ÜêÈÏÌ#Ñö\ª'£m Þ¢ÐŒés"im ™hð'ÄÖQ`Á¤¶ãəӆTi]ÞåA2ROA™©h‡˜ÄÊØ9)»¥ì€ÃPŠ»’Z¡âš‘²gc2‚é8@ÇEÏ2ïÇvpá °T25ßïëŠLÍ^~OÄqˆY/œÖ:È5Cq¥sa «Þ²æSFeÅBò;N9ð¦‰0ͺl&ð£>»YD+“AF~"³xµÏ »þÇ×cê ©n?Ê4²ÉžlÚè£|>õy†‹Lâ7 ÕÙ=(¢ÀhyÃsÛ¯A}° ß½,y®bè6zÒ¦Oï’ xØZY€MèHÿì16Õb… ç&3Þ‹+ £L5;â|s„jÖü4"O‘¢§€s $c* 3ü¾Ä±¶^]µ—‰Hl^ãÐTƒ”@ q[¢:È.ýßï?¶˜×0;‹¡£ôE^Ó ¾ÔÝ8/+ß@@sb†sßì÷æÕQvª%%°ÒÅÕ%¥–ŸsáŽ,"yœE<Çï”y¤‡þ/áêT¸Þ€êð@PFj #ÏUȼÐnTz÷‚1©ß¶‡Zø¦p Y0<`qŽBiŽSÉ‹ÓÌåè0•¢³Ì%´´oiß.˜Žè>dì ’ùC׉EóˆÄN™ Ô@‘ù Å@¹¾3ÚØí{aM(æ6'%4Re\õf¹À´çåFYàT,qz¿š‘ü`Qy]sc&?±€4E|“ÑIÅ‚À!4Û@:5f¢€•oÒŒKsu uIŒp¢ÿŽ¿aËI ŒïÀ³:PŠ1è?3zÊó2#‰›˜qeñ’y´Øzw óUÄ>BÅÆj=Ë=y °á©„}@Ì»» ~Ä n§¶Í†"5ÂО]_]#b(pz5õ°IÆue\~M³\XÏk{?,ÕvvÑMCHu}b³òž>3Ò[œÊöŒ-“/ž^E¦ªF4V¶µ«lëé/›ë‡AZ¢ü0TŸÈ\¿—dÒ=o$~¤Í#Íô\°§˜©Ä‰Å&àgh7”Áë$EG›`TDŒ)*Ç`™¹îvUce 0/СŽ;û¼êª^XÙ‹»:A¯<å¹D¸ïÚݹíIIÒxÏ_ücIÚ¢{a4³0 ‹îaE³åÚ#ù¨b8*soÛB8%õ­\Âìc¬n–Q}¦ö€1¿«Ç$îø†a GÀ¨¬ãµÍ{Iɽ=>›ÈÖL@Þ´RK ¸fá@¿ pê»»YÉ-„’YP‚cvíj@ÁQû̽Ÿn‚uDÌ1¼Ä8¡n9NÅuÛ ©×eôˆµ¯bý(ôˆž„ÑcÑò©èS¡ÇÕ&½Ž*óhø8“ìwÀ‡ŠÅÍ0|¨|¨|D:øPÉ*9õèÄÎ@D¹ÔIÅ“õÍöä ÔJùÚ=Â{t~rU£—®ÚncZžväçq篕{ÆPgÕJ:ˆýõª;?Š*Ìzö8©äý`:Ur:'tr/¡É‹+ÌŸ0iˆÅSQ0·Xˆ™&è‚W€Ÿ§¬…‡\nB1=ðŠxÈãêþÜ»ù†G#î’5cC0mŒ¸ð¥¡‘!а"W-½ûDÚŒ{u]¯Ëêþ¾* Y¯× @iàO´Gï?éùûäæî±—’«*ÄÙ¤)«ŽŸCRü ×X$§$ŸÎÈh,µ>4Ä’=Ï™j éq­¡àKdtìWlZWÈà9¶Y—y¿]øØ’ÿ}†ñYââ³¶£ºolNd±Q–8šÉÇ‹²Äâ!á—dA§²cYhnÿá™c(Ýî"Æ©%€ueû YP3{ž„¿ðÕU_=ç.ÜOƒÎ™ÁÁ{°›E¶3¥_„Býnçæ;ä¤òæø/w޶)«ö!ÿ7ÿ+„¼Ÿ<æÙeG¥Äìz*ô|ãõÛh¬âÓBB”_öVÿ¢³áendstream endobj 590 0 obj 3020 endobj 588 0 obj << /Type /Page /Contents 589 0 R /Resources 587 0 R /MediaBox [0 0 595.273 841.887] /Parent 572 0 R >> endobj 586 0 obj << /D [588 0 R /XYZ 72 786.278 null] >> endobj 587 0 obj << /Font << /F33 497 0 R /F26 391 0 R /F15 393 0 R /F27 394 0 R >> /ProcSet [ /PDF /Text ] >> endobj 594 0 obj << /Length 595 0 R /Filter /FlateDecode >> stream xÚÍZÝÛ¸¿çô¡ÿ‚Û'ˆuâ—H=&‡K{í¡ÜmM´¶lëV–\IÎ&ÿ}g8CY¶åõfÑ DRäpf8ü͇,f üÄÌÊ™ui,­›-w¯ÄŒ~³Ðú;ŒÑLmTl4önL\„™ •ÆÚš[óE«TÝ·w¯¾§ÔL$q–d³»µŸs·úwôÇùîþöêÇ»a™‰µ1×¹Á×z&D,ìL%±°.V™›µÅlÍo&¶"åq`Ã9K¯Ã.vZÞâì÷ùÔ}7©þØ”iœJs}‹…Š•s³E a&8 ,À›Ô޵³/yø>l›Å"1WŦ·7Å2ÖÙM¹ß':ñ2G øý³D·Ï]ßýn[vó…R&º?ô}Sc[EyU5s™Eþ]õ >u´œKmózSP¿ß´ø±-û²ÞÐêUÙ˾$b8)ïQ¸ïßI;â@¦.N3½¨Ê{šu§’±t)Oz,«Šh:Þ¸¬q\kã4µ§ œÞî»â¿‡¢žKõ4 ¢e‚iÔõ-Ë £6ïú"tM´>Ô^¢îõÉ­Šu~¨zZtG¸ÊK¢²Itœâü<7"*Ö¸0M¢»¹µ²c²è×¹±6Û~B©M´‘³ ‹+!±q!$ó³J<›F»¦ë©õã¡möÄiÎ/+8ÒC¾)ºx¾0V«€7e_ì°e£0Ò•»}õ‰‰" Ä”½Fá¹*v ª¾Íû‚_xu‘e¾ÏïË Œ¥è<ÏÉ ³ÍzÂPà>eÚݰéâT͠θ«“Ñ>_¢ <ÌMå\5¤Ë©¨nP—DËfWÐÐcÙo±%¢5Ø2\‡¾£¥Þ¢ýä¼ej%M(ê†_ã•O4 Ôñg嬛vÊHLk­XŽSψ8‘öDcGËqG›š¸F.†A‡¨ŒOl]ÑãÍÏÄB$p,›-üÍ’_Õ%`öz–9;åˆÀ@\ tcÔÓŽH¦¬ýŽ®­Êº, ød®S>ˆ—Ì šäy~íóÐXõl6£ì™Áj €¥pÙÑ»Çm—«¥E`LL‡ ØŠH4<,þòÔ¥…hFÂSzƒùÚ‡nf %Ö~©CÿåÃ4rzî:‹e&žwîv‚¿©s‡ÛúäÁÿ–ïø°s>ØœœIƒwõÜÆ×t|ßX~ƒìOÞáoì4á +d²/}šxæ`âÙÂí‰zî™^rùÎÔ ñퟪ†ðÚ@ÄkÒÛ§ªSù‚S}ófñs3W"zn(8{{ú)0_27ädYœ¤îÙÉi„ Ù`rvá‹|Ø>„ãÂøüEÿÜþ°±„ö:é˜Ø™KÆ»IÛç8"iÎGÚ8ŸHk|ˆƒsº¢‚€ÛêùAˆ¾s} «×ù²GCÇ—ëÐÈ)n*óªÌ;žª}ЊKÎ#xÜô™OÄÔ@ä‰Áz<a-32­¹I¢æq"fÒ¨WžˆnG!܉\Þ£Ÿ8Pdq\Òãq[úèsKÝMI÷›©zlÚÜe4çƒT«C˜TÖËê° "Cd†I‘9‘ü¾ 1®.óš£Pؽ/0iÉÆ m‘wJÒ@ô’^šß¹JK”>׉:׉éDFš'zѧ²¨VO KϱjÁ°Hl xwžÜÅ|Š% ÜÖñx%ÄDežBJOåM_.‹c²úšV=®@·ÍŽã²-GUUÞƒ¾>½ Û:FöÚçLHöþ®Œ²H5Ê<Õiæ)™g0f‹õ‰ .°¿® ™ÅB‘6T &'„ÔÑÛak«B¶­Ÿê÷ÂuZžæe&ú—ØÐѯ£Ý¡ûnžA²ÍL2€˜iF ¾ûž6FÂxHùnI÷º¥LluXbˆ:¾ÿÁ–„@:X[p–Ýç4´oÉŸúÃò(EãKØÆÚü5/¶`ÔEKíª ÚM¦Äó Mò{Ìa¹’!7Ž¡…›}v=XYÞ"ßæäìðåèìZ¤¬Á]ixá– ”z½‚¬CË¥³dXA&'½A?nªOû©‹ª48ýpQ_£Œ‰× 2UðžùjU"wyJ(àg’4ø*cæ„‚5žy¯®G'ܕ꫇'zf\u=YÀ;Tã^â«ïæY ç^w{ÐOAg? ¥»ºMSÐo» &@ÆúÒÆg†)(:FJ‰½¦¼Lô_ö9øæ!(Ó±@}RZ¤½äk°è–¦Ï ±9_Öê˜#kqZ½ÔŠ*1ðìËž*˜Ø—¡\×ãУGƒ¢æÇÅè„Éý†äö4v/ïxG¡UÛ´d`…«VO†-'8!§‘3qÉú3د5âIMø& ¡¯÷ì7ms¨Wtñ÷åÇ¢êhŽ¿Äp?£úZÐQMÝœ&{åQ£é,E 02pêK™Ð:¯Íœ="Ä"…”I3”sÇÊË‚;„9Ë–û°M¦äýÙäû²ßå{ä1Œ¶6뽑Àkð~òª AðMUQ…d(ü©pŽèÌÏôŠáƲ©B-…C  Ôg1ÁÀ Ð+9ÜC¤vk†å±t“_VÈN“Ä| É|k z W_–½C\mÚ‚ Èiût*äB*tÉß‹KrÒQ\:çý(t+Îæ}ÃhBÒb'e Âi]ù‘l-Øä©L×gQ@€bh1øæ ]ºšÐhêâ©1%{¤„×ÒcŠ‹~¨J}W2'0B †é÷ð5>ÙŒq€7Åæ‘ìU¾-ó-šˆÐsX;’»Xc‹.¬+üK)ÌÃéC_Ž@Aײ´E·§¢; êšfÈ«Þ'& ù‘É1}À~’Ó§#žÒ«á%y ëA‘(Má/|~ÈÍòÇå¡!‘¡ìˆ¢¬¡ ¼­¼Ÿ"¶JB Ù|’ƒ]íÈ>¸ ;xœoe†J D¥2M¿P¥å-œ8˜ÖÃʸX»gÖ[.Ù;ûYŒBÿÛ5ÔFÈuŒñ‡¦¤’Ác ›ï$F÷{ôÝ3 –"øvò'R|YBX0MŠ)0§¥€7ïü4åf½õ6íƒÌ,GKˆpyÕl0?ÖüQÛBÙ骩v!K::Öã'¡`àÂkCb!»Î`  4|ˆt{M iäXJŽvùè†{t÷9áìµH0 Ö½>[¸"¸y*ãð»HöÐñmfc÷™¿@Ó‰¨è½Pš"­?OÕ è–+®8®¨§«)ê"|ҵћ›5j!o¾H‰„e8¦—*Úù¡ð‘‡J.ýPvå}5YÎ"¬CW´W d̈­¿:’LÊ's±ÿË·¶y˜SI,¾ñµÃ€º`ëÀL ×áY&Óc&–Ägêë˜`­ˆdÒbhc˜O:KXÎ1Áº‹ÿ¬ ïo^zôYÑD;yå ·‹­‘C|*b£N>ã„ 7U®„ôeµg(=~3¶æ™šw fåbaä­œ±*8Y«^I%?Æ¡¢“ЧÌ#h½ñé]9p¾ÃÉ…frô× &³$*ò¶*}˜ b ÿFÈLQj®ÂN¥4Æ·Ê]ð H•A˜±Ù¡¢KŽ›SÀéÃ2L¡.}Gˆs|Ðľ# %LÌýþЇ<°^Q €&Oÿ¯Äà?­Òg•ÒÔñŸ%)ÀÑoôÏ„©»œÿí[oE¬ üÙá.¬hœ%?-˜émwÌe`)7PKJ+q³8$ìùFÿX%Ÿ@®ÿFûÎ}endstream endobj 595 0 obj 2922 endobj 593 0 obj << /Type /Page /Contents 594 0 R /Resources 592 0 R /MediaBox [0 0 595.273 841.887] /Parent 572 0 R >> endobj 591 0 obj << /D [593 0 R /XYZ 72 786.278 null] >> endobj 69 0 obj << /D [593 0 R /XYZ 72 470.758 null] >> endobj 73 0 obj << /D [593 0 R /XYZ 72 178.047 null] >> endobj 592 0 obj << /Font << /F33 497 0 R /F15 393 0 R /F27 394 0 R /F39 496 0 R /F26 391 0 R /F37 380 0 R >> /ProcSet [ /PDF /Text ] >> endobj 599 0 obj << /Length 600 0 R /Filter /FlateDecode >> stream xÚÍ]oãÈ èãö¡ÁèË)ÀzNó!ô˜ÝîÛî \è­bOlamɧMÒ__rÈ‘-ËN²éˆ83‡Crø%ËY rfÕÌf©P6›-¶oäŒþ¾Îô̦I´H ŽAœÓ|6׉ÈÒñß]½ùñ£Lf2yœÏ®n<îÕòŸQQ-/æ*É"·)v­ãAWnBy亅 ¨lé¹*¿](À¯µäg·vl]Û+¤2º-«e}¡ò訙GŸnˆJÁ¯¹¦©mTÃ#‹‹¾iÜò- ¬Tó¨Þ, kQWÊFìØ]{ñ¯«¿ÃYæÅ“û3Õ°‡Öü2ußíúauÀŽMT4ŒôÕŸj×ñ4Êñ ZN¥uêE“¢ðûÕôî°oߺF ƒo>\íõ£,è[zR“zR§L…N5©Ý«QëjüËñ.‰0IrÞXpÙ 80ðv g³ÆÍnxyž)yZ&"µ†VÙȌ:àL¥'8ûµkÊj؃3[-ÏRžk¡³ —“8;Á× CÆ“V˜4{ØÂ¯Ö¨.›èºï:°€U´r•kŠÎù¥µì1Ên[ì­ç¼6M¬£–Nâ'ÛÚgäå—X¼68[VûWÂc)L¦ƒ¨S+òdt¤€ð˜°ulDf“öÕEžF®íæc±§FH4¹‡ÄnƒØ§<€LrÈÂIyÏ—e±©W$³k§k¼%wþ& Ùç˜хý„¼E±\–]‰*Òpåýu‚Ù¦h;G¢Çá¯ÿºhŠ̶oq2ãËÛTŒóý`S®Š®÷—^n]×NK£m´îiPy.oiÐDG ô ZNzW-Ü)wƒZ—q0”…gQ OdaÏN’?D~²”øÁBô@Ø{À¬êŽéÐ<{Ò)מ±ÔF7 ?ôS€ „)úåœëB¸,:znÄV3zå– Îp•wnÃ/Shµ•mˆhõd*SaÎÍvzt¬Õæ~·Æó@@ùœ¶`-Ž©WK?£"òí’‰ Úž¶‰GkŸ¥œ+Ûž"„„<S•ž}ëˆäíÚ1Ѷó¡ÈÝy:•M*Pïjà©÷¶ qä·¾ìÍôé!ÐuÁ—ݶnî ½¼ ¸°!Üx{pá”w‚sÁ¦wïëMÝæèj&`ƈcDK*‘%Œð·²q‹î­4RiF E}ň¬.:Žjç‹! …T¯¡ÂxbÎÄ´üÿiÍ>µA.,(á,åq8›2özÃY,âX¾hA9ѤB9>1žM›È0Fÿ¹U2TŠ J¶IJüNv¸Ï­A&|Äm0Æ)w¯Í÷‚„¤ÑÊ‚ü=s«AŠ)PÍ’§VÚÖFé•}ZzuÅÉ”†°ßW LBÐñê$º.ÚrQl|"5†Ï®`š*˜à„ ^ô •¶û¥ã¬‰Þܾúþê£àˆÔ©Íç¿ì[‚‡‹ìãû*z…ÛÉ´…öªˆ[8{(À2ŒÓ6`xpXħä&Ë#<±O±Ç÷`ª0Ÿ*,ûSÈÕd2²!Mñ‰Ù”ÑKŸhd>³¾ÙºßzNm  €ïbR:J¨P}ºUREÎ, ¢é[báÅšE_÷ë ­ófáeSøR•“H |¾ Yí"˜òz>1AÖ5ŠÅ iÌe !ûxu.mmèœöñÂõlmw×ñhY¶‹¾m¹¦6œc…(¤;uÃCÝYh~Èe2‰Õ.øc¿¿÷‘~§Ó˜öÏŸrùjîýî°’?>p§´ã÷ñž™IÛ†pžÑ¶™æ\6c¢R"‘é“\´y–‹6OuÑàSõR±î#öDAOZù»Öí»¤ÅõfÐX*…µé“ƒß„Ýç¸íKlµ3iªó¬yÐ_¨<ŽÚò¿~FG2¥|¤‰}ue™òŸN$éR rt á‰û: ëêƒXΰïZóiÜfç)JÉó84ÈæÒd"Nì¸Ov\›TCý´ƒŠ?ô„viÊù”¿ï p$Cœ6ÝRÑ5R¸?zÉ7î7¼•ߣßâÿk®Xá|™6T—›tï²NÔJc{%ÿ ië|v…­]lœžPIÎ*Ö‰ï‡& ÖK‚n|Gïõsöú8ÁÝ“¤É>4ÑeGïc“bI4\gNšaŽF•7¿¦RK! 3ÐJ@4Äm`¡6.éõâ-Baß åÕð*õ ª±—J d-àix£ÅjxOFA“SzÀH‡0¡2ü ô€¡Ç°‰~©(ãȃÁ£¥®6 ‡óz¡Å+%›u¹ª@¼ËpO)€ ð‰iµTêû‹½ö-|©ÁÏ4rSÑŒ•¿e‚iÜô„)|ãÜÚ'ßø[Î`Ç Ÿõ~¡ùVºÛaÖ†YƧÇM= Nv1¾9~ूÛssÌ_L~¿©·Å W ÅÅÏuW¢,è@qê|$ð$†æ¦à¦W|]¢üwÓýñx^\ð„tîœä=½ÐQn‡M"!GmVLÖ'9ðÜbd£0K»Ê½_3Ùø; ¡¶;é{T¼ç¶]4ŽôGú74à(5†;xf”„BÁÆh{ôJ¥oLZ29H¶¶Ù’&X0y߀ï¡fɲ‘hX$UþÀ[¯‡ÇôŸa˜½é)Øv(³[Ï5}á6‘Š)Ûá¯ã:ÒÏE®¨Çz"t‚ˆ,ÎÃOXNP( ­ÐNnÊëSt”ˆMH‹Ê*ðÎL†ºÆ7í)Ý>hÌßñS—µåL ™¿P/äÃ]Éùõ?šzQ<0 õ†‰ŸÚ™pø¼–Høž~ó\—'œ_J¢ÛupP%?[MïÛ£Ÿ¹»2¸´á§=;:ây•gø³ù˜Ê•‚¼\¦ý¦BfÇû(0]¥Òójÿñ¢ aendstream endobj 600 0 obj 2792 endobj 598 0 obj << /Type /Page /Contents 599 0 R /Resources 597 0 R /MediaBox [0 0 595.273 841.887] /Parent 572 0 R /Annots [ 601 0 R 602 0 R 603 0 R ] >> endobj 601 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [271.365 667.055 285.304 677.964] /Subtype /Link /A << /S /GoTo /D (subsection.3.7) >> >> endobj 602 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [520.087 374.217 525.541 383.914] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj 603 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [139.878 360.667 150.787 369.819] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj 596 0 obj << /D [598 0 R /XYZ 72 786.278 null] >> endobj 597 0 obj << /Font << /F15 393 0 R /F33 497 0 R /F26 391 0 R /F27 394 0 R >> /ProcSet [ /PDF /Text ] >> endobj 608 0 obj << /Length 609 0 R /Filter /FlateDecode >> stream xÚÕZYãÆòè<ä/(O¦€U›ÝÍÓ@|-°6œÁ1`/‚ª%K‘Iyf ÿøÔÕ)iw ä)Ðû¨¾ª«¾:ZzÃO¯r³Ê‹L™¼XUÇÏôŠV¡ô´1e’Z•&X{…p(76UE–"ýן}ñÖæ+­U™¦«‡Ñ>lެJÖ­M=üzcó4úуÛKåßu»íÖÖDOë÷ßñV§+«2.y’‰UZ¦4ÕáÖ›$Ñ‘ë½Ã’‰¸ÅDM·Þ˜<ªÜè·ÜòH :àóÄm#n'ØÖ®éö\fB +¢gnÙu=„úaäÒ0öu»WëMžÑ»Hn¬»{ãèÄs¾ÅéFX¥yá©Îƒß<#žJ#K:Õ;OÒBÖ‚Pö\¢Ã¥e´¯Åé|ËÍß{Ø@¡Käi/ÆCwnðìiNGzîh»ñ[æžÖû-qW”•…S¼Öàjév˜óxµÁNý{=ò„°ÇÛ3 ¾Ùmüó©quËÜJ}3Yk£Oó´&®snpàr8‡µæ²3k<‡ß~‰«}öÝÃ$°p+òòŠØêLÙ̲x³¸Ú…¤±¸þåzþT% Я*’%³É¯Ä8Fµùƺ¨ŒõQšÇƒC®j¹yhÙÖ0qmÊè…$@†„nÿ쪑$L‡ûYL8œXXeêöм÷¬EРÃÄQï†Ñ£´ß¹áݹ­PìñjáÒDmœDÇzå°zpX Ób‹\*J³SP–Ê»mähÊÉê–¿ a•Œ|:ÔNt`ò«•ŽîôJÊÇÃfV§ÙÂMí]“XÝQFbJ®s[O³È5gé˜ë"TÝÀT27ë´×mÕõ=pT] ”.sÈß’`™å8Á ¥fòmRËI°L±ÊU™ÏÅ*¹^"Q¹…¦ŸÜ´â5¹ý±ë}w¹ÆþÍz“ÆÙŒY½k‡¡V3¬äúÒýÓ®€YÞsËÑaí….`cÀhh,îAØYuGà¡Þ·õ/±N*×¢:ŒŒ·õ富¬áïc=s$¦±V?û†I&@0¶p’$ 'ÁùŽd˜¨(5®M®Eý³Å…þÔwûÞy»PØŸÛ–¤ÂZ¡™@Œsüéý0Ñíè*ä ¡¿™±…²E¦·T°êÿꬆ«cOÆÝä3Ò̪"/…~ÔMýø%È•I£oдŸ\ÛûÖ÷Ù„µ¯ëñèNo¸ò ÿãû¾íþ¦”úë÷Ád™*’T–êã ±w5ú¦¤vJ@Aim¬r“\!as’‚âï#m…Ë•Ø^lžlo’M›ß¢ÃPèÉ^CWÐÛAƒàSïîog\¤9LôÚ+”ÛÜÒÞok‹>9õÛ®ß}{‡96!Aª <1Fe ,óƒÏðÏêtŽXc°ÎíË ÚCËí¡JÞìvüèØ{ÅjõUŒN‚+5 õcÝÔä2¼ðzà¹øJ–Œcwæî+‹„ƒ€AE‚F[Ýmet=X"Þx˜íÖ?³„°ýÉÉþ@ÏÁ \@‰À¯Ї•Àló&bsµ˜Ï Uµ]ôÅ,Ùm‘Mw.` É -¸sÇ@g&I¸\ yY¨¬\ ù~²ÿI‚RI‚¸X£{ƒï3ßZQ (>6þ(ýÈ(7(Áø$mžQ©Îh­wÝ1­’€½¾â|BýÄ}Åð½ñ†P Lpë € TÀç§ÈˆŸ–³À!ÙLÇ ë29sG]‘“ëGîÛõÝ‘K¢n×®PøcÊ8jš,,‘µ0…X lAékQ©±.:•‹6Eyÿ¢5DZ±Ñࢠð ÂEãéÑpa¸^ö°Ôl™i(Vý³¯ÎEaí|âí¡QǯI3îX:‡¦AäÞÌœ1]°ÁÂW²|­¸öõ8““xüØ„‹4Ž3°³çOÒÚ;ÒµK)…øK¢ Øi#rºÜ‹èMô ‡TF[‰aÓëöçñDP–',„Mff±°ˆƒ<¾ˆƒ bHuƒÕ]ŠDô Ú/c4°Ö &¼Ü÷‹K?q“‚¼¦f8=M̆&BUXe[ÿ„%D ØCápXìN°7Â¥ºÍª<ùH&øT0ËOZsa¶E¤ !Ù5¨¿]Ãa)ò6Åeô|öl9Eq™ I¨pjRuèw ÃváqFÁm݉Dݦ–+ ü†ÂPÿF¥Œ¹=ïÚ7/§›%ÐCl„ïÈ͂ŸšóÀãÓÁ½¤PÊa™”?ä´Êtx7Y Úámg_¸w/¦á=ñ#Þð™ï¶,.©µÐ#°¶ÜãÙÈ?…Žáä( KERR4{#&Àm¹d3 n:vٵ䜅éHþos> |´WƇnäsÉ!ýØ×Õ (rM:Y kÓÙ~ÄVó\BH4_”µV%Q&Ï}¦mà×OrÈÕ‹ËÊǃ'.Ø+•Ǿ+˜ct“òY„æù%† +Ž­æ½Í-ØùDàÿOwPH¥';’À$47 Ì«Åý‹2…^œý©¢Lø)£¦Û×y¦ˆÌ}MÒKJ×r‡`èà Šäàk÷¤áeHà-ºdŒ´ƒ6|˜Pd¢²cÒªs°9¸ºçfdµwM'M©œÃäDÌ~¸ [“ ç"Ð%('È8)B!çÆÒ4‘ω…nNjgN6Ç õžCjMH>™™Î½ðGqpÕÉvkÂËZ7{ÐÙ=¥/µJ’òSJ«)H€)øÈø²¶ëRÅÀÏ…¶ºAü¬<`Ê|H#n_»[H7œ¯©wÆ©C ž&÷ö»ŒÔsp­ÃEW‹ý2¯ÓEÖ(p¨V蜪ðü£ O¤´Ò…™eyûŽ—[¦dÌÏ݉Là{©Â¥»ºñúªn¤®”zÿþý=þ¦¼{ŠÓ‹Þ–%Úð•¥°Rˆï2ë‰ÔTO±_ÌÉ?l ý’Ày[þ²äBaÎí;q8@L2™Õß_¡rî|0Ò¢° î*lX6I'Çèiªtr›¡&Ÿc¦T:ÚºÑ=:ÖÝXÎLÏ.!fAXC%Ì”šX§ã…? ƒ¥p¶ýyŠâLà)Ó×CØÏ™¦BK½œSC9íìó{®]ÀCAq À¤<  ¥ßà ~+½ÅYpË[Ï… /"ìËäXØìÎ}c/EûVðÉf÷M©á8t¥¼FÖüþ}–ø¿±Rþ¹FñtÐ3ICt…ªò!ªEç‰]L.Ž¿³3{ß·]ï·W#%2JgWŽ‘Qôx®Z _>$Pše QÃ*ç6„âÞLüPwðÅ–F$û¢ð·*fÊ&!Ù2ënÀ¬>¿×Æ—œúì2¡öî[N®ÇoîåGð'Õº Ìÿ¶°¤^dý3:ÑJ«¬Ì¯’@ýxwη5áÍÒÖU®åx Ê‹$GÈFÐ>°Ãmtýéõ-*nNô“oÓ®¼ÀkFÝúBŸ27I@Í5”­,pU·oÁ)°ŽéSjÞù'.&+öÆÿÞu幇™`8•A))>A8¶Ó™”X„-uÀJ¥b ±…ˆ[¦%²zÉ_§‰JâåÅp §ùP’­ÿr˜C_M縧É8÷äžý A578þ½#[£%B‡/ÆbŽ'ÊÒtÁT}×Hð¬ ìãy¿Ÿª“+ô¬vX’ׇ$D”¿á¾®í¹Dmr>ÜÇÌy¼ƒYB¹Ç¬F ºY¬z¿Ú]¬ºQ ŠUEf.¦½\¥ªÌ‹›7Å/Þ&ñªPe–‘Û¤tªil̬}»Æ{ìùÑÂ?;GBÍ|J8âã§EŸ¯³óáí£äü#½~63ëty¼†NÄ<5v‹ÑÒí/ ˆ ­ ¹ @#§‹s=mÙµLxIÛ3^&“ !¡ÝI dLï©S*¬^'(üÕ«´„¿Y`™¢;ùCJÉÞ¸‰@@Àeô”]¸} 7¨ ðݳמêÐg.”~Ìðˆõ«ÏÀº¼ÞŽOÓ˜O¼þÛÕ^endstream endobj 609 0 obj 3309 endobj 607 0 obj << /Type /Page /Contents 608 0 R /Resources 606 0 R /MediaBox [0 0 595.273 841.887] /Parent 611 0 R /Annots [ 610 0 R ] >> endobj 610 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [296.294 650.985 301.026 662.201] /Subtype /Link /A << /S /GoTo /D (Hfootnote.4) >> >> endobj 605 0 obj << /D [607 0 R /XYZ 72 786.278 null] >> endobj 77 0 obj << /D [607 0 R /XYZ 72 761.372 null] >> endobj 81 0 obj << /D [607 0 R /XYZ 72 482.296 null] >> endobj 85 0 obj << /D [607 0 R /XYZ 72 283.448 null] >> endobj 604 0 obj << /D [607 0 R /XYZ 88.587 93.518 null] >> endobj 606 0 obj << /Font << /F37 380 0 R /F15 393 0 R /F33 497 0 R /F28 523 0 R /F27 394 0 R /F38 495 0 R /F29 547 0 R /F40 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 615 0 obj << /Length 616 0 R /Filter /FlateDecode >> stream xÚåZKܸ¾;‡ü…/Ñn­øÒÃ7»În6E2‰Ä9hÔœnÆêV¯Ïþú­bÕR·æ —™`€%–Èb±ê«¥ ü‰‹L^dyË,¿¨v¯Äý}¾­áIj£b£ñîÁU\)ç©Aù÷W¯¾ù Ì…Hâ").®n¼ìÕú_ѧÄ$×ðO\®´ÔQÕì/eõmS×n¿Á‡*ÚØ½mËÞAŸ¿/÷kj|AYÛ^_®àÚt®Çû;©¹¡k¿µ—ÿ¾úÃ7d6™^*KmX‰^ÔfJÊ2:ŠéÉà³íJFÙÚú𘃿E@3Ñ·®;Ô%c({ ·™{cOwG®]~}0Ö’8y‚Ïä Ü·ìh‚[Ä3‹á…wá)»Ä¸êÌ&J—8y‡«š-‡±0β™;Nœà¤iƒ÷Œå!×”¶`SËJ‘“ÉÈ~u}|º›e^¥Ï†Åóp™ïŸè2yvâ2&Xߘ—1'.cô}.#bSOpÈàS—'.côø´¤Kp3B©@2ãK´Óç.£cQ˜%—y û½o~ߺõ‚™58‘w<Õ9!·V@<Ú¦ëVÛÒµ=Ø•-ÈØ!ÅA“˜ Š¥†‰#a#N§˜®)¿]8m¼ïq,ч‰›¡? ~l5R)Öt’š‚*ɸ .ÈèŸBPƒ)å9¥:J HH„>”*óˆßî†Ã˜\g×1¢¦ƒ„„µs›-¦²ž$g¯\Ü 5ã t;rlîã.Ý¡¬ü:Ò<úsÓ»Ê/º9pÆáœä“-˜Î´ ^¹/`+Çð‚›Öþ¨š?è”°®ÄñXpM’''N)R`Ø9E@Røƒ0Ѽœ3´~|à kby6¦Š UÜïé÷†¨’'La ó úeÕ€wt.ÆËò>†ò£áÍM3xr¢Õ¸I(Œ A°‡#²§rfðñÀË4èÈsÊÛ|½°¼ém;#Ü %@êÚ$*VEH“âYà Øã»¶…8Càç>l•H=ŸÍb?–­ßåó妀8ðÞËZîßú²j誅ÃI!âe-ø[{=lwæ•NâQÇt<,i!@´]O€$]»¾ª~)š$V2}B:…ÄJT WÕÚÒW´&¼:øy^n=|%)€ü—XüÁß ß¹@€< k4}ËîzRh™BeVL¿êâ­ÿª+ó„Ÿ·Ÿc* ýÀwþ» ¸¢F|•…ˆ¶“J—)¹g¤o2c‰'™×=e.gËökÁ¹p“QÜ ¬Ë¾\ZQéj4EÆß2üBNEèýô±¦Ú,t×¶ì¸IúèËwÙ–•92fµøš^h¬-îÙÞïõé+<3•j Ó[G Ýà þvt™, i$¬ŠqÖWÆî }m§}-Š)ÚEàÊÐjÁ¼ËxTkÝ”èB©ÑßÙqŠ<8ô“ãøü3:ûóÀ™¾[Œ““à_ªÄù> endobj 617 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [261.453 523.532 275.392 533.229] /Subtype /Link /A << /S /GoTo /D (subsection.5.2) >> >> endobj 618 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [306.816 406.342 320.755 417.251] /Subtype /Link /A << /S /GoTo /D (subsection.5.4) >> >> endobj 612 0 obj << /D [614 0 R /XYZ 72 786.278 null] >> endobj 613 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 622 0 obj << /Length 623 0 R /Filter /FlateDecode >> stream xÚÝZKä¶rtù ƒ\¬¶eñ!QÊmýØxã à bµÄ™V-u$µg׿>õ¢ZšÖÌxç°ÁbÑY"‹dÕW_•F]%ðO]9}åò,Ö.¿ªŸ©+þ÷î*´¾ƒ>–´©‰S‹O/î‚äΤqž¥/É«,6™áy¿¼ùì‹7Æ\©$.’âêæ–dnêF¿»þ×ÍŸ>ûæf~-m𾬠ŠÙÅäÚmL¾ÛÕ~ºû¶é&\æ‹7*]He:.ŠBDÿp½K‹,zݶ×;›ÑtïGM•DM7Néšp ÇîÊqòCó³äž†f‘c9LMujKqiÃR?ŽåQPG·C@ ¯v¢ÔNáY¤ZÓ]kX×_7%ÎmŒŠ`ñãˆMõ·ø{Ö¨œš¾ã.T ¥IkjÀ4MW¶1,lMôVäú¡Æ}DÏ]§ºÆ©ìjxÖEÄ “œõ9´Aµ“•°ØáÈ:•ð“á¡õCº»Ç§l1sÓÝqm!“ÓÅÆ ®ñáx½Ó.¢®"R²fPœPýšX7| >SÝûêÝßü@GÛU~ÃuTbâdá:Yb¢:Z«LÔù€Ð²Ëßúj¢~\ÇDÿPŠàXd()GoO]…ÓŒ`©Y®¢×¿RÖu³c_-V¦oÀ}D§éxBÓHuôÐtufó€Ï–ï ~«ÁƒGÕüÀVo²BÏr 2QܳMÂéøY„£U½¼;ëÍa¡ºà Úî‚€1y4¨<%çb,Á'1Wh7€ç‘$Ñ_zB"XˆÛ žÓ~qZ™¦ëEnà§æ‡RF ¸(Z8?îgï˳ȿg¬à¼âK¹¹Î MK¿€Cë`ËÔª‡’ôéø‘T†_&ýԌ;õÜ‹À)3ì@ãvboäað6žZxqwÕ£—NžûMtßÀ€Ìyš»Îøò† içD+—GƒŸqbj~º–〠gœ›Ühûq‚ÛI]!΀_ák÷e׌îïûS‹ê¸,Y>pÿ®Ï+tüÛÔ¾äY hw/7{¹‰[ð!Þ»œ«e_Þ…ác°S>žÔ±Þ½’Cªh“u8É2 \ñŒü —èM%×Ý1H¬Åh%€Cž©Úf¿%:3“‰ÐÓøY$±ÎÔ§ƒŸ_õÇoúMÞ‘§ÐÊÏàiò`/Zë<µVQè;è©Zì©ÐîÙ´ÞqÝ86ŽC/®:pG¸jº{­2¤ðÊå½iåRQðFý;ìå‡$Mà¿ÚØ`\Ûܬ­QÖEŸH²è-i nzlüÈí²m)ªò\!"‰‹ër*÷å襻çÞÎ?pGÛ߉i†Ù ™- Àn£±-ˤåaó¬À´í‰‹€İ$6HL½AE‚Q©“_ˆNs ‚ç 7%±G¥(K¬øZ±‹7«Î› k]¦ÌÁ˜/Qø yࣗùLTz¦J—Hñöë%P[0‰<¤’•Î@bfæ(ˆÐÕÆ›®AP~„Ú¸ñù%ZátÀãÜ3ª<À Ö¬î ”bd Ú!•ÐóA±¾ê;à¨l?ïÇMŽ•Ç¹r‹üÄf!® 5N»daœæûýiš†ÈF´Sqá2\ Íì•…œ<6E~5ø«ÛY`—ÆJÉ€JãÌY[Ô.}t‚:ÛØä÷Lídu“ÅΨ'çÞ™Øä‡S˜åR·9YU1D•ÅÒ« K£ñ…]«Øe.lš0*[mšÇ_Ü3Œ¯ïuk˯_¯7¦±K~é¦/u›m*–[¼´iÙÂpF¶3…‹ ãÖÇÿçäGvñ$Ù·ö~‡fˆMÁ'ø½óÊYz"ÒÑT9‚RäÙÑ šƒçÖIXT"|_­NÃàç¬ F~º&ì?É;äþ‰]¦vðATbÃu®1yôU£!yäÅu–†Å±É\[°XF‹Éó±=IK!¼Bœý²Ÿî¹øÞ©æIîØ9¡-`„ù­ïøhP’5‘ŸçÙÀÝ€·£¸n&Pk43£WÜÿ1øY0MIЧ‰~=MmÓùMüÓ@ùœ:㟛žÖÃø÷ ‰—9ÀÒ£šñP§Båñ*8”ÞTzλ]a+‘QŸÄ;? ““hZŽ!¼JþÄçÃÁµÎõœóúœ´Ð‡`øí×1wÏ ?o™ Žomè8öÐL÷ìœ%ÿÜ÷Có³¬HQú=ÒNeB‚Ì#ìçàwI’2pn4ŒÇ²°8àÖÃ}çì ²š¶• —¨Ÿ&lÖ+ÂäQ|NL±k.?˜·°»äŸÀù шkÆ“®ÂCÁžåjˆ(.Mø¸­ÉÂqÓ n¥Òê€/o¤ÎÛV²}=ßs«¶å» .4*Ö›/`»ÓLèà·Ü üª0±ÍÒIÕv„ÄOÍ‚ŸÂµŸÊ¦m‰¢€RgC†H†ë–ý­(f|Ç”$VÉÚѸ¸9­ëÁ—g»Gê(\rôþ1|)€½¶²Ë\ìl†ø„Ý8øî*´¾{&¸B·“ªíÓ ø\¨f\1)ìT'FÓÐßñr7Ri÷´ø8ú‡è »¦D3= c>—!âØ¿rˆâ§E·À ‰u-–\À˜ª‚0Zõ©áéÂÆ‚ÆòÎlþÕ¹Dt©{V+Ry$TØo°#)ñ,+[««0²æHã,¬è>ûeYÐúmp¶í«\}ÉU.!6Å2¤©*°¨@ (*£%ÿ R"|Ã.ÿ¾„L‘ü_%¸£~ Ë©¦jª×ô⃬µoý¡¤þb_Öœãp$(‡niz%ç?öiAîŒ-&×Û…)muœ¤…vø6f‚ûH‚A½g}9“±b žNÅP}™ºI±47ÁäÑ@0$8HÔFZc€ ÆfϤ.˜däàgy¬Mök§l9g/ùs)[‘ż”½p²*Ñ„¹ ÐÀèÎ% éyè\›N¶À{‰S'é9 j¶=1½ÙÖKªSŒsMW’ñZçé:^šº¦BuLwlHÉm€!¶XÜo>'õÐ T,_ä5‡å¿A&蹇õâv9ì›i(4›^l $ªžŽ§æ‰sÞ‡èuÉ:æÌ_u¨ÿnqÛ¹¤æ’ñ²rš«TË2?a€|SÛôMü¸lÔ¹øø½ŸØ.Ÿ©>æ !ôì`ÖÚ%ÁU‘Ž-T¿D\-™-dÛJ¯NäiÇv±Uj `”EH=¡5sXçû O)ñ££ë<‘Ì«üùºFª–Éï»…Kj›ÁáÐ2‰“\oq‚„M!¬ºgKÕÀ>aŽÌºÿQ-ç`Pν œ8áY†Œ™‡Ó:ìžuƒP[¬®p‰Ê*o»vàe¯¯um•æ5ðÃÙÈMŠà‡E~ÎÉ‹lýA±˜ë™Uy¢‚rQ„×Ü…GB×ãçüÚ=%|ò>hFÔ—Z0øó÷A’“ZôÅÄL§xË-g©Øy~åbà/TZâ ΑJ6éAœAt;K¡ þøúsôÂW+¿¶.·%%:Ô+8a×*^r+“©8E#,âLÙO‡Z}Í»ý¦«úúR« 0I>‘›sõÖÍÔªÛ–qþ¦kCEó ã;¾#P/¢Z²VHü}9&î‡wãÓ,«êü$M%0½½åÒÉè',¢ 3aÇK–ŸfHB¾^âÐ…µ›uÂ@S³hÓ±ØÛ±ÿ3°¹Nq÷Ys@XÖpøk/-ˆp}:n„ªù+bošæÚ‰øb};G+e—íä󴈧ãÓ_>5óüþzÝá瘦Ÿ0P ^s2„å5g£o–ücÄY°YÈ‘.æcæ!|ˆE54‚€õÌ1íÓ@ÀqNvúÑé·ù5Óo`]…°LP•) Í¥¬¸¨‹YÜ=ºäFjžÅY¦^È%¥¯šÕø×`üI͇ù=÷_6ö¶^˜KïÑ?p»™FßÞbåIgÈ{ ñ|il~&DYqÕ–Šsü¢NXl|…yyY‰£f•½¸8×Aýßl}üµ ÃŽ}ä›»Èó°ûbøÀ¸±E.’àðtMôgu0%ü¼—~½¡ª£p‰{FUP0×Ù\ÙR‘î[t‚3-”Yœ),ŒgŠœïb©†[:J†ëN¹„*kuÔ–ÃýÉ ¥?«ÀŸ”±×'Èz¿ç^ÒÃ.þD %Q’éxÒÛ’þ<zª¾›‘þâʦ’Q¢é ãGгçÏÈïî†þÄʩǟZÂwü~ðA )×±yïÛ1fÛ¡Š•P2¢½¹’è&Dq°± 8RóÇI†“ˆ»;© Î4/Ww…Ã䎜",u©~×/R R⟵*]Àµ½ø³Z«²„—ˆ«VWÒFã~êÿ ‘ëñ€endstream endobj 623 0 obj 3447 endobj 621 0 obj << /Type /Page /Contents 622 0 R /Resources 620 0 R /MediaBox [0 0 595.273 841.887] /Parent 611 0 R /Annots [ 624 0 R 625 0 R ] >> endobj 624 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [215.787 402.917 235.181 410.493] /Subtype /Link /A << /S /GoTo /D (subsection.5.14) >> >> endobj 625 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [450.047 178.285 469.441 188.285] /Subtype /Link /A << /S /GoTo /D (subsection.5.13) >> >> endobj 619 0 obj << /D [621 0 R /XYZ 72 786.278 null] >> endobj 620 0 obj << /Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F26 391 0 R /F39 496 0 R /F28 523 0 R >> /ProcSet [ /PDF /Text ] >> endobj 631 0 obj << /Length 632 0 R /Filter /FlateDecode >> stream xÚÕYmܶþží_¸Þ'`É¢HI”¿9‰8/m` M?ðvy·êi¥¤ÍùêþøÎµÚ]Ù‡Aà€[Š‘ÃáÙgFê"…?uQf¥-’¬´«íê‚ÿî/Bë;ècI“ë$7øô„`$c'¶ÈŸ’WE¢ Íó~yýÅó×Z_¨4©Òêâú–d®×ÿˆþtõÏëo¿xu=½–'&ÏŸÖÅÌlò¬\˜<ŽW¿ºùò+·ÚÔí®õüµÊg¢•J ‹ü‹«¸È²èzSW±ÉtÔíÆºk±­"ߺ›ÆËÀÊ­®²2¢Ii´»Åß,ríUf£±vMí¿æN–u½[¾ç®»æq·’«¸T*z}eMÔɈC-/bQ,VhôŠÔ[×Ãj? ¤˜–ÖÄß‘ôÕEÕð÷Ø4Ñàý©i•N“,;Ì ¶Ãn¼¿­ïØžGF öÌxÓœN›•‰œ}òÈ>=l?×ìt{2(n¥wkz¼Ý·+< Ù¨ë=ï½íFn¸?x°îš'ºÁCxdQ²™Tå6Q©>²)Ÿprº§XÙ<Ñ%ØJIú{û;?¾K,@ݦ‰²êõ\u]VÔui#×4ZðÇlˬ°A8ßs×Hguí]#ëÞÑ |€Ð1?@X°KmE+“ÀGÕÔ7 ûÈ,ÜŒb‚-ÜÉ$ÓÕÑѾÁëaªhØ]Å Š_Õ?¥Êøõ3èÎhž§²«évbi_íaŽ›ý8²î»›†[»,ÆXïW2™kyÄoñYEû¶F€ ?ïµ Õ‰jö}ï[\“N67ßÉm'C±Ö&ª[¸‘®Åh-3AÃØ‘Já6À Gîçêp3ˆ±©’B™ßÒÁŸûwcßÝûõ7äIp¢M¹1À[U(reÅgæê|ì }ç9«2ERØ:>C_ФIš)F®ˆ—q/ˆC<3츛v.(UIf™Câaã{ï>`T²i|€Dën1Þ@€½¤>Ä-¿–‹?Ë’ôÆ©ÑÈ¢ºÁc³„%;nд8ø€wíZü´±EänÈrÝ~dÙ! ""¿ô^)n°á~¯©yû<ô“ÒfÑ?¨¤,ˈ‡»Æ=.в"w¹|z ³§OÕÓ¬ùª°™”](eª’O‡-8ìw¼í®G»+ B~ðîŒ.%Ü) hXßùq` >+è½Ù× ½•"*\}·!F!R¾ù@\»žææFã8ìû£¹w˜!òANýÔªœ½yÒeRN¶¨Eé­G¾Sí N°IÒ4Ñ©=ì [þWpúÁ¸‚Ê6øhÁÍõÜý0¢Ph趸¿”½& odšS€l5LV•Ë‘%ƒ0n&ž÷©È¢Ub«` ²/.'½mÊhÛõ|Ž:ú«¨³êöýà1ª¤EØCö£Ü³Â&:;P0/rß`ÈsµqWE% 5ÝÊ5pÇàR´/m’Ù­ÃcyäÉ'Ó£+8umADF¢°¿Ô}×n¹-Îã—«6Ø×ȃ—l n ÄDƒ¯ß¼ûñû—ÿ„G¬æábÌ£’ ¯Ï-ø»X¦E§T%™Ò$¨“ò*V*3àž*pO핼™0Ñ›vÕì×´—2‡øÈ¿žÝÎfW…JÒ î3$éL¹Ìƒ’ñ¸xN­€ö ×¼ó ûŠpv úÆYšä€#"!Õ`RM¢õ¹K¤š¿†üÄ;'\ æNNX¼¾Ž,ÿ{°l¬9c ~†¯w"ç¶uS{‰)›š‰ÑQ(©ÞûFBþP‘G®nŸ& ØEªŸæÑZ ÀbÞ ÎÖ±˜ÿ^,ÎNþÙ”*ú 80¦/¯ã™ M™Ò1âïÛnëZ¸øyšGoFðB+yø²kÖ,B^ØÅ2ü<]&¦v˜ Úœ‚à Ës˜…ƸI¦š ü˜%x@ö6”Â8Hþ)껺•„58Üöí”ÁÖ-øß­ãt(.Á—ý¥éªÓð‰|í\Ý<ÆšBãöõåGüñvcc õ½¼ü¸ 6ŽüíR ÔŠ'qžé ²ª8eÿ8ARúU·ÝíO?ÈA‚1ãùAÍòVNækŒkkn¿Jø÷;:Çý¸ÁGv'øÚÈKè#PÙiÖSS˜âb2ž Ó—WFß®¹xQ ‚5#8 ñ4ˆî—Üz]‡z‰¥à޽ÇÀÑéh¨GN †¤”@jË{x\ÀMSß¹qßÄ´p,lšþQCÀà5yDèh·#\k-”[÷-'½üä8j2‘ 6v°ð±ãDÛ¾Ûrk?HÍéDÿkêCg€N 9d³O݇Î÷È+ªßÙŒÝö£lcð#%!/ÜbM¥JwW[9¡Ûî¨v…r`âKáò™¼0SŽ%QqžÝ©.]>^J¹ò$-C‰¯ðÇEò Éza§ ¶¸T\Âè_³Ô–—ªe‚Ømý›l ‰Óe`ºUr\PÂë² †JŠ*$.·‹zàŽÓ§v¬gjüñϺ´!fP•åàO°Ê²‘Í™öH½Æ"Cukðe(Y2 ‡„¯,ùJ±¦_×­ë1ê—0H·Ñ“Â&¾Šm¹MNJmµP¡gÌ…º–iV<‰qüR5Cî-‚^Ïär_Tž%nݘê䯍‹Cï{ž¡ßÜòÔ³Üí(n} À¢¨W¯ÜzÃV‹(X$,¨¤ÆÙsA«ÃÅÃ7Œv4™°¬þ^ÊI œºpš9|§÷?ïky ™ÑÇR×ã̜؃óíŠy³Mãåƒï€¦þÝP‡B¯ñÈbèzÏד,דpX §04àIBî^ß2á–Ì“€&²B yN×z# Æ ýZW‚³T°¨ûB×ÃÆSöºPY)²D©'Sm¼¯Ac®#±ñàvPZS•€v ,¼^í×s÷çL|FòëÊ&"ç‘áUôÐ×#l‹Nj*úÌþ¦ë×ÜÁ\´°ì6,»  ìò­ÜgCеE“ì§D ^îd‰Ð=q–¼ÈajPC^ èÕ¼N~Ñêè»ØZ´¬—ÐLe%—ðB19†%¸n·kС+î±à¿!ŸYþí©»OsÓ£§·9~1YÎèCÑ›zÜºÝ öÒ{Gw€<&¾ÏU¾¶íÔâ1àR@€ÏùæCÝ‚¥±Þ.@hºµÛ‰+¶¥Ð ¥/·×pOXÓç»úüàX9W“$¦zÇìµù''}¨.Ò*9?‚[õ"Ç>˜„¯"TìĞ̻ªwŸ>P7Æñã ð’\ÄŽEÜñü‡ÌîRF PôýeŠåT4î×@/ÅCx]vE.ù|O¼È!‡H)>š4£2âHVÄ'9P¬÷…C Á^E®8+H3 ƒ&UÐfª“a¦Èt:Íî Í|^–®§GßññðYé|µø ÷X•ïTD;ЫA>ñœ)‡IOï-\ás´Á¶F8vÐ=L6é—p.&Ü`dØtûf)›w ÛŸ *Œå¨„ÇÕN8L¨)má>“/cq®(žÊh3d¡Ä†?Ÿ1ggÁ¡gÙgræÿåœ9ìendstream endobj 632 0 obj 2900 endobj 630 0 obj << /Type /Page /Contents 631 0 R /Resources 629 0 R /MediaBox [0 0 595.273 841.887] /Parent 611 0 R /Annots [ 633 0 R ] >> endobj 633 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [229.497 734.742 257.375 744.439] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.13.4) >> >> endobj 628 0 obj << /D [630 0 R /XYZ 72 786.278 null] >> endobj 89 0 obj << /D [630 0 R /XYZ 72 557.087 null] >> endobj 626 0 obj << /D [630 0 R /XYZ 72 518.062 null] >> endobj 627 0 obj << /D [630 0 R /XYZ 72 470.569 null] >> endobj 93 0 obj << /D [630 0 R /XYZ 72 317.791 null] >> endobj 629 0 obj << /Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F37 380 0 R /F38 495 0 R >> /ProcSet [ /PDF /Text ] >> endobj 637 0 obj << /Length 638 0 R /Filter /FlateDecode >> stream xÚVÛŽã6 }Ÿ¯È£ÔZëæ P,ÐmwívÑMŸ¶ƒBI”ØÇJ}™Ùüý’¢œq2(ü ‰¢(’:<4_$ðñE&Yž2‘å‹ÍáŽ/è{\Œ³Ï #M¥%Ó Wo(Æ£f,5ËSúVwïî…^pŤJ«×]m¿Fjs.T´*í2–YýÙº}kˇÕoï5ÆÓ,ìOGËÍ.(ŠlÁV$*Æ£f £ÔbFŸë‰¾*˜Ðy°[uàO#ƒƒŽºêp¬-‰6îp0Ͷ®K›½[Æ"‹\Mûÿ$:1k =©pÐOu4ý™Ô;7´›³i8–G[ 6x0^š`ÃÔµ[Âîsp ¯EùÞ6¶5½Å íEÌ1û…Å4 ˜$ÑO÷_pÂÁC®|4 ܵî@RCà ï8½ÿ–Dœ†kp¯§ƒGz!¶Œ•”ѯ=éø¼áHª¶ÙÚm¸Èµá ™v”PÐ}.]˜àór §a:{í]>ç]1 %@ûø)\t  ù”ß-H=W}IObÊL.Ž¡Ê Æx^°TŒXäuµž–L¤iPBtøLÀ ®/mKö;·ëýãú´öÚÙÖþ7Tíè͵|Eä gyž^ ¡;QrÍ7²¯õ:&ÈÈX&® &ÖBG_ãúf?B¾û]U[þ>l%âý•Š ÆØÃL~./¼_æ* )Á#k6KK‰«äüÄ#~Q£ XØT(E°¡&(úݾ´$˜í˜(á«w|.Q÷ÅjBÏígÁ -äŸnsͶjö çEÔ˜CРlŽØ )«« —X0ÇP°Àl@®lá™7½kO˜xT]ˆè‹ëü.@fGãù¼ŒkIìË8ON(ifžXrβ3×Ý­ÈY*GÜÆcE·©Éônh6}åšÎ{™DÙ=©& 5­ÁÎzUÜ¿û¸:w ™2%PQe1‰MŸù¸gŸ©q\a†ÜÒÀð×Fyáo³EÉÞØ™f/@$a©”Ľõ‡Ï ´v0>4_U¨Ðé³Ã x¤­z`ÅPÞŽÆPÅ,0¸`š_2¸g×\‡çÕ@‡tƒ.TÔ¸ž&[ÛvÌÚójN} åµ5XDOËÀ™°eh¨ÝþÜ @ñèÈ>¡®§%4Q†­¡¯êªG˜žh§4ÁêtÖÇKûÍnˆÛc¢:Â[ªŒ˜§¬—”´ö„Ž¥„ìÌP÷´hq‰)P“®‡¥9^4î‡Jƒ–Ÿ*h¯trã+þEÄ/¦Ù{êµu7_Èew ¯#ÀÄñÝ¡^WýÑ@k´P,3ŧ¡豪ꙺƒâTZ ¤õT†ð ° h†anh˜>£,nö*ìCþ× í®øï|ú÷—þþ4ãBš²,]0ÝùšÚŠj’€ ŸQÂ'/Î$ØÝVÝ£Iª,D*X ™›fh•ºs]SŒ÷:¶TÁA=å3ÞΦ0r>éő֔?rÁ¸†W ¿Eú8I½¢$ À/nSÒmcÔÚ¯ÌÅâÐð[ ¿{@œ‰|‹êðgþß";!¯o×7|0;Cendstream endobj 638 0 obj 1209 endobj 636 0 obj << /Type /Page /Contents 637 0 R /Resources 635 0 R /MediaBox [0 0 595.273 841.887] /Parent 611 0 R /Annots [ 639 0 R 640 0 R ] >> endobj 639 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [108.424 600.749 127.818 610.446] /Subtype /Link /A << /S /GoTo /D (subsection.5.16) >> >> endobj 640 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [213.605 545.946 227.544 556.856] /Subtype /Link /A << /S /GoTo /D (subsection.5.4) >> >> endobj 634 0 obj << /D [636 0 R /XYZ 72 786.278 null] >> endobj 97 0 obj << /D [636 0 R /XYZ 72 761.372 null] >> endobj 635 0 obj << /Font << /F25 380 0 R /F44 495 0 R /F27 394 0 R /F15 393 0 R >> /ProcSet [ /PDF /Text ] >> endobj 644 0 obj << /Length 645 0 R /Filter /FlateDecode >> stream xÚÕZ[oܺ~Oú ô¡2¥Å‹nç-)N€´I›Ö>E€ž"W\¯­´•´±ýï;Ãj©µìMúÔY’"‡3ä\>ÎD^Äð'/2u‘å©PY~±Þ½’ô÷õ·þc4Ó$Z${g&®üÌ•NDž&8ÿíÍ««w*¹Fh“^ÜlÜÜ›ê_Qr¹’R™è—¡nï.ÿ}óç«wÆóÒBäYÆ“GÙÔ·4I±Xq“V "éŠ}ÖS¦µwM¹wM04¬qùÖîìOÏ*—1¢ÈÕo@¹^0x#¤Éyšóâ,«CJˤ–{í ш  ÁšTôÉ™4ü²ICËUp>IGï.sˆ]=\T¿ëzûz‰=§ZùòÇL pˆ†ÂP Švõù¹CL©Å”7¤@5+ž÷TS¨*›P×#åÃømy°Åˆä½IÕÇ-nš ™wyAºZ âÙ>ãï’XäIö²r¦“3RË%ÎýKÏð”Š$j%& ¬„ñèh±>ËýúS¶vů½ÂˆØè™¾®cy‹q•eºš#p߃¿§¿±Y/Ý•4 T“Ыd«T‰k.™8ŠÉïH|ô»æÍ澇ȵ›8 ᧉ“ ”'Áã6ó„Cq›rÓ0€*ß4C÷ú94x|3iy"ö{ ue?ASô 7õ´p›/ – ´&ŸàÙ\“Q§9ýt7o<KÒ Â>7‹È Oá ëoðá®yÜ/ù/}6(©¼ƒ}Ü[YnvçàE9[<ãÇ}½Æ7ž¦}(wûßnÁŒÎ=  |wF•K•,Àì”>I (N üý`ûGÎ ˜c^àÚŽ#j0‹¶*wðŒÅ«v\f˜U˜íO³?áÀ¹;;â«Ù‘ë6 #0gY<‹Ò†ÀªTQD»únëÐu' †¾Ö®í08=toÀŽæ|méuE£ðDè¹dÖà.òBŸ{Ç*À6SLh ðõøM-w‡EîFºÃH29ø:{‚»×/¼*H82hu9ਙÿšÒ÷(íð î|Új]zLI Íý|õØ®ŸYñË ñùâØ ïØ‘H³È G“<íÓ/<_¨É9Ôö‡zSÙ ¹ÜùáýÛ/Àù—ë_>}úÛ?n®,ž¹ rJ+S.lþ0„F~z  :ZDï7Kê• 0 ¾ƒmÇ"«¸{‚Kñôì´ºôØç{bŸyˆ“'×Hñ,¤b&wâC¦Î„Vs•;ôþQ3%7½¾“WŒU€£×¼ñ6Šy†ñÊú𓤳$Æ«j¶Î¨jé‰7Í”c=U[Ò¹\8Hÿ¿(-¸7™«sZ[·£WÙ/΃ ׇý¾ëÇ_ã$¦oߺº‚žôLsΤ !Õ`'~䢷›W o€å.r!!*jüÑ ŸW5S‡ÛÊóŒ>«±0“W“y+¿[PÕ\Ê8Æ‹pB*™@e(¦6BÃÙ£´r‰OàKC{• 럊éå:j"@)ó3‰"¯žv<ôíÎ3EÀî°+øm>oN½©>Í´:;x °ÄWÐôñha ®#MÀ¼'ˆŸáÄ_@‡ñí¾,c&%áÅdæ¸ð¯ÝX¯§Â‰Ïiÿç 8oL•@PUNQ´40íYú;LãÓ÷ѶÕ0/åÌŠ8p ãˆ$§Z ¢“&Oý „¢ž@‹Q’¯QÊåÅñ×çÅ3Ì‹ÃX&eô¦eK*»®‡cpºsBœ\£U×rëvZIp­n§½ Ì»qÀ¿–@>P䆗sçÆÅÌ#æXÂÁp}ä^X¦£0 ›Eœ„ÁƒOžZ?³m–À ~_jÀ¤Þ¨&B ìÓ‹ÀHæø<ÊU°¶še¦ŽitÎW‡…ÈŠ¨”Œxñ¬§r Ž÷Ü€K 9x­P <{毼®¥”ÂãèÔS®tÖ¨¢dn릞TK}µ‡Ú Œ+P ê'ýÀ¤[Šò òjžPþΧÊÀ‹Êymòº£\°/µ+û¯uœºf^ç qg[Û»ZJGU‰% Qw”cŽIá÷¶wåž qž:ކ-$M¤£Ì)PÞs…bIãLiqØ+sTÛÓBT Aï ÅTÝ ;MXÆÑrw’;îAšz-K]5ÃåÒÄ;¹Ô„¯Y^í> endobj 641 0 obj << /D [643 0 R /XYZ 72 786.278 null] >> endobj 101 0 obj << /D [643 0 R /XYZ 72 761.372 null] >> endobj 105 0 obj << /D [643 0 R /XYZ 72 697.251 null] >> endobj 109 0 obj << /D [643 0 R /XYZ 72 401.657 null] >> endobj 642 0 obj << /Font << /F25 380 0 R /F44 495 0 R /F15 393 0 R /F27 394 0 R /F37 380 0 R /F38 495 0 R /F33 497 0 R /F39 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 649 0 obj << /Length 650 0 R /Filter /FlateDecode >> stream xÚíZ[ܶ~÷¯Ø7k"Þty´“¸uÖA½@ 4EªÕpvXk¤‰¤ñzóë{.¤.³šµ AŠVI‘<÷ïޏJàO\eò*ËÓXfùUux&®øïÃUh½…>ž©ŠÆ·ÏLÜ„™eâ<58ÿÕͳo^ s%’¸HŠ«›ͽÙþ#jÊáÔ•õõF‹,úàš-¶ò¨Ýñs[%·:{ìlo›k™GC9¸¶ñ3ýó•»ÃF}ßl]Ùð‚‡²º–Y´wíãëM–$ÑKžuW?÷Ï{žÖWeSã+;ëõ=~^âžýõ?oþ§Þ$¯ Ó—µ»k,œY)¹Ÿ*úáý«×®ë‡Í@߯7°†}ƒ:jZžt(‡ÁvÜný‡÷ûr£ã¹q×o^ËlÆ;™ŠXäÂspµ»åY + b•~’ëyûîÔ4®¹‹‰8W‘-HúBç2Ú—È\E·LE¦æ:êK·å%Ž€Îø©42‰ú¡sÕP?ð÷Û–èùû¶áøþx Í¡ågCòÄ1–´—½ÝòJ$µ7鏨Æ~¿Î‚ I" •2E†ºuá<¢ø pö%,[Ì—UiXÛHõD {ë:?±+ñó~ûxmRP“¥OuTµÄŽ-/ë‚àÆšãÄŸø¥‚YT’ßÁÑü€È‘÷°óh\"ñÝí­ÿliW"ºwu°îÄÄ…\:¬ |:Àé¤ÑÑ¡í¨.ÔBû{Éf¤‘l38::™æÑíiàá‚l“'õG&ÉÅ÷Ó‘§ÁŽU9X°Q"‡0^áw6ÜYúçÖöUç<·+6 ÊϾ¿ƒ( &B#Áy¬Àz †b7~¸ ­·OÄU›•5 U\à—#á)ÐzçÕ·#ñÂslyÚ½ö<öƒRt3heæQ=›<"ô—½W)vwðÕÌÕ¤iô†}¨­Ÿ÷¬×*™['E¬uÐþO+šGi?ž§¬\ZK09½í!Լóe•¨GR2yN2 ’ ÀÞÉ22?£"ÚaŠ«üΣ"³‚މkÇí|£ìîìà¿%=Ãv® ÆÛƯÕöˆg®½kVÔíìÔz´ØßAc”’*VâŠA /˜=“Ž–ÑŸÛ¡íÚºä¯Ó¼ý‘À Á>Ë  {ÁqæÔû`(9ÉÉgáZ£Sbr`dGï#ªÆ¥|˜˜.x¬~ ž‰aØ-À9&@Œa û4èì,䉄™ôÂ¥AVC´BOâ_wüœ ‡ËfËÁ«YœÔ˜I©'ÕSŠ81!‰¤8Sú#0 ñçs~?PÀ•l@A’}Þïì`_n™ü²îl¹}àŧ’£€LÄR, Ý¨vûT4£|PùÄ\±æÀcwêŽý «\ïðñVP‚`;Ÿ<+"³˜… 5Ks(PéÜïàü$KŽœƒÍ‘Öœ£˜ÇEbøÃQ̲ÄD{––Š›«èå_Þ¿á¾e;Žw–¡t, \ü6x¦šŸˆ{Qi“1}€NàÏÖ°ïiÂÏdœI–ÇFùáúRþ4Y‘†äÿL¯L΂πíwîîÔÙÝ2&NFàiÛq`ø·êŠ cÐ&ûZWnòÍŽO ÖHRà·PÒX2k=gŒÆ9=?=šM£Y"Åì¸P“yáBƒô §œ:-“º<{7Âqš©e±³çÜÌÆ\?|ÌâB†Z·¨Èˆ¨µÊg­Ó„¬»ùb¬ÝUÕZ@ÌfuPŠÙtÀÁ›-Ä;òý‚µ1³ xÅèsÍ&¨ xÏ!7L¹+]C®7cÉ.IÁÈ D4ùÒ¡ lF_ðè Çò¬ý·­@/Vø‘+@X@k¶ëšv…)r_£Ïê¾=%ŽÐ€Ü kQƒåi‡CÐÒbqÈ—Í¥|"¤¿œlçÁí˜}„$¬ˆü–3§'Î ŸÃãKX4…â¡Ö±)Äï…ÿ° …?¶î¿Ó/EÀúë/EÀÙÓ÷BŒESãÉtqpÕ[¦©¯ë¥fÒ59¯Ï£Ó• œ*³¼(©3vOÈÖDuämÇ_aÐ3|Zî(Y§³<†´Ép\²z”Í.mkà²>3×6`9£ßNýÉÇT%g®_é‘J4ÀÆ–¾pF #’þ’e‚ÇÉtö»å¨ßÙ®²µ}[Ÿ¨¼Ž:½«ÛÒÏúôsG5"lϺ°û’õÿ·Þ¯²ÞüsÖK§HçzX F¯¹¾æGûòÞˆ±Ñ¢ÅwØžT»:uü¶%5ÀvF|°x)sOU(üÀz‹ûxŸRg|›*>ðrç¸è׬W鉈íÑá0Íï`fÕ®BÍŽÿóê$Êäø!ö$%Bý>ö·Èî8ºO¶æžqÏ‘X`Ú±¬ü¾ö°k¿ŒàÇíq<œ[»²ž¢e1ÝóèyíKSŒgÇÆô;Ðýið Þýa×Òeàe»2Ì ú€ï|Ï“%Í~…˜ ؃wäØÓCrƇÙÚÍ )«5[Ÿ‹Ã\´ÿÉ$“œ±¢µáz¬ººäòo‰õ·ùß‘F⤑Ú,5î÷tŽ«† ìæ²ù\{+Ÿi­¦.\%€ª39âRl£ì5]à—뇉Ìñ`ƒ<ÂÝ3Ë¥ù®ÁŸ æÝÙÆvìù³y$Ó™âü¿ ²Ì|’ˆ .QW»½–¤<á'ŸµÄïàAŘ– íkº(æš &îyÈ™`Ï3@ ñt‘?ŠYøÿ„¡(f)ÆjT(„SÌbõ¶m4ä‚ñ¾¦Ôîòˆx‚]\MJ£woñi|ašÿ̃º~µ›­EM-šŠƒ¬©¸‚¿G1³\^ví|6ƒn˜l?.Äüƒ>y°µ&â×råñÇ2ωR¬ ‚_Á’v-rîžûø5Ÿ.EB@úø6Êg²õʼˆ˜þ¥¥â ¦ŸVE’ú˜ÍiÂÕ({ÞóŒ‘18–ÎýÒè°×Äl»"ü–[LMÁ©ýœƒ{yöZò% ©æÙ×Wkzëñ6ËWU‹<ÔïohDªPYج/ }\pØ·t‹MJ?U qÊý$£dèi콯‹ŒÌ’eš?ù:”ijw(ˆ{Gwž& $;’-S_± Þºð´bk ´0RX…뺘ÖA*ÐØ‘W°r²Vm¤—Ï*0QÙrŠ*Bí5‹“TŸñƒ¡³D'À¿Ð\GÁ'3W£‚zôóæLÀwçŸ,˜}p[úávR•^SEWì{ƘUp%f‘'é½#a–W82ê5ÎÙs$‘ä%0i_³ G?ÌR™™ß@ã™-GE.³Q§¯kÃÜð{ ìü VF¦òz–†+ît¹A(8úú¹ß¯UWÊIîgc= ,î;[ÛÁ¾¬ë÷òž°µMøtN4!DkÏS)â<Ã{¶TÆ&/~Ëï,òµßYèßò3 Æ®®a ÀۤПûõ¥Šâü§º|ôëI·©æò¹ÿw¥¼‡endstream endobj 650 0 obj 3523 endobj 648 0 obj << /Type /Page /Contents 649 0 R /Resources 647 0 R /MediaBox [0 0 595.273 841.887] /Parent 653 0 R /Annots [ 651 0 R 652 0 R ] >> endobj 651 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [85.014 639.898 98.953 649.595] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 652 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [93.878 84.937 107.818 95.846] /Subtype /Link /A << /S /GoTo /D (subsection.5.8) >> >> endobj 646 0 obj << /D [648 0 R /XYZ 72 786.278 null] >> endobj 647 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F30 512 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 661 0 obj << /Length 662 0 R /Filter /FlateDecode >> stream xÚ½ZÝsã¶¿þšô!tÇb€ Ⱦ9i|q“ÚÄ3}hÚX¢,ÎI¤Âó9Ó?¾»Ø?$ʾܤ=°ØßîJ,"ø‰…‘ “&¡4ébµ#ô{¿ð­ï¡FÆZ…:Æ·W.c•„I¤K¥Ã4Ñ8þëû7_] ½Q˜EÙâ~ãÆÞ¯ÿÜVm±Ê/–J™ ÝÚ[ ´rj¬óýç:oª]×UIßÊ<_s«âyKißä-5¬îv4¬ØàSûe ,³±Ý®¥Þé::¨64ËH|(èCQ^üëþ¯‹¥HÂL%ðDeîXÛª.~2 Z‹«&q`KÜn"ƒ2 òî?­‹:_ñЉ Іºï¾©ã~K]*Øte?Pöu±·u±{æîWhórí8ÓÚŠ r³òƒ­ýMU»ãD“ƒØÃaûÄ%q-%ƒ§¢ÝbK–ÃÁ›¬§[µÔQãTWü!¯sÚõlêjO-âÚ_]+³"Ì´&YÊ,”B¹èP],…qpSmawů–9a"¼$"Ž “"â֊]ñ0³ ˆ©Œ¢K2:ø1ßÙ6çàùØÐ܉ÃÝG!YJxdÚ‘¸Á-eH—»h5ýåf"xr·Oíf[u;\#Í‚UuWòá)ð¸brâË‹eÉqNBÄÓ¶X!‘-uo-¯owun×Ï4è.(çí¬ófU,k¿õÍ·÷ƒR{Ï¢0ÖN§±?¾_øÖ÷/蹄Û;¢ R–©ìuƒ¢àzxØyú°ePújŸc+ öUíZ)±µÅT)ñ%UÂîÇ‚˜ÝÐxÇl$Ñ5ÈÁ]i@\µåЇ :aÿÏ‘ˆË|Ùv¥ÿàgG2*³ÄimÒ+IVlEL(Òô¬ò9Y̘š¿×…£›d´-P¾bz±;nùÏk~Z§‹Ï- 7€£oº}uzî$^šÃe¤BaÔ©NM®E¦aû¤A—¸żÊ0¥¶õ3.™’J#&›7´ù‘àçk¼?)ƒ·y™×`ÉŸ‰k2NCë G<{í{8Ø%Š4_¥J“àÐÕø9 ª†{H{’aÈñÝ©”M2ªø™ƒ3™áކ¦N_᎒aÇ<ˆ”6uJ›¢× 7”]ÎkÛš7h›¦rG\l£ Óß×™¦‘œðd´ øgZÅÙa|»ùË— _K£ÑÒåØð±hÀƒ¬Ük ˆáP»ZåMS<»¢E¥x¦ÑÈÃØ;nìŽoý1ð¥à§Ýá)\«i:ç‡Ü <‡Ì'öÐuVQ Ç^Š,îw¸O¼há—¶ J»w- ØÖpþÄqY íl· 5V*!‚{wžCï!€ðCz¯o|^ïêúo“nz!7 Ø]ÕÚ)ÙÉÀ­EʼO€5‰-Ør²c¼:Ÿzç÷e…3ŸJvÈìWÙó`«Øçg-ݵNÀõ”¸©Ç®f‰°×3¸ãÄ:æûÕc1Å·µmíƒmÜ7=š©ƒÃÎð™Þ,¯‡(n¸Füƒýõ¿/t$‚ʯ·îjÇ.\rªáYÈõmáîݰV&==˜2É !0rÅ7k o` J}kXØJ÷1J0ÁûHiámà¾{ïÁUJFéôRbÒd#bøæ÷Ží)açÆÒÈ[Ù `ìÎûØËPëę.‡¦€¹3ÊÉᆠf5Î"#¢Tï-Cƒ0¬[±iš¶Ú0nt^¼ðÐ$%h}§ÐDD1@¯ )ë0ÎÄï†MâO&äå^„&$,=8LQp5ÞCµþ\[€Æ^¶¥ ¯cw…ˆÜÕÀ3´ÄQzäÈbA0¿’ÂøcG†Q+àÓEI8{‰-Jê…ûÐöÑuq¶ bø€²Ð£xì¬üž²à—Î’¬ÀºysVU ÷ÇCÀFÊï{¬ÀX:‘vA³GHœõ€âòš}„3oà¸Tp}^Ú{©ü£Ývèb‡Ø)#±ë5/¥Áæ¢aÛuümJÑ5íd_´JW¿Ð0Mlýû?’èÇÝóa{ìÀÆ49 ž¹ z‹–Œ|ÁÃI8œýßUÈCÒÒõ©+`ïäÐmù˜óJvã8ãÈcpp5¦âBxea¬Qg½ä.œ~ÓV‚u6š¢/ÔlúGÁ⊃p>’Š}> mOb8SÐØ$€›ôy¥<¯¨í‰TŽ4u‚Ú¼¦~¨ ع–:øÓ½x‡aæÅÃÏ‘Ž¨³([jìªGè~£KÔ×,@%°V¸sQç‹Í˜0Õ‹42Y(|¨™ÏK@² ÷ûÓÔÐç!±±W¢KF€ýI”š9Éõ êLÃLzЉ‡òG8"¬Ò0¯×SÅ¡‚ÀO+æö ûRÐ^&¡€ù§Çìf-ˆ„H_¶$sU·—ƒâ} º†ó¸š¹pD„2õáÈÊ2” <¹Ï™Ô`ãú¸ß)Œwól0ž<h g² ÆhJ;¨ õôv–Õr?e0@Š€¥29v”¸Rr‚…ÀÿÆ.߀7vÕò0~úô‚„£ *÷Á°w†5]ÜŠ5u¸ y&¬I2¸g/\盢Ìgø e‚‡5DÚûS’Å=E(…Ûsy”;¯gˆØ‘÷ ÙãÅuûË™EeIð¡bÂÍ3"m‘~ë>/£â!˜Æ`^8gwºRŠºé%쇻·×7?|;wíTͨE>€¼½{wž–6¡4rà ¦$o6s$M˜ôšÿ‰{#{žƒÌõ%u[ZYéÞ{LiQžúTm›sõÉ¡s O;O%<ŽÌ8åt%†Z(èèQgN'M(Tü)KDhzijº¨zÓ¸°t@M&xt¿ƒ„aÁøìŒ?žXž$ñxD¨ ‚ÙÁÓäJvæY(3ù[ò*Ë~+N`š1?Çpd ¾EǡȒߎRÿFl|ž0L¯\~BcÞd¦Læb×9U‘F2¥›··w?~ûî›»Ûë›s—G×Ñ8¯;c×€;ÂL‰^ßÝÞÿåêþê뫟æÈ. ÇÒž;‚×?ÀF”ÌŽ+î¸ûñKi£Äùß®!, Bþ3ðÜ™c¦½ŠÿgÎÀV¼±øÂ9kGžÀ}rFÒª’/:L—ŒôC–•µƒÊNä%'¢ãdž‘”Eûì ª?£9ìóPÞi[".Ž­ƒ#"•Ϥ#æÚ…ERÂ")9r¡6.0d_V(¼=(ŒÃJà†ž– ~ý¼ÞîC{Å`šGéÄDMÊ=®Ê×ù2$ÛWÜzR]íJt”ËïÆ‰Sª)ÁŸ8…ù³õBcÑH€ÔpÍËv¨l5œŽ/\f63œ~ÍÀT–s¤á‹lœEÆ7Ѝ32)ØQçp{_æÄªË†§—Ÿi…;nëbÅÙö(¨Ø‰ù •ƒøg®È‚OŠëÑݹÌ9Îö×ÈÙ=çÙ¨"é>_@!C*¸Bõ7梊DÔ<·F=·÷IeÑÇæX({â‚{ÌÅ2lQ±ì|ºm @º)# óYJ 5«äéç)9év2)ËfX8.ÈLÁ›p9XBÖ"ø©a²õšŠ;GåSq7‚R‰‰¥¼ÞS xÓÓ”Itª}: ö¹uhVÿoZR†*…qY"8àƒe£qÐޖšÔ.ë|‚Cy§ô ãSA8¢¡€†^©äI)ûØCc“*uJŽÓGRQúÈŒÒG.›xµk*<¨–¨Ë8kÄ%N룰™üãj×­9o8)ðïMR,Pb#›÷º ’q_šü4Œ(0¿ˆe˜ôPèÓ0¢ˆPêÌ(l…­ßlèÉYo<h:A`t‰¡ŽÙç-0Ðk_"ANÃ8>*øT!™L#ƒÅ£ë(›qMh>i‡VøÏ§é6¯;B@ðlÄkIpŒX•z- Nÿð/”ràòèø5êd<µR¼ ÔÐÃê>z‡¶˜džñ½õ†ÿéhŒõpPÅ“-=z\L¯Ç±²_ˆ“ Ã"‚ÿc€Ëñ>@yòË•õyU `í±äììäº$¥À%‡Q¢ŸË’ÿÓ˺Í?¢x«phîÅ•oM§äZu晕NٜΫ¾Ð°Ã(þô †7`i­q$­©Hâ¶PtŸêlü*@~÷Îîi)0ô·&y/ -èkØÔ‡u@þë‡u:Íùpt¹*}}—Sæ°í]N޳ê\l‹0ÒØÌþ©IýJ¸¹$|4d·^~PHëa_¯ÊjüûȪú?8Þƒ- Á§lÞ[‚É}bô(’Ã̼þ·!¡ç¿îÊ’@°Èþ#-™»BÐ{'/1]€p½ú?O a©¯5er‚àpûò¾ÿ¦£‚endstream endobj 662 0 obj 3588 endobj 660 0 obj << /Type /Page /Contents 661 0 R /Resources 659 0 R /MediaBox [0 0 595.273 841.887] /Parent 653 0 R /Annots [ 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R ] >> endobj 663 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [72 657.837 85.939 667.534] /Subtype /Link /A << /S /GoTo /D (subsection.2.3) >> >> endobj 664 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [193.787 522.345 207.727 532.042] /Subtype /Link /A << /S /GoTo /D (subsection.2.3) >> >> endobj 665 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [173.725 360.142 187.665 369.839] /Subtype /Link /A << /S /GoTo /D (subsection.5.4) >> >> endobj 666 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [256.922 319.495 284.801 329.192] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.13.4) >> >> endobj 667 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [243.333 267.419 271.211 274.995] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.16.2) >> >> endobj 658 0 obj << /D [660 0 R /XYZ 72 786.278 null] >> endobj 113 0 obj << /D [660 0 R /XYZ 72 705.928 null] >> endobj 117 0 obj << /D [660 0 R /XYZ 72 252.154 null] >> endobj 654 0 obj << /D [660 0 R /XYZ 72 170.759 null] >> endobj 655 0 obj << /D [660 0 R /XYZ 72 134.694 null] >> endobj 656 0 obj << /D [660 0 R /XYZ 72 98.327 null] >> endobj 659 0 obj << /Font << /F15 393 0 R /F37 380 0 R /F38 495 0 R /F27 394 0 R /F33 497 0 R /F26 391 0 R >> /ProcSet [ /PDF /Text ] >> endobj 674 0 obj << /Length 675 0 R /Filter /FlateDecode >> stream xÚÕZÝã¶ÏKÿ…E_¢ΊHQ¢Ô·»\6ØærW$›¾´EÀµe[8YrEùö6}狲lëv›ôR X`Å!E œùÍÐê*?ueõ•-òXÛâj¹ûB]ñßû«PúÚXÒdiœ¬=#¸’‹4‹‹<{N^¥qš¦<ï«»/¾ºQÙ•Jâ2)¯îÖ$s·úGdâëÝýõ‹oîÆqElŠìùåd±ÉÌs³¿¼^À¢e×þ3QfsèÝPw-6ê[šŠjÏO_¹~y­óh[­¤G¤‡­ˆ®»¦é®u=Ô톛º~Uõ9ÿŽäj¡uœ©ü¿PTRªÉ§€Ö.?åOçó£>—žîðëŒÎ¢}ß]/´–•÷_b“ª¿öCÝwíŽËË¢Òð ³ 0z¼Ç~Ôv¬» †•‡-2¾ÄùêFÛÉZ´)c­ó°"õæöÕÏ_¿{{sû- Ÿ,ܸòTd]»â÷ÔëðâC»ze“Gõàq< w£(¯ a\ÒÈ×Y¹æpƒ›®Ëh¨ú}_  N:G$0€Z·«¸£[sû(0;5r–øª:ßÙ4±±6z\)l*¥ïžØN§çsÂTeZ~.Ÿž ©.é"5Y¬ ((g©ù`ü·G™¨íø9n”–´ÁꈞTå²— qðUÿ¥çò¶£-ÑUÝWË¡Ï#¿í ®=7´å•IhËQõn¥Š ¨ÊÞKëÎ £*¡ ,ËóäÛªå¶#Kc –MÔåyÈÓѦ,€¾FïÚæqF‘'nWƒÔ®WM‘=x` ÕG·«gÏ8L |au¬tùyˆrö»e"€´sÄÖŽxÒ&5iARÀ"pì‹BÅŽûF `ebEdd+â}å@‰ îñŽ&6N™(¶°?¤äø\Uƒ«›Pö˾–µšÙ^tΈ4€»øŸHÖ%Í‚CDô·Ð¬à·VeHýŠ8Iõh´ŒN"·FŠj*#¿tmKàÇ¡× €·o€±bMEMínGfŠÃhs…¿'ãæzbÊš<Ô(UŽRn{[ãiò,°u\³õB!Q<P¬î¹Ú/.} ¡ÓKÃdT¬òl¤ÿ?ßÂ;ßÔ÷7BÛl©°Ÿ3ip}Ëå‡zØri޳”`ÂŒŒûÓ›7sŒÅÆydÁ]ÍZ¤ÍHK€Öª^‚µ¡íH­l¼²F­¹¦þELvn„#ì}©ô©1<ÏÙ“œQµÈa1&ÿ<ö$ÿ?Ø“2‹HU‡þkÐcGN˜Ô¥Ñæ¹yU-0)+^Š«ÀÂÄ a· ò@Á+2!`žßvCF¡«á‹šóõ²žl\ϸ€OûZ±ÿ;tS‡à)Žþº6`Ò:!Þ¿T}7à,{‹4ý™Ò*öwO«úƒÌm˜‘S„6_ \ –SátTs!¹L›gb†TS¶‰…ÂkÆ£E´¢È…3rúPäò°R·,KİaÏ…]G[Y”èÒ·QH/ÒÌ~Àµ§gI„‘Ž+¶©\òCX‚!"> uŽ •X'Ž ÙSÒ“ãLpŠû}CÖ¤k Ï™¸Db³ÚÙ &Þ\喇§WãôGª Èl/7ãꟲ†zBÅcAÜG‰Iv­¼.L„o†1EËÄ“oCŸ“eòÝYbÏ8<·ŸYÜOâêÉœ|ð\ïy~s–ÇQwü²9bAï}#¯Gø\øîèçú÷à_`G,„W·;XN€)ŽØ*r?Pó‡zà X2`I&e#nyª…à¿8Ûƒ'!5Ý “wë0Õh|P@r^ Òâ^f®e–@Ã'žyæãä|xÏZ09G&øt+ Ĺ­¸eúvbå¼c`¡ê¶ŒVõú‘}`.éRÄ|òµ,]¾jÖ É<äõ; ®p~ 2;øÂèõÌÊO5˜–)P÷¸¼9#S¨¸,ƼÄã¾Rn½›6ÂX™cÎk.1§ÀTC8sµ(“Xçê×sF3Üšßš•CÞGàa[/£[ÖGœäÉ|½aK52ðD²-‚ܰÆ=N'ž˜kc|[r†Ê‹PßídÂÑ&æ öéÉM6gè°ÍÓCµåÅäìéñ9¿MRõˆ’óà/ÛŒ»Y ¿rì' ‰¡%ùþQW¹™˜¬Ñ!g÷=Ћé²_p.'hNÜûê߇Á¿ æ{ð›Þí)q¡3N‰âX0c\¯‘J‘I*Ç,Þ³Øv\4ô°Qäò’F+ÿ¡F.@­%²¬P8·ø©6'Ÿçx&Ôslù;Æ‹]ÈOý.⎎¸ž€¸Õ¡—+dufø>‰¼×Œ#Œ ™›Ls66™øcåÛmøö‘‹A[à“‰.!=Ž!Hƒ c³\WÆ+_›‘åzX†pñ%5¹Á² àM9~ºxç p^> J‘‡AÀxóîíÝë—w/_½üqŽ*AÏpL|Ã:-ã1-Ñÿz‚#–%'‡ý¾ ƒ\¾@ï1=ŸLî«Ý~`…qJâa iª§°•1ßpK~ÔJ6žr…]#¤fQÆšÿs|7p¶ZÓ‡¼´ûº]’Q?MÅ@uçÂñ°“ô͵"S†E6Ôáø@Ã$Cƒ’?ûO]ïfÌ*›ðŸ<Ÿ0œ#ž‰PE+I9xî=šqËfc÷ 3N,9e˜­ó¸6–§|ÅaÏ=Ë rŒ–Q~Óv}g^Œ³Mŧ Žz´t(€ÊžåN¡e’´eþË?‘èîžòNn©9 KO®°ƒìEV ÑJaa.ö; êp'”½:¦äèUk~®í2„§XåMqm&<ôha€y¡q¬&ü½‡ïr4§Ø˜BVArò*äz.ü¶Fè%1_q4ßëG™ù£[üŽ$-§ç½Ô±-CZ¸kç.¶€Ré‘HÔ¯¯šŠXRN\Þâ“›š7¢•ÕhÆp NòSÇ'€6‰ž¬©;¶°^ÀÍ/Á€xn£(–q5ë†* wËŠaL{‘hY´IÀ¼WȆ.Ì‚Û8 †¯³ä&PRF)=Öèâ“&hçîQ¼?ÌÜÎ1`š¤`µŸÍQk°Ü)YØ'Ú^\°ÃÐú‰DæâC²‡endstream endobj 675 0 obj 3181 endobj 673 0 obj << /Type /Page /Contents 674 0 R /Resources 672 0 R /MediaBox [0 0 595.273 841.887] /Parent 653 0 R /Annots [ 676 0 R 677 0 R 678 0 R ] >> endobj 676 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [430.514 711.621 444.453 722.53] /Subtype /Link /A << /S /GoTo /D (subsection.2.3) >> >> endobj 677 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [112 548.969 134.424 556.255] /Subtype /Link /A << /S /GoTo /D (subsubsection.2.3.3) >> >> endobj 678 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [226.639 352.27 232.093 363.179] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 671 0 obj << /D [673 0 R /XYZ 72 786.278 null] >> endobj 657 0 obj << /D [673 0 R /XYZ 72 761.372 null] >> endobj 668 0 obj << /D [673 0 R /XYZ 72 580.55 null] >> endobj 669 0 obj << /D [673 0 R /XYZ 72 499.355 null] >> endobj 670 0 obj << /D [673 0 R /XYZ 72 461.169 null] >> endobj 121 0 obj << /D [673 0 R /XYZ 72 285.535 null] >> endobj 672 0 obj << /Font << /F15 393 0 R /F33 497 0 R /F27 394 0 R /F26 391 0 R /F39 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 682 0 obj << /Length 683 0 R /Filter /FlateDecode >> stream xÚíZY“ÛÆγò'˜'cS"Œ¹p<®¢Ýò:>¶¤}HUœRA$VDL,´¤üúô5ÀW²+±“JŠœ£§gz¦oz  üÔ"Ó‹,Ocå‹Õî™ZðïÇ…/ýÚ˜Ò:;‹µO.­Iã4q‹¥qqž:¤ñðìË[å*‰‹¤X<<íÃú¯ÑæºZc£Ç¶¹ÒE4`ÍDër(ß–}ŵ]y¥³è#Wªûm½ª‡-Õuôöj©óH¸ô{¨eQµªH”­ÖÜúö (dø°¦åù”C £C_7ï®þöðõ³›‡I­cSðj‹ËÂ_Þ¥b•kÞ8ÚÍlDÝ€èN»èA½y] ·m3¼„Mx›ðCâî[mÊŽK|¬·USî°SùE/]œóeZN &òEW-ŸÁÙĹ[±SvaòXi3Ó ãMæ;TçyÆýÓ'±MÍb©âÔe£\ÆÌÈu‹‹;9ü<.´•~ÎËpÂ6ÎÁ¸‘n”ÓØØÄUéÌ:—&6P^¦±‚ñçrz9€OfR8[ PùÓçã÷{F[Äù¸ÎºmJ3ѳ4ö¤ŸmÍê]uÒÝroÉýСòQy…–eÝH››¸ÑˆCûÈ-cYPNµÀ‚€­a[ù¥ÐðZSYLF¦ƃ"³TK…ZTlÕ‡rW7Õ:¾ZZ›€íUD‡f%†µ®ÚoËU…}:‰ÊÆ[tõN­¯GN‹†š_´ êÞ‹û®ú©nýV•Íš µÐÜ߃Ôý¡Ü-J’É€²Z0/+UV@ŒÎ"èxl;9ë#u(@§òÂ;/õ殩‡oê·ÇZ|¤iÖ˜Êع̚è§Ò4-OêW5Жbß´¥X+Is°Z1Ôå¶þGé»Uô¾fFö~8t25ƒŽR¥6.Nβ«úÖô ˆ– þ³„6õ\äÔf"W]×´ÌÀfBÇ+BæãFã |þPÚ¹™ÀñvœéæÕ«7ßß¿ùîû‡7÷7¯¾½{x¸y93¯Ò..À´ÇÆYo¯rµWÄD 9†‡rËëX±‰dj4‹|Ú7“ÀÙ9{´oSœÒ6 ¬ kxvøß$=«ýŽŒYl›ä,µMÏÎR['*€„“ `û‰Ç¶o¹4n¯¶ù¨ÇONÏXÅ‹ ’òIR~ä nÒs(æ¹levä_²,Ú¡|‡^˜L!*Õn?ÐÊÿ‘+ÓÁÉdéÄn[ìeº^æóÛÝó<ÓŽñ=XôÈ­©Þ‡B:’1X±Ò“GT**;i 7Õ»]µ®Ë¡b‡ƒf×WÝ@3b7{­vÆÍ~ t&‹î„™(™2âötÔVà IH•Oã‰ë6Sö°ãw~h%Òýtåà´êmùv+À&Ü2?µü³g@çœ \úvź*cDͰe„M£Rž%[‡.FctÿupÒõz=“F¢]»FÍýØ)ŸFN ìÚSÈ)wês“Ž•qÿÙÈÉþ|ä4 ñï(äg`h:tÔÊ. ;J¡œ 4õ®òÍsáI9PåBL3¹ ašö0M Êd¥a'új n)zòþ_³Ñ§hj„“LtÇÆ»ÔIJÀ:4ºÑcëñ&CȃŽýöstæâl°w_v0zÍ™M)Às¯)h3q,Zhèt‚Up¥ªaº¹ RP`§&Pp}óÝË7÷×_Í©-\ž¿švvÁÈOOüî_Ý<ŃØëqhfLh97Ø+AËVð¦U¾KÉ‘Mp¤V…Aúúz·§=¤1ð/[Be¸CrømÖ¤Ã8‘t`=ë£x.¢úPVà[ç‰sßֽ܅ié_g‡÷|«}a}v6”ÈI$Çÿ#<ã\´mK–Í1ç5ÈÍæIs˜)N JÆPgjÖ”V!gò¤;Gœ4Tv]ä#¶q¶ÁæÛ袠ø~S¯xÃMìÇCä¢<T(dÆ|Aºk¸]j‘{ –¨i .=m÷|Fm8N³<ð„ç äÂÍP)€ ‰wÀ~“Ï£ùÒª¼¹::ïßÍ¢P|a§ØÀ¡É©Ï‡y%7ì˺ Ïtí½‹¡X7Ó•8$v3÷9÷`ùæöeàËòùlGÑþùE„imì~›L ðoÉÆ™Odãìçfãòÿ^L©‹X£’'…ûMn¿ø|ÍÿÏ÷_zg'…îƒ`ày¬7/‘=:TÀaX³F\9¶öý¨ô‘}MùI!LFîJNµÖ«^úzÃlLq<{ýr¸ŽuÕ¯ºZBËzîvÎA®Å x¹u²¨îy˜uwxØ%gK¡2ÍjÜÑ ðÅðdé¦YœäÅÆ_†hÎ~ðj*4LšJ2¬.îÓ0çj[•; Á|c_›Å:=¾{Òq6‚=ñŠÛä°ŠðakÁa pØiZ.æ´4?„„ü%c‹`/7í1\>kR„Îl:3Ƈ4)ÂHú{•}[®å¤µœë†>¹äŸqÃAò+Ò4-÷lÛæeW¡ü®f­i˜¤~äæ’ÿd#Ó<”) 5©6~Á²AžÙùÆžÞÚ6_ãuÝà}ÐrÇwwpnõþ°õ©e¸lÐ$@Æ^ K“Ë"NCàÞ ƒÉ5a-X°@å¦kaÌ·¦¶ïkFìÚNÜÆ¼E »œF›}9lúØ¿QœÝDÑ|^UKTù—N(ïaÆxœ*¬2ÿŒ[)yh»&6ô®3=ãåuî±×#L•É=ˆ èâ5в¹fÒ˜ÃÇýL¥½JŠXÁ”—A Féì P’ÇYú9˜Äĉµÿ˜$|\j“†Ztþd¦²_þJˆV7_²˜§«F70ˆ¯Ál<ÝqÞÐHê ÍyXÎéa¹ç–1™oî”QR:ºF¯a< ½á°™KvgOªÚ)~ÜÃÏŸå^o«döؘp€:¬ȳ@k#sŒŽúÆ—¥UÕÔ‚TÊß—àÀ‚\+sy¦‚Xpì0ö̤VˆÐ3+o%¿×j¸ýè®ëêuÅt²ÿzFfäB òYXÝ”k.È1Ò†ÀX~ØÙÖÒ>€c}}à|µ6É4Ÿ¬„‚…ÿ´‰)›¼''ÏúùªfE©œoëɲI|n›ttåõâä†ûD8,ö›ö°Eô‘8z’ÏùIzh±0=C¥«vÁ2ppòU¬å©„¡É\¬µOŸxg8ŸøW©˜–%h¶—o4ø“âü;ħAQ2y °$*vÛÔÑ€qE'Cüayú &’fº†àœGú›“¦š7‡'¸¼9'=@ü˜pYøáЦ{†÷ PùþÕüžlARNÝÕÍøX­å]ò4—7x“Ú ™{ýâR&ÿÄñssqZdAzíöÛ‹¬€4õâÌ?é$Ö6xf¸ùîO¹™é‹Í v~ç‡#®øyߟ äðub²ð£#oÅV¾€Pþ±šZ<⺷&%à ^ö£å()þ ¬T¹–á»2ìŸ.ƒÊ_$¡L¾%Ÿ³f\5ÊøÓÀ“qà±ÑÜ'wÇVœÈscÚ¯”Ê¡Î}S£âÄkÀr6QŠ¡£—»à=[ÒZÌ–“£ž{drÓLÉÌD žü±Ÿ CWã-*ýÔ'€µcƒ¸äi@¡óÓ)ÀGƒKs—?²ü'À¼x^endstream endobj 683 0 obj 3112 endobj 681 0 obj << /Type /Page /Contents 682 0 R /Resources 680 0 R /MediaBox [0 0 595.273 841.887] /Parent 653 0 R >> endobj 679 0 obj << /D [681 0 R /XYZ 72 786.278 null] >> endobj 680 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 688 0 obj << /Length 689 0 R /Filter /FlateDecode >> stream xÚÝZÝÛ¸Oú/ø­róÄ/‰º·¤Ùí¥Eï—úÐ+Ŧ×ÂÉÒV’ãìýõáú°eïM‹^ ¦ÈáÎÇo†Ë1üã‹T,R“0‘šÅzÿŠ/èßÏ‹Ðú3ô¥Ò’i…_Ï®”LXëÅJjfôoï_}sËõ‚Ç,‹³ÅýÖÑÞoþÝ|élµ)ª‡åJJu;‹ ýsUº¶ŒZ›7ë¥H£ÝcÞíZìѧåJ˜ÈnëÆ.ÿ~ÿ§one6bÏ 4¡‡É« ÑL¶  %x Ùv¶¡åŠªèŠ¼,~É»¢®h_EKÛz„UÓ¨nÛâSéwzhq÷ÀþÕÍý !˜Ìè7QÙe™]–#çŒAòvòéŒüŠª[®´ÐÑ=ÿøf³¹¯o‹Ò~@íî@X?Å:¦ñžeØ==Ú×'ýûzúÖ»¼¡ÖÊ÷ñpÈ•f)lf•1¯°Q8°Y4v±}*ÀŒ^ÆLâœ^–êÌð„“Òø I1S‰Eb±’½¤œ‘Ãí̸_åÇQá ',@Ðæõtý9¥bRÂ9á¸<™Ù'ìKB{•0óÏÏÎ|R™€.7×íá~‡ª¦ã$Ú»%¨xGŸŸœæYüHAçìöPb[G]Meí,bw–:¶ ¼Ã|2(Ï»ÛåÍ>¢]ÙÆO©·ô[yžpÈ"° Ûv´rÞ~JWìO&ö³BIÂÁVU$sD›bt …–1I¸­ u3—ªc–h´Σ”¢Ý(%ƒ}tr´hìE¹ß@Övs9Ô‰gRJDí®>”êíÅìóÍÆnˆæœ9§Ä;'¶\¥©Œ~¨Ê§·´B·ÄÓ‰@êjƒÎˆ^MW¬%Z¥Ò©¶Àÿ•vo+¼C<ƒÎ¢}ŽO4ê}$´ôµ.PÜy $åHq®c—%Âý•$£g;óÆOÉc×c˜Äx%xé+wRíN±±p!û¢r”\Áî@·ž¨Mâ„îoî\E¸‚ÀÒ;õàÇf„§ ð€¡&1Iôæ!/*ðo J±/H˜¸tM¿Û®›Â‹Ìo1'5¨Q›>ãÖqÐQF›ÿáÇß… ëzOJ¿â™`pW“«þTT>¦€[C{9?£6às‚zƒO¿»}óöãÝ›ûïfŽ™燉öõ 3ð7q2ðzsû—+¬âTž†Ë 3ŒdZ Ün¾ÿÃUnjl£‰ùi[YlP»džÎ¹•$^“€¦C;—TSÇ;H¥=¸.Ò¯L² ÐÅX¾Ö  sÌQÊhÂ_ж#c‡Þ©"SßqW¬qÿI›’ƒÞ^kÑævvNPn^`auξS¦GîÎ+=z¡¢÷ñßãNmG¬UÀâsF²’ÐŽã©`ðòïîn¾wéÆŒb"Üm=k{’¥‰éå7Wùih™^5W2ÇrÆÏuQ aU*<ìƒÎʱÁ½‹“IÖ»¸]Ò Áâo>$×÷7…ãtƒ¸‘%<6vB¯xêA|‘!Õ±!ˆâWhAD êÑäÀãéÜM–DŠjíÙ8MäÉÀ.=g7Õµuð0âÌ~«ÚOª‘­ØÌØcSt¸ÌJƵÕDOs~¬9MG¾a;ir½\¦àÜÄè~c‘ƒ.¸êöP­=v†/ I¸ ø£K‹¥‹5î¶€ C äÕˆšÀÅhžƒû®£n<ýÖ t¹1@°l")˜wÀ1\&“qhBƒ“BŒ1—„˜—mM½íáîQ†CG8ÒyòlóDD¤ÚÐXš¦W&$êSü…D7 Ïeaö&ïòO9XИRq Î1DÊŽ—×Îo‰‚¶>±ŒWù\@<<Ëj4Ü:’§œ%æ?˜ÕŒÐÍ?ÚîÙ¬‘À¥%û÷r”ä¥)ŠúßNQÔWJQ¶dz†´œRwÈ &* £+9€/Ƀ¯³«POHâïxæ ,\©ôè²%îÇy3BèÃÆhË…§mlwh—2-4hT³¸ù’¯;ððÐ{°,ÀJf!\³Uö/@¸ä „Ó ´ûeN°,Ëža¥^†ßÀÎ3q È…Ûwo_Ä,¤X(Å> $OÁ–¿ ‰§J§(úý'B‚ìbH1ò`Œ]ð7“†ÐŠdxÉØsºÂkü4¤ŽH‡½ :r$Þç]À*øy,*ÏÅycZÉiL¼²æ XèkòR¿Ã¹O´sA¼(!½z0…†€éì˺­ý¼ô‰ `'´68­n6ó9æÙqö• p;F|-íL|©vöVQ9¥0/ÓÎñ¾Éî;ˆès[„;LŸhã3ìÁ§Y_«ÛXžA¯£)C‘ZŸY$ä÷…!W ¤eACš°‡NÆ`¾F``¥9'EÀ#0õj|_kÑóº„?ûú%D Úí¤\³óEØ)|ïF¥ ë&@‘d50¨N@K3HËç «9)x±1CCZß®¥.‡¥Œ¯´`Ç;È1ã"1Ó™:­)Oðü 3ų^f4F0;‹ÈIô^ìrEÂñ„Lñƒ©¦Ê±cr6!0ÑûÊO‡ã°ž’lþ:Íß6›ÛºêPoa××À9‡ nF ¢µîõL9Y¼¦:váï•JÝ2Ú8¿†­ÏEN ÿƒ°æP2> qeÚü× ß(›Žð#\z·ôx©ˆÂ¸3@^ò @L™LåK"@fþß±gïf,ó™#¥‚A\•‡œ*Gs^ÂÅ^ç ¤<} r+Ð#‘+é2*ØÞfÛº,]>sôOL Ä.5 «æFýëN™¯í·§*»W”î3/_ V™È‘âÎ^òoOù“Å<û®†djÄüÂó?Ê(>À™Ç¯iAà^w‘FÈÅ<¸}ÏJMaþ4 ÌÔ0(;¾Œ¥€Ú…—iò+)âM•y¤¨²¬—&vîò–:=Nà~Ž^cij;‹S ?cÌáÀqg]qoºê(ze“èDëšÊJ¹Ã©Øc«úð°›A–{ ¸ù‰êà.Áï®vŒÐ8pûp—!Xå%~µ,P*A"A£«_Ó‹íÒ\¿Ë^ïÈH•×=7À‚;-.UùÆÀ#”ÎwO€º{?JY’¬ZÙãÇ÷ïf\zÃDŽêV°Ü¸.9²nð!cý¶ÞBro\„Õ±5·€0o[¯…[Ðy,º]˜íÔTö[àöG¶—íHe,áêWbG’»ÅAQhºR?ZðÑ;·õÃAWq”ªœlæñDEñ;ˆÑ•v†‰c&NäÀ£±y9¶P¿±š¨rú|ªP[œja[üb]¤Ñþ½Öá'·¼ƒUuIèÊø2"´âÛ®;õ²Ê—½Ñþ`MÃn 8æ˜2ØR~^bæPæ°ò?¼{]¶t”ò„ÝŸ”@dš°Ød}äëónƒÏ1ð“ÿ‡<”¾±'í͸$Ø ÕüòÇÈf(c÷6¼°a³¥ ”éþk5‹x`}že ù½£ü >Ûk_“0¾ÊŽ!í6Þ™§¤*s[Ĭ‘ñ˜O”d%ævªYŸ|_zg‘ý»ÐJ^bÑÿÙJã½Ä dçD¶¤69]no¨a#Å÷Þ"ôÄJD~";—Ð!ðÕJŸ¥uʧuû}îV3’ÒUÈÝ\ív ÌwÔ‡mB0úÄ€²Ïƒ®dvþUEh**²X™£æ.ð¡È–j#ãú~û2 ŽÌ!b•w'Ë´ö3ý©D^úŽ.pJ¹uÿÄᦆ§(ÌAe½·®yîI po{Ø%ü_cx@»ËC\iHÁéPׇtg¿‡ÒúxR¹üîøíňÁÅD,ŸsêBp&1g¸îÖEvºo…¸6þ A‚ˆÔendstream endobj 689 0 obj 2977 endobj 687 0 obj << /Type /Page /Contents 688 0 R /Resources 686 0 R /MediaBox [0 0 595.273 841.887] /Parent 653 0 R >> endobj 685 0 obj << /D [687 0 R /XYZ 72 786.278 null] >> endobj 125 0 obj << /D [687 0 R /XYZ 72 408.62 null] >> endobj 129 0 obj << /D [687 0 R /XYZ 72 148.374 null] >> endobj 686 0 obj << /Font << /F15 393 0 R /F39 496 0 R /F27 394 0 R /F33 497 0 R /F26 391 0 R >> /ProcSet [ /PDF /Text ] >> endobj 697 0 obj << /Length 698 0 R /Filter /FlateDecode >> stream xÚÕZKoÜȾû’¿ ä4xh6›d7kxÝIVNÙ h [ÆRKr,k}êÕ|h8’µØ] lö»««ëñUõ¨«þÔ•I®ŒÍ£ÄØ«ýñºâ¿ÏW¡ôWhã‘i¦£,ÅÚ waäNg‘ͳ—Æ+i­yÝ÷×oÞ}TÙ•Š£".®®oiÌuù¯Š¶ÿ¾þË›ï¯Çy6Jmö29Y”félõ$_Yý½¿m;¿Ýi›n~lª¡ruõ‹ª¶Á]ÏHÚ)Ùä|ï+68ÔÂÆП`aÔ—m–N H§›ëCÕó°ðýIét͘*Ù°u´B[™Ñ„ü™—âk„]Ed`ñX¥µã Ö6Ž—Æ³÷®Û£ŽÎ¤¤—‹mʲlÅ… d½ûØ6Ã7¸÷®÷+4ZYˆ!  …[bð*"I%¬së\Öo°*׿~ëßU¿?œ:ÑcýëÕ6É‚êaÉ×þŠw5`C¶A½ã®Û®=r‰X‹û¶Á»¿;u¼+4&Ah@‹›°øv]EæÛ]#Û¡±¥3ð^K£N^;‚°_´ð±ÙÜœð†c‹&¾÷ݤ3qAÛa×´ÖV·Ãá ‹ ÅÈâÓ~dà¸ÕÝ‹¡kJYø×rË!¬Z»að]4?„Xb§Íлá–X”-¹HÚ“ÓeÙñ² •¿§Í–pSüÖôè0ÐÒ¹\ŠŒû[Ë–ýÞ‰3 é’Ig°t†k¼Ú³ Ú£Héïë(oáffîo®IdáX¸,ùÄGÏü懑IØÌv7¥ñjãGwKÌ«}ù¢‚~‡â5 ÄkÁåà@›wpRjÑÞ×k¦ÓFÆä¯AÇ&*²àÖÍq’D™Î^çѦ5g b&8B…xÏõ€gl»Ï|6×sëÉ-Brj;5;v/IŠî·X°ªÄ»cÉÌbÅ2¹KaößÛ¡Ú‹ 7°þ07qüýaêS~>òîÏ~`ƒÛï}ßW7¬5ÁÏ;W¸¤¦t])‹†yw®ú"aà—zv`})\Ê6?ŠÃj›z‰{ ´à`#[Ð…õ€rª jÜ3:¸ÉsË(åÊÒ ô*ƒoAð¼ð-ŒÂg”»¿µw½(9ÇWÐöq[`´µÈ(ÖkÐï‚„Ža&]2i¹&6AO6á%mÿGƒrª•¹dZT,±5è-_#T)–‚/o…`Ÿ1€RÙÔpƒ ƒbøµðmÈI?påˆRx"F@íf„ï@Ùܯ–ÜD”°%gxîŸ÷µ(þÿÁÃ!ßrˆ¿ŽÅ­ŠR•½2²¶îètT•$Ùˆ|v‚„#i":ÉT©Ûæ]3Й;^Aõ¹tú8£m24N‹ Û&‘5Ù‚mg¯¬ªëÁ²ÊEƒŸ?uQ®"Ăɥ(³X'ÑÀë\^hëÀ^žjG‘8LftÔ’…yä13¥ì,™¶`”¯*IB…ˆžÙ½Ììq³”¤¹‘" >fM8þ+ÎpäÀËή*|\ÿ±w'rɼŒ;Vwq¯¸8šÅbf‹0™7)_…#îÿ\Ø1»Bhuûø$!î9Öu-±74wþç“$CtÀÏ}$Ol+ú`• 4êbÉ a ö=ØÌì(),°ó8êÉUÊDYd÷ÜubŠàcqIØÄÀ7Gà+¤°ƒ#ˆx_áy¼t±”wô#ýËɳ°6©¡ÂÌP9Y,U…˜˜«Ñ’<åV [˰äê¾åÁÕñèËÊI~€YçIHT©……ê2ŒçÂV²ÚœãR¢x?М»ÐX–šWŸ£€y„ ôC/‘ø×ûB ›Š{„ÙÛR™Ú¼¼ÇB$¸n[•*Ä…ÄÅ j@Xç›èdJ¤(Ú'RmÌÌðs\«ß=®%U–€µ•Ob%&ùŸ±`½·kòšDJ«sú–æ/‰Œ ’9¸Ïcg e³aB¢ t«h÷Åd™t „°ø©íʱô×ÿmÆ””ÑO®}ïBŠÆ¤ì§YzŠŠ³š4²©Ymˆ—AC…"ÌܰóÁS¤qϱ¬üˆ“xg’1,òáÒ‚ VŽj ôÛ…ÄLü9ÌÁ_nE ÖÓp _=þËßoÆwà_­ý(0nzòaƒÍµž]bÂâů5•¼©Œ'#lÅ­EX(<Œp#.»f vr’…w}Æ&,•6–/ B—YlmÆ· #™cŸøSž‹ÖX ½¶@[sç‡`_ÌÈГ ®Ùµ·áÊ+™V¢ÓÌÏî.%EÏx ëXdÎ+‰ôà~NǰDd€+3fpàx)¨K2Å/uy¤óyPÞyØõ§§»`°ö+bºÕˆ±çÂêˆé©y ΤJîºK@Zû¡íe´kàò0Œí´ì~›<æpü¥Dº ïÆHÊ»—2éxŸyÎÈ›ˆ£‹KcŠ—x×pœJŽâš•àAÅEÛ°¬»éÛú4øÕ§= ñK–]x[sooYPŽÞ5³77<Á´ÄnÉës¼PÍóí£D.祛Ž}sxá Xx\WŒí#ÄÙÇ·,¥üܲ*¥:â<ýÒ[ôÆ–®¿AZ±ÌÒŠ¥ RfÓ¨ÐãsÍ»Uì.Dȃ .†²ýÌ¢ Ã4DÝÑúªÜQ²\ÝÐC@+ÅxžJÎ2Z ”2Žº/¾C©4…ð&ýVõ™oUÌcçªM¬U›#©"¢\-ÓdƒEÝ%s˜Ùló'a yÏÙV= ¡Å­é$þ $¦ ÛB÷5hÔ—5½Ô6ÊL¸Ñà’ŠU}dz*ùÎ1—½h–”Fû ^óÀC8z뻞È)­k¨SR =³Ã‚ÀBÙ%X ‰]á´™ßLxx€Ð—BaºÏŒRù ¢žÐ¯+˜t,ST©å&¡_XŒ”¯…(‘SPÃü¨Löåcb•€]>©šCÜOUÃiètJC0Í/f–m_è\·ñ†¬I,µÍˆ¸)í¢7 ¬A$o8‚ [á[#X#É„d+ÝQRH®fr(ŒÂB7$=~/¦sÏœŸ’ë׋¶Ió'?¢Ùó èÊ3þaGvfí18㞎•'(´„_•¤—Ô—•P?ßœšêç“ÄùàŽJ9$‡ï=á„/-=Fçé¼ ·Ö<ã®.§nU[>qxt•ámH"î‡CËOIÙ©ÙñðÄêr|““øøüpž¡€ÑûöTK‘³jv‰–S3.²¹OcC“ÌÌÉ%@žØ(×ó(¤0Ó3礉?”B4¿ü¹½1/{öƬµš]E²…zªùjzR¢!ò0?p# ©úãå‡ 4£ø›Ž@’¨HSzâùÄO7BeI’g ÆÿC$Nendstream endobj 698 0 obj 3164 endobj 696 0 obj << /Type /Page /Contents 697 0 R /Resources 695 0 R /MediaBox [0 0 595.273 841.887] /Parent 653 0 R >> endobj 694 0 obj << /D [696 0 R /XYZ 72 786.278 null] >> endobj 684 0 obj << /D [696 0 R /XYZ 72 761.372 null] >> endobj 690 0 obj << /D [696 0 R /XYZ 72 689.612 null] >> endobj 691 0 obj << /D [696 0 R /XYZ 72 626.449 null] >> endobj 692 0 obj << /D [696 0 R /XYZ 72 562.68 null] >> endobj 693 0 obj << /D [696 0 R /XYZ 72 500.123 null] >> endobj 133 0 obj << /D [696 0 R /XYZ 72 351.587 null] >> endobj 695 0 obj << /Font << /F15 393 0 R /F26 391 0 R /F27 394 0 R /F39 496 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 702 0 obj << /Length 703 0 R /Filter /FlateDecode >> stream xÚÝZÝoä¶ïó½ô_XôI.nñKúàô>àĽwòÐZ«õ²·+m$í9î_ßÎP¶l_ ´E I†äpf~3ëþÄ*“«,Oc™å«òðB¬èïÓ*´¾ƒ1¢ÔFÅFcïµViœ&fµV&ÎSƒôß\½øê0+‘ÄER¬®¶žöjó×è§íÏÖJ'Qiklˆèúl-³¨¢Î¦©+z¿mZjô;~wu&óèî8%ôØ6õ™,¢žz?'B龜:ŽŸvß5ÄäQÓuîz_…ïy®ó7¡óx‰=Ýî\y³îè¥myuUmªÍÙß®¾]­E*…'Ê­ð›mp‡JE–4qÕ®'ËU:º¶ëâ³µÖ:ºò{…Áí©.{tÀûÅë«QÚRƪ€']Oœâã&D,rIëJf åjXž‘&º?TýùöðÆí«wöPýœ˜„^ 4ošº¿xõ’:åζÔú£Ý>Öô‰;Y›8ƒ×9¬¿`5ƒÕÀ®òU[­¶/@¡âܬŠ8q* “jáõ:Ãÿ4¢ÏóŒ^j™Ä:U °X(=ìU©…½¾ÁµÝSØ<.¤æ÷¸ã°…{,@˜¾è†m*+Û„ÝŠtak+h¯ááû‡Û û>ª• ‘?m\v¿oÐFn;Ô&°œ†ž]ÕcC)áHÙŽûª¯høh{Ðl­À*¶üe ô¡UÁAƒl±û¦¾qõ ½s _ŽJŽ=·©j\ZïØŒÿèÚ[4‰u¦…D%tÎÇ«×Â!¡áŒ‰ê%Ù¡6 ‰˜"ÎóùÌ[_ë6~Ñ* ®%/Ak­ÚÚîi¤«l;Ø<ôõlíºX«1X«÷.ðv0WÏ6Œ¢LðyM†ON ÷m»…)à \ïìÞýÃ2ŸÄsêýž’ÙfXúà³cjxÐDþP ™Ž‹âyyæ±Bc$Ð×}cÁÉá–AA.zl«þÔÖžBG =Ü–ÞÁiড3£ÖÝì¼Ð[[o J&E,U°¨ß-Z¦ÎÃ{AœA{ëºÊ¯²ˆ.jšbÌÞö(i¯ J‰8aGm<—ÒvÕ‚ÌÀÕê´à™À ‚îÔÍ‚tç*HíÖáîe–2âÈ,;Þ±aǶ9¶ÎöÕþî,O#ÄðšïšÞ•LÜ#\>\xNÀpóìqf±Ê2¦: úžº~¾¸tTNœïó™Áwnƒ]›AÇ€TmÕ1|•=‹1É⨙jz…¤s}G0v:âWiäµú{wp=‚ª’@ÄÄLk-AÌŽ¡Y6õƱ=(A Ãt¬Ðð O ½íí5¥ïílG €qßBC±õ‚4U ˜šÈ/fQu`oÖº  ›ä‘ƒG‡ðg*€ó–Ýñj8Qz²‹Ç°ÞÄ4tçpØêßõÀ-ûe`¿é<ä“n„zÒU¦¿ÓEœšì¿‹éÙÓ)ôÌ= ÉdñJ2ÄÀø/§ª½£&é• Á¬Ø}„(ï™Ñ#ÀFLPí]< .~$åØy€Kž±áÅ„™ç&d¸ødÖ;»Y¶ê×ãÞ•®ßãF„n³Bë&ÐBàhÓ.ùG ª–§,Âw?^^.hƒLìBð0A‡ìŒŒ3#~7Ü›;,t D€Oڃ΅=@3•Ùx¥¬T·¨ÞcðèÆ{t<]•!4îJël ƒý.8©’½¨¡õ?\\ 9ä(<¸0=— ðS>ðƒˆìB‹<ÎæÔ·X…¦M’” G:ûéŒaz¨Ó²PCd[{¯/ ƒB¨º]sÚoˆò"R„ð`ë[·ÜÒ„"8ÄÇWÕarÇl,½iN}èwÍþÔWf…÷xl+K…¥$ ÄñÝ\ÙËΈ½«øÈô" 4¼. $CiU—qô sŒy20CØUÕ} RyN6`4äkÞçâ0¾ü´ ­ïžð_à+ïóYªx¼²ð83tÆl à‡ÁO¨º[ÐæBÇ)‚/~’JžYŸ­…”UÓGùä#“ÇIˆˆ{±w× ŒU‚I4ëËæ†³ ‡ŠŽ k˜’B{ú®öaDvœzt¤j0ÄrÍÕÛ%ãOC¤y¸º¹í ðK!"é(ÖÊÀ#bô…³Xz´'r×îà—“ADÏñ'õHèÐt¼Y@äxðŠ!FAËr Šè¶pˆ¼ ßÑ@ß°ÒƒSÊQ­ÿäEPyµ†µ´Ö£Ú'ìRÚ‰Ã>ôâ‹,2fßÖ ¯4”F]†ÐAxì2!SB›êútC›ÕïìMå)„`É4qšIˆY·ü¦ë7@ô<`ñšÈ3ž{—ªÀUit®÷£5ÈœÀÅü+¦¢~«© fk1óù<Ã6NGn!'Iß×ÖJ·½£‘Û]…ÀH†?ª›žÞç?jXz úEdÀ¤¦˜û¢Ðbp!c3¤ò€(_ºëy˜6ÛVš{ÏD_Ä'ÿ&»Zžð=-§Ëïß¾¹¸|½fÈ<š”óæPGrÈ5즣¦:r¸&óâ‘©xp4äÁ÷R<ð_2äÝ÷_WŠQþÄ @®ÖU¼D:s¿ŒŠÖÕl9€0]B>3ƒ&ΘFÿ€¤ FuÊ$8ƃ–*¢ˆÄÌö a˜‹>~lSmíi¿˜âfYœ ÷€10\Ø>@‚ŽÆG9&Tff óo*\_‰aK~@SU ³\WÆ»åG˜²ÏÒr”…u,™æKõ‚ÝPTº©8(èÇ”1$°}( ³Ýâ 9ò§Ý£'ôíšÛbu-²ô9pÑ@hƒ^·¾9¹n‡še´ˆ4>`½Ó¢|Gc¨ øœß §$’LF¯mÈmc?¯ïãŽ9ÚΗ+Ѝt„?~Ñ&IâDf³Ýÿ,”mÙWäí÷øú»N‹XB¶ Ÿ«8—ñŒ‡S©ñɬó÷÷§¡þYÿm8LÌõ’ÿ~èDøÕ%î-…½‰¯NO€02¬Ì N'’®.°Q6uçî|)6‘üêD`@mÛÛ¡„;£ / ‘Bb Ê?k"±5[¹Ÿ‹ëk l^Öô¬\½Åmm8ý|ý«Å0äkª¿:µä>åB‰TÊrb4h(Ö”$£ q³ ‘04è† <ð&¦$XKZHQ»¾=•º…ðºYÊÜR5©)nñ¶CúT4Ûù*dG#>SQ2¤ÂJÐ…­œfïøž.l=%‹UðøÍx „ã|D’HðÑÍh6^ÉJÎg‘ô2ùÖr:}ï"Äõ{ì7›TBN¦þÌæÔ롽¨E{IÌ4Pöö¢48¬†žœk*»ñÉ [zÛ$Œ÷W:K£÷£ džkö!ÊÐ\³ÖyŽ57Í%Ì—<iM3OÙ èkÔ[b2©A|€„i"§U°ÞÆK"쎖; OGZ_¡ÖÂV2P—‰‚ÉŸÓ½Òyžöɪ¯ °×ï–” ÝÎépë.-@!?»¶?ù[B%GÔ*üc¥ãÞ¢Úßy[ýðë¯0¿žk¨ ÕË¡G«ÿ@C}摳Qy2‰€a”m8Sÿ› ÈÜ}Ò«ÃXú΃²oU}‰W}6ãÁ•E?´nøiÊkšùv¯ð…š®Àµñ Í:© y€>òé]‚‡b¢ Xl+K­[çGJý€lš®ÿP¶îÈSlÈùÚ– z0BñJ!#æ4½Ü½§«§ Þgn„¾PØVaБ¯ÜpžÒüy˜ÒùQé¨R…=òÿØâãÇo'ÿ6 7è<Üf³\—c†Ÿù˜dÌa´‚³t5§ËÉÈ„o%OÜõ–hº04bp7|Ã;}Ü:K¿ö)l©¡‚E6ræš9©¨¯lRCUÄFŽ• ÈË?¾~ÿþû÷K™yk]Lnœþ$°˜ñré²9‹IE¹þtþþÝÅ»· |!7.5å+ßWçW®.þ¼tEVÄÊäSÎ*”_ð—^"bvg°|ý¢â៦|õú›ß. (•³hªñB* ¢óýàfCMï$Âùù»]NðøJ¹›Ý/ðUûï–.‘«_ïM5s9\|È™¦)LH²š+9UsJÖI2YÙgEÖñ§]Cõ â`ƒò+E¿  [ê°i66~0)¦-‚‹x–Ϲ .@á/”ž®*q‰Œ|`þ E endstream endobj 703 0 obj 3411 endobj 701 0 obj << /Type /Page /Contents 702 0 R /Resources 700 0 R /MediaBox [0 0 595.273 841.887] /Parent 707 0 R /Annots [ 704 0 R 705 0 R ] >> endobj 704 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [452.726 508.991 466.665 519.9] /Subtype /Link /A << /S /GoTo /D (subsection.5.7) >> >> endobj 705 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [123.871 432.842 137.81 442.539] /Subtype /Link /A << /S /GoTo /D (subsection.5.3) >> >> endobj 699 0 obj << /D [701 0 R /XYZ 72 786.278 null] >> endobj 137 0 obj << /D [701 0 R /XYZ 72 493.877 null] >> endobj 700 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F37 380 0 R /F38 495 0 R /F45 706 0 R >> /ProcSet [ /PDF /Text ] >> endobj 711 0 obj << /Length 712 0 R /Filter /FlateDecode >> stream xÚíisÛÆõ»ÿA¿±éêˆìË™~𥊓©Ôº¦ãˆ%‰X´¬ôÏ÷» HBVš8m>Äš1öxû®}ûŽ]ÊYr–¨Y’ÆB%él±y$gü÷næ[„1†4‘‘ÁÞ€s¥"Ëbhatr?üý8¤2ULëéõ£Ï^ªd&C‘…ÙìzI0×Å߃÷MYœÍ#×òí•í/›Õ¥}o«oÃ(äñ²î¹Q¹qyöë/½¸~4DH癀”…‚Bg鬵³å£¹Ñ"f©¦ñ£'¦ç©Hb7.c‘¦ Oï• ëÙ\‹Ð˜A­'Äy‰¼}öRF£9Ф2nÅò"¡}E°n€ÄÔFhØ”VNñ |ihÏc!aý©˜^À“hØR2ä8àÕËq½¶gsDAa—ù®ê±£ƒ÷gQäÕŽæLPv,ÆÁÆÊ0¡V¼üúÕÛ7Oþôúâõ« Ý$©ˆ@6¾]—‹3•kF¿±yÝ1ý:ïyжmÓr3¯ fëöL%AÞÖe½âíº|ei1Î8~»¾im\Ìæ)Ç4Ðj2¢_Ö§5P³Ü¨šÕ·¡4•´”ž¡GK.–gs•„¼;$ŒM4n.çG×yÇø¤µ5ƒu[üvQ"´-Χtœ¥xg­õ²*o&T«ÁžÒص¥í˜¢m»ÞñÝð·qT¥›.ë#ñ»¶ `ØAek ×»³Ô¬¦¹2‰PR**ËSÙqk™—•oâ–b£k6¨úP­Í»¦ž’]‡"•ÉÃÂg¡9^‡N^ ´ü½#E K,Znì:ÛþÎ-\;ÎN$'¢?.ÑLƒæÜY^¬ÀmÉíäÎò¼uëÁ†±áIƒ¯ ¶-0©A [ðâFè®/`-·ù\hÔÍ‘s×#ñŠSÃŽ†íÒqäŽ4òí¶*y_6ÈjŒ¬4«6ßllË <„ë¦#øh÷Cãæ½Æa2çÏÀ×9žOE tž›]U0¥6M^³ÎÛ¢ºs,ÐDÓuåMå¦Ñ’œ–OÎjÎÎw•ék0Ò·9ùw<\4ع­yò˜µ ´7²ªÀŠ˜A+v €aÐ6´;›·€8÷Dp2¸FÓqĉØ{ü϶ 62pUlHÄMÙå;^>w`lIát¼SYâåËÒ`“£"ïx¸³=’­Á—ñû²mê ¶³À0±¶ÌQàÓ¨ÂâÑÞ¿_<} >þ«¯Ÿ¿˜öï‰wTä“vÇÔÊ øÕy¬Sˆ6$í1m‚æØ˜Š0øÌ“I#qäcr>™“Ñî&˜‡P'ú!ç¡D&Õ”ì”Rt QR—‹ºì/Ë›Ãø~¨ HBOš¥RÁ"¯*<…óX…|è2<nvoqÜ 7µhÜ·÷ ÌG{‚CW±š Ð â–zñà >·7»ÕÃ&9Ú©0Yb9Ë¡+„W=ø‰®‡`>×&Ä‘7.:Ÿ‘Z #©‹)Ž¥Pi²gøyÉâ^5ÀEk)²‚Ý/ú’ÏNP\†Ì’*%=à hÜ ½N™“„49þæ¤M2’¼oFÞˆ•à ç3ȶu±û05騥³-ι‡lsÐÆ^‰Ö ¥O_Ô¡‹†‰±‹¦ðл  ÷»Ú‰‚/Ø’n˜T{þ=i­ó‚yÕ[ŸuMx,$C: Æ~°›/{D‡M<'ƒnJ` ²ÿæ$Æà”T¼·ƒ1€\“ªI3ÆŒB11Lô¬Aô2éÌ‚Ú`+=åŸØ$;ö±˜6qxÊÀ‰ÆÑ8äŽ]Ÿ`òO†øÍ©(î,‚;9yÖ»µÛ7ëŸÕ’ÆÁ}+ȱz:M<}Ü–UÅãû0 ðÀÒj*{p[ËåçíºÜt¶Z:CdBv*fú®gkry 6GÜ”¬Ãæþ<ôæâ jÇgVÜç¼%š[xåí:gaXt Å_$L„û)w’þ¯ áoÀyc)¼¯‚øpë÷Ë]½x[¶îÏOæ6ÝêmÿÁO–ÎnPñKýÑ"Ú|¢"R‡v*ƒ‚â$QžÉýnNy*)Â!ò‘MGTOâÇ%¦îHÐ1‹¸ÀÑ&ó@œð!ØryçSw†ùpÙ= ““€U+[Û< ÷ÆÝÁSyA¦ æfÎ0§¢¶Iäµq(”;õ|ÞcÞ¡a?ôÜäÓÑæ¼H%D¸vþ(ÁlÜ´T¾G‡ÀŽÃiBl#½ø^‡T·LÈ¥-³¹“å¨ê0¡Ù—s&ôüã0ø655&ÔXÁlr<«FAiZTtQ` ]6ƒðìW±Õ­¹RÂéñ3¶aÁ^ Æ“÷ °ßÞûJŠ}Hø¸»WJûí85‰ Yùœó#¶ D4Dæ!H æE㪪ҕb=õn’ÜyeâÄþkgë…í¦ïO°ãó¶ß 1•˜f"'“ ¬è• ÞAe ã¶fZ˶Ùp 5vJ.Ã7õŽ®}9•&‚‡rIWä“Áô¡AùÔ÷èVD$¡×oQo9ˆÆRz ¬Šé©" òèÔ;Ûgˆ²1oXÖ¶p^.Üý€«`cŒÁWøz`!ÛväTâÈ›¹õ+É÷Äšï ¢ã¢@ª’hQ £}·€Üÿ¡i–³«¼]í| Öñ%! ˜SUñ¦’ËHȦ§ô Ugæ³M «÷düÒ›ñPvË®P´ó7MûŽøIɺÈGÙnÑ–îZ°pΈ»£Ë‚ÇȦÞ{¶ý}‘¯``ÜŠ»I(2Ž-iH·šËËåQf5D—:¯ö¨\ÒÆÓœ¸ÜåŠ>—\QrÚº»ªu>YIÇPn‡é*UXhy•ú{ÆÄˆVŽeúC.x¶È¹Öˆ0DºØ‚Uìí‡|³­0š:`®H á3nšsåÈ ð¿m¿ÏFŽD“"NüIú°ªî¶ëO>œŠÎ9jJx‰àèjœ„ñný`7¸v” ÎD(… ÌKfTÕNä$Éèb„oí¯®Ÿ\_\]_Ly€4í™@ÄiðdÓP(†fçËE2‰w«ì¯¡òÖ!¥á2çöНËq­Û¨!_À«sžr•‚â{B8ÁÅV¯@ éáÅ1~ˆ%oxÕ:ß/žpÙ¥ÐõÁ² :#ÄÃwÇ3]o7Üâ`€èúÖ¥YÊ¥e0ÖBÅEçAù« %Ã}+µùÕo¸=~Á.½vtŒ+ÕÓÀ}òá¯íùŽë½zÁ·ÒÝJÞWôÄZdqöCŠư¯yL CY’Žóc<>Wtt r(ê~…†/w7¤Á¯ dúX%5õt>8ñ+õDÕÿ'L€£e^•ß9¯‹cøÚ~!Óiù?²³[@–²ÜU˜âÀ²¬Ën}È ù¡ šû¼lòâeS÷Gþå+ÆB/2Ø@n…1TZ1ž›»QâøðùŒÂÇk{‹\\•ßÙn£fÎ9´øüHÿX ázäDª‹çL$d>u^Óöä݆úòGK韗dòç'™úÉ÷ìͧŒ ð õÑ¡yÝðâ›*_¼cØmùÁâûK°« vÂHº²qî1@íà`)zðªáàóšÖö;÷ÈMTÿ|y9íÄ>¡´WTÐýõHàSMð8sh°Èà| µ<ˆùëOcqÑ=œ>·•í퉵™ÁÈô‘‘iȲqÉᾌL±‘©ŸÎ1üaä/œ#GW‚ ^fXúa¶1WÝ> l‘N¥„"þ'sîG#&xZö›|ÛM$»ˆ!QÆÚyâ~ý ÍPästqEO1Ô–X³í‚†‚ .c{½‡¯Ï+±ñË nˆÌ4“8xâÈt9Þk÷4y*èÇ:j9/ç\ѹ—9S=†Ëé8ÏõTâH5B¬Ü YÍ]âSú_@Ã]ëËÈU1¿*K |EQðO»èy‚ÓzÐ ÛvOÝÉH¡Œ/)^]þí›/.‰…7øšn™š¿ CŠ7m F'£;îÚÛ o¦R‡‘†¢>*$¼Ù¥ß~¤®Ú‡…c©Ñá3™(7S[÷[ý‹õt"ž€9ÇŸ"Ÿ||èï¶¶°K~ #Ù-¦ÊŠóýŸŒæ`bô¦Õ}>±öiôqœÃÛEÞ-lÝ~¬À’áËŸyè·ŒJIwóÑËzÈi((Øq¥¢û-ù7õlaendstream endobj 712 0 obj 3189 endobj 710 0 obj << /Type /Page /Contents 711 0 R /Resources 709 0 R /MediaBox [0 0 595.273 841.887] /Parent 707 0 R >> endobj 708 0 obj << /D [710 0 R /XYZ 72 786.278 null] >> endobj 141 0 obj << /D [710 0 R /XYZ 72 231.36 null] >> endobj 709 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F46 713 0 R /F37 380 0 R >> /ProcSet [ /PDF /Text ] >> endobj 717 0 obj << /Length 718 0 R /Filter /FlateDecode >> stream xÚÕZKÜÆÎY>ä/,r 7Ø¡É~‘tCXŽbÁ àb!Ê¡—ì!4CHޤÿžª®j>f¸»¶o¦Ù]¬®®Ç×UÅM¯øK¯2q•å&Y~U^¤Wô÷þ*Œ~€9¢TZÆZáÓ3„%“ØHyµ‘:ÎFúoo_|ýRdWiIqu{ïio«ÿDu3\o´ÐQåúÒ5߯ÿ{ûXÛ¤¸]±¤Ù»û᧺rß:ÛÕÍöIÚ®Þî%ÖKZ[}°Mé~~’!½%¢MšÆJ«éÿˆðà†®.û5fÚº"¢?_¶Íð7[îÜ«æ¾]#>5}½m¿°o›-îŽÇgeøþõÛý}d*D¬Sã×ïê¡Çé¯_¦zf‘Ç©,‚MúëÊ“ÈÂOVDÇëÈ¢¶n®E ®£Ù¡%¢açh8ì‘Æ•l|½ÉsÝ®­‡Únk›ú3žÑO7ø›Gûºqý œ$5Q?Øn¨ñìHñ±v¼?ðõJ`Ñš;¢Ì&rÝ¡íÁ|2‘ž'ˆ¤¤Œ¾³%e‡ é(—L’èXr{šFñ÷ÔŸì~ÿ@;v®w¬‰Šà´¹òn¯îiÆ+ ëjà½Ûó5fÅ ½8*jZ>mè7˜e‹†AŠÃ5Xë´êãÞ3¼‹ŒrP©L“°é„ùÚÎÑàh«ŠN&XÛHùÙumï_O£¾%ÊagY‡ Í¢ÝÄ•(¼íÂAnz$¥ nå¨wäo§¦²ÝÃu®#P¤†W~lä«Çµà£h9YÆ;ÛÓ ié÷`»mÝðä`ßãÞ®¡GÔy3r¶e {ò®·—;€FAÄ<*ËÓ±ö ô2­åP7õÙ@ÞzF HÅ¢ÃéÎv¶ôÁ…SsUOC/™T¬GGËb»*ö»¦&.¤™ƒÅ]žOq—Ê9…rÁ¡ ËŒvßûÈÎüŽyÄ\øxg(žæy¬¥`ÜøñÍë×kØ"üˆh6ç"€š‹$‹^5´é°#lÈ¢Òö1@äŒ10·Ý?wt”²%3YoX¬M€ˆ ³la‡û¶sÛ} ­UP ÷1±'›|Ô˜›0Q¶?ËßT“ %Mõ»ö´¯è½É`ðî‡km@µu…1dð˜íi»óûgÑ-:Àñ.=ЀÃ߬x)FæidºÙÎÏ<BdM´¥£Eºɽsúˆ»ý~9‹(ŒÌúz8Ù¡n›@½s³·Lútï’Tù[J*·¼Ã©qMÙz š\gÅéw™H4ç#œ½?ÝõÈB€ „wè:S­ù¥†İÏÅš•»_qM•Ä“g®ˆ„èÕ!ůí€Ì÷§¦ôZŠÙý’<Ζ÷#W.råâÁ³$–9 >ÊwÁ™ÔRÅÒÈ 6ÞFàPÝC°R=Þn° aa¾T*<†{ Þ¤ ²z žŠAßõp"Z‰6üò`Ñ} ý(×ÎZäIL*ÎRD›3ðÍê[îI¬¦ýðU:úɹ3Ьê¾<õÓ[á— TôsšnF¹§h€i˜¡^|w;æ«0 .&0œ1±ÂlgqíýUý@ì !ƒ5ç 5$eúù¶D.±óß\°i1(.w7:ÖùS›P­N[c=•P}A…œ ŠÆm:G¿о}´ü©ê¯ 9kʵœBÀ‘@_¼é<8&óX¤Ø·–T‰XÊÀæq ¢PrÖJðEWth»çk*ƒ+P/U½sõvç¯FâûÕX¿9KÉ.±D>¢ìò}ïtG¨‡XùEèY'lÍÉegÂÌÀV¤! È"{e.=£žðëŸÙ (±X•_Èó„¯Ò˜O¸)‘<ð°ôsVwø•ñªfáæWµ·ešDŸ6%•×m5–õ™sRp£ˆj@‡*àöѬ"&:_áùŒ‰þÙ0ï’Ë3X§:'{àåz ßw©TÈž(©{ðZ b¬—û‹\âwû’nôóf꪿ìj9ó7š' oô®þÜ’…,Ö›jŽYž$äü„¬èx¾ªPá¾V³¼LqÞ«¨Ÿ¤Ô™·±“‘DsÙÐ`@*‚»swÓ9±×ÁÝ ´ï<0Á‹ìs0E>:zò9-0û#ì+".‘9Eæýrðª?üúTë8ëÙkß“ºô°¾õÎ*AB8‚G9uTuÃX²KÃðgP>ë¿ò Yо·î -†zVk¦÷G‚gÛ÷§•ãõ d6m²¸Œ–-÷GŒ HH÷Þ%:ñ¯ÂáËH«)­Qûè†" €sí¡Î¯ô‹4zåÃ(!ŸUøì 0g÷Þù¨ïÉë{€ù dX mµŽóAhÙ»¨Ð:xwiO=ÞÚ°Oâhqôžègå3MXžwÝln~Uó¿fa_njãiÓœ[L¸Ù>OdSœ}„¢^ä)ÄvOxB_`¢?Õƒ½Ûó2w Ìø¡¡k<€ÃRÙާ¼É.kêlés¼e_úðÏyG!ÀÊŽ\Ü'p$ÈH-õÈ‘©µ ¾ïK­¸Ó ô¾ùÀpÛÕè=ò‰7=÷wuè¼Â;sÍÁˆTýil¹¡¥çj¹TÿÞÙŠ,ôlYžø³¸±(–g]׵ݩl‘Ĥ_¸½ýà&2Ã)l6¦°þqÁÇEf.ÚG™ž[¨k^âöã€Íwâ;ƒ6$`hÃwÈpü{ó(Òž¯fí 1!X}D¸±¬a„“¡m;}ö ·ä„pó¼9r?ª =ÑQrߨš”RÍý‰NÖË6JÿW_‹¨‡o¨@æ²{ü|©ß'*Ö¦:ž> âï–wkèÑ2ëñYˆó«EÇe1*eá¥%ßøùiaÀ)C LuÈK(t\œõMŸ/´rD©çyiª&Ìè×Úý"V¹þµ]xïf…±‰É~]W'{‚ÝFæ"_~ÛüÅ‚¡IŸT¿Hãdìœ<ßJ”±Éç÷úýúš…B!.Z¾"ØD¤ìcx+P¦EøèŒ,>‘¿ËD:ûG¥ãL.ÿÝÂ'«ƒqšäqò< 8»LŸý åÅ· )b!ž@äÿ*-%endstream endobj 718 0 obj 2831 endobj 716 0 obj << /Type /Page /Contents 717 0 R /Resources 715 0 R /MediaBox [0 0 595.273 841.887] /Parent 707 0 R /Annots [ 719 0 R ] >> endobj 719 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [383.211 481.891 388.666 491.588] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj 714 0 obj << /D [716 0 R /XYZ 72 786.278 null] >> endobj 715 0 obj << /Font << /F27 394 0 R /F15 393 0 R /F33 497 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 723 0 obj << /Length 724 0 R /Filter /FlateDecode >> stream xÚÕZ_sä¶ ïó½ô+ìÛɯ"Š”(åí’æ7I›iÜ™všN‡–¸^Õú³'iÏç~ú¨•veû’·Œg¼‚$?€›þÄFÇ¥a¬³MѼú{ØøÖwÐG”*‘a¢ðé­’i˜FÉf+“0K¤ÿêöÍïE²Q˜GùævçhoË·{{µ•* l{gÁØ?]ýûöÏ_¼õŒ8¡È48¼ïÚñkSìíM»ëˆzÁ:“a®˜¸ˆ{ÛØPAqì{žª~¢®ã`Kjݙ걪kjúîÎÜ© j3ÚžIöÀÆñÞuÀ/Fz*Lqë`_µ÷¸¶ÍV$q¥(Àü´¬4 zkjÇ;Ƀª9Ô¶áµÙ2¼Ú&± ~èzÛa×Gügûk¨ƒqo{ûv ‘†˜¶MÕò’ïM[Xz÷f$ê¡k\Ÿ:äB'é»GÞ?´î®¶8/11e ¢Â]EËíà¤R»ãxì‘VưµÚšÁ¡£i˜Ë”%3ÅK4¶AáD6¸¢þTJÖèÝá°¢ó8 3‘Í•.'ÅÂÂÆŽ~‡±ëyÚ‘æ—AiãžÖÜí˜Ü¯í®sU(Pþû«L]Ï$ý‘ÇÍpMOÕÈ¿¼S?¢d þ{â>²eD`°Ó¹(²_¾ùæv:Pq¨’l³MT(r§ ;ñÕÃÆ·¾{á„%¡ç,EÊ\¾~–e˜JMdÏO°ó21-‰Ñ~:Ô¦5cÕµ¼Ó8 U–-6z‹ :ÏE`¨FÚ[î»3CUPïîØÈk ÇÇ}EÆMp@å”Ç‚¹œÉvJ´pdˆ&€oïë§Íò ›K’à¿¶Ô±ÁMKT]_ÒÀè4涇óϺ›4ïh²(žEq’  ¸…šÉÈO˜ÞäT ë 7ÖéáßwǺ$V`Íg–ës®Ý­Òa¦søÍC­Òç•ü¼âzÜx¦ùÅôšÿÓ÷ÿüñ[ôSIð‡[ñŸŸìø5ìçç(‰¨³jGj Ë¾ùã5=@sj]i¯ÉGDâ…“ØÕaCõ?Ë `ªÛÞÝþíæ<÷Ø›vQ70µðÒØ&¡ÆÃ BÎñ ¶–Ÿmz»Ù½‡Ä)&BmdŠX®½ŠûAíD"÷ú$î(TÎÁ'aš©IdR®ˆìýZÀ óØ,žßÅ ÐIã&ºi§R…Ž)nÄw¹Ð­ %´·i(`üå>§Ó®B6…È^>ôïЗŹ~‘M7 ç‹OQ:§“{½âÕ…”¡’Þg“…¬G‚-'bîÙaVC?¯’˹4¡£î´[o7àxò%0D“%)F5}]â“‘—¥¨VtN%%BL÷®±¼Ä¶ê"EŠ  Šàð…{ÆpŽãÁ`êbËŒn÷Äç3|¦=$w]íÖ”¡$ò2~ûîíza¾@oJ&Á}õõ‹(ëf­`#\¯|çƒB¥‘§¡O œ;z{èíÀ¨—öwk;‘ #¡ùHøÈ×pqóà )í'2™ÀyOÔ9 Æ…ÁvTÄÂÆ,y¡¶…œmAE‚ó„€.¨-MbiT„&ë–u•M£âÙ(]Íæœ[Âð–:[ÓXâJƒ·žç…ÁÜ#e†¤V\` YßÔР—Z1R-C¡|’„`iÍH!!rf¤qšz[³=œˆ…Êð›?:@:ŒCÑW‡ñí@븫îNƒdo-&>8å}w %‰à«'TÚ9Öã5ÌAóÜh”ýp4õÀ~pT–/EеS¶ö±*ØÕ'[‡k.gœ{ˆ¸"ȬTâ#à@éƒ-ˆ°nÇ.xâÃNOÁßR0pó6‹[7‡xò’©;êœXž…—ÙèËV‘˜ÃI{ïã¤ø¶Øà f·R*.d+yLsTû¥À²‡ùû÷߯O>Õ>#ûÅI¼XMâÕç$ñ*É?/‰xò;Nÿ»we¨G|Фø…ýW®€(zËéñùq̲0мyͲ·KÍlež†qº4m'óÂRŽžß²qPôˆR²´Wê–­ƒ|ÜŠ‹Hµ£_Š‘¾To”L¬ ‘¨œ}7ÎÈL»`šÌ˜îy€q‰þJ­l „E Èö]Ós1âYDoœjàM¬¹£´÷½%y(µ8U@5+GÂOm)¶ÖôH ‡Ž3ô´BºgÇAb†sËxf_à”«û¼VyYöcº¯¨\†nöî|¡W9Éì uP•‰ÐëðB{b2˜S}´¤. _z*ÆZênlÓõOÄpÁÝ7ôc†áØp—wéÎó?=[òqK’Î?÷Ö´[kKryJsú½ó"îÞšrîÚ4˜xkîí™3u–{ ö®ìeg;ıT@ªyä¬zëV ý 0P]àw²ŽlÉ&Ó «û–sêYé3­/6‡šÑìôÏÀíD)Wʉ_^D 8ÊÀ±ºb3nâÕû mðÅrÖïÏçI Ø$¯Ç¤„׋1éfœïŒr܇a*wpi^¯Ÿù¾YâÃÑ컧ʼ¦[²¨ëÎЙÅD÷†km7>SÕ÷äBÖa¬¹VJDú[ñîܶ0sà’GѶ´çÕ›Ò ¼ñ|•§_”ÔŒ[ÅwK]”Ý$iuP çB'\1ÐùÖÍÊÁ'Ï ª2?_•rċ駕ÕUûàÊ |zêj—.¿öäIây›ˆLÕoäØÅ¹¾8v؇x)y™ˆNÉKNÀ§†N±(=0{£ó”"ÀKëà]ìLßÝ5c2éé±§[ ô´R¶\E–åƒâtÑJWئcéîÙœGVRsèéË!p¶o©2hÓ5%3ŽÒ oãKª¯Üî™ÑœÒW~ôTžÀ6.z%gIýeËéN嵜e28N^¢4Ôç5$W™9"p-°Mi½r˜Þ¦S‰Ãt*x3Ñl3 þñꩨ“Ð)WHcƒn@é­Ÿ²ùŽÞšškC˜Ý/”í–²]9Û\KÑ# ¶ÞÁR3©¹ Y•/Gn•7Lì¤ ¶¦XܾŲ¤àˆÐè+±ÁïÎ]/Í b¬k[^SÎå|¤@dÈëÁTƒö}õ‘ðƒð¾O¨Nƒ6Ujs(O”µq^ñí'“ú+N`ëDGE Zî P:†pZÁ1zÌ2Vœe<Ñ«ÁŽœbähu˜éÑ ¾Ü9:ÏŸsÊ ýšªÄsç.uœâa%¿¦P’'¬Rém‚–Äí!?íhWJ%¸4—"\$}r©á8 S¥Oiîg(˜ÆþJŠGXW`kTÑÉ•àœß;Ç·X~qTTb‹›žöµ% ;}Ë2sQ*â-óª…BŸÕàN€ òbW¸ ºÁ¹m•LHbq…=}ßâ",\ÍùYKókmÞs&`"SðçùU¢ vkÞUúo^ªm¥°K¯³ŽôÕD!R宆qQr›¾{àzÝÏJ(޾ í®‹f™€:³¹ÕÒ$sWØÑ¯LK¦€9û°]1÷é#µ,¢û²´a´¬Ê¸Ïa04Ì>§Š3×ðÊÁ€ ŽpI'™&ƒøÙù«„ÂÊs¨mèf®,“¹"A–\Ö|¤_ Ú®Þœq\À{ÃT×¢ÙÇãZ^ø˜Ã_ðMFÖ¾è3¨WS ]ëdvU¡Õ,áÖÓ÷Gx_I—Þ³BÏJ9@{<¿{ä‹ Í¥)¼@¬Úª1µ»VLg%áé‘dÄ×–øùÕõZ@}õ’)q˜§¯æŠq,B‰Ÿ¼ ,¥º¸…‘qÇ/×ÿç‹Tùendstream endobj 724 0 obj 3488 endobj 722 0 obj << /Type /Page /Contents 723 0 R /Resources 721 0 R /MediaBox [0 0 595.273 841.887] /Parent 707 0 R /Annots [ 725 0 R 726 0 R 727 0 R ] >> endobj 725 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [91.394 694.095 110.787 703.792] /Subtype /Link /A << /S /GoTo /D (subsection.5.13) >> >> endobj 726 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [316.938 518.646 330.878 529.555] /Subtype /Link /A << /S /GoTo /D (subsection.5.7) >> >> endobj 727 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [257.414 451.506 276.808 461.203] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 720 0 obj << /D [722 0 R /XYZ 72 786.278 null] >> endobj 721 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 732 0 obj << /Length 733 0 R /Filter /FlateDecode >> stream xÚÝZK“ÛÆÎY9ä/lùlJcx¹*YÖJËrj½yUœRÍ’à Шµ]þñé×€‰]å§xà\„Ö×0Æ”.±*qØûáÂ%¹*ŠN9›=NÿøZ+~Ö—·Ï>¿2Ù…ŽU·k¢¹]ý3zýö~s¹HLýáV¿ÿ®ì¿ëÛª¾ÿ>Nb®êžWMÝ_õœ;ËoeYG žŸPoËúùå¿nÿt¡M ²3i<|AOÝ6õ=“u{¿,›õútù®Y­·þž·ˆ'‹×ÛÆ UWý\ÊJ`þö›·7×¶úÖ×ݺiwpÛ<{uûl‘¨ ä°°‰2E. !) ½¶¼X?[8«ò˜«8µ6WÚØ9ëTñŒNUžgLpTb¬l±0…2Öz€æ¹®Ãϯt2š0NæQá '[€¢X7Ð ‡-ØžY§3Œ.¬²Ð^¤JÃú󓆃À>™[4@¡óá^Ã9ªîèÒhß6—¦ˆ>V«r¥.ÎdÑuÏSK_c#‰îà/‹JmêˆÛrÅ“¨ü±/ëUýxiò¨l»ª©yY³f‰LŒÛ¤páö0KlÖ/Á`§BœðŸæ`a1œG·á­ó;iù.ŒTO‚ü<ÜN¶nF҉ؘ‚ WåzN±ŠCPý µ€ŠÏÁÕõü„g÷‚–”Ypü5)š¤ èª~‰‚Û`_‡Ñ㛘/îÁ`}K¼£`ûƒG3éx35ê¦^ ¤¤äÂ(kòiØV_l(´]š~*Ñ€pÈ`áIpú»Ó$Ê%ɧÓ$s£Ígãõ‚ÃV>º$è83£m]Œ~ÿ‚«²¶@Œðd胾6LõrÑ•è¶)D/»9¸¤ :`ù˜ )Nlˆà-î=8Fë ¡/ÄQ2øÑæ£uýœiØÀœÜZÁ9™Š“b·ñ"#ÆazkGgµ,üùw ºÖšà7VêTŸÀ(äh†ò¢ìë×j5ZÅ.ù/¬FÛ ÏQl&ûŒ¢&-$p`×´%·qÛle»Xø%ZÖ?l*–Õ> ìaZ„VÀ¯c•A¤XÄ9ŒÝî€ AÚqNAÌ8.\ŽÅÈÛ¢uì§:qì ‚ÃÎ8D~kÇxÚ&‚ÔeYõ`J¹‹”Øf™'x%£!a`ÛœŸÆ*çB )ÿ\¶sèFÐÓGŠ &H pNÛû]D˜²ËmÐÉbïLâ˜Ùí-nÊîʳð™6A ì#—ȃ2ÜødšÝaÊKr bøÏü•-$=J½L¢›p9œã·ä\.ø?Q3ÏXT<÷P­(Ã( Ž·V¾øRÒÖwð$èEÌéöSÌœGWŒî6#Že¾•§c0<ÔUß¡aº¯T©¨i£PŽˆ'i*4‡ôñsZ?€ó:Žc~ÄÝÑêÕGd´lâñ¾Ú†<; l™éý“°Ýñ[þp(A"+aµß„¿k|¹Ï%„I•³Ó”rÓ´ÕÏ‚æ '[ÈÁº¥G›nÄ Ã8 ¥Üš’mH"` öý¡åb>‰(©Ð±Óª@ò¿œ¡9³È ¨:Gïš¾ ðýÉb–ÓHÍ|Cƒv™9€:]¹Å ’'"?ðK€9ò€v¡ÁVF5’ÏÛ­Œ³¸i1ç8Ê v›y¨á<gšPÕXt97ÒÇÀžÁÁÌEé\¥ƒãÿ )Mõj@úz¿ ’NB2?W>qÊêMz½­îæbŒLnG%ÚSâ‡Àkòøh2’„SWøë0M®Îì/™µ?Åõ’QK°÷! A!*;IJs—ôضR­ |)X(¥Cq Lƒ?B"ÞÄçhÕâTç‰&Àk^·Íî„Wßð¦+ß{šÏõve{‚”˜Ôzo%Ÿû\Q¼fðŽ‘‘‹ÜñÛ®aª#˜ƒN]Þƒ\YgXʤŽlüI¡ò”ê¥ Êc€;¡õõ¬[U$űLŸ_dà@Ç`'9}d­……O¾K0Y¡’Q%òI\õHü6 –Òü\* žqñŽ3emF¢MìH  dŽh8Ì)îXokYÐ5;±fÏ›˜^ Çà wC&N™½¡ ˆ¬:¾¹ˆù¾/ë² ˜Ùb^JÓŠEÔüÿíÍïƒ1ÁEÃsÝUµ¾Ä•ÛàøÑfÖÍvK%ñ‡ª£‡;OÞ¡DId÷¿…Ågß!Ýê÷_¿ºywýîõ\°çÌ‚)¿¥‚V_` 4R Åš ì0„¾¯*jÂÀS±8±&C%Ð3ätå°™—™½¯Ú‡ª“½ÙÓ´5® !Lý‚-@ø›TOX‹: ŽIg¢G‹cÒX‘Ón[r›üšÔô±Ô88rvHˇJ¿\!ÒY},·áøÞ9›cèçíÇ7eHxNô4 ÿO*+!B„°µ+=ÖàiEÝfG%£Ç"ýL1ÁµL‘$à|‹L anÉN^äX#÷è¸z6Ý“—LÕ$œ«É+TXz‹ÁRõ.¼ƒ åž—:1:‘%…TØÀ‡:,D+؊Τ%±œJb—Ä À*P”À­¶£Ò™ÔÉìÒ‚§K½;7anÕH}¶Ìµñ£·I ÜS#ÎÓ qm˜§ü­â’ÁiNœX•»OÕ, Œ¿bMp8äb 1äÞÓÁÓ'ùŽWƒa—œÏb¿ˆÈG$3f<’'*‹é»]²òó•X±æDü啃µ WëFå;ß Á^v x$xm)$v¼eëÁ4Úà´Ã“ƒ;?C¦Ýã5”¾K~~ûæúõ›Û÷·ß¾ûêêvÆ0 99zoÈ¢ïÊž¢³á¾á0øÃÄËèC…y“2T1 ^ãômuÜiU“{ΜÁWœ\“W“àÒ\Þ\â'÷›~q{™A&½x{‰øxÝÏœЫQ.žº]0y%»‘F€Øù8Åà *€ƒ7>rŽ.;pÎ],Io ~[ã$<ðêN`?ö&Vû­_›¼LsܳtŽ1/º`^ábÁðÜæ¨8™>Áå8´õûŽ©Fï±i޳“Éz<·ð…=j‹Ê˜tHÜCZV”Áà²0Ìžc/+±Xsî÷> endobj 734 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [363.726 359.886 368.458 371.102] /Subtype /Link /A << /S /GoTo /D (Hfootnote.5) >> >> endobj 735 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [133.06 77.771 144.836 87.784] /Subtype /Link /A << /S /GoTo /D (subsection.3.7) >> >> endobj 729 0 obj << /D [731 0 R /XYZ 72 786.278 null] >> endobj 728 0 obj << /D [731 0 R /XYZ 88.587 102.977 null] >> endobj 730 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F30 512 0 R /F28 523 0 R /F39 496 0 R /F29 547 0 R /F40 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 740 0 obj << /Length 741 0 R /Filter /FlateDecode >> stream xÚÕYsÛÆù=™iÿ§/…2"‚]\‹¾¥IܨqŽ­¶Î4Κ\’ˆ@€@Ëʯïw-’òÚñÈ\ìñữ…ZEðO­r½ÊMêܬ6ÇÏÔŠÿÝ­üè{˜ãI‡i‚O/l\ûë8 M–¾´_eaœÅ ÷Ï·Ÿ}ù*ŽW* ‹¨XÝîhÏíößÁï¯þsû×Ͼ½Ž¥a’¦/cƒÛ’ p/¿UÿýáŸß¾}}óæ[|Í—¯T:Ù•é°( Ùú§«uÇÁíÁá º¾-ë=ŽuÐ7<÷áj­ó@6´¶ë]ë¶|®ìx–·Æó­Í•6ÁGüϵfÁ=êQ k­ëÏmMÎ7OÁÙ¶‡Ât^„äëF’Þ‘_†(…ʨÑÐÒ< ~h¯YÀ H=Ió™€mdÔ ¼H’«®LˆË³Ù ÒA^˜9/@¢[×M¿FìàP‘zçz^-åˆ@oþñú5ìN`Çs<Êþ"©,sð ë4w—?åæüöh>"-ÆaVàò©«Ê¿l+†7|6åˆ I6ðÛ¿hÑ+Þrëo*Ç[f4DPòÛ…˜¼/™ì8x(]µèáU‘KG¥[Nve½q³—OM ÜðÞ¿—ͳ+É}.гٜÙà®tÁâÐ…b˜8q*?¹ªãIÆG¨liÀ3m…á<Ž„8Ü4xz|p"žeS‚¨x’&´MâÜòkj7À“×l[¢ïþƒ%¹[ ¥Ä¸“Ä…d‰î}DÃpèŽñ‘3$Ñ.œ2Á¡Y©ÍÔŠIvŒK>&<ð#íxTÊY6#ºƒ¶S˜Ñž'ë ÿzÃE·Ï edâºnJ Ç3‘t|(û£=±ZlmoyĶ”R‚MhÅ•’b4/Ë®IOCÁ›;w‚ýl—lF  Ñ¢x Œ ¾bsHGÜ6–_,9Ï#!މ‰fî¨ã)™AÝ#FÁ|ѾµÇ#¡”äEP‰8+^ß6b!õåìqôAŒ¹öÌÅ7:p€µ1Eð®á¹é«À ÊZ+¾Èû²n„®Ü×%zBt óHZÕÔ{ä´ÎIkþŠÈÀ)_ÇÌXQ™|TvÑ¢SœÒs®i¿­VTš=_³Óª€¤ ¿çŽÂ&ëÿÂüÛÉéVªž5§>T²è‹¬¿úö¼éeú ëÓŒ$ŸDŽYÅñ8'Øþ ‘ÝZQ.hû öþ©„€ákaœ½ú¦˜*jÛÊNœPˆ‡GT-²Gþ™e€<58z|LFçs‰ï/—2fIšöš.²^˜'1À/eלàãÏ”àh€0Ü ¥·ÉÃAÇS šë0Ójª¼M{G!VeÒÍ#¼«Í¹ Å ò i6¡lò׬¤:‹Â(›÷4¼è4}$ž+kþå4͹?‘¹i2;Lá0x3÷eà‘—#?Q:¾>µh°ur†õÎÁK*Hw0’åT7Ó Gû”‚ŽnðÙ–ŸÃH‡;~fäc|qÒ?Ô<ÇFa¤ à!äº[JD“‹l×dOî ¦Ú…øvóTvè#x U^Kþ2¬”©¦Õ*4ýÊq=c„£TÅh4Û¦u}¹¡Ú"Ì5GÈ©kAÓã µÔ^Ä[4Éiƒ7 š‹‡¦-m˜J ±Î:”»~†#÷q0fRíÓ2œÐìÙ2_c÷Ä{­,b¯•éqq†N öÃ7 ~¤‹‡3¯R^¨‡Œ#±ÝÍ`Bÿ9镦2˜nÏ5÷T‘)ß"äœèOÜ”º ‹q"wC¾‹éàðdSîÄÒ¦&‚c%R‚º9ïÅ2*Wuˆ©±‰“ú4@SÊ›öÞü.+H8Â4~¡ ™u '4ܲ—ÅKš¡úzDÍØk mGìqw^+ÈÒG=)Æ4VÃ¥A8Ó„¨0ee׾Ϣó^5ÐM³˜8 óLññ„Qì“–(R—U_í!ùæ·ðˆ7 J," cÑx% &›åö¶¬y(~0VãÎÚÝËpþlñI£êǤú¸t,÷®A8­O‹Ð3c1z$ÆHûÀËG–­Sºäƒ\"4Ú¨dÿ̪u«Ýgë$ t¦ð›Péxi€HrTÀ˜œ7Œ7Da.%ÌÓìù+õWK×F L_¸ÌË•^ûbÑaÇ@,Ð Œ¾DÌ<†ñ: •J(õ„Äè2¢C)óü…É×à¹A¨|Ç$QéDùqžÚë²bù-ºª¸¹‹ÍõMOn”Ú¶QpÓó<ƒË½Å©½€ºjÞ¿Á…{ßñÍü«nI{ÐÜ$@U'ìëèkƒUõÙjœ|¿†z³€j©Ó‚eShðvkêTœ|lÏþÀÜKç“D8ZWó›9ìK@޾A|pÓ^ϾlànߤUUŠ›;Z¼„±”@‰¢#±zp½\* 7žáÿªl;ŒN‰¯º`ö¬9´ô@f±×V6ÿ%ò‹0J|+·›¼ˆ>^AÍi+¼‰N`ÏNR6Pˆxñ•t™TJ%ƒã—Ó›RÚ/FÊ]ÃY<üP3F\! *ó_’¼eÇ[ääNa5«d ‡d“n@|º‘„ìÚ4 Ò}^0†¯WŠbªEÔ©ßa1!,œæ~ìÀ¢ˆ%Íd=VÛv”u\ ÚˆøØÎy9ÍÀ­»QHxªë™ìKòЙˆÓ/¦ÛÉGPÛö ’g{?Ñ&È®0ãÆá!¯zMœ¶ìè® ,êaHO/˜±¢Æž½§öÕ‚jÑ&`P¿ø­¶ŠÍ‹NaZXü!DYƒ…ËݘÑ>‹–Ë(t‚EÜð(éùxñi°°P¡Nó§R¡<•ù3{ùb ¦ðm"x¥ïNÙø= LïFÍÃäÅ/H4„̪ç3¡øâ3ëPëg¾“üX'rendstream endobj 741 0 obj 3970 endobj 739 0 obj << /Type /Page /Contents 740 0 R /Resources 738 0 R /MediaBox [0 0 595.273 841.887] /Parent 707 0 R /Annots [ 742 0 R 743 0 R ] >> endobj 742 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [294.467 702.958 308.406 712.958] /Subtype /Link /A << /S /GoTo /D (subsection.5.9) >> >> endobj 743 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [476.15 649.064 480.882 660.28] /Subtype /Link /A << /S /GoTo /D (Hfootnote.6) >> >> endobj 737 0 obj << /D [739 0 R /XYZ 72 786.278 null] >> endobj 736 0 obj << /D [739 0 R /XYZ 88.587 106.908 null] >> endobj 738 0 obj << /Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F28 523 0 R /F34 583 0 R /F30 512 0 R /F39 496 0 R /F29 547 0 R /F40 548 0 R /F43 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 750 0 obj << /Length 751 0 R /Filter /FlateDecode >> stream xÚµZmã¶úñò úmÑOÞb­ˆ¤^¨ýKrÉ¥‡$h¶(Ц8hm­­œ,9’|»Û_ßgfHY²åÝM°ÀJ$ÇCr8/Ï ¥®Bü©«T_¥6 tj¯V»WêJþ>\ù·¿¢O(£ØqD­—žriâÀ&1Ñ¿¾}õé_©0ÈÂìêöžio×ÿZôÛ¼¿^ê,]ùêZ§‹­´òý¾*Wy_65u$#ÂCWt×ÿ¾ýöÓ7:qTQ«=_U•wB5™×¨ÀDë"¯:bjeïgvÓTEÞõÂÁd#6 ¢$sšº˜™DeA–GrèlÑË<]#Ïãvúm1³›4 «‹7MÝ¿ýrn7i„~-û¼ÍwE_´Dˆc£ Ë’«¥¢ãȘ$_õ‡¼ªž®—ƘŚÖÁwÔŒuÓKÿöZÛÅ¡íf¤’ 3S6·XòÒdfÑ•ÿqoÍ==5ï†_ÚbÕçõ¦rãeçÆißÉÔŽÍ-»(VåO¡ŠŠµ–µÝó…k7ëh‚k(Z¶xý$S® :AœìöFô6he& $‹‰°D>=9þfÓæû-Œ¾¢±dq¨×X©XtÂ:Û"YÑ s<¼™‘$“xñ¡n¨ùP;ÁvòŒmbÒpÕ~ÛÅnÙýrÈÛëX/æö¥UjtpI$çþ?ºÞ-ËõlK>êáÃÅÆüT¬p2Ò0wOm•U óg!Û®ÜÔÒ)†Go,md,´Ýɼ­¥ûÄŠ¨‹­ˆ5f•³cÃ%þÅ#œFõ$c»|ïWÕHO.M†¡¬ëxfƒ4ñîö3´A¢½,™ sÝ´å:ðn,…[ŸªÏ÷d­ Æ5‚ÄG:ë‚W‰nçNšl35í0NØUcø\øI‚Þœá&ª»½tþÆáër##?צmÈ"A+½xsmávÜÊ µÝ¾*ÜÔäɨ·i×…#`ùá¹nsâ÷À› § @þ/±ƒ>’#KCœoKýØf³º|ˆ1IÆŒ~§Œ´÷ìjyÅP :p“¦Î1‚lÕ´-ûâ4ò’˜ÄÑ ‚aGìÿ#m“¹S•ˆêójq<mM”ˆjÌ >Í9·/Rö A©³MD›¾)ZŸ‚®º?ICP,¿û5èù€5È+^‚8CëõÅÃû¼ë;ðÎK0Dgt/ —ù‹ïš¾ð#Þº¾¬ÈwfêˆÛ×ÅÇr冊¦™šxº¶`'Ìyb¤Â‘ŸŒ”:¦Ô€·’XX´äU‰º+úÃ^FKÇÀ¹9z¥ ÐÐ.(!-^½Œý;‘#göy+ùjuhq2›Zø5:zïe§çIW|̹¢Ø>‹ßSøššö-²! …Ýœ–#:3:<âœÓ#=Á ,‹X =ó™imØØ¼”yC§Œ=¬Íeøâ ÞÛòêaUÌ1–¦#\ÆÏÙ”Û0‘·œïþþîÝ¥t%ຆ8„}ªóœ$2ágÖPQÇÙbµd‘GçDtÄ`ÔbeBó—CÑùe"hŒ"ðÞ.S„³/ —ûÖkýDæÉÞJJÆÓJ"?£DÓµRWë©h’”CÈ;ÊM襙WT ºr—o˜F’”GÝÔŽ à¡ ßn›»MšD¾åd‚È·b öÇÀSA÷2ǼxáË¢  ¶5®Œ@ˆ Êz®oTSŸà›ñnñ›q.f숕ضàŠõÅšÇ×ÕÓ~K³[;=äëlvXÖ½Lj !%´+Qb"ˆTu1$÷Dµru°#gö)«Z3øFÿ[ñ»!ŽEÚC$tÁkZÚðž¦qº– ‰ EÄÿàuÁ£úzL/ZǶOÕˆb×´OÒ·Ëkè§ç)gÝQì]#Õ!ò]!t\È£`DÝy'”Ã̤‰F&àƒó­zÿcÑÐEé%Z3Æ€+ûl5¡œT°˜ùp8õæö6 Ô¨Òa“xñcYSÒ‘~Ñ®RXŽ”]=Æøt©“l]ºXŠé)h&ššìµrTÅc/o@·1×~n(ïðþ#ÑE>^Yâ(Pœ*ç%ôb#å4ŠKƒD4Ô½úR,ϱ+´¶ ýöºpÑ„8o¢%HÆKAF:6Þ¶`›RˆåT¢½+áÎÚ'hÚÒׂü:)K*»þfÀ¢¾­¿$!Ìt¦Ñåšõå:6!{Nr=Lh•‡©_¿ûçßàxt¼ø3”ꋦ^å½ø Ò+ñ^ÕÍ…-J!b=‘^Y÷Bùø¾¹¿w †Î§¹Î]³¾¯òWnÑY"*&±uU}=Fë°Dsd•A¤Í•±Âcf ÅUÁi[€Á Ü_Fa%†=Pœ™AŽ4íåøf¶6” €aj¤—ÓŸñ^©ÂjRÚIJIÞÙB—ä<0ž ¿?ߩ߸¤¤ÊÊ>Ÿ¶¬¨j£“äct’:'@Ý\÷AÏŠ¥  .°Ë…O­oÊ–«ˆ‰« Ћ+ø%®î9‚¿>T½T}Ñd=’"(³x²ÝþÐû%H/œÐ àd[®f¢ñÇk಼:H2¹˜•Iæ]UŒbêœÖˆBëû©•g#+Ï̑ѾÊW>_4€]TÙº®=ö¶Ì}²àÀiÇf·*¹(0Ç©ëâ~x\´…/‰D 8—]¾çú‡á*é…Çñ¦‚|ß]UŒ‡#Ú!Τýpsâ^’´”tȇ6y~Ýðh;Ž”tNçÁ‰|vêÕ°—Èal^ºÃŽ ƒûg5U§X¤´ñË|> –ûW%¡Ù§Óȶ¼.?)N _ÛìæP:ÒÿêÎDÊõDŠÀ"¡üMªW¾n$.&£h«‚ÙæÇ«"é)×N¢\•œË Ò ±ÇªÎ~®–‘º@H$K¸„X\™N¬]T,è˼*óNŒÌùEÞ°Ì%|)âÉn\µ6‹#¶'mlnfìF%ˆÎ„0Ô$+ÁEÍ×Û_Ô Æ(úm”Âü®Jqë2ò#Mˆ¦–UÔr Èè _ðœç‘É/(òB¾‡–.Žå¾CŠ1Þ„°*¬tt/Li¯?뾜½¬'î}ÐÌý3ûÂU«Fð$O¿†Ïˆµ-G%©lt)8®Ê!‰†Éã Û$ÐÆÃŽ¥pÊg«Ñ: ²!xš­9¦Þ—«åúª>:Ã,sÚ™Ü eÞS$á«j}Ò”6„¡«ºeÓ+DyÖ§) ìŠ–Ãad•7«cÔ.(ŸŽ¬»B'’ID§±]JŒ¬Oúé~1xõ]C1ißÔ¹t%>~ß—Eud9wûaH6ÀÆ«šzÂɵP»9쎂UrãGOÁh\.i¤çøYÂý“ô¸BJ‚`E铤!J.ø¨Üñ°-ýG,Ôtäé 9»p¬¯G–Ö1õó•SM€âz(¯ˆïòè&vU<Ašº:Íõ€uæŒÐÉPñGòòî«7·ïo¿ÿ··_s;wYÃâ½Ü?a˜a¦Žü˜1$Æ/ñó•W} ŠGïcÄùç´ä¢šáËX½?¢b`eœ€"Üvî6,_ªÍÎ]GZ`¬Ì¼€.âãý§ÙPìC[Ë!iµxÛK·ÞuÑÊ·7ÔäÄZÐ;,¹xn]†œ” è7”×½Ž+ʄņÇwY4ךEÁ'å§0óJæózå?•¡¿2–¿8à:l¡sZ¯œÖ‡Œáäú"z.ùŠkÈD(Û-G–¥–;þVÁ¤Ã-ä9rݧ[þ°¥ A¤°™rGɉNqÍÁQ5Õ]X‹–Ès-É Woè—¾(BïHú„JÜtRõ^ðj%×)<_#O%¦w?g&2Z´mÓ3ÛùœnÛ)©Û•REÅï‹OÜ-|ºè¶R÷é¤I[1ØÒƒ”8i‚޶é]fÃ[v/GÑVe-£ ,×ÁËØÁ3§—ÑÏ$ÿí$jendstream endobj 751 0 obj 3809 endobj 749 0 obj << /Type /Page /Contents 750 0 R /Resources 748 0 R /MediaBox [0 0 595.273 841.887] /Parent 752 0 R >> endobj 747 0 obj << /D [749 0 R /XYZ 72 786.278 null] >> endobj 744 0 obj << /D [749 0 R /XYZ 72 323.984 null] >> endobj 745 0 obj << /D [749 0 R /XYZ 72 302.093 null] >> endobj 746 0 obj << /D [749 0 R /XYZ 72 266.653 null] >> endobj 748 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F39 496 0 R /F33 497 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 756 0 obj << /Length 757 0 R /Filter /FlateDecode >> stream xÚåZ[oãÆ~ß—þ½….VçFömÓ®ÓMœ4H•E45²ˆ¥H…—8î¯ï9sfHJ¢íî Ô) ,‡sãœÛw¾9Z¾Šá¯L²2©f‰IWÅá_ÑßûUh} }4S*Á”Ä·g&®¥ÐLÇjµŠ¥Záü/6¯>¿æjÅc–ÅÙj³ss7ÛD›½míÕZ•>EÔÔ¾ãÐЈvC]ôeSã[õû¼§þ;[Û6ïmG ŽWëÄDMY_%iÔÛÖw÷Ÿ]=÷Ý®~Ú|õêíf:p’0‘ÑSËìqù—™sÆÓ„tãdMÌ‚¬_Þüý»?_­U¢¢ßoø?ÿؾÄ#ý«x>vç;y8éZ1;®3ÆãÔ[¾§NW­]í^ÎYªV)ã0MàC, ¯SfTæ¸fijh|2]̤`9K1 #Ä‚0×x¸3£¦,K¤G¡‚ g[€¶¬çr É„9A\®Î çÐ^kÆaý¥œAØÇ …<}Ú߀“H®£ƒ%¯/³[ìR‘ÍÛª´íkx ¼ÎÒÌ¡³-MØ‚cÁÛÕŸõÔ³Ïq“_ð?Û/SÁ9»®¼-«²Ç)4ÒìèùÞ-³Ç²¾£Žñ“乨–QÕÔwá 5*dYsôŠÌÉäÞøõÂ訶¿öÔUäUE}øÕ“I­íèŒb D0QÈ;&w*\‚‘»š8zç÷隃¥Ð5&ºGQrÒhG»„C)©7§ÇmÙòã´Ñ’Påµ!c¯×äY'‘¦K¤ Ðrb“7ž:­d™ k9ÊvYtKÚÀr´ú–ºQ~ tJnƒêCëë'ô ËÅŦ¤-ù¸!ß aìÒù8tÌÎûÔ ð>ÀæòiÆðò&ª·òyN8& è$_uAÚœ«Ïeéi.˜=Cøv¿… ®Ë¾Ì«ò_¶;ÑÁ%^ˆ tí\š¶rÇ@ÃÝB )R Íd>?Gœœ‡¾·`>È-‰F¤ Ä`ñ•>Ý ±A&r'ÌÜ iØ™(ž¦åsÐÞÒàp‡h¸)D¿w˜‚¯wS^õ÷-ˆ×ØÅ£o¸¹ñÂh–!iœAŠË˜*oB™ðÓBzü€Þ²Þ–x"ìÅOOÛ¶M‹ÇÉDô†º<#ÀæÌ&Nâ׸•<ûÀ­§ø‘œÖyÚîë•N7Ëç°¸Û7C5näÄ^ S»Öº¯¿Œ_Ãx£‡ÿ].½“2jbY×°Ù³, n ÜÌîK@«–e\C2¦¹ø M/ö`Õì¿ÂYˆjƒw– )Øœ=– ÓA’ÁCøë«5牌nš|뙲€;R&á:{4‹X°ŒÞþz¬Ê¢ìr]*)ÆÍ™Ê(’~è°ZFº´è@QRbFëÖ ½×dJhiFNº©¸å ­©àxØ"â-1G“+ú­§)ÍćЭʺ°ÞÿÉóf'ÙïÇ}sl-ÜÉ/ý.Gš wfǧGÌ‹†6ehÌîø|{m2}1ôã‚ÖÒžyë׺»•»4ÔÑ•ý@€Oï÷a'.ÏCþÞe >`<ß–BàL;™Ñ¥"¯×)„vÍœYx³kB­Ã.ÈS`=]•|væDM·ÖßÈ€åÏ÷ÃÌ·PÇðŽ™e Àð%°ñ%]•gU›ñ†€4uAh¾ Vv[æÓ(ßõáNTáø8¿ƒ´Æt¬é° 8æΉQ'ä|9ŒäíڷyÝAp¬§{%ÒÅâã,Åù'ààt´tvÂ6{‹è!€z4>€Û€?xQkJš°ZŸ±NƒzÈu5á¶S,¸zjÔoøª“Ÿmš8HÅ¥MJ\þsYÐ0B Vr¼§ÜåŽ5C=kvD0Ú9†ò­OgÌbª%¶r‰^)À–\­UÊ Ÿ® [Ö=Zº È×MÝ£ÃQç8ŠÝïþ´T†5ðHž(Ãfàâ‰2¬a@þ“2,gØõÿEvò=̆¡3ù›ðÜÄ•V›êœÎÒ ¯Í«p³wÁ¶T©z1(z3–VÆü5Þ†«¹²ÆûÞÆ…Ûq¬| Š1ø«çêWê7©¢S‚;b[>1MÅ„]Û¨õæú›P™~E—Ãq˜ÓÎíLÀê\aoðÚÝབÜ~ÂB9!ƒf¸ä]ÿåÛÍwß¿ûÛ›ÍیҚiÀç¼êLb»¢-}*Üú ýo€]Ì"’+ Àüc‚YÒûG±ƒK?‘Ò+|IÕ¹¿Ú~ŠªÁÜÜ/3T3Ïo«PpKå;¸³¥UÛyt&—9‰6̲H÷rúéÒ‘ÎËæÙú‘:ƒ!C™ŠÊ*Ý iÅcÝ+^Ø'£ÜG„%Ðg'Ön¨ˆ"5K%5üŒõÒÁE¥g{SÄAc†ÕðVøb4=ÛScU^´'†ŽÀÅŽyCß./+ &-§_´æK‰¹ÂA´4'÷Ú-ÖêD— ?B0† íy±y)žH—aö;¡¨ ×b8'@Ç*æ–ÆOÁs~ 7óØ6àz‡ŽzïË~OýÑÔ;ý,á97ôÔAcš›åmGòT^+–Šu¸ß6A‰9=æ¡sA€ök¨íE=ÃI±ïnü¨S…N‹¹-‘Q燒ª€ð†KÚ®GÓ ÇÖ߯S=ž3ñ‹Ø<û£a’p&¸~¯ÄEå/GL’'ððß’ÁN¶endstream endobj 757 0 obj 2418 endobj 755 0 obj << /Type /Page /Contents 756 0 R /Resources 754 0 R /MediaBox [0 0 595.273 841.887] /Parent 752 0 R /Annots [ 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R ] >> endobj 758 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [204.393 594.648 223.787 605.557] /Subtype /Link /A << /S /GoTo /D (subsection.5.13) >> >> endobj 759 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [262.271 500.003 276.21 510.912] /Subtype /Link /A << /S /GoTo /D (subsection.5.8) >> >> endobj 760 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [371.878 400.582 385.817 411.491] /Subtype /Link /A << /S /GoTo /D (subsection.5.7) >> >> endobj 761 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [255.575 378.067 274.969 388.976] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 762 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [514.483 222.638 519.937 232.335] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 753 0 obj << /D [755 0 R /XYZ 72 786.278 null] >> endobj 145 0 obj << /D [755 0 R /XYZ 72 484.738 null] >> endobj 754 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F37 380 0 R >> /ProcSet [ /PDF /Text ] >> endobj 766 0 obj << /Length 767 0 R /Filter /FlateDecode >> stream xÚÝYKoãȾOù Þ‚¡‡ýâ#@ždŒM° b#9ìì–Z1"é%)?òëSÕUÝ$%YÆÈ!³Y]¬î®®ÇW%q‘ÀŸ¸ÈäE–§±Ìò‹UýN\Ðß× ?ú3ЈSoo0.=çR™8O ò¼}÷áZeBÄ…1·Ç{»þ)2q¶X !ut½(t´oVCÕ6ýb©2mÚ&úÔ¬Z‰h]5÷HÒÑ÷e³ÞáÛÏ·?|¸æB$q‘${)“ØÆ­p…¤ŠjÛ,d¡x»F’ŒlÙí*Û]⛎†­e²[ xy5)àãÕB¦Ñ¶lª¾&®}ïÅT =ƒ€¿-dµýp³êª‡a¹+›û}yÏ“ån×âü﫤Ǧm:°¨Ï…'¨ÌÂdÕÒ J\P Õmgq¤`éÒÑD$MJ¤uõÛñ™‰ŽÁºr5Ø®‡Sk…Û¶íþ~K_·Íîå@NIkçjeû¾ºÛ¹w•,¶¤Ç}õˆkÙ†wTÕ6>qˆ[T’Nî&wC´§mEdz¥¥“d¾t¢Æ‰é¢ðÁ¾¼ÐÔà²;ëî>‹^¦ÝÌX’hµï‚ªœ=©bbO*KãBi¶X°Ž…ø DË$z´ø¾Àb 2ƒãgOJ/b¦›ÏhH˜N·¶ ‡–žuù\ÕÕ¿x¿_aìsuWíªa¡8r®¢KZYf“•…Éc• ^z»êîÄþ”Œ‹B2Ùgîì×"',ro>Í=yPÈàaw^d¿@`*¼ 3]j(^,S-Áªžt! ƒ¿ÏtQ¡{ä¶Ó£ à|+Ø™s9 ~JÿÝ®’;cÄyïMßÂZâÊ‘ûDƒC‡/Çý‹ßÀÚ‚¶5Å \ YÓvêrm‰ãkCÝÐëÀûEíÛ?Ü@Wv`£*1h¯EäÆi´êl9Ðnà ÝŸ³#.q'èø-m»¶äSÀK…6®’, 6k¦V¤––„×"ØŽ£„``¢vãB ²®máë.H>8×Í$`C0i¬];E)¼ê¡Â`ƒÃ'§c먇°³[Óww]…Z6/ôÊK» bn25[cäÁ1ú1>²àyx« Š4F>'ÐÓÙm\á—âØ^E]ƒw;[€gÉìW7üìúLôÁ>4òë:‹èÇ–?ëû}ýàõ„<[µûäÑWMYóz Î6ý„¿ã 4: 'Nó½íX]ôR^o:êö;ÛÏnFFýªlV•UL»ù=.óîÓmHìxñFÄÒ¨· lM¥Š ¥~5KÏh~{¸€‰5˜Õ›ÙôDøAîOÆ4ƒa'\#F°cŸ*éÊM×;;XLø^Ý7à h¢EÈÄyNµãèÄÒ|ÅÒÐ’ö¼ ŒÒ™,°õCÙù…ŸªaKÔÓ¡¢ºpfQ]Á(W|RÄFhµ8ØáºŒ6!ñ,µÖváž…—ïL¡.9uâKëlÂ-¾Ã©'žh§®íº*YM@Ø´Ñ`‚ ÷S1r”Çë±F€ê“@.c#ó™œß @É™Ÿä:–‰[TkÎ?^8fO Æ!9Qçu‘š8ÉÄ«y]âëW[@'T›ƒj¥W-†VBíʉááî|éc]W k7ûöçvœQ$qú: ›N£mÛŒ•Fl0ò6ÚøÐ¹@ióåÅ2Uq’þ/¸ðC uÀÇ„Gs㎌Ð2íÖí#'œD#Áçh“ü¹- ¾Ð‡¤6dœf9œiýÄ ž¾ï‰ˆ®0‡+% ´ÑKÜ· P ¤këƒLƆ ßüõ/Xu O9±1á@KM}øŽÄ¿O’h“¢qô-Žpö»¿J’’D$þ#I2H’A’œI¹ÿL°æØh;Õ±ù5“Ë©pÒõ=Öµ>·š¥~«iتútæÐ¿ìmÀE `šˆÊ‚(D]Ÿ…pM¤2›ãu¦Ú Ñç®ó eäI2•.25Aƹ‹üxBF¸Â4 2þWhÞ¼Aþü¥\í]H­ÁG¼?¨ ýN¯ÿtæ´Ã¶íðút6=± – MÐüõ9KxYWà÷=b!Ó¹¬,È 7p=3…ƒ¨íëèIvº©š•ë´™è1=¡î=Õ_KÓXçò­ö¤|ãK‡w°}ãúZ[=ÜÖ¤¬¤¹£C£ƒ`LìYŠëssÆ |{9QŸ Îñþ嬵¹~¬úyœ‚ŠB™šbÒ½Ó ¹DÏ»wuùÕeÛžª(×ã†s•uÁ5Û¦\²“:r™œË.sÜ‚Ÿœç,|\]íH®…ßÒ4wâ ª su¯Œþ¹µ q=”]ÿJa±TÅꀴ:ÂùNI!èBr¦Þü)’:΃uœéÐÊÄ_SgÙW©";ÀF\µ¾ð/Ï|x.ú½¶%u•òP3Õ× @ é^ã 7V=lêø'¨a;KýIàÝé`SbŠi¬áºKä3(Ž”ÂÿÎPL®åCO_ä¾€(æ(æ~GŰrëyê²ûº<üÍãÄk‹Â_çO§"D˱=Þœ‚ˆ"‹Mæ=äçS‡Ähþ’ºƒáÀ C œ2ËÓƒVýèâU¿ªÊQ†–\­a®´kÆò¨hà.2>tvEíZ|k;b9îæÐ‡þŒ7$;³Á€4kpŬŠâKê'ó}!~õÃŽ[ŠPæÀaõ[%‹”"V"}«hQÅá]Gž)Šþ $‚9„endstream endobj 767 0 obj 2458 endobj 765 0 obj << /Type /Page /Contents 766 0 R /Resources 764 0 R /MediaBox [0 0 595.273 841.887] /Parent 752 0 R >> endobj 763 0 obj << /D [765 0 R /XYZ 72 786.278 null] >> endobj 149 0 obj << /D [765 0 R /XYZ 72 761.372 null] >> endobj 764 0 obj << /Font << /F37 380 0 R /F15 393 0 R /F39 496 0 R /F27 394 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 774 0 obj << /Length 775 0 R /Filter /FlateDecode >> stream xÚíZKä¶¾ï¯èK±­)R”äàØÞdbcmÄøGÍÞVÝêè±³ã_Ÿ*VQj©Õ3v'‡Œ(>Šd=¾z¨Å&?±1rcò,–&ß”‡WbC6¡õ5ôÑL¥ÓX+|{aâ6Ìܦ:Î3ó{÷êÍ[¡7"‰‹¤ØÜíýܻݟ#וöt³•Eän¶©2Qy#Mô`[[ö®½ùëÝÞ¼•æla.c©$¯~Cf”‹X Åã;WW‡ªïˆ´¥Ç©u¥ÛUÇ÷ôÚ7nd¹#½>VýC3ôø’EÕ‡à ž&µÛáP=>T=¹;ÙÒÅ7[•gÑÐɶnry…m!b£³ÍV £ :éÇêÔ­Ü&•q¢t`Ö±lü9øôBFI„ª]÷ze“ÄR^Ú‹ºº‰~ßÔ®µ½C~‰4º¾¥¢þÁâ­„ˆ¤Îh°DÎŒròg9Úƒ£ÁÃs«¾jŽr&Í¢Û=Íš ˜w²­Ã³!GT Ì›±æPuÈÈ×psÀQÜ´@apÑV¦IÔ ÷]_õC²‘p¬{<ÛÓ K„±*ÂuãcÓïÜ~…+JƺJ6€Q_Õ´-€e3õ s´ÎWØÌÂË‹$ú¼«v¼lß6‡@àpm‘YÔw|»cÃ|(TœäÌíñ’nºþû²­N¨Ÿ@vÔÝŽxëY‚b²uÝàÈ£ÞqçžE%èظP©d&<èI 4"°ÂÒ4‘±Ê¯žSãôš'¬Å´IÕѸsª]†å9’ k37šÀVÙˆý}À,ÃáGëvíÁ›?è˽ßÕóå£ç 0=Õ2ªzZÛí‘¡‚ GÍç–¥ÇxTÂ8½>ØŽÝP–`;û¡®ŸhoÚÚ6À„Ò ’uéübž)V.Sà÷Ëì6Yq…ß&\¯_$ž¥éi à\YíŸÂüããÎ@«ªÝšU™,Γìe¤1æú‘‚r¶0ì»Py“‡¥-õ ”8©çx:Wâ,!½Êä¨Wø–'t‚Â1pg;tÜ fèçN·†WqyÙˆyH×C$4ºÞ¶=5IAa鯨ÙÔrOy=ƒ‘ÚÙ®÷Kæ:ÃuutÔ- Êo¶[‘Lfb`(3ý+à2í7+Â\Ô*xMÔ 8Ü#u3Ôxb©áÞ“áЖ}CÏ}ãѦ€~!ɾÃÎsùAßLôÀ}©’è÷0àëG[ó›´۳ň<.d:g‡¾TD<öЖŒ#‹Oe=tÕxô4È ÚÛ~ʨOÒÿ<Î}Íý5á ð¾£ ¯ñ²…W>šoi4nŽL`?KÔCSÝ©ÛÒ/Ùv¼üd»59Î5᪅ ˆ·F‡ßVÞ $'Y¾€,4û°bâ0¶mGÓÖ@GúZ¼;x€|ÝÆqÛ v’”D€ûVûp(d"öìmUw<­êÃéºá@7ÊùF™×ÉbÔÉk‡—*¥|ž¶J*hgç.w Siˆ·È'­÷·¤ÄyBÖi¼u"Šéy|ŤäÐnö< pÃ# ê}0s"¼ .r4Ð`ñn^K0A×Ù­1¦i6½ÔÝùÀÀ!ÌmèíàMût“Ë(¾ê îÈ`R6íXÝÓzÐ"C†F°¤÷ê«»)WбÒÜyƒŠ]O-®§Bć!ÍXI½Ô¾Ùj€±Ï>»û.à= MÚWµChG€ ‡†Ã ¾-bÄ)Ëã´È7­Ûì_A˜çz“Ǧ¥øHW†·9øfîÎæåùá)Jb•¸¥™«ñZiºr­·+ŠŒÐï®° |ÓBOóÆkbžkç„s¥™f 1µrÍp cPk$ÌùóYà)Šž…5©®I»ÈK¦:¨”Š:gÛÑÂàýd{nÍ’" [qô­>ìY6G\ð~€Ô‡·–“U"Á¡eûuGº¶Þ®8èêǰÞdžósK…×y¬!0 Ë€)Ø‹c6¡õõ3Œ’qº$ ¤ u=-¿Nk5g„”1„ ï¾øöËÛw¿{1\`'®MJ9žÑ?\Û6>ǃ6á^Y-â¤Ê–YeÛÖRÂFó˜{⊲/Ja”‚è§G¡0튟 €4 '•"W2ɱúÑíàìL÷:¨Ä¿)Lxv»Ö'ÁØS>wª:j(7Õ”úEÓ}ç3ølæx8?‰‰ZzÝ5ƒ70W\^œ&â½ýBz„,:^QDgaVˆ½a4tÉŽè`„Óz¨æ!Ì8ܺÉñ$ fD¡š:?V«îÓ…"Ä)€Æôävîmsìçˆ5/ì@0›7î‹ BÈ(²µô 5 ´º˜§¶·dРGC ’aOUrÀ @IôM~À`ô±ëy!Hz÷§o¾Y¹…ÌàÁÆ‚óœt7¦€±fW•¶w gê*¸æSŸ…ô}Ba‚‡vNõ¼EÉö‘™gª$Rm­'-Ýå‰ì,›Ý ¶iÚ÷öˆv†¯Õ »Ë u” ©#iåÐ -¸'Gÿ€Õ$àZ\1’ 8 gaÛ|æøŠN£ƒÿÐzÍ4 —l·ðX¯‹`uçÇVIm.8ð…Ù–QÙ5PÓ“ ¶.¦x%Ôs8Cæ‹-Еúˆ€>AaΡUè§ôG«‰ œÐ·Æ>/š­¼K=_9/Øú1NŠa0 4++„à«ÎµõT£œ¥Î9'ÑùEâ ±^â7q?¥8+S Ÿ.½ßÅ ¸ ÎlKJŽ3ïYšØþüû/nýÍn·?º¶ñ…I).q›`18ÙGÍD­_FC½DÝ`µ£vO]ïcŒiáO ŠE^Ä9Pݪ"(Ô/WÇžâ]°ñ/Ež Š?;ý§¢âì#*Ö??*^Ï3y¾Ëm;2VŸç)9-™‡Z• FŒ]ެ_,>f.ì½DEìåIƒc:HÓW €V,| ¥ óû†fŒñƒ?‰mÝ~¨éÅgZd÷8¯i[Wö¡Üëï8ƒŠÅÙüž`Õh§yNn›>°ñ]©akÊ+$DžÝyyœkëCÓyžA–^{‡Dѯ<»J*]guušBѶ-=:÷Þ—ö2þ9ÄCMm©t¥~ð9AÃÑ=úâ4Ç<=ÿ²Òï4²§S]-Ëy”ûTÑq{¦8 Â’>¾PC§µLý? I˸ÆØ}ûåëÿÃÔ¦Hk8ÉnÊT–õuN0ú³R”ò¹A‘Åö\Šæ/¨vŽÃÃÉãÓ§y˶AËÒ÷Ú§¾".ÆO}þ$éZléðÆ…„\†EÓGLM'ržv qqЬ}Ké¤éÏŽ»‰—ÈÓØ,’È ZÎblÈwBn¢&”Jþ>T­;0»9A©¸,Ò´;Ϻ/˜r.&jÏ@hüz &‰Ç‘L¨—bYòl4+âåy¬rýòOÓÔKÔïBÅé3Ós}Æ×XbbÈžW¥ `§:-¼žc:§ù „Úk]Ü (ÄÒ@š!¥7þ ëä/ʺw|+LŸ¶;ÇAû1˜21`JŽ›ê¸Ø´ìËB’øï?£(JýQ5½ž÷Ï5U6|Ú}8ûÌB÷ ~Ì—jAÕ~• ½3^}V¿»Œ“–¨B“¼‹ÑÖ@xÀCu±3yè^è#6ö“>\3(Æ’Ö a>áLìdÅ;Þ¼£§WŠ"Ô«isßa‡¾9€×*ýgÉKm:‡„9Ðð§JüQ ¶Fü&?BEI#©ù‚¾¾rAìgƒ“Á˜U ,?yUýÕp•x‘`~ëÝBfQžèÅÖ]C­Å ’P@˜ Ùš¨­ø_˜ç jD¶£yHb¥¾˜‹XÉô'¸~ç"Ô!·¶}?¯ç«‹:RaG²L(;Q*fVtZjäô…a)Ѐõ,²tú•ÙѲTW¤@Uö¡ô·"Ûc@¤ðµ$hÇ&¯gßPÒÙ×–ßtô’0ŠúºÐcÕñŠ­à³/ —×½•DLzÍŸ$ü©ÕF Ìðg{—¡¨±Â‹Bü¥S$Z€ *L~Q6{óV%Fg™q,´ðk“Ym\AŽ…"øÿž~€ØÒ@뺡¦ß ŽatÓ/ß”ÿ[1¼¸ÔÝkß+`¸°EHyf1+ðc¯W êCêR  «£½í™rT\pTìÚK1î™8)²—œ:Æe ÂañÒD)Eœb‚ñ¼ÿWÉò<2•±”ÏÄÿÖF–Šendstream endobj 775 0 obj 3349 endobj 773 0 obj << /Type /Page /Contents 774 0 R /Resources 772 0 R /MediaBox [0 0 595.273 841.887] /Parent 752 0 R /Annots [ 776 0 R 777 0 R ] >> endobj 776 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [130.569 519.858 144.509 530.767] /Subtype /Link /A << /S /GoTo /D (subsection.2.3) >> >> endobj 777 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [247.791 452.718 252.524 463.934] /Subtype /Link /A << /S /GoTo /D (Hfootnote.7) >> >> endobj 771 0 obj << /D [773 0 R /XYZ 72 786.278 null] >> endobj 769 0 obj << /D [773 0 R /XYZ 72 259.32 null] >> endobj 770 0 obj << /D [773 0 R /XYZ 72 236.805 null] >> endobj 768 0 obj << /D [773 0 R /XYZ 88.587 99.449 null] >> endobj 772 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F28 523 0 R /F29 547 0 R /F40 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 783 0 obj << /Length 784 0 R /Filter /FlateDecode >> stream xÚíZK㸾Ï%@~ê`¬_•Û³“L2ØCº÷’ÝE ¶å±0²ä•äôÌþú|Å"eÉ–»'È&@A-Š,‘¬b=¾*Z¬ü‰U&W™Mc™ÙÕæðJ¬øïã*´þ‚>¦ÔFÅFÓÛ „k­Ò8MÌj­LlSCôxxõÕ[aV"‰ó$_=ìíÃöûè¯eÙlÚ»µÌ£mÕ|¸[+i¢‚Y´k›;ôü6ï¤Êž_=ͦmúj[vÅc]RO‡öÔ¥ÿ®ÝqÿPJîé«fã›ÃÞ7Åñ8®?Ðl~}AsýÃ-í¿iùùˆ]gèüñáÏ«µHã\¥x’”rÇZW¶Ý‡¢©~.·ñÝÚ$Yô®Á—Æ`é*lÞuô´/»’‡ª»ªžß{g’Ä1‹ÎcWµ]Emáte_–žoþöÅÀCÌ>žoOU]óŸ#MT6=Í©r,žEßW¦ö\¡u,º¡Úœê¢û‚5ÃD~â}9eÆ8^¶å®8Õ4¹Í¯&C׌š¥+©÷3S´w2¬Ù=uÕ0~ʃg–Ù5EÍ=Ï.D$‚–öTlî ·{~sgÉJi ÿ¬Ûb»pN^×ÕxÔ¤-ÜÁ{Sj¢ñJž5E íËát„êj­£ûrÎÔ{Oq–!z¯DF›¢™mƒ_ˆ/í«’9ßrï¨s¯¾y8;)cÈdµÎÒØjsÛ÷ÜöGBÄÂJö[ÎÉlÁU ¸0°ýñwðú†û,7?$&ááÍžôZ¿ûÝdT„¯Mœau ,ÀN‹ƒ »êÊÕîÜclÍÊÆdŠjaxmã,õýp-Öf<|v²I¬S'Z¬)µÀÚ[ÚÛ…ûµq.µ'æ S@vßt#›JÇ0¸q+–ö‰})´×i,„^`3ðy2r›Â>*þDNÒíqv‚ÒÄi.=M8’–u+“{ºK]•ÞãRðéûÓÁ)%E‚–q9 Ov ïYÔÕvaS"U±6Aƒ¨«Ç…-)‹,»½¥¹…/(ã±onº²Â6G¯tÞݦ€·w¡IfIœÂf¢]Ú´Œ ’„¼‡syF Ö e=y¼0_`ÏÓ-›ÕYóf“ h†1½'O. ‡zŽþD¦‰c•$AÅÞ–š& —ŒóùÙ…ZòcÂFï¦ëàÛ:Äßë]¯%lËØ|&¯da‹0ñ4èSE>[PŒpj„€É¶¢…éÕk—H£Ý©þ!š7L£KGm•i8‹õ¢„tló <-§§ª/‰MD<‡4Ü~JnÔÅàC{Øý’! •ÅÓã/»®i— I¦oÏB7Tº8ºY¾³†ƒ°`[hÃT¨ß¶èØŸv˜…Bš6>¸PWÅÏOº0ê¢`9ûêŒyÜ=?ûÁ¢,6›Ãá&mœíäd;D6b¡é7¦ãÕUD™ñøÝû÷ 2„Óʳ D§ÜöŠ=iŽŽìx6iͦ`…’V8¯ üÇ_ìŸÚ3T%³"]€•@ÌžlwêHOÈvr/qšÊ1H1œÓÒW»3¤Bï•ßxÛà¬Ù×0_S @#êÊ™g–²ýf„»[B}È;&Rå·fÀ{ÉBȽ(/Â{GŸqW¹ŽÓ™Ä3{ÏhÕ×N€€Ψi4<™ `ÒŽ0 ÁGͦ õ^$ZÂ^ÔzÖÕGŸOÈÜD+Ž»7Xí±zrî?ˆÀŸjÍtNêxÞ·M1—HId¥^ËŠTJ©›?®B댊’•Šs„ÃY¸k¸“I¼µ—KP¬–9ü‡Ï¡.W2]‹}×µæÉûsÖ´ü:)¡¾â4´X¹ûÏÔ¥ –yÊ0Øõ0ò¥>²7Å©9š•„jÙaö>‘ÄÛS½å×bíO¹37P5G]‚r1Æ»ýiC9Áž)GE`¸"¾óg{€Þußrëè–oƒ£riúéTv´—àš¨ï<`¬ç­”‡ðùe~(§99ƾg‰o*,@ûT ûëSr{‚ûÛ¶Þ½Y86–"„œƒ—BHò¹,Æ“à'ç ™Ïò1Op;š§!»S³qžñ2{¸R!ê¤H2ýŸK&i"çËâÜoèÎùØg°ÌþŸ:<›:˜_(ux`M‘öQ;!ü¼RŸükpø¯ÞGƒ\¢L$+:ŸëŠèi_q^˯۲ßt•wBýLaRåÄ™kÌ•¶Óð<°ö>àW­'×ù¾OÙU¤Ø .½‡Òôõ¿¿´L£Ò8IõKþ'¤R51ƒE}ùÍåüYy¹fh|²ôò!J-¦ˆoäV¨%£¯·í9/ÀÈêwÒ~ÍÉÁä´$§zþdŠ9]ÁØG `,÷Ô0IÀ‹Ô–º¢ÇGÕÏeçò wNÍëÛèÐ|1j1±Ìämã,Y‹©¬xU.É9ªù_9Teì¬V »( ï6Îp p×Ðs¿C¸O ¿\½,Î\,RYÈ'·§£wYÉ”'±!£j$A,>í}E^ÁÀaÔ߇%ˆšÊXçrOÃR âÄÛˆ»Â’™ kC kÜy ‚–Kß(¡Š8=[:&›gøór©ŒšâP^„׫x¯Ô]Õ¹Pxå¬Ô[¨[I¬Ìá¶GˆNïþˆLfË»–D&¡‹¿vE§JêÅ}9u—¥ÒЧ³ç¡w‚µt0DãK«°”@Jé¬""eÀëR†(#ƒ Ó “§”ç¡ËlŸM”¾qr‘!É ¦¥)É#,1Ÿ 9º‚b}/Múã’É%M¾×ZšP¿\²T¸³‹ÂÝÓPS£¬ÙùõQºÞð.ìä˜ßèbF®—²ã[ªJa'Áá_´25/’ýçHaàœˆG™»\‰è[Ý­…À‰¼)ëÒß»d*zãóþ+³Fè29ƒ 0lŠäºvä êrWëªs [-W{wÅ%øŽ}‡b¼æJ'µo›ETcä–ƒÂ!µ5á~ÐÚèPZ—¥Ò7dŒ\¢í®æ0V~:ÖÕ¦ò;tEŽx;Ïü©B‚–«Á`û»5"3•¨F]=v…ÛI’D|õôÑÓ´<×HÛŠ;\x ¤Ȭ„Laªù/P[ÉÿÚ Ñ¾oÞÞYíJF, g6àõxêBr˜æ3ƒüBíI‹nêß³yÝÄç(ƒªjº<ô÷„wÞ‰ éÔlËÎ]³î½yûXfËÛ–^)A>Ö#@±%m÷…”n’vé)Vœà™ñ¶ýµ/Æ”~—}_È;‡žÓ½-Ýl *èÛPáöL\¨åyªã\ˆ‹ªˆ»pÏÏe’ùO4]fütª:gÚž7Ñh¸×,é|.i zIã[Ä•%GÕ¼€0ÜÁ- Ùù|ˆ|äÚž+L׳j躕_PA™šÂB쮃/"„ÈãÄÙæYfSoO.c„­c̸Y0‚Kd…bè<Îtöß¹ovN¾¼‡\oÖ‰^óˈÐ÷÷L~U=‚¼òçªG$®ô™êQ†ÿâKÊG2ÊüJnž³/JRG—D-wf¾HZ5›ú´-ûYyUÁd‡‘Ï“À‰üý ×^;nH1 õ¢+6@1î&9®÷ÎF_áœ@q™Æ]‡ÏÇj8GvŠg§JÂw×–„‰ê®,¶Ÿ}qêS…0ȘšA¶#ñ^ÖEï’±’ö½jRйf0ÜUŸfN|,D“‡†Ç %)‰½ Ý0¾dÀœ»ŒYÂÒÙ $Þt¶ÐèTží0_Ñ픽ºãøê­NH/ÓÔù¥Xá¾MX|_“Ó‘Ñø:õB¸ùE8ÏP”ÂÁ„‹ðÉbk?e†Ç9ú¿°ª/‡ûìÖ+)Q å1Qª;•¯y<ü¬M+þ©÷†YŽôs1Þ"K ðІPQíÙOb ¨?´]5ìü-Æo¹Ão ¿Dc p¿ÍËýoº¨ÖVw¿erªúë$>œ°ubÒ—`OB÷ê%B$?±"çð¼Ukqô”ôîÆ ÿ9N2¯endstream endobj 784 0 obj 3243 endobj 782 0 obj << /Type /Page /Contents 783 0 R /Resources 781 0 R /MediaBox [0 0 595.273 841.887] /Parent 752 0 R /Annots [ 785 0 R 786 0 R 787 0 R ] >> endobj 785 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [246.729 558.99 251.461 570.206] /Subtype /Link /A << /S /GoTo /D (Hfootnote.8) >> >> endobj 786 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [347.007 231.941 351.739 243.157] /Subtype /Link /A << /S /GoTo /D (Hfootnote.9) >> >> endobj 787 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [448.393 217.786 453.847 228.695] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 780 0 obj << /D [782 0 R /XYZ 72 786.278 null] >> endobj 153 0 obj << /D [782 0 R /XYZ 72 279.729 null] >> endobj 778 0 obj << /D [782 0 R /XYZ 88.587 109.331 null] >> endobj 779 0 obj << /D [782 0 R /XYZ 88.587 98.372 null] >> endobj 781 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F28 523 0 R /F30 512 0 R /F39 496 0 R /F37 380 0 R /F29 547 0 R /F40 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 792 0 obj << /Length 793 0 R /Filter /FlateDecode >> stream xÚÝZ[ã¶~ß—þ?jб"Þ$*6M&ݦm‚fТhŠBcÑcudÉ•äÝL}Ï…’)[žÙ-Š )»¢HŠ—sùÎÇC‹Ub•ÉUfÓXfvµÙ¿+þ{Z¥o Ž{j£b£ñ핎k­Ò8MÌj­LlSƒý¿¸óÙ0+‘Äy’¯î·Ô÷¾ükô¶¿Yk™G¥ë7]õp³–6r%×U ?{·ª¶¹ùÛýoß|u?M$DgÒ¯+°úi5–¾yaÖì|,kc®ïíúH·°D£¢açü>Š¡À’ú¡;n†cçü7°¨Šª©šGß§ú—[—îÛÎ#ה޻ŒÛ߶ݾ ­CEµ[þªÀÕ¯ÖB'± ¨™œ–s(º¡Ú뢃®™Œ¶í4b¦¢¢ÃUf:j»Ç¢¹K~-zÿäG]5O7¸ r|ï‡çüìNf ¤’0±ö’¸ÿÒÕnpßÃÀ?$&‚¿šI.q’eþ£¡xÂõ‘Œ2m¦»b\4WºÅ”E®«ŸYJª8®])EkÇ’ŽªÞ׸íÀ¥b;¸Ž‹%®œÔ‚o¤MªmÒÎW"s•òT†fzÚP©ðS ÞßÀúªÆëL¥ êìRp"{³ÆË`AN2­ûM¹¤©|—»¶Þ}¹0²±¾SÙ² Q©ŠšvàM¸AN·XΣµàýÀàÙ9°âÆ•ñÍÚ€d/ö=éeÚ¶Œ> VÁ¬HO2Éck õÔ7×÷Ûc}Ëê™dÎÓqùýI£¢>ú¦Q…É¥Nü°w7­¤ ‰…ñÃ5¦QÛSMJ®„-Û·¨´÷¤{©Áêš›–|3GOÂFvs,my6rš+ð@¬&„ïnqdZ_îf¶Ìí±Y:ðt›4[­ó$V¹¾ŽÀ×QYˆXXÉGh63¤ͪf@%›“3¿­kôçš›¦>lp£—ã‚×–‰¸,}Ä€9aÍvÕ¹Õö Ä0êU¡Ð.ZïE3|¯2í@ÉÖfÜ~ 1I¬S‚‰Sc§-)µ°¥»°q.GØš#Õl™æÔoÚ§Ò±R°OØ®HÖ¹V±‚ò:|Ö û÷ãdhÀzˆìå@ùŽ<-vsìúê=Á& ¡¯D3¶ÑûLUš²%ck`Éve°‘-Y¥š- Þ³Íd»KÐc%Tú*ö€¤Ò¡bõ~ÇÈb¢} ñ{x`á—â€xßUÅ੪­Ç|3:{ĸüÜDÇžÀJOM‹Ëþ€³äiÔ·{Ç¥i?ÔÁ C‹Oyöá[+)ˆ@¹hÆuB¯ºm]{Ia(¿—PÂ83ur‚:íŠÞÏPw®(Ÿ¹Öo¾¡¶G×`$ p¡…ŽÞ5Ü­(Ë ås»°»@/FFCW4ýD}P&Áx8½Ã7á# ¸kº«ÊÁÇ Z ôK›ðÈ…:¬³¡ °j(q÷#ÊýÊX6ÎÒ1¸vîŸÇ Ñ–È“ðmGÏÁwÕ´\OÚûP³©~H„Þ`KÀ@Îüo- ” Or\Dí+4 ˜cœŠÓÒÏQE[`cuÝ/Ì~ÚO¥}6³DŽ´¯åJzfQ5ô\ñöíÆfŒwPÃt ç~ŒLPKB=îñoçVÄ2ÏfbÁ`´¥L â0K¦ ¸úªÙÔÇÒ3A%žxøH_ó‘ˆéPLÇ!ˆG¡ûÀZIÔ½õ,“˜RQN"®P½ëº± »ò´Ñ¡ ]¡9KÌ9 ”˜‹µ}_=ÔŽMhðF6qrèk;_ð1Á›ïèõìk86`KnþP »ÀÎåŒö eÏí~Û7¦~{XDçùûÂÆŽ½÷³ÿáÓÙ|:W?%ýÁÀö“Sõ±Ô'ûߦ>æc©}Y-Ú¸1°93¢ö#{º©´ …U*€{¸äã}¢…0o¹'ãP(˜ (Á_qÇÍ,Åê?÷.šUøÃD8¬¦0÷+;ú¹„ßBèÞÕÂcé ¼,MãäÓYŒé™ ‚A ë??÷ÄR:)Øõ+) 0ÿEóüÅ'&aÂn:|9¯Dä×C5£î"ù3Ì‘Y,3 O+þœvì¡í„a74{b²‡‰„‚\|P HôúýØû[T;W—£qðÓã¸UÑ+¢Ë~N¢{{÷ûsr~ê0„۟˜•¼ýÙžQ[œLÆÎTîS&Ö5Ä̵°”è’I |£(4î*`Õgî¨Âuí<[ãŽûåÄð•7X1foxäX;ŒkëŸ÷XFÚl|u5LÃ]Òõ¾Úˆ#Z˸ª,ÐÖÚí=ñá •9T]WàΞù•X™çIÃúaf© 'ÐTÄ™²_ßþáþ»?¾ûÓÛû¯/í¨,{½s祤†N!ÄýrÊú?É)cxÃó%œ ¿8, >Ì[ywËË¢œùdl€N™9&PŸ¤ìSŸÝ”mëÝÀLvhG‡ƒZQ³¡O¸þ*ýóÎaV ú#EÂÁdÊÌTÒ w{¬¹­õ}À6W`w  Þ8õ‹éÀ‰UÁ?»dï4ÓtD›Ù‰J !ø'r‰œh„yŠŒìVú#=I\KÊ´™ ã!DÖº-Ê1]<UãáÔýx¨«M5çô+_oMtUà÷œCNåó ,ÈK çjÃçlXŸ ûØ% ŸüÀ]¡ þ>”3¼Ž ùòs ¾™ˆÞrS˜JÉåÈ¥j_ röŒ •ÜcLë\¦×š ¬>Œ~}µA Åš/á UÊ 'Nùl@™ƒETçêø„†¯ü‰ Å…Õ¯®ÛÇqÂÓ‘Þ/¬s[×q #¹¤ó­}yãh×!—14ÊCÄó­¹O'ª¦ˆHN¼Ú®²ŽÅʈä|àž)è`úò¥¸šÅ©L_«tHBŽc‹À‹°£ÏfùÀÇâs+ªéŠl XÿÀˆŠ1ÿƒµçV`gVp s¬KGŸ>;±Q6ç+ úŒ¢b8#«õü–‰Ô*Ƚ`àÆ'æc²>¶WÊpL^¸+Êà¤'äÇ…9¼2Ã@¼Ÿt\Èõ¸œÆ¯Ï'T¨$eŒWRÎJÂ/(,û˜ñ XÒùYeµ§Ø[ó“žÂ£ µ“æáYºM7ÑJf:‰¾Eµ(kézG7­™çóZ Ël~o Ýýl0ü…f°Y‚1×ú¤ÄÜ7Eï–²oK ü‘%‡ó{–Ni7ŸÜB£K<åZ4F;š6!8ö °šyÞùÉÕºÎm(ÎàëÈ4ϦÈgÞ“O—wô‚‚!:ÉÀ dˆÑß¼€T2ϱš|Ì4KéÇÈ[ÈÈ–‰¥Cð¯–Æ±ãy?ñé6냢 ©/ÕŽ¼’ùè,„Ù`Óø2Çâ_æ ¹˜f8Ù;6>ð=ÁåVdÎW )LØ“þ{Ï ßzTÊlœè3÷¯NåùÕé”zlJypžŽH^ÿMU.âPŸ`èÅÌ‚ž2 l86ƒÚs ãO×î<1–RÒè[&~š¤ß]çÜ×õóawÊù}ý»¿|÷.þòÑ7]dýX¹×³~˜Ë^Èúá-ÂÇ$ýh\ÿŸÜwÚ—¹Ã)ï/ôt‚Vùwíóf>-ÌÌïæV‹@4…DÐð¯ÛÃó¤ákÜ_AÄåðP‰xâ‰(ð g+ãó3ÞY@Àò941» ÞïÚ#%Pà&ÞBO䘃)>E6ÿ-Oq€Ó!yÂë$õ Ÿè¯*…;[Á2X È$“À¨á©°=›£+`sÿZ)9mŠ€(•üÛ-èÖUÉ%Wt°änéŽíÏ|¾÷¹”¢)ÝÙ¯@&C%2™ž‹ãº}Nkß»úý ý åêiéûj_ÕEÇgªÛóLêøµð9}w’ŸÊÀǵÐKÖn)=±F“'ÊWˆ¸½dâŸÝéÄSp¼c‹-‚;|œøm\f,Ðfò©ÓK ‹päqV8O˜‹ŸÔ¥àÈêõ¬àPëÒøüs­øä5ý&J ¦’ÐpŠr: £ÜÅõŒ¨á>¥}õwŠ 9™Æ¯&l¥±¯ž`´¼º’±”/dÿ nd“endstream endobj 793 0 obj 3203 endobj 791 0 obj << /Type /Page /Contents 792 0 R /Resources 790 0 R /MediaBox [0 0 595.273 841.887] /Parent 752 0 R /Annots [ 794 0 R 795 0 R 796 0 R 797 0 R ] >> endobj 794 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [206.657 748.292 212.112 757.989] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 795 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [423.502 364.272 428.956 375.181] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 796 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [93.818 283.583 102.784 294.799] /Subtype /Link /A << /S /GoTo /D (Hfootnote.10) >> >> endobj 797 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [104.977 77.771 121.36 88.73] /Subtype /Link /A << /S /GoTo /D (subsection.5.15) >> >> endobj 789 0 obj << /D [791 0 R /XYZ 72 786.278 null] >> endobj 788 0 obj << /D [791 0 R /XYZ 88.587 81.059 null] >> endobj 790 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F39 496 0 R /F28 523 0 R /F30 512 0 R /F29 547 0 R /F40 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 801 0 obj << /Length 802 0 R /Filter /FlateDecode >> stream xÚåZYã¸~ŸÉ_hä%êd¬•xèX`f'éd²Ç›ò l‰n+#K%wóëSÅ*ʲ-÷,ö!Á" Mñ(’u~Uœô&éM.nò"‹E^ÜTÛWé ýûpZ_AÍTZÆZá×'&®”.â²Ì ¡b%óëó¯ÓHÓ8-íõåý«ÏîD~“&q™”7÷k?ç¾þGÔtãíJ ݧ?Ü9kßöÛÝÛq¿7£ù>ÑÉ4øöý7ùáíŸÞ|÷ûoïÞS÷o«ªIéí?ïÿüê÷¯V:Îa—U§° ÝN˲¸qöfýj¥d\è›"NašÄ¹0¼*â<ãþ4‹‹"§á#w’Xeòf%ãD©é~R.ÜïÏöÙ]ªgcÀZ¡xï®pF¨aÝ4oº¦T±™àmÓ¥s¹$´WYœÂúËk†{\‚ŒÌH‹é'g ÷pvÜ»n¸]É$¶vÛ»µÍ0ô·+QFUcF[SçØã¯ˆÆ¥Ž Ä ³Š¨šÑÒ`eœ©Fëè«c+‰†Ñí+ØÍ¯±£€-hŠi[Ü*‡•¼ôu5­¢B70 μJQø¥?ûÃ-l| Ÿ(aªâ$—|Cб?Úñ\ÿ޲9aKšæ caiï–ˆ‹XÙUâ_ÞuµýøÒö(ÅLQ ¬2‹þj«±é» “@Ájµ.§ËƒD±?Ü„ÖW/HYƒÉžMKÐuÝg\§†÷ ­¼B©H!„ÔÑpF»½´V2ÏãRË¡½ë@®¥ÞÖ^E éµªÌ"ƒò|Â?}SÓФ‘0ÜZóUG¥"²¦º…ÙЬ 4ˆæôk&é­IapDÒÏž>u¬÷ç7êa©¢aÓï[ÞøÁ+¤åy=jhXìUzYýüt³ ž|*)邞KÍ@=agby‰{Î&˜Ø4Q‘QÕöƒ ¹Ñ6ÎxFÉ”mf’í`ÛuN,•j"Ét$‹ïõ¹®¬d!c•à{d, ~üWâÆ[¼è×ÍÃ1^2TÕÞ¡Õª4J¨¿áñàÚ=1Ýoxƒ§[ ΠÝógÊ«ººÁ1,mUï]Ó=.á°Ž€S‹`³LåÞ¾„2I¬ Z•Jذ«í¿ORÕZš;qÚþn<Ï~4Û†.’©"z³ö.§mȧñ œšyƒ § ‡a‚¼ëåukÜäùÀ^wfÜøp ífM–^7¿°Îv¸ñHf¾vý–Æ&‡QÛµÙ·#­ïยóØ;¥TôµÆ×'>B͹‚KÉ¥)rKuÌj£2—Z“FŽˆX Å¢òv•¦BEƒ@éÚ¦î่Þ?Ý‚ÿ ا؛åÚ‚çw€#š,í /²I¬!¬áNc nqÁ%Xqž5ßïv^»{7Ø(¢ýɹ ؃&ÙŽgyFgÃ%ýºf烑b‡£)"¡ãaÔmø,Ž ÙNpc˱”í•Aû“ÃAÐdV°ø²”ʇ(ƒç=ð`í¼>wôÙó/É L}`:‘á10üfÜšÝé.Eôh;ë«Á1µN(XAÿ³kF’[–ƒ:B3^¶ùq?:÷¥n;Ó="‹Šœ[Ä5h<¶‡Ýæ7ËÃ5MGmA®Î|nêqã¹YƒÁ,¨üI‹=À£fk» ÎðWÅÆ`Gš1‘g0PéE3΄ ÍfG–ó¼±å £‚þhµ2 X¡íMmëÏÏc2î a)É>™B¤™œEÞŸõ«ó t¬´þtN‰ÓÔ<¬g Äg¦¾`àÓ<ÄÇÏAXÀœ°Â'àîÉF!Ëh¼§IHP[› ùöôjà1¯ªÐÍ/l^Þ0 *]w·…Š˜ñM·îib îD˜ r–Þ ù¨33$Bº@×I¹ªýÓ-ÃG]’XaG´ˆU÷îwû–—zQëâD1ÛõUèÊA½Á§×´î¹ÑýëüdK4®„.ާÚB„°ð‡t—{¦^êícó4qêLk'xxÌõH 'ÖÚëø4Š<¹ðTÆYª~Z"ÌUE…ÌMG=Í É¨EËs Å.-à³ä½Om•^DØ@ÌdŽó4ÎuÈ1K9$´TH!¿X"!ãlÊRÍ…<ÿnŠæyÎþµ°Œbè~@ ¥Oןì™aVò88B·Ä)âB/\Zùtªw“=ô]=œru˜©ÔñiJêóÂËïÑ™úpBß°>Ÿ€)Yx‡³ÀiÄ6“÷Ú/â$ 5¯’Ã6öGG‡[ž«‘ ѧEà´dÄn…œÏœV¡#„Õ¤ßP¬õÁB`’0»¹!œÁDêIp¥ >ªdœ=> ú*†›ì£ Ç¸~ïýs)BÚ ­sÿQŠ#ØGð,Øž0'¯^N^ºÂ|Pösú¹##<ã'!ÞYp¸î£ ¯MÁûü||Ô) > §E¬T: §äˆ­êB¿¤ÒÈÖKµ†„_O9ëa9§-³—<x°Þ|±lB„c :yß4¦éèæIœJù¢gÓ²˜YÃõ—m¹p´uœç IJ݆ Ñå©ã뤜¨¯Ò'ð‡Úæ±ÛÚùlÜ@”[ÅdiØÂC㔺ï¸ç¨÷hk”6ÌŒM”âHïtðëÄòâ…ð¿™jJ§v'õ„DÉîfu£OÚÚÑÀ„ˆušù­Þàý㘠È2у9Ä(¨‘B:xs÷ 5(áÄlUdâðyZþþ0óL¿±kÂH ’© —üü2óÑH6Öíœ%¦ùsÑ/eÜÆ ;S-A§}׌ÃÕRÞ·=h‚¥2nÌxæÿlô¡ÀQD]Ïj8¨óuúJBû0õûu>CÊQeJ6ðkçpï­:z7r̸¼ÍÆ ”›úÀ*ô¬{ˆ?È^¨Ï'y,Ó`ú×ÒtQÄ™ °3nÄåú@[RBÑîTk!XâI—9 f† ߬n†jï¯ALÀPªÓÀÙøŒWEÛžrbÒ0 "ìÌ«ïyÈãðÚ*Md\¤?©€¡çœ*ØV‘—?¥„©Hýï”fÊ'™œºS: W î‹3Æaò'Š+N4c¿‘¡kö[ 2®ö‘Io<ÅàfS|^ n–ú™;ÍñÕÉ¿LõŽlF_VIȡ ×YÒ(v¬£o×Õ³ÉgÑwý–¤Ï¹Ò…½NÀ­:ê¥P\+f/Çve)—νeàŽÇá8 ÄÙr?•Ñ\c‚¨?@ÞÀ5yC}³Ç1_Í_Óú2Á®Ê“J+Œ ²™\þ°B…>¬-&dS‰ãâ?ZxÒY%V¸ñ¹¤ø³i÷ø †Tp¡ú©˜aBûcsôo¼‚kŠƒÇ)šk´.L 8D:ôÝÀ” ü}!?0¥ˆ³$Ñ0ž矚Ú2uC?¡žÏPßÂEœâ«ñI&è¨Üj?îÚ¦jÆP½…”‰®ËàLŠ‹ÐÂ3¦²m9{(ÐÅ©dÉq·à7 ô›Ÿ×낼a([·š»ÅÀ  õeiz~]x?þ‹ÄEådŠ©Y ù'ë»ëèÏfõE8 .¡ÈIˆê'ÿv!âøendstream endobj 802 0 obj 3305 endobj 800 0 obj << /Type /Page /Contents 801 0 R /Resources 799 0 R /MediaBox [0 0 595.273 841.887] /Parent 806 0 R /Annots [ 803 0 R 804 0 R 805 0 R ] >> endobj 803 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [430.559 694.403 449.953 705.312] /Subtype /Link /A << /S /GoTo /D (subsection.5.18) >> >> endobj 804 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [156.414 245.282 184.293 254.979] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.16.3) >> >> endobj 805 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [263.683 218.184 291.562 227.881] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.16.3) >> >> endobj 798 0 obj << /D [800 0 R /XYZ 72 786.278 null] >> endobj 157 0 obj << /D [800 0 R /XYZ 72 559.575 null] >> endobj 799 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F37 380 0 R /F26 391 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 814 0 obj << /Length 815 0 R /Filter /FlateDecode >> stream xÚíÛrÛÆõÝ_Á·€3&ì—¾¥ŽÕªNœŒ­¤M§‘KcPЊúõ=·’’Vv_<š1÷röì¹_ŽüÅ‹T-Ò, Uš-Ö‡ñ‚ÿ>,üè ¬1¤±:´gO®ŒÍÂé ¥ð÷]¹w<,;þ½q•kŠýþ^ęġ‰Ó‘875 tbbTu‡ŠbÁ¸Üºª•!* z[/·÷¼RnDÍåºØóÒ-!—4Ùò™?:¾Ãe¿±kœãá¦l»²Z Qhs""'®‰ÔºÛÍð¹=‚ÀXÞZÅA±^»[4uæ)®B¿äÒC2øÐI.¿D±YÓI Ï˜(¸¼Ûz¿¯QRw„UXtŒt ×€QiÐ.⃠PŽ#’Û97­g5 Ò¸š-N% ¸Î"q¼Z’v¥ã8¼ñ È!~wt5‚S ÇU¦ Gla8º-šâà:×´ø\+çêqA€„3H‘ÏPö'éï.ûûÖ ƒeKÔyå«ò nkBeÔéLß°-@˜I³ld iªÞ¡+èÛèô½ß£üp|Wr59m™Àcmžü¾–)ÕaO}Ñò•R´Ã —Ãͱž¨ÝÕÇ=’% w#°x=<åöغ0 ñ"·jÄ0±²2©ºI'•É„Å܆Ê4 Yà§ lr?)N‘qÄt ®­Múxw§ÂÔèù+FÙæ¡;À0¢Ô#Ô‡+–‚Ag Á}`g™Á&`ØéTû¢ëÐë”͇FÓ»Û{ê^ Ò[Ë%À¾<}àâ°Âù¶FƒF ¸.–4@Ò VÛš1lJº¹hîy^¨±o}ë(zÈôZ }ÓÔs(ˆÀøŽZ4£2%vÐñ<é£“ë§ æÇªn!轄ÛLùò:47YÌá $°©ý.=Td¾xÎ(.XÒÕK| ±ÜÅÃ:U«¼nÛòšÊvÀFr€-æ·¨nÜgI?µ&9‡ËlRñüC&5Ãå¡Ül|Ç@M# ‹Z°_y{1äõ±“»N{Ì5Lµ¹í5îPs¾â€ºü·Àlœ˜}å(Y/º"”•b¥’c¨Çra¥òPÅš¨·P‡-¡öôU}8±".+4ÿr”ŠbR¨ô–9&Â%ÝòÇp¼ÚøÖ$½sg¸lÍ%ÝìHÆíñºuk¹ÈX`§]7åuÿƒkm}@fM2J͆dX"E*ä,A‡äÍÞÊ&[î 0tý4жº?Âå3Žu5|Mh«‚´°nãà›‹ïyƒ¥¾²†TåŸ_4\ÜqÂÁcC.à X]WRîƒi4T(#'&¬·8ï~£ÇƒµLÉê`BÄ9#—â羸€!e2ÁšÍfWô}»˜+ã§ ÚaéÁÞÈxüË„„®<à›´úäÔ’®˜ø¯Z^¬ŠƒlËKÞ¾®n8äYÕ£?´Ú³‹››4s÷èUçÄ˽CïwE3¬ ¶>7õ6;ºP“ŠŠ6¤ÉÃ$6Ïcú“ä{NAø¥j¼ó”¾à2RX(èÕ¨GßpX y>ü4&•ø»ûæšÆ¥0àL@¾J]`qÄ0™7B^´u5£Yyü¥øœ*ΆÉWZÈ,‘Èzܰ2JÙ0—bwÜÜw;èÎa8è%€«ªžÿFÖí)no›ú¶)‹ÎQb.Ë-S‚å@·ó^Îèõø ÎM-ß>¤öjj˜DÿÞ¹3CÁ—Cfåô,ÇI&{ñ£7QùgœÎ'­OC7œÕîß]‘tMU!uª…Ð4 ó8Š}¥âPÇOÚ™1Ó{”V¡Rø?…‘Ìendstream endobj 815 0 obj 2620 endobj 813 0 obj << /Type /Page /Contents 814 0 R /Resources 812 0 R /MediaBox [0 0 595.273 841.887] /Parent 806 0 R /Annots [ 816 0 R ] >> endobj 816 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [179.666 149.485 199.06 159.182] /Subtype /Link /A << /S /GoTo /D (subsection.5.19) >> >> endobj 811 0 obj << /D [813 0 R /XYZ 72 786.278 null] >> endobj 161 0 obj << /D [813 0 R /XYZ 72 332.868 null] >> endobj 807 0 obj << /D [813 0 R /XYZ 72 266.745 null] >> endobj 808 0 obj << /D [813 0 R /XYZ 72 246.35 null] >> endobj 809 0 obj << /D [813 0 R /XYZ 72 194.615 null] >> endobj 810 0 obj << /D [813 0 R /XYZ 72 145.002 null] >> endobj 812 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F39 496 0 R /F37 380 0 R >> /ProcSet [ /PDF /Text ] >> endobj 820 0 obj << /Length 821 0 R /Filter /FlateDecode >> stream xÚíZ_s㸠ßOá·Ê5—â‘zÌÎ6ô®;}Hçz77ŠM¯Õ“¥œ$ß%÷é ¤$Ûr’vÛí\&¢HàNºàð—.ŒX›1aìb½“.èï§E}sD©´dZáÛ3„«H¹’šÙL#ýûÛ7ï®E¶H9Ëy¾¸ÝzÚÛÍ?Í`.]®ÒT§ÉM½mÚ}Ñ—M½\I«’mÛìit½Ì³¦¥Lz$[}(×HW´ËnÿòæO·£š)­«Ô0#óËâ^V!MYj©J¢›Ñ×»¢]®´ÐÉoÓÿìúë¦î?{÷=לʺ§.Ý|€…4J R`»!…§ [2™ÛEëÛ7+%™Õ‹œéT.¤e©3Ëð½4q!͘µ†ÖGsp¦2 ÇÁ2m¤œÑè…{wêÉše¹Pa‹:œ°€#ÓðÝ@7è)“Ò QLšÍȹ’LÂx•1p=£ÀÇÈl±@‘ÚA#Y£·»²·ÉE²=ÔëàN9OZ×ÚÚ/¥I¿s4èú¶¬?Ѹ¹{éäŸnÝ“’G–Oó”å™§Ì=shš3YðáqG yÒ—èțёÁÓó¤ÙÑ(ßý´Nܺüž§Êmp?8%×슞“ÓV/|'UÒ´ø”IAÿö[¿¦$bÈÊ-=i_xn–¸ÁrG\ëÆOˆ¤jŠÛ0/ 4GãLd¹õl OönßxÝ`¼õ2eyØÄD“€R~z0Œý†@Ñõk—uü<®N œÙ¤¨#£]s¨6‘õ<„H~˜¾£S lZvF—;<TAÇãÑ º–·ð,¹BÞà60ßùóÂuSwî烫×î-îÈÇO'Jk1* +^-x6uõ8²é‹Á¸qpžŠ^W9= íí…êpRDbUåwÍ uÁÄ}¹w욈?‚ÿ"šªêM?hÌýЦ¯húЦÿy4-öeõøÙxšCynŸÀSóžZf²—À©d\©¯NÕKáÔ¼N¹šº—8åÑŸ€fpg?§xó4Zƒ½gŽ-ãLŸ*Wãž—• Ô)µTs¨pŒ2ýúU¿âéW‡§A‘ÿ+@ýΕŸvýgƒiþ ¦Ÿ¦ÏÔ¦7pèÊÚ<ñÅû¾[Z• ‚âœÿ4I1¯¬ ð‡ SÔ£µ ôY@4ÁæaGü¬ G “¸…[„°G~­»o]V;bSÌÄÁ/HàÚ;@„fi’uUtÇ×uìŽÁ¬‡bx†X±G Û!Ü=Iá?ÊnMâ…8ì][BÔÑ×?Šp=>@i‰J+%7aÇuÑù­òaï"¬¸¶ô<ÏJ*ÍY–ÆdãAþÜóDÆ´4V 2ˆàÇ%y„¦‹0  Ë„þr0°…´âœ`à¦/ªr}UªÜ+üo±€rºÔÓiã—%8pQB>¡BA ¦ô¤qv¤urp5ÒMƒKS®î÷ ’sb+ð.è ˆW î‚1¤Lò±BÁÅÍ‹þ„ýÞ5"È9xI€&®F^›¾UÑ{ua²oÂs¨º*ägJã6¨fÕPAuXä6¹;ôD@UPx-˜¹Ú#€õèsîîê&wú>­Ê»ï’jÃ|â^s§­xƸ•ÃI€éqZÄÑ7O¸ƒ9e `$suù7ŒËÜйÁçÉUJèsd«Á™Àç&oûóÎ#½ÜQÉŒ/¡mOÐ^BýóHµÚ`4*òP;ú*.L¼ä«cÊði¨É²ÁšÚÎ[Sñ”ñ¼Ÿ°¦"E5é„dø%hrB»%¤ƒŽ*ö1åˆ*¢H~smsŽûJ‚RÀ gFe_ùL¸ß]—nó·²_ï>»C)ÿÍ¥zi‡Òþ^ŸPýè–.3^©a‰?u„ùC¸Av÷Åš r¸V´mèšÛ´¾$¬hŠJ¤!—l£+ßJ1Pž([„`™²_Îyß¿o¦Þ‹î‰s¯½õ¯£·žµ ¸6ƒb;h(m4‡zzB6ô „Ó¢öx™òñ«I€·rãB•Ú5³¯øg:¤a“¥“ŸÌå8;0Q1âywì¦ñØÛ8SÃD5|î <ì9ÍT6 ‹=ŠîPáJ`´¥IH„4±F>pa/Ö½kQ³¥gA´c÷ÈÙº@…Ù+Ü¿ª‚+ø²!º_Ë~G„ LÙFY¶®ÅF ­·¯hn ¢y]Ü©ÐÆ"UÈà䋳F3:3ËC ‚Az…šbÓf(nñŒ³”ÁêEq< ƒG¨–uÙwÕÌ™ïƒ-ÅP˜´ÝŒ+ˆL3Ž·/3790ZýÑq† Ä7äÐ>\â+ŠñÖl¼­ªltí }3–-:9Ä¡=¹Gn\·9úz#ÜŠaá-MÀÞñ£¾$ÞU¸?õ[âvð1Ì,jtòè÷PáŽ~o0|7ÔW€ ¹‡fÐsñÙG¾W×¥A9ýdW„~E†ß⬷±‰­Å6ò8á>ɇ—:Ž÷-œV®½o´ðóN‰…¢N X+tf `Þ0p@‘L#GƒceŒ¥ÖÌŒÿ䯀5Åv?çAˆfErÌ»£„l385»ßÏq{7Ã„ÒøÀãîx1Z!öVáð¨“D½ß“úa3¼1Ïýו€˜‘˜¶žÎ7JŸn! |B_¾ý R*Eendstream endobj 821 0 obj 2074 endobj 819 0 obj << /Type /Page /Contents 820 0 R /Resources 818 0 R /MediaBox [0 0 595.273 841.887] /Parent 806 0 R /Annots [ 822 0 R ] >> endobj 822 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [478.083 291.566 497.477 302.475] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 817 0 obj << /D [819 0 R /XYZ 72 786.278 null] >> endobj 165 0 obj << /D [819 0 R /XYZ 72 761.372 null] >> endobj 818 0 obj << /Font << /F26 391 0 R /F27 394 0 R /F33 497 0 R /F15 393 0 R >> /ProcSet [ /PDF /Text ] >> endobj 826 0 obj << /Length 827 0 R /Filter /FlateDecode >> stream xÚíZ_“Û¶÷§Ð[x‹&€ Û'»íeÜL:y¸¶M§Ã£ Ç©’”OJ¿|v± þ‘xg×ÓÌ$sÅîØßîbubÁŸX™xeÒ$ŒMº*ö/ÄŠþÞ¯|ï#J¥e¨~}„pí)×R‡i¢‘þí݋׷B¯DfQ¶ºÛ:Ú»Í?‚¢©»²ëm}› ¿Y«8 ¶MK®Ù[ìÅ0YÐwáÍ?ïþüú66^BŠP)É{Q•÷D5“(eÇš‰ZÛÛº#1ýÎIAYƒè}Þ— m­Dt}ÓÚŸ¼ ö:­¿„ª<‹¾³Õö|¨8èʺàñw¨Ñj-&I <£Ìé’wÝ÷)¥†åØÊ ì¨Ýƒ|ì©«ƒÂÙ¾ávg©ãTJƒþ+^¾ÉûÜØ‹?ݤC¥5\ #“<}O_±¡Hc2wµ³ëðW»­šÕ±îÄ¿¾¶ý_ëm«²¶ß5]‰‡ü}¤#"(k¦¼mêþÝaBxµA]ü×Éf²C™¥«Ö®¶/ÖJ†©^e¡r%ÓPÙõ4¬—Fñ„HÂ454?ÚmªDÂÕ„‰N‡­I¹°µÛûJÃ,V<ó{¸`g§…é†}ÂuHiðvŒHô\ËPB„B¨…}ú}#“Õ: ‘>¾»šFc>ÖÙ½ÙüpÖ…4G4~¸Yƒ)òU"E4[¢ä%€`$J[”„’ž ‡¾rVá¡ü€£¶¦Ï’yâý*DéÚÁ)šáhSºäíù&ÕAx³62†:fÁ‡yuäOÜ·’‘ƒ~ß»ÍX,Imp„ÿŒñŸp—·Ý!/˜Ù±.Ñ3@ú–Æz/xÜìTnÝôÄ@²±tZÑ@t½=ºÔFÊÁµ gÈkûäzââz¯ÛˆšÂ¯¼§Kš8àD’Àí=§®¼¯˜È¹hrP].zÉá¨,4êÿâpÀ΋÷µíºÿÚãÄ¿yœ/àqdM<ŽL'?(žeèGÊÊÝ 9Î"O f_Ö¸: ÚcÅSd¥Žá u@£cÖÒhDM¹½?¥Ž((Ã(b÷Ÿä#¿òóa<'ˆtù–ñS‚Ò'Âé%BcضõCS”SÛ2æ-v.êÏÀýˆnª9Vì/œ¿ñX7ëÊÓN>p9ïÜòãÓi˜Cf¾Š ð­„Ì—„â¿Ù¶ûœdá…®üTèš_6tõO]‹qB@(Åhá. Ê÷­Cö·m³§^OôQp‡¦x>xÃC‚‰|á Ï£q‘ƒ­zˆ«8uØ[HÏÔÜÙÖÎdŠQ%“1/uq®È1¦_˜Àª‚}^ç>úÝ;L\¦Ù£ëhQÊÿ<^ÒŸ/iú²°¿Áå—¹T¯,¸ïÍRf#{½'½sÖ6 ‡5“,¾µ2øº:vÝSÔv‚u~1ø"øýðø÷rÓïžDà+ú‹=±„Ë4|•ãs¨LµøTÆ¡ú×’:\‰á—½Å#Þuó¢hÚ3d‡ †õ~õ›ÛoifV2á(&Ï5"£öòñ‰áñ˜¨„Îe, ÏÉtYåL&¼9=ÎrD/=tË*‡ÄîÕ,%ôd£§@!pâžÞD’ã‰d.ÝT"Â<g.OPÈÆ):$$Ý7Çš3Süö,vM[þÀþ,¯h‘튜kû±è¸å¼|à[Û͵à ÛÕvœbÀ¹Û•[~Î'üðOý;Ý­K£ù¡žÂÖÝÎqÂvì‘ ~ÄÓZ3®-Žmk‡­Âm…ßXp¹ )b.êŒ0å'¸*`¨’ºZ*æsm$_ìÓSøª£AÊóáØŠ‡Ô¿AÆ'ÔI™àMÕ5X{H¢‘¿t¬4-ï6So˜µÛ¾÷ùJꀷaáº8+ÁýjO’§¦óK>E…`Ø{VºSxQ+¿ÚüB%de¼øƒÂ‚ð ­!\ €BE+Î|M°ƒlK.ŒlhŒÔ™†a2[ \dPʹPÆÉ÷+ßûæw¤C}ÅS†™zºÌþ4/ô!‰Þ{R—ׇ”@tM½ß^ˆY£Ÿ‰É ÉK|‘Ok,£G æÁ$LæXõÓ3ÃßDAw¨Éæ¾PŠ„|!:-_v” />‚ÑœéË91h÷hrc¾#;0ú")4zšYv”Ž@—9&è"5×ñÓ½¤y~Á€• £4ý<«"Í]¥³0ÞÕÌžw9— šºâçÆ¡<Ùj=ì>UÁ“ã†LÜ™9™†‹кs€|¦­éɆ”×…Y$¢ZDâßÌê%†ÂNÿûh;ô^xU&©i— qV€Ý .ó:9·RøWؒ˾p ®4ËP³ý¡;C÷+]Šzú"¾ž^~Òp2]寢M¦ÇÚš§À»Üž¹B¢)£ÀNå’ÖGª;òÝ.Uáñê Æ^ ãY·ô=Éó1vA¤©m Ó&÷Q–Ê20•Ó‚CÛ<´ù~Oþ'ø±ÒgüHåÚ¥}|E?Dä,azª¬ÔÖ¤I.°æ¶0û’¦ ª°Â²PžÄ_âªŠŠø\‰qU™cÑÏìgŦ_—‚GÖbþòžØõˆæwO•`ÒbÃgÕ@‰ÁGBs>ØÝR”å­^›Æ({2ìgyè¶«êô{8º¯_òPóh9z;ƒs½Óú0ü¬* /_/•“G¶çOb{^f;=OþLËäcÿ„Ç"”mŸ“*¹”˘ÿMæ ?+éßïendstream endobj 827 0 obj 2516 endobj 825 0 obj << /Type /Page /Contents 826 0 R /Resources 824 0 R /MediaBox [0 0 595.273 841.887] /Parent 806 0 R /Annots [ 828 0 R ] >> endobj 828 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [251.484 314.898 265.424 324.898] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 823 0 obj << /D [825 0 R /XYZ 72 786.278 null] >> endobj 169 0 obj << /D [825 0 R /XYZ 72 444.487 null] >> endobj 824 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F26 391 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 832 0 obj << /Length 833 0 R /Filter /FlateDecode >> stream xÚíZÝoä¶¿üû9¸Õ‰_¢Ô<å’¸pƒkž>4EAïr½Âi¥>bûÚþïጴҮì; @ ?,E‡3üÍC‹UbeåÊfi,m¶Ú^‰ý}X ¥Ÿ Ž$µQ±Ñøõ ÁµVi¬ÒÕZ™8K Š¿½}õæZÚ•Hâ<ÉW·» z»ý{TTÝÕÚHõÍã·Wk™BñÍ7\u<ú†ŠMq¿gÁÇõ±n‹®¨+úþæÍÕ?nÿêÖ'˜Ÿ«}ú<µOËj×ÂÆ"3åÿ!‰·ok˜2½¹f¶´µ±Î‚ì ¨SIm\ë±”GÝÞsÕ•´ÑÞ5nÓá|Tb£¢%™ªî¨ÂW›¦ŸE[¿¥^uC¿UMß]¿£Š­ëÜ\‹»‚Ž¿^™4rEéîJÿê…Œu¸ ŠkzäÁâá«sEUT÷¤¬®Ê'*}ôMÍša„Ë=o|×7•߯¡M¤qŽN0¸Å•Ë,Fî«mFf:TÙq2(„«™…I5‡-ÚrõŽ~]…¿&ò¯Ú`6¬†åšÈ•=´wíiHØN_‘Rw<–©ÔQW“L7ÌoÇûÀ#òH¿ô¾EÿˆÖþ¾¨6ØÙâ†CWßð”l%±ZóðÈ<‰ÚÒÑa †çhéÓ5žëû÷_Zµà¸èÊàÐ eytðŽl…ÂÝÞu4‰ºIèô‰híQMÝûü¥íØ fÄ`¬Ñ~:;·ŸI¢‡¢,©Ä‹§¾'/YkaÀ'‚AjøÝ%aÅ#‚‡~é‹•h˜uq`uþñHÚÁh穾eƒ@‘Ì ½f®ýzjFÃì`ÊJáÚº²¨ð ª4: Þ¾í¨i\RáÄ´ÅÖ7´p½÷Þ“s(l‹vÓ·äAuEZGËÐQƒG'ïàL_ýx;"¬|IÓ ¦–RR#Äb=¶~X ¥Ÿvϰ‰`×ÄBœky¬rý<¾?¯ æ(†¹7¼^%ØÖé®ßR&‹¥V3çªw(¬`ÏŠ6>ŸÖZ¥*NsX­ÒqbÓçÃÏó!IqIKûŒXt+þùGß½ï0Íߊm·FM£Ìu]u7?¼¦ x‡6ôzM¨Dl¥YŽL¥¯¸wY£`©=º¯w»×gƒ}ð žò°Ï¼=kª-„§&ãè Kf«Æ¯v¯ Ç nb-åJe±j©4¦s 8T–Y8ô$Ö© ¸`r5n¢R ›x½³8—úä+ɰŽ3`%ý&>ÅkÃsáJ¬H&ºV±‚ò:¯Ö +"óXb,b’ä¿¡#!3¸ô$¬ý½;’ý¿#}Ž#‹R‚„°ã:ÁXO˼¢ãÈfC¼J±ë« BcKD¤ñÇ„+”èH‚9 xF}8–þ0o¬gB€º“0l7A•EÛ…½°hÔ¢¡ÚË“V' šUl\Ird,9lú¬c¨}¢ÒÞaÇ“õTô°'Ú*áQ–ãXdjh\ 6ÀÏË…LŒ¯” ç¦õþ<̦Yp\<¢©Î¾„Q˜ B¡€Fæ_J(.‰@–¾zHK£;ø~÷ãí_o¾óçë¿LQü‡ ß´7Õ®þR·¬¢~|@ýÏÀ¸ù\Ï^†q¼ÈëDEßàý˜>Ú¢ëŸ-Èó‹­NÄébd °S€3”fˆÃ""nh£ŸûòéÈ-á&¨ pjüö4¨íöH©Qãô:Š6ØSa^à8ÝRŽ•ˆu ïÿ ’Å~؆ð…ÒAd«ÙÙ*ýŒµx`NVžm°À)IÁ=öÅGÝÓht[ä‰:úÕo ÚÓ'E­’iúbèÁ! ®:ÖIzvòà¶rpã•þlEp뀛Ç$\.!Mãü(·U)m=D<]…¼ ì_Q-!bi%wìDYÜÅûýp0ñl“˜kÿpŒp¤!¯u›—yÏ#)ø.vOG¿õ;†¦`…·úAú锩püoúqÙº»;ή-eö‚–ª? ζ/K}ƒ2Çš¥ÖÓy™i6obá’z–Ô#Z+8ÝÁáú@98/ˆÐpn±ÐÕô{Ê$Áø_G©=I|$I.ƒ‚UÔWE×Rí¿é‡¸–ÆA·fkJ®¨XEŸ»¦>&/73‰K'`2χAàu¹QpSÉÁ'g!’!IJÀöu¨5#ÅKÒ€‰  "llõ0"zÄ€260Ào½ Š‰¾Èw¦S°ÁOÚ é94ÃaþŽØçiÆÜt:æ4‰Žót~SkëCÈ™À–ïwÜŒÄ׳)__Ú÷…tÜàûK`‘Ç67S¤fÛ÷„Eðœ½vÌf5Ô1©ŽhW†Lµ[.vŒ²ÑÍŽÉÀÐ:cÍK.”Å6Ü(Ï’A¤™ülÛâ+ߌ G ^L)% øk³é¡N^/í£"0xÊË;ˆ1‡óɆLU¸æ@‰òëe¿h¹5„(ð,“Jx´4.P·t:®¤¤ þP–³.8™ÛPm¸Sp¶Mª`£Ð|?¸¦ ¯OÔ.v˜{,>ú¥ ²@¬„þŒ&ž; A6¤P–9$IÁÞ†0˜dü–dq&†K)øµ6 0ÄùãÌ=ÝŠT.#ÿè7==é¨\‡ô"•&Û‚ŸC5žä² 6ÎÜuþHõwÙSíCÐ+(öTØ×Mñ‘ì!• u¾Ý¸#ÝBO·÷0*OkvØà˜±_Õ±_§–#_^¡áý™‡Û%ÎIâ,œléº1_ÔÔÔÂêrX§k:ª#µ5Ç,j¦ágò´ïX9ÐW˜æ b/ÞxÒuµE#d4üM–T–Ãc`B/œ$º $œÕ?#D­ü>T 3Ý|K_¢´9œ]!£MFêXðÈHœÉµ†¤TVþ±ãeÏn­´€‘Þ·ú6€5 O»¯û’Ù%=B审5x;”(þuç|ÈÆõ-+<É P·‡h\¼Õõ]$§ÿt•éèåç=%R„§CKE äº«:Æ ‡Ây|çO€(ÂüαPíä ?‡€'$ vöIèÓ˜[8ŠMqd@ ý ˜=]š™ÿ{p·!‡ûŒåsçz$êÇcÉ ±÷˜å†hCžòûVYâõ ®.´wPÔ„ä ‡Ä× `LT:jKÏP#4..G¦6ÎÆ;ŸÒÚ–AXÃÞMˆ¨:Ê||FeøMd¬ó9ɯïÀ?©'‡Ê•KƒOí‹û=5ú¯ê&äÔ´ŽÞöìÃg#XvéÛ–¸?¨©ÓSäàÏS?RòÜ&Ž={¡ž^ Ýƒí¤‘Ÿúç ìD…8ôb¶@Ûó!¤’±”æùlØä§fgendstream endobj 833 0 obj 2678 endobj 831 0 obj << /Type /Page /Contents 832 0 R /Resources 830 0 R /MediaBox [0 0 595.273 841.887] /Parent 806 0 R /Annots [ 834 0 R 835 0 R ] >> endobj 834 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [410.849 631.362 430.243 642.271] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 835 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [140.909 460.239 154.848 471.148] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 829 0 obj << /D [831 0 R /XYZ 72 786.278 null] >> endobj 830 0 obj << /Font << /F27 394 0 R /F15 393 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 839 0 obj << /Length 840 0 R /Filter /FlateDecode >> stream xÚåÙŽÜÆñ]_1hfµ¤Ø+ à YC– ȾY†AÍôîâc^mòó®êªæ1ÃÙ•ó—`±êê®û‰Ub•ÈU’Æ¡LÒÕöðB¬èïóÊ>ÀAj£B£qö ` MfY j•\†¿ŒCˆP¤’îúËí‹772Y‰(Ì¢lu{ç`nw?®‹ªÛFšõ­øù;Û}°MUT÷#Ñò°SWÝû¿^Ód»Ï›q$W% ›Ÿn¿ñ·Û ¸?ÈB÷àm¡ÊÒUcWw/­ÂÔ¬ÒP˜ÂZØÒ0‰y]Äaš&´=ò- u¬V #­Ê•Z üßöæF˜É0]jÞGxNPk œà2•H ©Kï„w)q(àü9™žÀ“(¾‘tÌÞêé¸Ýí&P&]ßõÕ¶+ê gñº±]ßTn+Yw{K0ù¡î«L×Íë;øŒk$|Z¸«›“£íq жø mw´ºÝÈd âηåǼhˆk3•Sq2ôìuг %ÙD(¯v ˆ¤u:A#Ðçbà …€FÜ@Kª_æ¶Þý2Ëà&üu_:[µŽ‰¸¼Ï[|"Ú-¯ŸóWÏ‹ã­xfã UªµÖk‹—¶TYhâáY m\ŽÏ+?úð„P’Sœ"­Ò—=Íel¨Ï`Ð*ŠG2Xk2OHÍ\›i ^0»ò¾«yWló²|$îKti þ)÷·uÓXPàŸÖjÝ·‘Ö’®Æµ‰@pzzV7á&H ªÏ@¿n@áó²ç)©>a$C\îjú¢,“5Ã$ Ûᑸè¾^¹Ûc¾ubMßßWE×’v™g*>Ó-¥ÔºªéûíÍßq€èAS=ÎV•plSJ¯s| S”ù§ÒÒA²EÅ\¡•Áˆ•£ÁmÿÒÛ‘^Ór[ŽÀ}·ÑtÑÈ¡˜pëñ¶ùè ¦ô2Æã±,,#(˜¶ù‹²áELPUóBYç;¼î«H’“íÁuÌ!m¤Ó8ÜÕÑÛi#€ _ú¢±­‡Ê;‚ê<♪âz)FUT'ÀNR¸‚Ö]ZçÍkøýmÝ8åQ:%iÀ7/ûu-^[g ¸ ¶Óì,*°N³õ{†<Ðq Ú¾±4zØ[xUC"GÛºÚ¬?:!vkt7}å^¯ éS÷½%Þž«4áÝ~ÄZ +ž8&ýE*²˜ôÜ¡HÍ"Q´ÞÕdpmõª#È´«ºùLûyÙíëþ~O4 ÷„$À“w9èö’Ììåz"~(á¡€KF³üjê ÈÍÛº O*ˆR1p•€Z@v!þ79Ù?{Û<þPÜ·¿;%s–A"”fS+á®®Ú~»µ-èn{†äêª,îsp¶]Ê㤠c“>‘È †Üær&ý¹lšLý_%sjfBàVG· C°Æ Â2 aw¥ÜRWŸÀxi2ºYr ôàÉ aŽ£Ä^#Œ,w¨cAn&A7ã¬Ì2Ä }<àœl¯.[‚yØ[´Lôq4ÁÖ‚ˆÖõä\MFq Foæ¯qþ#_ ,j àWK .xÂ÷‚‚ý•œ ¹oêþØ^p‚:2ó§c°€¤ ùt4\pÑ€sš¶pyu,‹áΛMªÜÀ~ÉQŒðF-õú£Pú®xI[#oì±!îhõ¡èö4¢È£uD8Ð-¿t׉õûʃ3²ÈôÇû'‘›à;Ƹ­Ö˜·YνU6µ© 0ÍX]Ál ¦Ià‹#Y0C Ñ2M' ý4“™0ÀàŽs@‹9å$MZ€Ùs!\¨atfÛ)½Ôßl}#uÖM¤1õF‡îªòm"쳞v!Ïú«\ bÞ¶Û£gEÔ¿Šjkýk‡Æ’3-ÎÜZk±Ÿ§ á¤Ñ”Ó§/FõS uY±EÇ~M»{îäI9MM}ßäN4à,ußœõ«L¨ öY Ÿù¯ºU„á™fÕ¤e„¦Ì$ì½]Ð…¡wUý  \,Ažô³Þ½º{5€A¼Œ2{sE@ßYF<6Ô+›h7. îz¤ìhp Øýú‚2Âè&éÍÂ+ï&)ñئ‹®Ï!ý#°ÈK,æD¥3¢ŽÍÀ/gŽô@NH©áuçpU4sÆ´Oã":îNºï¢·<ú“£ÖÏ^¿~‹ïÿÙ´]™ÿ¶ã‡ˆ^ºÂb|)3ô;fÅëM l]Ù/KPô ‚?Ïè¶±P½¤~§ŽÂè¬Û)–šÂ¨«??-mÁ°3Èæ,°ë0ƺªBìâ‰Ô]±åžÿô õØF˜¦2ÔCpÖMЖ€‡0ˆÓIÚ‰{Nš3ŒœÅ$“DoÞO ø9–æì‡GÔ:(𕉟û ’…]Чۗ:=ÿmS†RšË?DþËTs2endstream endobj 840 0 obj 2736 endobj 838 0 obj << /Type /Page /Contents 839 0 R /Resources 837 0 R /MediaBox [0 0 595.273 841.887] /Parent 806 0 R /Annots [ 841 0 R ] >> endobj 841 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [311.56 694.403 330.954 705.312] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 836 0 obj << /D [838 0 R /XYZ 72 786.278 null] >> endobj 837 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F39 496 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 845 0 obj << /Length 846 0 R /Filter /FlateDecode >> stream xÚíZmoÜÆîgÿŠë§R®á¾ï¢È·S7F€¶ê§$(hjå#|Gª$ϲÒþøÎììòåŽ'¹Ah!H\îûÎÎ<óÌPlSÀÛ¾1VçÜØMuxÆ6ôó~“Jß@õ”JäJâÛ·©çV¨Üj…ý{ýì‹WLmX‘»Âm®oCßë›ï²~h;sµBgeç±` ²êŠÊusõÃõ¿xÅÍl´¹–6NqÍþö§£ïÞÔïúï UÀ/£1‹m‘³4$¿Â]f×»+n³cÿ‚–vþvr(¯¸ÉâKÓTx{µ…Ú¸ÇÛÎûnbágiqÊøÇw§ÓÆê¬mö¸ÅÍ–‘[n¡€Bsaw®ôÝ×aV‘›+ÞÓ+LG…ÆbU}ð+Rb¼ÈEÁÿM1Á~˜‰cêYUî÷þ&kèY÷-/dΘƒ‚…* S9tW[ÆË~·+»²|·ýª©Z˜e7uó Vdö{¸ê6Üñ³¯®'%R¹Tj³Õpip‚‹*wY ƒë椮Aý¢IêWÁæ®¶Š«ì9Èçk?àn¿-%D u3PáUÛ ¯ÿ‚^¦XbI˜xػŶ6çÑj`¹pvÓùÍí³­ «Ë ¡7ÂæŒ‹•æ­¿,60[k¨}2³"—Z€Üs&&#b唯Öî9w\Æö¥:,¦1*7öO)dÊe˜^ÙçVäÊ[ Ú!WΙÎóªcöq°¸Þ¡B¢åÞ›*è ¼Yç‡cׄ&Nö}¸F*µ·‹&žUhÞI/©ªnnüG´h|y‹öû°bR¢(rÅÙL{ÖlHÀ¥;•UÕv¤ña-íiÚ˱ë|ƒ  `pyáä|0èM‡¹ˆ1à'¢™,²—h¬¼Èú2 ”JB¬$!Òñ„!Ðã೨|¿ó]¬Ûû¡¬Óü ²u±9 'Ķa—ZÇÛÂó‹ƒõx, ƒv倥¸6Ž=Þ –ú]{ÜßP9 1W.pGàÞ°Ã]X[|ú &ØÌëÛ“unÛ(ýð†{ÆIÇuömyão^ $eöí_ß¼¡vê7­™_‚0ér#õÂF|"CE%yúüé(öü"Œ9@`÷¡e?d67úSpLä…”Ÿ7Ž©ÿ,ŽÙbŽcÆf©–° U{¸ÛûƒA íI§s+_Î zoÁÕ¾Žã'°4.NbPËqä=®ãûГ$Rs@ÐØÿ܈Oà­æ¾vT";ƒBOé«úû‚IŸì9 4¶ƒ¡Î@SBF—ló¹²3¤.e4Ër6 Áò¼Ñ"ÎÕ‰°96£‰ 1æ'Yœ7€€[ZÐ ¶ A $ ·í1ÐEÎÂ`Ú.]A¨8…}èDÚ›`Mp9 ŠÔó_·ŒF¥S|>`÷ü íêÊ÷ÿÇ»ÏïPÑ&¼›ÔJ¢±†'4¾éc³  3ÓNIHg—H'à2gH'… H‡Ýiz$§œŒ z'Ó©ÊÞ‡.zâ> ´W»»£€¶”kø`‡+aèØÀ“Q;5j5l\'N¨å©ÝcÛÜî±Kˆ%±Ðù¿²Ñ(·V Ø h¬iôh×ø&Áã3q¤w~œ½+‰‡þ÷»¶ ' ÷sr:¹('£*Rª2@\"[âÂEÀý`»4’.â\¨tÔhû”Ty®t ^g÷'O»©›ªóeO;€wàç*¸õkÚ)ËÐIuè ±Gãßméü N@À@á.PßQ ¬Gg´ÚZÔèD‡¡f&\êç/[‰ ㈦¥L+`É.2Ða’ôº¯ƒâBé¶Ý£;'Œg‚~¯›4µO3†ƒÁŒ`r?¬:u°èã+ Ã9µ à8Í{,*²S§Õ¹Ïl%ã£M¹´0t!B3Äê¨ .)̵poÐ%ÈÌ!»A¥©ªã]b§Ašps-°èæ“¶_ÑÎòB¥máÏ,_¬h 7Ϲv !]ôB²+LhX7áw¼28K²U,—é9Sx%)›¬¯Œ÷•¡¦QÒv’ô¤¾0†+MµÉT5™*4½M6óQqƒóCœ5^GÁ zïqƒ…HüP,¦ÀŠD? 6‡ ëüœÂ†ýšÇr@½X¢^¿Xu}Ò&Èdëeàf¸ÆÄ_œTàÝ’6Xƒ“k­æy¯"±%˜~bK…M–Œ«Nî „˜õŠîp ´Bš…XC,¹¢™p%m庆9I¨ ï:ÀŠó©ªäx¦¨l ³YSe½¨pÙµw] H´¸²*°_iPÂk>NæRª§á˜ÛddEÊž‹9U9Òa!(Er÷âÌ bŸ ^Ä]GTÖ"wF<–F%sr”ÕcjsÊÁ³·Ç ã&&;‚AKM†Š$T1 õ\±9¸L.ùŠ-'žÀ­D/…üy’¡‘^¿ÜïSBô2·^#Ñg?f?…ŸÂ¢Y®•ùß`Ñ”ßgéûª«‰ ½…g}–A7:wšn_±òý&•¾yd8Òé\`T<ìÅO?—'{A[ŽQ§MäÚ.]nOuÄ÷¡ š°ÕQ~j&ƒÊ‰J",%Ï^R·ëð)çnÞ™QËat¯P·¤¬Üީޭ+rë–n¿=ûºAæÅûæJÇžÝÛzèJ$€\±,œâxÀmÄ-wÔ/«páQ˜iÔŽ(̎ߊB)xñ0 ­•€^&¸ô7ÿ ™‡œ7}ãŠ[«€Ÿôо–Š­Ãû¡l|{ìG/ ŒÌþœÙ/X¤>OƒŒüÖ'fÛ×7>Ñß‘WÝÃÝà#‡¥‹i»èFM$:Ó}vƒ0 KL7ªÈùi·÷!ßMßÌ:¿Äý@®ÒËþjÈA%•ÀQíäšè ÚcBþ]M÷F¯Ë;¤q%5Íô*o|˜Î÷ùš[£E8˜“/¶[_õ­Ö$šž—øÒ^£ªfÎVý_e67£ §ÈÙZP•á¾Ûõôž¨uáÐð€½ëÊÃÁÇh¾=5±BÕû&æɃ3ž ææqÕ=EBÀ¬Î¤‹”3¬…$ÑÀ@ ¢E 9¡}&ÿ‚E½ 2ˆ+~[MIxñã× ‚vû$“ß Å”BÄ•®Ófæ ¶‘2†\¨‹_Sðhô8ý€³ŒE‘z‡œ0t ñ<>gá;wëi ƒßÐÝÜõ¯pQö]Rœh©5ád¸)й!àZuÜBÌ=@Ãr\lmi0e<øJJìck„ˆéŒù™~ÕSBR°O€D ÆRœàÐòìÅÜ$f”¬Y990g‘nú׈È*£lašfYŠÅ¬ ‚õØ´P²#Õ£ØvŒÙL$„žÂÎ<öH±ß\Õ1$ŒnD¥…ŽJÝ/œ#,¡Ø§v+§‘œÓç–«×0Ç‚­Œ'½ê˜p]ŨÃ!âé˜n‚+uBœÆ£Ø•+ ‚(¢|ØÔ2‘}+Ð53Ùˆ:C ³ÇÈáœb žx¼{?ÎME¾îø\üòéBú«ºcµæ—JLŽˆÙLjP~ ßÙyÞñåg^ ùjqŽÅc1‹ïþc‰Ùz _l๋ ^‚ÙÁóدåØþ¿ç?ÍOH8¡œ@îó°t‡€ˆV/Ýš¤D}ŒÎÈ;îëj…+ņ`Íu_\¸!c9K„ÁÅyTå4&:”Í‹Âü> endobj 847 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [148.96 335.304 162.899 345.001] /Subtype /Link /A << /S /GoTo /D (subsection.5.7) >> >> endobj 842 0 obj << /D [844 0 R /XYZ 72 786.278 null] >> endobj 173 0 obj << /D [844 0 R /XYZ 72 719.174 null] >> endobj 843 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F26 391 0 R /F33 497 0 R /F39 496 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 852 0 obj << /Length 853 0 R /Filter /FlateDecode >> stream xÚíZÝܶï³ÿŠE€º$ˈ_ú@Ñ×íµ§F6OqPÈ×+X+]%­¯W ÿ{g8¤–ÚÕÞÙFr΃qÀ‰£ÑÌpæÇrù*†?¾JÅ*Í&ÒlUîŸñý½[ùÖK#J¥%Ó {®•L˜LVk©Y–h$ÿËæÙw×"]ñ˜åq¾Úl-é¦ú9ºíëvܾŽuüÕ‹]Ñ#ôß^­µÐÑ+zþÙu‡×\ªö«o©[»çíØÿ\ÿ øŸ®~Ù|l×Í-ûú›ohxÍ9SZÍ&ÿ‡3ß]sÈdZk!˜æ‰%ÛìÌÕZJí;ëï±-£m×Sc;;#‘Êèöj-Ò¨«Û+‘E£éâP´6Ä‘°¼:P¼(ª-öÆsE¦î­zðƒÅX—n¬%ágF]ó„åhù@É ÿ×ßÍø¼iм¯àíµ¨½‚•[†NATâ€B$"ªG|ÆQoöEݺÁ÷W:‰Š¦®hî@j× uIÙ„GÛC[Žu×Ò°U FË¢iLE퉴5ÿÝP½7V’Ì®„[L’3Tô0\’8‰†]wha¬£¶©±í¡éqg¿ cӂưV=Õ[¢²‚@¿ê`)³È ào’ 7~DEƒ‰ÉègOןxÝ¢I1žçÎæ¯~úᇅ…¢J;`c?R·U]£tôÆ‘™bêÄ8G×UàmÎŸŠ¦7Eåú•ؘ–ˆÐ\C†Ïþ¶9†6„EbŒ –óËHp Àx&E.À…7¹ï«î%DÇEÝ[ïuài®»v¼ù«wi”w­Y |×)<„C.ø&“y¶êÍjû 0Šez•CË•„raÞ—©Ÿ€ØÊ²”æP3•H°Kt:©$å‚J× Ëš±\øh›‡åŒØLs}¤›ô”ŠI z‚ºVçr®%“Ð^'ŒÃûçzz=€OŠË*€‚g“3Y½>JæA8+™ Œ‡¾µS6löøßyXO/w["x‡S°¸CqàW™š•ysÕ"8`×bnÀ$€‹<i¸®Œ|Í¿õ‡îO¥¸ÊüòX'ZX#´1,±‡DbJǰ"|´]qdEB•Ó@e©óhÍCà‹Å,ô錀¨Š–ž¦ï;÷bgÙ”å¡7aq#9×H¨"ßC „ðh»Tëí5¿«›†¾ãÄ¥O¨YØ•Ñs?k¡°ê±~o—†OÖ—s ;‰LŒnÉmÙ*·eò(&¼™à6Ç£0Qví KšNÁV£ýV´dCj»]è`挓ÌüÝ;ãÊJ¡̨+2Í£çÕ¾nkØs T „Âog*ºiÁåö…õñS$ÔN B@hÊ'ÄAtÓßwuõøžø~©Ü_c|‹Ð"]&¡¸ ¡ó ¹Ë ±± …\BjaÑ à˽X™²)¬ßc¯nOØ؇ÄÅX¼)Cÿc¥„Œ6 l–’d—¥¼µ@êýûPoHö,xÚÑmßí©EiNFßœ:MݺaThFç5£ÞQVÏ£±^žFÿèî±ÓÄô˜wÁLíxÍ‘3HíÌ5¼%êî |ÑÔ¹¶³D'ŽJÈFH\Ä¥s`͸?âê‹îö#ñT:ÍX¬×cNA„_Þ—²8·Þ‡£8÷nå[/ðH1}μ\]®Ò.s³Š¬%XÒî;ð´6‡§³9(45tg¦¶#'Ö-ªÊÚ¿#fäИ܀¶ ŽPâ²Vm*¶6sV9øp { þ e9¿dÔuf‘žÏ'Ø ã”'¤½J|²Q±R¥šÏÆgu`o˜‚µÆ‚2¡–º.&;R¿(Ë‹*¨0 Pr!(Û@Â…Í—&ŽÙëbv0†4è¼h v› NžåA¹¸'™®ºàóâuÜ…“Sý ÷ÖXÚ°Œ”!Âa’3ʨ¶2¥ÍòJëç… WPÅà¶€<}šúÅΔ﮻þ¼õËýyöhô+>ù°‡nÅÑ®¯ìnM Lð¤£cïhèngÀSû¥T;ÎÁ;| =ò¦~³T;'žˆÒG,ÃÛ–N7#}nʰ;ê-uO•ÁJžÀSq&ôüàgVÝïŠ[ ›ðÅ'ÒS 1_MÔKø­î‹n¡2ïœXuh¤»z0ìRšl£0{Ú(œŽ¾œ|þó{¦ä"Ñío]i»¸<ÇbË–sôœö H0»¢r{ÀXŒÇÕ&›RÉÂm¶ÚwXè—µÏóÔ…ƒ¸$a O?ò<Àò»qóL‡1¼3ßW1¦µp¥¾?Õâ(ò¹T ‡Üðq¡2_DE|À–?¡À½·†v—&Ø ˆÐª¦Â, k>ÐöBßqä¨8Fé)#„´<®ë–Š%YÖ°¯ÓK®`·Ês&r=³ÐTÃ;dÙ.¸7Q'@”žC”?+¼³#y™©/ ¼EÂ)éÀò!¼Û3~bLÙÐIJ³”¼87^”p3›\ò]F¤òD Z{)æÛÍxÆó õ&Iå®è {¿¦ÔÍy]7/$~u„V_úZäa®$¦ b NAç8:vf9@£âžîµpüüˆy_,Nd Yüd§†düÒMK϶£o”Pi"ÅþØfQº@³¦é¹÷¦…|<<'1Ý”Ps¨ÛÒº*7>Þ¼wð‹tþ" ;ÿå‡ÇcuFç×ÏÉß" Õ!Ï®mœt!ä@÷p‹Ï,øÐÒ©ˆ»oÃÉÂ÷øº ØqGÑ.IÊ¡?üXŒ»'OõÔ‡Iöûõ¡@’~PªyDPté°®NAî.¡&œ +MNªŸ!£Æúµ–x*ÙL°œnaÍ©e=Uëàµc=B!jŸ#2øÍ/‰èDëcA)?Bì@Ø™Èb-6ARå¡XN„ƒþ€æØ}º ꀰmhá(Ù'å„FRœ&@ð0¬;Iî-zêLæùõ?ÿøó™™ô‰KMâ îcpªXþ…Nè–Áïs<þ—9þÀ€Ãh‘£¯WÐÈ=XÐΩDx-‚‰ú)2-Ý]\€)®YJÙ{ÈëÐ,ЇÁª•?€…‰€ØÊ)F`ð"S.逅=éà[šL_w3tÙ½T„)(lõ#?ŽI™ˆEXÿäj:þ¶"HªÐC•Óé;çc4` ÄŒµP \?ö 8!8“¸ë>쮀§÷ XÊ }ù¢áÿc4…õendstream endobj 853 0 obj 2504 endobj 851 0 obj << /Type /Page /Contents 852 0 R /Resources 850 0 R /MediaBox [0 0 595.273 841.887] /Parent 848 0 R /Annots [ 854 0 R 855 0 R ] >> endobj 854 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [264.26 476.597 283.654 487.506] /Subtype /Link /A << /S /GoTo /D (subsection.5.15) >> >> endobj 855 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [188.524 463.048 210.948 473.957] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.3.3) >> >> endobj 849 0 obj << /D [851 0 R /XYZ 72 786.278 null] >> endobj 177 0 obj << /D [851 0 R /XYZ 72 563.243 null] >> endobj 850 0 obj << /Font << /F27 394 0 R /F15 393 0 R /F33 497 0 R /F26 391 0 R >> /ProcSet [ /PDF /Text ] >> endobj 859 0 obj << /Length 860 0 R /Filter /FlateDecode >> stream xÚåZKo䯾oþÄ —P†f¿Øäq“xƒm°u‹ƒ€"{$ÂrLrV«ÅþøTuUó1âhm :L³_¬ª®þê«¢Ä.?±³rg³4–6Û•Ç7bG?ïBë裙ڨØh|úÂÄ}˜¹W&ÎRƒóÿt÷æ«wÂìDçI¾»;ø¹wÕߣñÑõîf¯”ŽÜÇzl›¨íðWEoß}Gƒ?%B7<ñÐõ4 ‹CO{#óhäjÜ•Ú÷7{i#WçÁÏMÖ*ª[ØèXŒ5,†=ÝÀÔb …®u}1ºŠiŽž_ ™ç›Üý Ù Ô8÷ („Ly¢4ÑX}ËÎ]^ÜÌ‹ OókaYÓ•«ni×f\(KI :õ,Ý0Ôí­{,ªÕB×ÒæU=÷ãÁ iÝÖc]4õ'2ÅK•Pƒøf¯µ‰ÞÝd:šÍß l²Ü€K¿z'íâ˜E¢ã41|Øw⟮ïálýÄ•?è<ÖFó¼šÏ íF:™Á± IJ±Šä3~ö{Ô.—ä3¹ð²€u’±Åa¬wã¹o½æ0ãäÍÒÕä4ÞU`αÀƒx¦¶>¨èл°Œ\rï´ùÑ»ž×yÑáwÁš%Oì¨o|¤QÎm‰ÆJ¥q®Ò•Í cOç f(š¡£^²·lž©õáÆ¤0¡®hêùÄgÔ­®ŠŠZ÷q¤VY4 ;÷!L û®|óõÝ|» œ“ÙímgÚ\Ç‚ëø D,2I8âqaå0ÊÇŽÅ€›þ¼æ¯nü¶¾_¹vü)1 |èê žDD³°×ÞÂd¼‚÷Ä*Ïv½ÛÞ쵊3³Ëc#ÔNeÞ^Ãze5ÀÉd™¥ñà’X§è‚qj²I ¥6Ôx·áêYœËàé¨MÐáb °“fž7é©t¬”Å“°"Ýs¯bí} ¡7ô zÀ>½N a_‡é;ò p±àø¤ù^ù!Ã>sj8(p5¶¿_0f·´èŒ9ÂíûWg/óXÂ=B¥ 8ÐÍ^€ŸEw7x}ÑËØj%AŒÅ’û`ŠRÆ‚È#“Øäíw7ÙËÝRK»¥Œ£ä§I¯4ýF0ÐcͿ՚°¾(Ë¡½-`Â=®z¦öÑ-¯ /,»¶RЂ,þÔ kèöˆ¤°ÁFä¼]ƒq Ý×®Árx×ä—:× ¿4@‚únœÖäû9¿œk{h„ÎGz_ˆ–¢ôøë炇µû y«¢÷q.y!¹Êr’ü#E°'àXÔ*80žè”@%¨g5©DA׸# népp‡ž‡`þC×vG‡"9‚·Ò:0ИæÌ4-UÄiÒ+©^ØŸŠö¡A*c”%ÚFk×zÓkØ£dœXó[°ç–œß3<~ p0ô3øvÈ4#%Mt-ß»|$ă4À¸÷ظMÙìo bÁ@‡ }Òsú¥µ¦ÃܺvbA®xsÄ”—Àû¥ËðŒ¯,>AŒõ‚Èhé:[oiÕ$’­Ó%ÆJaÚæ>:eÆÌÄhàÍ$iÉ1(]£Æ5]#͵ãT*–&gI‡ó‰©c¾«%zà(7/^ Å蒱㠂I-xhº{Â"œé/+ôôìü¢ª ð\+Lôöà9+nZœNÍ3B; »<õá\¢O=â» î?——[‚Ñ>$¸O™S¿™"6h³¢÷ç>Pß"S }wä×<º–Zÿ>Õa£^ý’Þµ¤¿ @¹¯‚R€Š gÓ`Vl­t eVEßu½ëP~f·Ä@ ¼áÚÚy¾÷¹Ô 'y`ÂÁÁ§´YEc˜ýº‚VòLOl|£Æ g L™>µÈ)*3,€Ù0‚²>5<‹r†dÔ3ŠMC鑸4Vzáòp¼îé±½ÐÜ‘7¬KŽÐ $`Öè®ø\5M"J…Ï|ðêSba±‘<ûϽ ñF‹Å$ÊáéRÌaÿý}SÿrvÔ5±hMÁ„òbZ÷C‡Â{™<‚—-(Œ[E •&ÞÃ!˜2³«‰h…Ô¶FzÚ ¡“4Ôý"ŠJAç cLh/¡4˜Lû=ö©)Ó„f=ÒR?eŠœ°® ñEù:»¾þÄ=x”Ÿ¯&™Çâg/-]ê‘ãå]À¾' õ=³×·ÌDç#œØ«&!«·Ì·,B­ i6“S=sÛ+Y'•/üÇÒκ)¹„¤ók¯È»n™sNãØýþ/·ôPuç{¼®Ø&õ·òÒ,~=+M”y5+ÍŒø5Y©Œ…2ÿÛY©ùµYiözVêýЮüÐrhÀJydÆnf—ùO¶rS»¨ýÀ'L)\9†Ðª¡þÄ­Êq :ükptÞ!¦ ¥Ïñ¢ ˆßE Šš¯y9®¸äåJ¬’{Ç…Ôû)„]Ö‚lþ…:’±L´6*:ÐJCÍ3œ‘sÞËlœØl]?~?®ÍVu­[‰Lß‹¸,`ÓXâÙÅÑ^’p=æU0™&x‰ˆ3)ÿ;,üG4Ìo%áÞšÛ\äùXxúÂÂÿ}߆øËú”¥‡`D‚'Ký°K(b›°6܉Ñ5Í@[³sš¨¤qá“ ¦ ÛìÃM/*Š”Aóú—ÒHlN7ùã†8pqT8}ÙyGeÑ-¿JnMôPâêß»øÒÌdß,@®f’Ο³CI‚ ÒÙôm¿:—#õ„ºôJ «€½ÈWlšƒÍy˜ãmš]±ˆÿÉÃù> endobj 861 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [128.757 245.064 148.151 255.973] /Subtype /Link /A << /S /GoTo /D (subsection.5.10) >> >> endobj 856 0 obj << /D [858 0 R /XYZ 72 786.278 null] >> endobj 181 0 obj << /D [858 0 R /XYZ 72 612.857 null] >> endobj 185 0 obj << /D [858 0 R /XYZ 72 508.853 null] >> endobj 857 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F37 380 0 R /F39 496 0 R /F26 391 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 865 0 obj << /Length 866 0 R /Filter /FlateDecode >> stream xÚåZ[ä8~Ÿ‘à/”æeÓh’‰í\‘x˜…˜`[€Ä¢UºâêŠ&•Ij»gµ?žss®ÕÝ µ4åØÇöññ¹|çxÔ.„?µKõ.Í’@§Ùnz¥vü÷içZ¿‡>¦ŒbÄ~½@è;JßÄA–ÄHÿåí«wT¼Sa‡ùîö@´·åß½÷M;mwã›4÷ªæFgÞ`»sg‡b¨Úû3¯êá7 ½áX Üz@B‹måõ@jyóÛ¯ß}0ál•§A&²SÏ .² ÏeøW°X{CÑ|Æá•ÕŒLb„úõ•ÅÒ Tn5XC½…så=Àñì•õ"Rž=³žR7œD`ç¨kÿSÓbó¡áþj(êjïÍ}-”í‡ëà 6ùÎWx?9-ËËãZ–}@´* r“,(¿¾ô({zE/¿w7>L¡Ý¿'nðÄ*ö€!Ø,÷úêë—ö d¹g›Òò<»,†‚ÉNÅN½ÏÜk¦t³Jyö±ê‡Å¬¢)y3=ÄxîÆO¸ÔÈéb±º-J[7~dbïcäQ$ù‘c:ñ¾èI8±²ŒèLär^ºÆ–x\££P9³°m²Õ?0_§B¶åÌ?û¡í˜“¾]X(ô+r§ƒqäÑB*ÓýƒŒ§+#AwÜ”ÓÍÉ\è6uõ"}uøÌ"3šXš+à 73|ò¶nÉpý(HÐøÛ6Ò1i—(5rdlŠOt™D{GPÖZÈí‡3Gnðž°Ã)°lqjݦeõ³ý¥Æ]nÍ—Õ£q_áß>ht%šŸ™¶! ÐÞ_ /0¢ájP´g¼S^‡Ú=/ànÛû¶ÙƒÓm G ÃÕp*Î=*rˆ– ¢æª9´ÝI´÷ã_X<O'¼Ãl ÈÄÉ{b"¦‹ÀÎÆîmßÝç›L{t"å}ùY¸^ØîTðÀõ 6œ-Nj-ÌLc_È.U9ånãVŽU¼¶@ZŠ4¿¼ Ó‚Ûã°V·—¦dåŒXÑÅá)ÕÎ3ïuÝ¢m< FLÈ4,­Í/OYCá÷ŸÛK²˜Ëž0¡Ð5àDIµÓgwŒV) ¡ê‘}'´\õ†÷b½’‰uì徟Äí2eqæÃÔ¸ÞRm7œG[F 3š9Ï„Óÿôf^‚K‡t¦#ë1”V{[Ü :ÞmKId­:Îå*Û¾Buáü4tWßC0Ž'þ$Õq&ù7·%¿æc! ‰\”ÊÇœ«{Š™”"ÜWGžƒu¯d:б-J¥ ãÊ¥ƒª«»kU!%‰þð.KïJÞ, Uê¥;Ã*Q¤"W2QÆ“Ú%wÛGŠˆÌ);G›Vf*à@Auh\z2nh=HÅF‰uÑü¥öDJ/kîÈjÀ‘µ\&L²„îí 7àÊp¹”’òhö-J;øYœÅ’ ŠyL7g€_mÃþÔìÀ¿O„vܲçºÚWœäçX!#'ï6àŸM©7ñ=™¾æ¡÷ÓB=U³Ì ý߆*ÚWLi­\Á$†ç*mè¬(êpRìB 4N-•saløD2³eÑŠ»èD0ÁmW[ΆkY»+š~VŠÂjAa°gš¢uë°¬DØÅPÊã¦ûOFêqa*â@br{tåbç3Jª²ûšŠ™â£öœÑ9å9:\”›¼Åh‚í¾6êéÔâ™dF*Ó³|cá\¾Q5p±Ž½[õÝ­ㇶè©„FFìþø›·ýßßþùãßøû £®zÄ×wŸs? TžË+0ìØuvwx™@Å»<AäÈ´¹2ì§ø/÷ÃõdYÊÃÓ«TD¶ù:wþ|îöáúK‘ަÇÐaµÈ3VñìÈÓD1pL8­J®ðéÈ`< ÌßÓÖIQõ4P¨ìù4‘Í ±ÎZõ÷vrå<ÅÊ9Ú1?„‹Çƒ…J(È%³ÄåŠ|×¢D¬ë™¼ Ù®´ý¾«$l•ÌžD1E”b'€@bC0m´‚Íà—úŸ´Ìì%äBê¿ðØõ…XæF>àéäh<¾6Éù „ôjîó¦)O Rç ·iö¢ £Ù«£d•/&Œ7OKQH! ‹wIp? Õì1NtD"‚à0ðÀq84 (ph(ðsº.HKQÆè±£"b-µ,ê­Ü~T²>šõLÙ^\Ÿ¼¿­„så5îšë™Œpùp wŸ…Î g¯l]W•ð Ÿ}äXßžªè“6fåiükp²ÐÉA.>Ó~Ü#Ò#‘bâknˆ¨Ç¢3½ *XE‹ÓÔû5«¬Ëke†j5Y†páJ±2Â8W ¾ûŽ7¼ ¹ ´Í‰­»fý ³Q:­ùUF^X4ºI„³è}ð H†Ý¼¸GÃtþ¦‹æ)—A¡G‚%tÀÄ+Ú£3às1þõ1A˜åS9Œßßð6£ñù#—Ûi`¡ð͈]äÛTÉŸ”±´Í[®’ÊëNäºRu)ì¦$:åímTfv~Ö¦à”ŸjCõ¦HK5RKÀê2bèb+?‹ÉÊ MZ9Æb8¹ª=˜c+áõ«Ž›—¾¸Çí(%3eZ9¾üÔ}{­F;÷6ì?.A˜C£éùѺüÑÁÑ ¿!µ]e{Î"]}iÄt`™Ëãõ/½k,‡ <µ\l”,Ë${Ër,¿tüÝòÒzûK×ÿ§é抣¥ò¦]½Ž’—ÈÑÚ1K3”ï1ȶünåŒÁ2JúŠdØ“ËÙ¾Štῆ<Ëör‡O &kv9OÏkÐ2…ý,´ŒUô,´4©ù)ØRIœþ`K´ûíK Îa×ÿ+™Ær8rúü±^ï !ãÑú™W”AøQendstream endobj 866 0 obj 3259 endobj 864 0 obj << /Type /Page /Contents 865 0 R /Resources 863 0 R /MediaBox [0 0 595.273 841.887] /Parent 848 0 R >> endobj 862 0 obj << /D [864 0 R /XYZ 72 786.278 null] >> endobj 863 0 obj << /Font << /F15 393 0 R /F30 512 0 R /F39 496 0 R /F33 497 0 R /F27 394 0 R >> /ProcSet [ /PDF /Text ] >> endobj 879 0 obj << /Length 880 0 R /Filter /FlateDecode >> stream xÚÍYëãHÿ¾üOαéu¿ÜmN|Ø·0Ü– X„<Žgb6±ƒíÜL„øß¯ª«ÛÄ™™Ý;ÄiFJ?«««ëñ«2_ÄðÇF,ŒM˜0v‘ï_ñý}\„Ö70F+•–L+ì=³p¥´eiš@C1%Íõõ×ipθtÖWëWoÞ ³à1Kãt±¾skÖ›¿G›úx»+–+-t´æÿü}Ñýy—U݇XÇ4XV5ÞÕUwó;˜àˬÿøêëõ«•fˆ® ü98ÉÔ.šbq÷j¥$³z‘2ÍåBZÆ…œ™†ýÒ(?Áf­¡ùA1S‰\¬8K´íï#åÌ}Þ!soÞq=šQ åçñbág$@`öõëú{JÅ$¼^—'3|®$“Ð^%Œs5sÏp c$¼©€Üô÷˜ðîÑݱ©–+)EÔm lÈ(?6MQ-…:(»¢j˺¢nVm¨ÑÂŽ–}¿ÔI”íŽEË– QðÒâݱÊ;Üï¯Ú‹\3¥áiDÌ´°ÿ;õ•[÷výþæoc\7YÕÞÕÍþ'WCõŒÊ—ª¡ùy«¡~©Ú§Õð½Sõ†“bc¢‡n&£%º §ô0rñŒ±hux|X´¯ÛŽ†î‹ NÏi¸®ü¼sB®±ÛÕK‘FžBÖÜ–pBs"ÂÓÃÐ3%FEoÝcÄ“W8gKHî ÈO<º«1LÇÁxýµ0,5N-˜`,ÕDyŽ„`Dµ} ¯‘$Ñé‚ìÑÖ^’›Hÿ‚ÜÈìyOJ1¡äˆÒz†RÊ@GF„ðÕ„tF…?÷å÷¨ä…Œ@öhGy/3qMf)gR÷2›ÞvÂ:t)?í5PÁaÇÚó‹—9ãN÷°qW;²`èô8ÔmâØ•U‘5Ô.þ}$íúÍ̽W=)øs¡@iì*£¸B]}c Àd5¬úíÌyÇžyO`ûƒ€™Ä¸àΗp>C‚xÀaÑãl I@¶tίç¡Ö‹/aäD^Ô¤,V\@W´´ÃÌD¦p‚Lÿ?2?™Š—ÊôŒ‘•€Ô I'Zû‡¢)^c¸QCòá÷2Þ*cÜHŒ%|;ÿƒh½ì9Xo h<7øHïÔœ{:6‡„eùR~Ž* hžPò¬ò®$B9Œõœ¥\þ(íù,¦Ä¥<Á#*»š% -úåìë'Ò‰C h0xP™Æ3ÜÌ6ÔëjúÍÜ,pâ>{c`ÀúGîš%€Ž3Àã‰*MU$¬)CDÀÎutSÍ@7!]:ëÏá;ÀT—ä$hJ¨‘"ÿÞç§Þ绫¹Ø€¢»Ý¦øsU•$Y/Û ¸9)bO¡^{Ì~n=;G]9œò‚bÉl²ø”›ôs²%¢ðL²ÔŦ¸£<ˆ0ô ZúÅVZMÁì(ÕÏ] @½ùÂÕ ;í¡®6-  áo¶è_¼™9nBõô TÅ‹©>ž>Wñb^?ª˜R]¥K°ú¿}þê“’/¯ qòª¸åë,d%"õð%õ)6šÜc7dꈖR@6ÊJòÎ(Ç,.¼w€2ê“™Ô%åkEã©ý¢ŠèÕäè$úÐ;ãgbk3I™"ù”]ÍÉ4D ÊkJ3C’D„›þé/ß~;ç¸ðDÊÉû–.쫦ߋ|† ŸÏ¸ð÷6xìd‡Ã®,6èÉ Ÿºñ䨖ròûfhn]~ËeH(‹ŠÖ¶áJtNÅ.­B–ˆó mÇ]‡O|©«÷»ÓÖÄËI I%!ü†º]çÐQSP•XüäÇ Þû2.HáRsÊ-n;¶À‹Ž‰ ¶¡ot¶ÞãVƒá$kÝ L êÔÑ-ÛÖÇ݆ø i´[¹)Û Œl3s%w†„ÍU]­z9:ï T耬ÉrPRdO8¦Üv'Ú•áO:£Ï8ê¢,¢°Gˆ5NÔ Õ\“ëØì__Â…[¯åá¹Æ”Ó?ÃȆGF:)§¹€áv&óv^úç @­l¹ê (™HŠêsq‚Á /kÒ1êœDÛ–·å®ì¼ŽâZ´]ü-JXì÷»lß 3BÇ/º‚!4rxìaØ¡/Ã`¬ú0ˆ=Ò4òŠ—Ù–û¶Ø!;†Gîù— È.‡ ´PüvB‡©‘·CÙÃ…æÜ„qxùiP!¬C]=DÑÚ xtF YúÙ”¿(F5V9cå.ÜÂU?²Þz]ôOÎ@ÅTÉ!!*¹«Æªè]yµ°3TÁ5áÅO1ùPˆ pg?.Bë›'Šwüœ¤vQëÙ¯Î5#02K<”Z¯ãU¨Hg`±^Çb޶# ½õ uî±”hè—êþWÌ+š’̤|"ê¯ 3îç6”íˆ0OÆçCï5]™wX$Àþˆè=僓Ãqðkù±ÅÛòÔsÊM„JÛ`= ;YsܺÃMp/yFªîv‚7¿f-²‚jåõ~ïøé…£ý’iôžÌ\윂}uÊ®}ÁI ÌÂÖ1³èlmLUL˜Ê³`˜¥_(Tu7cˆJ§ùOl>C‚üšD t hˆ_Ê€OŽ3r¢€ßÁicp¦±QTH}TípÚ‰¿;ðsô’œÃ %8ïá¹DøNRnæ2˜ /+>21¡ÒvÀ Í]ZïÜ‘»éëQ2%%Ç!†ò¸q¨JÓT°c|¦ãb_E­«Æâ\(£áèÍ „TŸK_³½8Œ®š–bÁ­ÛÅ~CU<3´AÜeµ =— ÀÙWÝl0«Ô×öTŸ#ý„$öˆ(9ì²¼ØÐh¸¶{By]AŒ+ªÐ`ȸÇk\´|À³êÑY¹û@faôÆoÈæÔÝ#ÏÏÀ§-ÕÛ/Žf~öÌ2•ð1çœÌ±zÞË&”èqãn(ú¢·aÛS±ˆ;{ã*(Áƒ+TÛ©’¯X¸«­3z¢ß4¿xíŸ`¼fаÛ_Ö’²a«_ .½t¥ Gcb8ðd&MÆÀVٸ穌ïì¯yÉ<~“’#e–îšzïG{øŒdµ¯¯áÌ% ÅÑ€W‘ eÒ³"ãN†Î¨\ï×ÌäV±e²ÿœq×Åô»á´z¢˜Lä^!·.ÎB=‹<ÚR1…:ûÛóQ‚%®VwíãKKA{›á®1œõÞÉ9 ©FþIz/ìâ»óTCqÒµýNŒÞWñð_—Žù“ú  ”+ú@“uD¡& Î}Gh¨1qWê>≺Oï>=s«!8¤Ï+!8“øíöih¥åùIB &„¾Ý~E7Ÿkendstream endobj 880 0 obj 2721 endobj 878 0 obj << /Type /Page /Contents 879 0 R /Resources 877 0 R /MediaBox [0 0 595.273 841.887] /Parent 848 0 R /Annots [ 883 0 R ] >> endobj 883 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [223.636 234.809 229.09 244.506] /Subtype /Link /A << /S /GoTo /D (figure.1) >> >> endobj 876 0 obj << /D [878 0 R /XYZ 72 786.278 null] >> endobj 189 0 obj << /D [878 0 R /XYZ 72 632.949 null] >> endobj 877 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F26 391 0 R /F30 512 0 R /F34 583 0 R /F31 881 0 R /F28 523 0 R /F1 882 0 R /F39 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 887 0 obj << /Length 888 0 R /Filter /FlateDecode >> stream xÚåXÛŽÛ6}ßý¡Or°b5äð¢}hÑi‹}H",t‹Bµi[¨-9’ìæë3%_ey·M/@a,$q†s93lòi¶ò{Ÿ­7+[Ó—ˆC Ò/7Ën㦲3{væWæï‹i“—…ÛÂÍn˶ʚ¼Xt&ú¬3§í•×€)y£Ô)Ê^m^¸Å#ˆSAu—O«üw¯t/5ªSºv‰ˆ0ÛlVy±àaSúEŸ”Àp:¡X–Y•MÙ\|ÅŽÔÅH<¬/’»¤ÒQ]謢¡öóî›r´×Ò›ïÒ×?¾D’ËðÙ5zщêºWØužlá4=û.BÁŒ &AÂ0àb@Lû…ÆNŠ£Úc†J8Šu#­ÏPˆ¡®¨°a ÇN¾zŽL„äNo›§@&„vEÒ âŒô)€ynG22MQÇèñÓ—³“ Ó5 §CÌÍ¿Ñ$·s“à…&mýßnùØ&1ãMRçD¾Ä@)i"¥baý·g+z©óEáßÊù‘ÈW«ÛO,çýËin g«©»ôã}²rR³ŽsM Y¢œ¤Jµ5 œ ÀÖÄËÎV§ëõcWÀÞÆ<é}Oœ_öTÙzCišÐÒ úàhÜ~4fÍ·$ Óe^{8–Y}ËMÓÎ=7{)d\%#È~AVÉŽòH£LÂu{lÚ™†Òx[n½+V?AÜRÖø§×Qq¸¤iò¹YèÆ­®òÂA¥9“ªïÞ‡!€Åt8¼Â·d̘0ö6ËýÈï6HOå³nEg܃P{Öï‡ÝKbîC÷×JÀ8š(Gë„Hu²u;ŒåÁ}‚†ueéÊQ»&¸ý¸ÎüˆÞZ̳UþÑwt÷µ—SÍÎ.&tïý‡§òÉõx”p¯ý×|Uº*ºWëö7CDlØ8 ÇBŽÒ°‘ðæ ÈÐÿ‚†fuìïØ.Ýü8Ñœµ×"ƒ.${à‚3Îåù|©wÃüendstream endobj 888 0 obj 1072 endobj 886 0 obj << /Type /Page /Contents 887 0 R /Resources 885 0 R /MediaBox [0 0 595.273 841.887] /Parent 848 0 R >> endobj 868 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 200.999 200.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 889 0 R /Length 890 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™k¨à’ÏÈJG†endstream endobj 890 0 obj 29 endobj 891 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 200 200] /Resources << /ProcSet [ /PDF /Text ] /Font << /R6 892 0 R >> >> /Length 893 0 R /Filter /FlateDecode >> stream xÚ}T9’T1 Í} ‡ðÑbyI©âÃtF5ÅVü`"®žäßÅ$ôtÛO²öeèàJøÛ÷ý,/…ëÏÂTÿøATã8Ë¿_1ã’ä?—g‡•}ÝÏúáVÞê•êí[y—Nêñ»o¾¿½ý*oõ©|®Jø~q‹õë+?òÀÿóσÌ]MÁKàÞ6×ñeŠM Maæ¯÷Âm4§úpÊ•šj(MÁ¥K/C­%r á2à3…<‚¹pkÛò¦Õ<naP–›‘¦8ZJ‰¸ªHˆ 1—á1Á๥\F`‰"-ÿ<0MNIµé/âÝ å4²PHNK^鎚ԉôðÜN …;CQúðh5´Q±ð| Cƒ\º‡Èè "½«D™—[î=ë%Lœ>Ã’E7Fß瀘r¨Òêhލ%…àÖ.Cè\”n󞥹‚0ŽœQN륟°­ |A¿z†8–IË86Åmöl ô ¡‹÷ÿŽ„¾`TPs£f=²œ±e½\½a|蚢{ù™½ÖÀ„Ë€àš='’êJë¨}aûñÒ} מ~@(8Œž˜—qÖaˆ°c¾1‰*›ðIu’J¼‰>£®eÉ{Ä(Q”+ÜýÌ%;/¼¢o2Kè Åx¡ ÓrMß$7K$)vÀ® Û@ðpذ—Ͳ Àº¢¾‰y¯á:\^ºg 9YÀÈs^">µ™½¸%¼yÃÿ€žËSù 7·ÿxendstream endobj 893 0 obj 573 endobj 892 0 obj << /Type /Font /Name /R6 /Subtype /Type1 /BaseFont /Times-Roman >> endobj 889 0 obj << /XObject << /Im1 891 0 R >> /ProcSet [ /PDF ] >> endobj 869 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 200.999 200.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 894 0 R /Length 895 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™k¤à’ÏÈJN‡endstream endobj 895 0 obj 29 endobj 896 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 200 200] /Resources << /ProcSet [ /PDF /Text ] /Font << /R6 897 0 R >> >> /Length 898 0 R /Filter /FlateDecode >> stream xÚT¹’“1 îý.¡àG‡å£Ý`I:†* Ç)¶âõWŸä?ÙÄþ$ë>–®„¿}ßîåµpýU˜ê?ˆj÷"üû~\`^Ê«óÂʾn÷út-?÷ÊFõú½¤ Ýø]ïï~¼¿¾”O×ú\¾T%|¿V¡úíÿKò/…™»š‚—À½14l®ã/Ê› ;šÂÌ_o…ÛhNõá”+5ÕPš‚K—:^‡ZKäÂ-dÀg ysâÖ¶åM«yÜ ,7#Mq´”qU‘b.Ãc‚ÁsK¹&ŒÀEZþy`šœþ’jÓ_Ä»AÊid¡œ– ¼Ò5©é๜ w†¢ôáÑjh¢bá'ø†¹t‘ÑDzW7ˆ2/·Ü{ÖKÜqO' ˜8;$|(†%‹nŒ¾Ï1åP¥ÕÑQK Á­]†Ð9)ÝæO:=Ksa9!¢œÖ'J?a[ø‚~õ q4,’–qlŠÛìÙ@èBïÿ }Á¨ $:æFÍzd8cËz¹zÃøÐ9E·ò3z­ —Á5{N$Õ5"”ÖQû$Âöã¥û®=ý€>Pp=1/ã¬ÃaÇ|bU6á“6ê$9”x}F].Ê’÷ˆQ¢(g¸;ú™Kv?ñŠ¾É ,¡3ã„&LË5u~“Ü,‘\¤Ø;3lÁÃaÃ^6Ë2ëŠú&潆ëpyéžæd#Ï=x‰øÔfö6â–ðæy {üº”çò8+ÿxendstream endobj 898 0 obj 573 endobj 897 0 obj << /Type /Font /Name /R6 /Subtype /Type1 /BaseFont /Times-Roman >> endobj 894 0 obj << /XObject << /Im2 896 0 R >> /ProcSet [ /PDF ] >> endobj 870 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 200.999 200.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 899 0 R /Length 900 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™k¬à’ÏÈJUˆendstream endobj 900 0 obj 29 endobj 901 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 200 200] /Resources << /ProcSet [ /PDF /Text ] /Font << /R6 902 0 R >> >> /Length 903 0 R /Filter /FlateDecode >> stream xÚUT¹r1 íù,“fƒƒàÑz&àH]&•2¹Æ*\ù÷ƒpåD–v@<Äa:¸þöûv/¯…ëoÿ½•×ÊÐY¾âÐȪ÷½¼«Hh.õùäÒ;·>]˧/½‚yýQ"ÞᾃßõþáçÇëŸòùêü¯U ßoî³~/îåÍi‰`òÀ/ÿéã%©¿äl N÷Æ`Ø\Ç?’=$6@v(˜ÁÌOo…Ûh.õá’“šj¦à¥K/ÏC­%r†p è™ÂÉœ¸µíyËjž·p(ËÝHS“E7Fß瀙rPiu4GÔRBrk—!8§¤Ûý)gdiNÆ#'D”ÓûDé'|kƒ^Яޣ!ކ%Â¥e[â6{6|Cêâý¿aÁŒ J¢cnԬǭgnY/§7ŒSt+¿0טp0\³çDR]#RiµO!|?Nº/ãÚÓè‡Ñó2Î: vÌ &Qe >i£N’C‰·ÐgÔÕá¢,y%Šr¦»³Ÿ¹d÷¯è› ºB1^@h´\S×7ÉÍÉEаó†m ylØËfY`]Qßļ×pn/Ýo 9YÀ¸çœD~j3{yKDó{ {üº”çòørDendstream endobj 903 0 obj 587 endobj 902 0 obj << /Type /Font /Name /R6 /Subtype /Type1 /BaseFont /Times-Roman >> endobj 899 0 obj << /XObject << /Im3 901 0 R >> /ProcSet [ /PDF ] >> endobj 871 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 200.999 200.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 904 0 R /Length 905 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™k¢à’ÏÈJ\‰endstream endobj 905 0 obj 29 endobj 906 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 200 200] /Resources << /ProcSet [ /PDF /Text ] /Font << /R6 907 0 R >> >> /Length 908 0 R /Filter /FlateDecode >> stream xÚUT¹r1 íù,“fƒƒàÑz&àH]&•2¹Æ*\ù÷ƒpG–v@<Äa:¸þöûv/¯…ëoÿ½•×ÊT͵Lç!“k¨Þ‹$xù§àP]êsré=·>]˧/=l®?<á»Ñ×û‡Ÿ¯Êç«ó¿V%|¿U¡úÝ{>n–;þÆ/ÿéã%©¿dp N÷Æ`Ø\Ç;É› ;L‚`æ§·Âm4—úpÉIM5HSðÒ¥Ž—ç¡Ö9C¸… ôLadNÜÚö¼e5O€[8”ån¤)-­Dœ*¦BŒ‡Ûð˜PðÜV΄x¢¸–˜&g¼”Úôñžr:Y($§'¯ GMêÄõðÜ. E8CQúðl5Ø€¨XÄ ½…£AnÝÃdô“ÞÕ¢ÌË=÷žõÜ3&Î Љɢ£ïsÀL9¨´:š#j)!¹µËœSÒíþ”3²4'ã‘"Êé}¢ô¾µA/èWïÑGÃáÒ2Ž-q›=¾!uñþß0€à F%Ñ17jÖãÖ3·¬—ÓƇÎ)º•_˜ Èk L¸ ®Ùs"©®©´ŽÚ§¾'Ý—qíéô‚Ãè‰yg† ;æ “¨²Ÿ´Q'É¡Ä[è3êêpQ–¼GŽE9ÓÝÙÏ\²û‰WôMa ]¡/ 4aZ®©ë›äf‰ä"ÅØyÃ6<6ìe³,°®¨obÞk¸·—î7М,`ÜsN"?µ™½¼%¢ù=†=þ]Êsù øˆDendstream endobj 908 0 obj 588 endobj 907 0 obj << /Type /Font /Name /R6 /Subtype /Type1 /BaseFont /Times-Roman >> endobj 904 0 obj << /XObject << /Im4 906 0 R >> /ProcSet [ /PDF ] >> endobj 872 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 200.999 200.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 909 0 R /Length 910 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kªà’ÏÈJcŠendstream endobj 910 0 obj 29 endobj 911 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 200 200] /Resources << /ProcSet [ /PDF /Text ] /Font << /R6 912 0 R >> >> /Length 913 0 R /Filter /FlateDecode >> stream xÚ]T¹r1 íù,“fC\_ÝÉ×* ßoî¸~/nøæÔDX~à—wòxqÊ/žx³J69ŠîJ°°¹Ž˜=™ ;– ÄÌOo…t¨³>œ¹‘Š„Ñd¼d‰ãåyˆi"·`ÒМZè#™«nÏ›‹yÞ`^î†UðÐÔbvSæPåFx¸ Í­E¡jQ–¸MÊxÉtú cBé$†Lé Ê+Ã5å:Q~š[ÁÉ„34¥ÏV‹8!·p4šk÷P}A¥wq‡hórϽg¿Ø÷ BrBL‡ʈaîs@M(LÛê‹%Crk·!lN&ÛýÉ32«0á‘ÂBé}¢õ¾E!gÌ«÷ˆ£a‰P4c3Rì7{Cêìó¿aaÏX´DÆÜH­GÕ3·ì—›+Ö§[t+¿°àk l8(®Ùs#[]#RÑŽÞ' ß“n÷öúBAÁaÌļ³C†ûˆMÞÄ7mÔÙøF›ô}u¸Z¶¼GŽM9ÓÝÙϼd÷¯˜†KèÁzaÓòšº\9os^¤¸vV¨É# â^ªe€eEÓ¾†ëp}î^äf£Î½8‰üÄfÎ6òæˆæu {üº”çò)%endstream endobj 913 0 obj 591 endobj 912 0 obj << /Type /Font /Name /R6 /Subtype /Type1 /BaseFont /Times-Roman >> endobj 909 0 obj << /XObject << /Im5 911 0 R >> /ProcSet [ /PDF ] >> endobj 873 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 200.999 200.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 914 0 R /Length 915 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™k¦à’ÏÈJj‹endstream endobj 915 0 obj 29 endobj 916 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 200 200] /Resources << /ProcSet [ /PDF /Text ] /Font << /R6 917 0 R >> >> /Length 918 0 R /Filter /FlateDecode >> stream xÚ]T9’1 Ìù †v2ÆA‚dê*?`-e.GrùªU°‘¿o4ÀQÉÖJ3Ý$Ž&.\ û}»—·Âõ—ÿþ”·Ê±W¹›LTM¦Õ{‘'öúß]¾w©/Oáh‡«¯åÃg«Ü©^¿—”à.5œýw½¿ûñþú»|ººÿ—ª„ï×*T¿y—èFaI©fã×Öã%¹~)<¨{Â)Ø láÑç:žX0î:€ú¡ð$Þ}÷V¸ k6œ¹SS §)xéRÇËuho‰ÜC¸… Ö™ÂbNÜÚŽ¼¹vÀ-Êò0Ò–V"î*¦BŒ‡Ûð˜X๭ÜA‰âXþy`šœù’µé;â=!å ²PHÎH0^™ŽšÔ‰ã๠œ EºŽ¢ØpµÞ€¨Xä‰õ¹µ…ɰ3õ€(óòÈfY/ñÄ–I@˜8;$|(ãQ£Îèû0SWZ1¢=Ä­]†ð9™îð'ÏÌÒÜAœQÎ襟ˆ­ ë‚~™ECž‡–qlÆmZ6þÒÅûÃÂ_0*(‰Ž¹Q맜ڲ^îÞ0>tNÑ­üÄL€¯50á2`¸¦åDR]#¤4Cí“DìÇŽùe\{ú} `à0zÒ½Œ³Ž…†ùÄ$ªlâ“6ê$9”x›QW‡‹²ä%ŠrÊÝêg^²û‰WôMáú‚b¼€Ð„Ùóšúz“¼Y"y‘âôó„m@<6ÜËÖ³ Àº¢¾‰y_Ãu¸½˜Ÿ@s²€qÎ=Ø }Úgö6tKdósŒþøt)/å/¬œ!endstream endobj 918 0 obj 596 endobj 917 0 obj << /Type /Font /Name /R6 /Subtype /Type1 /BaseFont /Times-Roman >> endobj 914 0 obj << /XObject << /Im6 916 0 R >> /ProcSet [ /PDF ] >> endobj 874 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 200.999 200.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 919 0 R /Length 920 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™k®à’ÏÈJqŒendstream endobj 920 0 obj 29 endobj 921 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 200 200] /Resources << /ProcSet [ /PDF /Text ] /Font << /R6 922 0 R >> >> /Length 923 0 R /Filter /FlateDecode >> stream xÚUT9’1 Ìù †và1‚Gê*?`-e.GrùªU°‘¿o4ÀQYZi¦›ÄE ¹tp%üí÷í^Þ ×ß…©þõQǽðìý ­lN_Ÿ¶°rn¿–Kyóˆ¶_·{ýt-¿ôʲŽE­^x:l µúጀñ»Þßý|ýS>_ëKùZ•ðýV…ê÷§ÌòÀÏÅKrýRx·)Ø ÜÃÃæ:þcö`l:€ì@YF f¾{+ÜFsÖ‡3wjªá4/]Þ ¾¼µ–È=„[Ø`)ìQ̉[Û‘7Wó¸E@YFšâÑÒJÄ]EÂTˆñp <·•{""QË?L“3_²6}G|:¤œAÉ Æ+ÓQ“:qü<·“¡HghJ^­†7 :ybÝ"Ð ·îa2ú‚IïêÑæå‘]J–pIÏ$ Lœ>bɦcîsÀL9\iu GÔ’¡¸µÛ>'Óþä™Yš;ã‘ åŒ>Ñú‰ØÚ°.˜Wï1GÃáÐ2ŽÍ¸Íž„¿¡tñùß @ø ¤‚–è˜5ëqêÀY[öËÝäC§Šnå4¾Ö€ÂeÀpÍžŠ¤ºF”Ò:zŸ$b?vº9ÜêtAÁÀaÌļ³C…ú„U6q¥:I%Þ¤Ïè«ÃEÙò5J4å,wW?ó’ÝO¼bn2—Ðò¦å5õõ&y³Dò"Űó„m x$l¸—Ͳ Àº¢¿‰y_Ãu¸½t?¦²€qÎ-ìD}j3guKdós {üº”—òtð}endstream endobj 923 0 obj 593 endobj 922 0 obj << /Type /Font /Name /R6 /Subtype /Type1 /BaseFont /Times-Roman >> endobj 919 0 obj << /XObject << /Im7 921 0 R >> /ProcSet [ /PDF ] >> endobj 875 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 200.999 200.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 924 0 R /Length 925 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™k¡à’ÏÈJxendstream endobj 925 0 obj 29 endobj 926 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 200 200] /Resources << /ProcSet [ /PDF /Text ] /Font << /R6 927 0 R >> >> /Length 928 0 R /Filter /FlateDecode >> stream xÚmT¹ŽÜ0 íý*“b¢Ž6@>`3Ó©&ȱØ)¶Úß) ã±ôHñÓÎ…ð¬ýþØ^7.ü}Û^ s‘rÑrÇi£}vkåÂ4w€ÇÆÁ{ÇzùŸÔÉ »Ðµ<ÁE¸?¶û£|¾mŸ¾¶ÂÍÊí§Çá¡ <åB»t<@ÔÕ(ÞÛãï·çíËÍ~+Jø/BåÇæ¦ß|IIòPäÄ/ÿðc“ä_7îd…mN·Š°5÷w”›v ÛšÂÌOï×^jÝ)Wªª¡4›N¿H›‡ZMäÂ5dÀg ysàZ—åE«y\àL7#U±Ô”qU‘b,.Ã}€ÁcI¹&ŒÀŵüwbœþ’ªÃOÄ EÊid"‘œ– <ÓU)×Àc 8Ñî Ii(¦†6 2~‚oa¨“K·émB¤5uƒHótË­e¾Ä·t‚‰³B»2®92FÝG‡˜r¨ÒDﲨ%…àæJCè”.󞥺‚0–ìQNë©°­|A½Z‹‚8ê–—–¾/ŠëhY@èB¯ÿ }A« %ÚÇBÕç ·œ±e¾\½¢}èè¢ûö=zÎŽ—Á9Zv$•Ù#”Úû$ÂöyÒÌáê~@o(8Œš˜§q”nˆ°¡¿Ñ‰*‹ðNëeìJ¼ˆ6"¯'eÊ[Ä(‘”#ÜýÈ!{xFݤ†ÐŠöB†å˜:¿JN–HRÌ€7¬ÁÃaÅ\VË4ëŒü&æ5†þ=s§þEs9}-Ê~4N">µ‘µ¸%¼ù=º ëö´ý¨Tˆendstream endobj 928 0 obj 618 endobj 927 0 obj << /Type /Font /Name /R6 /Subtype /Type1 /BaseFont /Times-Roman >> endobj 924 0 obj << /XObject << /Im8 926 0 R >> /ProcSet [ /PDF ] >> endobj 884 0 obj << /D [886 0 R /XYZ 72 786.278 null] >> endobj 867 0 obj << /D [886 0 R /XYZ 119.696 314.795 null] >> endobj 885 0 obj << /Font << /F27 394 0 R /F15 393 0 R /F33 497 0 R /F30 512 0 R /F28 523 0 R >> /XObject << /Fm1 868 0 R /Fm2 869 0 R /Fm3 870 0 R /Fm4 871 0 R /Fm5 872 0 R /Fm6 873 0 R /Fm7 874 0 R /Fm8 875 0 R >> /ProcSet [ /PDF /Text ] >> endobj 932 0 obj << /Length 933 0 R /Filter /FlateDecode >> stream xÚíZmã¶îç+Ðßà~“‹#¾‰T‹½9ä¤rFP - ­L¯…ÈÒž$ßÚýõ™áPZÙ–w÷Ò4M‹â€5_†CÎ gŽŽ/øÇF,ŒM™0vQì^ñýû~1´¾‚1¢TZ2­°÷ a¬´eY–BC1%Íuúë<8gÜ Úë³Õ«OÞ³à Ë’l±ÚxšÕú¯ÑŠÿcõõëÕ·oÿ²ŒµÐÑï`à‹Cïêõw_ç}[þ–脦.Hwžà†z›ªÉ{j:\ßÃB¾üûêO¯¾X½Š53°}l™J€ƒ1™ÙEë›W±’ÌêEÆ™.¤e\È™éØÀ_&xʬ54ÿ¨µ„©T.bÁ¸Ô£ÜRÎÈýöÉ®'s r¡Â<Š=HpÆ«aÝH7J)“`+–§3çŒ%“ÐŽSƹš‘søPD,€‚ÛQŽ“³ŽöÛºÎ-c)U´Ù×E_6u‡]åUÕ,E=ÐlÞÞ–}›·Gìò¨+òª¬ïh®¬ñWDý6°j]w¿Œ…‰pü°ÄM Û¨i×e÷Ž–­ËÖùÙüUEï†µåæˆ{xžy_ÌÑ 2/ù˧1Ÿ±‰ÖàÅ<ëyÑWG’ïXºjÝѱveÛ6m‡Gèˆ8ä‘pì6ˆg¯×PDù¡ìÁBé“s½YZí[àÒîšÖ£ËT"ÓÙj:õ õK`ü€š0Ðæu·iZ¸"Á":†•xˆÀâR¡0¸vAƒµFšš~˾sÕ&ì^¯ÇI/øZ†~34 EÔà±±ÉÏ·D£e©ìˆtø©ÜšÖt[—£~oH’®Êk”¶'MA˜çUׄo«òýÞ…ßÁDoûSþ$cÓuåmNé¸ÜÒ û­ìÔ[Fo ~¾ï‚9壽¯B¸šcˆÐLi %p-•þyÃê;Ôá—?:ªzÌUžeÿbX}iTU¿ì¨ª¢¨ŠWëŠçˆ„iaþžóÝ¿ÃsþŸŽZÇy L¤;1+ H͆F¶Ÿþ ‘2rŸW46‰ªÂ¤¾p|iêeÞäg"„õËg'9S€‰£-òtï÷ö}~óÚ{é4™p0 3©~=³…a Ï&:P†»ä§8Ktú¿ŒY3ðÛå8ŽtÆ[J„Ô))é¸ö¾u=¦&Ì»À58Bb.ÓŸÐò&À‚Úy}Wù¬Ç)'ùùŽ~w.ïö­g­QµÍŽÆGFCÒ*=.²þd@Ií¶/ ¯dÜå0ðĤ& ¹ÁõÜ:FEµ»Ë§|äJ]f¾Ï/P `!›F˜”ym|æÉÙa$Lßs.e93æ9,ƒ}¼'uÄøº iÖŒ.ÂÕ Û”•žz‘äúºÁ)xú4Khq™M|ߟÒãhxÓSóÑÒØó–&7>ãFˆ+Î/±ÇÙÞÐS=54¡U5ç78|fï÷mÓ{ I›a4Á-Àò÷Û€†íóoKG¬§ð胼@îG'3o¹d–1žØ'ÒÆwóD:³ò^’Í$K”úy\šç—Þ·ÀÛ@=ð­K –¨ö`Hï|I¸"x/Úò®©›ƒFqº¸£Õô:›,n)r ]ðñË0%w™1Ñ=žS(õˆá<¿¢© 8h}zØ3ËtvzÙOžnãg¤öCIÏØÒV.f3Љo.h\ã©d.@A\L-‚;ÁÃ)‹¦»D¹…ûi?"Ïyœ,<êWó!S&ƒÖ Z\;‹a©4y1Š)qú®~fôcö¾V?¡A|ÖÒ¿\ƒSÓJ ÙB(€Ãžê·3Û@pË[ë vÔtm;lI;ÍO:‹Ü’:¤¶ÓÄc4œ¢—°£N7•˜ýRz4ÛhíîZç:†qR†×vF{Õ$ßA// ÿþ¿£¥äñuÞ®©w T®Pj t~oNòsÊ6¡—üj&[QùCdáPIBeÀú µ#È,@’²u©¦Ãa½G²°¨s= Q7gCÁÃý¦(ñœ&êÃrÐ; ÂKJàD %)WÝ…D=lµÅ¬¿ï®–ZŠfw_9_Â1X(£ÚUhDÔ`7 3ªØ8‰8h?x7„Øk°¸u·õÚ%êã\í ×uTÕ3š¼9"ý1‘H98ë‡wøÍÃa˶¨ÜÍ ä$L Zq‡Å ¾ÕP(ìŽdøü0Å'([Ù–b¨2W^­Èp™2)ÒŸ‹¬Í¿Žxß¶’ 3½|Rf@Kq<Ìjwºì8·ì8‡t@S:סN y#3â °#5üd/‚;¨•üïÇ; éÅ£‹¤3rhàÅä ú€ žŽY¤çUyˆÒSða¹=AVFß,34]ÿ®hËûþ÷`X.¢?7„E`Þß ø]-³4:‡VEÞ3á’Ϩ86r«¤šT@X€PB`uã Lû €CùšrMC¥6ð@h¢œbK³ï©…”àXá<7 R,zû`„uÛf_ηm (ë#u×eWì».h¬ËM<à ØÌÊçþG€ì|ñøÉŠ—Öç[¬)ùT~e‡,Í×iendstream endobj 933 0 obj 2620 endobj 931 0 obj << /Type /Page /Contents 932 0 R /Resources 930 0 R /MediaBox [0 0 595.273 841.887] /Parent 934 0 R >> endobj 929 0 obj << /D [931 0 R /XYZ 72 786.278 null] >> endobj 193 0 obj << /D [931 0 R /XYZ 72 249.403 null] >> endobj 930 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F30 512 0 R /F1 882 0 R /F26 391 0 R /F31 881 0 R /F40 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 938 0 obj << /Length 939 0 R /Filter /FlateDecode >> stream xÚÕZÝܶ÷Kÿ…ëStÀ-#~èƒ}°[uÓ$†³EšÂw¹·‚µÒFÒÚ¹ |g8C}ìêöì¢(RðŠÔ’3¿ùÍèäM ÿäM¦n²<*Ëo6‡gò†þ}¸ Oß@IšD‹Ä`ë ÁU\éDäi‚ò/ÖϾ~%“ Û›õÎË®·ÿŒvms¸]ie¢~ïð!‰ÞܪdmtpEM®EW°p`Ò\±d@Zyßa! q!¢ÁäÃ…’]eèt6I¼•K‹0™‚¹ƒ{çÆÏ‘©nWR*ýзÍR=ÓhÝð›DÞm±éý6 ùý©¯Ê:ÌÆV <ÓÒÄßÂ=À…Büâ@•$QQVÅûÊawrnQÊfhQ8À[”úŽzKj¹¶.*Œ~8¸;’±lÊÝ òF€â^útpp ÔÁÀzZÆêTH¼éMQÖýúáè–àB\»`ÕboU AÙ‘e½-7EOؚ™$³IèÖ¼+ª„íàÒöoqƒü{:fhmzP]â-wÔ…·3›‚ÝŸ®ªã>ŠÝØÃˆ#¬Å“Œš´ܬBÏlæ.̱ ® ‹Úò~ï/è·¦¥ž²®?²TŠrío¢À‡IÇ<'µ@–˳ùFx’Ö$Ý7Ô3@vzx©/ô©ì÷Ax= ÚëšzŽE g|ªŠönaGdæù‘ž$ïX°l½m™èǽ«ivÚ¨÷Pœ`~åË;òÚhsjI{Ü•w…¶ÕXŽÐ[%'F¨ã/^—5ïÄy* ¯ðXȇax »Ã'^£G=ˆÄ{z"“Ä JVУ_Œ}ßu½ð;”)DÇt¶ÍYŽDmÑõwÉ;¯w¦x 6lòY€Ä TÚæžâ|VWŒó Và:˜È·@ÒØ±&ƒJEÕ5¤Ã‡ºñT³ÒÈíT‘$r ]ßÞ¢pø³%Ü1€ÄY>ðï~ ·•µGf›$&zQtFpÃ0àYfþNK´æÔž™ÞWÔÙí >@¿ã8l/ŽîBAa<‹CŽäŸá²Æ<†'+ª&<’-es˜¬8…!åÏü¸&XN‡3a{êèZ§Ž_iô\ìápTS'a >a\ǧ$ Æ$¶ýÎ,3ÚgÃ$yDhêhu [ £Äñ§îDA e7õaŠ£MâÂþ5'ªžT8z˜°:|Ýw®ÚÑópؘ<0®Q7ŸáçSAnQö¦°ÀŽÇ4ÏÓ÷£ßߥQ¥JX;ݕղ¸é]ý£¸RA?xÒŸÈ%á´OÍ;*賤Ûóž»%M‡Lî*‘ BØ:ˆ<{¹J$1æE Øô©b ’N5]|êË"ÊÎH€&'O—jϦãëšò@u$ x+ÞÆ·sËàüÑ›ô¶AÒ¡SóyØ&sÉ‚òî|[à>þ`WJ‰ÒÊßÿá'F'8 >õ.Ø«f™Ë‚¹d*ûÒ#Œ¯¡þ?8Á­ ÞI€‰ODºÛ’ø¾wìáœ=&vÁ<Û€Sž†ñÇ‚C?ÔÇ$Fç.àI8'°]JÙ= QžG|ŠÈŽŽ*Š­ÔJÑT'æÔ8ŠÉ V=3‰uØ “yÃéÏñ½» DÈ sŸ*oA1gR0¬ó«µÌ ²ƒ °Àß %mýHÆkðZ!^WÕ–À=H¨1ç”w+n´Åq_n:NB:ïŠÛU9ú€Šœ¸4ªŒý8yóWœ¦Ø 3ÏÕÛŽ«cÏ‘Ô\njÏK<67AKŸÚq·e‡Æ³%!ºìߣ ƒ“9Þù×çùƒ <Öë’¯n±¯%qÎ;’qÀ4Ã\°d*3ëY<Ê8ñ-ì&V?ĸPÅc¸pW^Diá%)dï&C÷£ ƒ—†§o®¸dþú»æªäUÇâý#ÎÙÊŠÔW¸¿X]k.N€dUøªv2åÀ‚‰O­©Vd£cK°q]7q °É•)Ë—s.äŸA1”™êÐìÑz©žŒ¹<”Rø¦áßÇ4ä¬ÈO2-üð’5²ÊWá²Tdçì¿õßYÀúI¶]äÞDw3ö‚žMQOÁ™äÄ_½…è“ÓÊAŰ³QÅyØÎÃíPR/9ð_)hò’óo^ƒù2r*‘@f´2öŸ=níWâ©“Q˜]üÀ¸j8¢D%ÑZ¾#"ü ²+t êÞc÷ë¿Üõnm5lb•xú°Ê…âL_è@¡m~Óº›Ý3ÈDžørz£ALé…׫ þ—üÈAžgô~üø Œa¥ sJ®Ó†W‹ŸRì`ոᰇ³)¸Ø?údا6BkØ'lW¦ z®´Ðð¼J…”faŸT‘i*fJ™_G¬¿:4þ…BÃåN“…¯và52ñu¸‹s4±ƒ‰³Ñ ¤ +,¦Y=ßyŽŠ}#(PI ‹©<ÑpØê›…‚ 2€ŸÊ>^¼d&c¿qºeßÑ ç¾`¨ŠK:m0§꽎,à+4CZfÍK´¯{ú‹ ¢A Õe‘’p÷áÈ_úbÀOEÉ÷ýIÑ#ù¡<ðÓ'_O[L#’!#ÿÇà;£mè°ˆ=üw*uCÚuå¯nµu¨º…t06¥…ûضèñNM àÍ™,6!Ýú¥Äòö*KSô5…7M½åïF“G `p…Tï/å((>1<ÐÔ÷%?õüç5ÔòPŠhó ècµ˜‚Ïc^T;xA°ÒÙL°03§ãòåÛ·ï¾óî»ï×ïÞ¼|ûíëõúåªH•kóyAQÆ@†ÒyE‘B©”°<8|†dÛõ{Úô–?€4$4|2hªðe„‡søûÕÇœ‚ÇókŠ;ÓW€SÙ\d6û ž‘%³/ûRšž:^g\0\4‡pMÂ09‹cQ¶™2Á•4àöÄ]Ï®W÷’ä%2ŒLæFv˜]!Ãpîéçpa-b0Ìß5NþK\˜Ã×Y±r÷<ò/ –Úä“‚$½( ødøJâß`Õ?Iendstream endobj 939 0 obj 3397 endobj 937 0 obj << /Type /Page /Contents 938 0 R /Resources 936 0 R /MediaBox [0 0 595.273 841.887] /Parent 934 0 R /Annots [ 940 0 R 941 0 R ] >> endobj 940 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [289.423 334.083 294.878 344.992] /Subtype /Link /A << /S /GoTo /D (section.8) >> >> endobj 941 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [328.211 334.083 339.12 344.992] /Subtype /Link /A << /S /GoTo /D (section.8) >> >> endobj 935 0 obj << /D [937 0 R /XYZ 72 786.278 null] >> endobj 197 0 obj << /D [937 0 R /XYZ 72 618.481 null] >> endobj 936 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F30 512 0 R /F26 391 0 R /F43 549 0 R /F1 882 0 R /F37 380 0 R /F39 496 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 945 0 obj << /Length 946 0 R /Filter /FlateDecode >> stream xÚåÉrã¸5çÎ!¿ #]eq ‰¹u2vÊ™é¥ÜJrȤºh ’™¡I7—v<_Ÿ·)Q¶'L¥+åƒðñoß,ü‰E/Ò, ã4[¬ï^‰ÿý´ð«ïáŒ!•–¡V¸{p©t“ÀB…J¦§áOã"YÌßúýêÕ7—qºQh"³Xm fµù[PTÝÙRÇ:X‰(mÞ|èšú'{Yæ»#ñ³è²®º«ïà8ûûêO¯.V¯–:LñÒ„3ðÑPšlÑØÅöÕRÉ0Ó‹,&ñGÎ<^faš¸s‘„Y–òã=C¢P%r±”a¤Ô@’”3$]âݾ¹zô ¸+÷éò$ žixo€È”*” ¤VÌÝî%a½LBï“éé<©±Æ!²ŽÉ]=Ûº9[ªØ¶ÊoÊ¢Úñ.¯6¼Øíø¼EÁÁî¶ZmïÏ–qØuW|>ÃEùx–É <[¦R«[ÛZ•"èÎâ,x@¢`ÛWðR]µˆ9T]ßTü•ˆ!êŠÛ~½¶m»íKä\|)P °®ïîK‹ˆ8ñ7O²`)ø ¨x¿Îé*)àÝ:PþÙæEÙ7®œ)ƒW~äóuîPÖUùÈ8”WÅ–%;Ñw¥ ¨Â«éñŒžHª4õ¶ÑòGªºcÌŸÏ´ò²Øu$†û?Ükdß-1a)U ü„Hâñµb j»ï Ú¦©ê™{)fq2º—„϶¶ãEWÏ Vq¨T6 ¾¸¾þxõö/¯¸úîãå»·«Yò…Ppco(!bOƒ?·¤c¸ìXi$ŠÆëðB¦*hŠŽ™à „vuªÉì‰eÆSîE ›·¶Z[^²òÖm[Ü”î(ïÜoušøÈ›®¸CýÐ&Fýà³ÊvÀZÚß‚þãR én‘¡Àc8x(ÊWqpŸÏ‡-Ínô‹@:ÿ¹|Ýõy Šxl­-áûø&ZK“·mŠŸmÆuWÓW6–·ÞÚ–MÕ˜p—;Î2}uåÛƒ'D¼@Æ=ZømÞÀMmÓ¢ˆ ³ ŸÞógp8w9 `D‡&21¨º”ÒsV»kr¼:nÈWIé™'cZ%ø›­¸uB€7H,pBä⛊r G/K¢w¹ƒôó®pwýÔÛU4$‚À]t½#é\žX¥¬Ÿˆù…Ì=Ï/>#ï…‹#¡Ê’A“yÐÆò¢±Ÿú¢ñ Ä$<&Ááâ>oºbÝ—yã!Hµ;~ n¥ô€àÎmóy°¡bvÌ#Ç)æí¡dÏ™1½³hX–õ®Xçåˆðy'–ÌÀf…~†Œ²œŠYPk†¶µnóÁ®CE‡(ƒo‚¹4*Ì8œã1>üiáWß?u(ô!Ra ܪӹÕilŽ+÷ùÎß"¹KØ~ÙÓèè‚ óo\3‘ÐÅ–$ ɳßK¢`Ý7ebX”Ú oÂèÏ®,™º Ü- ÀÙŽaÁ2§§’sÁ+ ã$}6¦T&EnºXÙÖ|…NSx6Ûvƒ=@Ǻˆu^Û íp1;³© °bð}) dbQ I¤ S•ü:ÉômÇ©ô›zcQ*‰Š|"•6£Ê'Ré4„xü’\Z„‰Îþ·siõÊ¥¯ærB¸¡R/Q_-³qê…+H %L\JxÌ‚Xùüf–•*ó,ŒÙ“nŸs`ð9& U‘/J‰(àäÓ¡É£QæK“GàÏUµÏÙ²€S¤¥àÀáFcÓ­Áã4.ž@Ü?÷i‚ #Ûº,ktDCèr¬ï­ Ww9‚s‡!“{^~{è"t¨a”¨ç rÐO™È‘ýÏZËïñëPiý|¹`ê9çͰ=†WÍoÏ–‰ôYTu“drq² AXaÍX„±£ÁW_bE¥£ œùr,BÆe¤·ûÄw‡‰~”#\ìT*Gp4 $TðbU9ÎÇÜçw ”®ÔôA8ÌgôÙ„Iäïû>'¼z¼·s Õab< å7YTF¨/hŸBõY÷ k¨ñÉQvL/ž½¸˜Pä šù’ ΀N£$ÒÆ&géã¬ÕÞÙÜ-ÛÍQQ7ŒS‹‰øL@¼À¤œ¾ÜG“p/\Åbé®dæsk%²±ÚŠÃR‰_eµÙTm“ùP™‰t0¹ÜõW(Éq¡„Ç›ô v¨ƒJqïëTgÀ·êŽ £˜+„Ò±_¥.úà뢿"{OFç¼Ù–uîÎIÒöÁ½uT5A‘ùdÍSžª™2-^R3Aº!õÿGÍÆ?%‚þ~®£nB5Ð4Î õ °7òHîr³RE#óÁ³:\²%á - ÷ÖÎ8ŽrL€Ù6õ[=ѺHp`÷ü8@9Ÿé*ÄzÕñoáè(ª¥«j" sjyp«{(>È!˜ˆ“fŸ×µ÷ìਯ j»Á’},|7–›¢±knêàûõÝ=Íq#ØÑö.3‚ŠU˜d¾˜ß¼¤bíAñw–ý|¥Þº”PNÃÖ4c×£V"În"E­V<﨣CÞ+ÁNð Énpš%1™4Ã<ÌâŽIWãáXçØ›Æó»bwë¸e jïBqÓ;ɴ쇑ú HiÊc7åÉ(Ù3Éh¢35á‡?òåE?â":M:¦ÓH7ÐÀó¡Ôeðz¶›¡4¨ß fIZ„±ôpÜÙG¤;×'tWÉùô¶ðiÜ‘šÔ+ÚCp˜¦ÓJ¾±yËóA7™~2!³ÑD/Õ)k…t“,%Í|3BhðZB|I7âüðC£Š´GòK°á± , ôl¸>Õ™/«³‘(Ž/ºŒö£§ÝÙÉ}ß¿¾~ýæbuq=we©÷ýœ¢Úë¼£t€&o4/IH0øSÙ]N­]Œ§l$Bò¡îÅÛÜ-\G„Òضn6°.°þá\VA^T4Ê<Ÿ£ÐÝqTu2}ïÞ|ûnõñýÅõ›«ÕêbV"±áÎ$½†Ýš”º5$3÷.à hÆ™ƒôNDÇéðU6>À‘ïfGNî±—;îÈÃc?(:w)”»èÄ+?ã(&ÕÁÆ:ÎU;LkRlò.ç•ýgÑvèÉâ,qc£ÔeôøØ•„4Jõ¡ØxS¸·H é'Ê7'˜xŽ88RâQîÀœÎx¹‡[Ë\ó#;1jÊð9„ N©±•UJÄÞ›’Já¶/Ê£¤ÔÁkj×e¾]'\‚_°uÈ'èJq¶…n H’›ÇC¡û`z`w3C›4ÔYeÞQ¨ÂõºhÖý]ÛáÌ‹BH2 ÚýxŒ’ pËÿ‚¡§ù¤a¡Fe"ðtèÀmø Ãt ¢ZCe:c÷SÌèÈœÏùx…p˲ðņ+\ã,!É­×Åf¨¨×FY—$…C±)Úuß¶\Ä“¢›Ôup«ª®~·C“™%g?È­GU—Ó+Ø>]²¹ú®s•[Yž»2p;z{è··u_ºRp_Á‹4'š;c÷ÿMá2§IùÈL>9*^ù&̨أq8+èxž3àÎ9çÊ7°O&£BÃRšçG®Ó5ºªÝôÌÝÃópøw Éÿ.ÁÇó³2.÷—"Ó$dÿ½’pT؇eO…§¦eñNËäK§eé×ÿŸgÈ(ól›/Æþ>~ïéQ§‡ ™eÇO4Œþ·‰)ƒendstream endobj 946 0 obj 3071 endobj 944 0 obj << /Type /Page /Contents 945 0 R /Resources 943 0 R /MediaBox [0 0 595.273 841.887] /Parent 934 0 R /Annots [ 947 0 R 948 0 R ] >> endobj 947 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [394.423 613.108 413.817 624.017] /Subtype /Link /A << /S /GoTo /D (subsection.5.15) >> >> endobj 948 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [445.938 613.108 456.847 624.017] /Subtype /Link /A << /S /GoTo /D (subsection.5.15) >> >> endobj 942 0 obj << /D [944 0 R /XYZ 72 786.278 null] >> endobj 943 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F39 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 952 0 obj << /Length 953 0 R /Filter /FlateDecode >> stream xÚÝZéÛÆúÑù'„E¸ÁŠ!ç ‡ù¶‰ãÔMêö¢š"àJ#‰µD*$å ýãû®¡H-½ëmQ ˜£9Þ›÷æ]ó§‹þÒE®¹Ëb•»Åêð$]ðßëEhý}<ÓX[ƒ¿™¸ 3—ÚÆ.³8ÿ›Û'_=Kí"Mâ")·š{»þkô|sµÔiõ;Ï7W6‹ÊýI~&W»ýíWÏt2Z›©Øæ¹øš'Lˆë8Ñ2œ0™ªÃoµ¾?µµ__ãO \y ‰|;her½®Veï»°µ²¿ØäêJåÑ®lËUï[™V¶2øS’šýÞ¯ùWƒD“bŽÊ¦©¯”‹úÀ%Y,3gI¾X¦¨Å‚„øå仾‚ÙK­5Ëߺ鹱oʵ_ÇWKcLt»óõ5ëDå#¤ÆÄI&Z¹Möm[73º3El¬‘yÌÊÀyt óê|Ï]}3Ã$Ó±JÕÀä»—/~þâ7?>úó³ß¿¸}þt†aš4pŒå¼jÖ⌥ÎS0ÑÅR@^Ó<§új™¦JG7õ•VQ_•ûªìªz+ûÊ&Ö¶TIl ;¬S\mÓè{_û¶ÜƒPNGO}·j«#éúþNCTþŠ•§Ÿ#œp‡?s6l¬«î¸/qè=ž3Zv7² Xy&kzþîœù–tÕߥíØh¨sW¯–`~žØ¹¨Ù0¹®Ù$±Úôa“[/,Öå¡ÜÂ^ÐØ’‰™Ý1ÝUyêÐB K´u¡£¶9O€jáøJÛ6m÷’ÇŽÕ;¿ç檬¹±e¥îßË”Öw~°uèèYJàÖpG×£¿}}µ´™ŽeÅ %‚Qò¡-¾^Ò Np0ž‘ᛲÈSñ2hì×é@[Ëaóï‘­Œñ†¡¢»Ð»ièWÃ> •¬-ù'm¼D²ï/òm˜Q ÷ŸRm ¸Ô¯»Ïy ;Ý-ƒ¦`¼\­NpR²žÜ ¾Ûê Šlª©Ï¢Œ$e#fëA§WèôHB )ü®›ÚsëN6ª`«¦îªµoé(qðí®b»áqÚ¡P 3ÆÆ9žá”·(¹Òq£o1Tq÷[ØÐ©e%H'|“K‘äðŽ;r–¢/êÉØÁ¸ °ÑQá÷xl›c[Á`‡FX{žNö s¶­3ª(wѳ+'†ãþ]y8î=f“Ó±Ny½Ý55Èø[$Ùœökž#ÞÂc«m‚O¯u.›üšç˜ Ä­m¨%ØaÞ Ç]rñ!.÷ž3Q]ýB è…ì*ÜóF š£(¦\1º¬/ãæ$âY*‡fÆi§‰I‡‚^.iÐÀ¹wþ yW!ÁY¦Ž§ áàH…‡q"‘áÃæâ™l£`{Yâd{}º¯îæŠçP…HBs’]\²‚Þ¬ÜÛU½ÙC2ŸÈѶæPg\"‘¯g2ŽB†qà„UÀ¸]û²Ýb©ý9jî­½_S†pâ2ØÙsŽq?:´YRÅÒ¹ rÕ‘ƒ–DfœÕÔúÑÀšÄFÈ\ŸäãH “,: ÆcgS‡Š'„uæš++)¥`|³^U gfò¾òûuÇ“·û÷Ç]ÇýHpåA¦˜EiÎ_2yYHŽ }ƒSÜ—˜îO’¤4h|_’<¯ÙH¥Ø9{Ϧœfq¡³qP;&wäÖˆʰosªWXtìjÚ1ùðùЙÙÈ¢¼0fÙ©\}òÝí¹\¶Po7)£â¤H?^]¼â†J)uŠ+sª´'^*íïüË~ VÙèK¨ÿnn^ùþ[¨~JlÂÝUÝsãYS÷ÏŸ^óÌ9·VÍÚ_³ö ‚ø>9ƒ ”¢B‹¡ÜnwsûòùŸ…}ß–uÚ;ï4(‘S‘—Æ9ã[HëÂ-Z¿Ø!ˆ½­Öýîþú¯¶»þú~Qþ/š—‰J4¯<¶.{ؼL®>ɼ\œÛìÛ¼ìætrLÖ Gšº‡A¥ Ý ò"Ü]ÈfJH Ûv…,»¹™…'(?óŒÏ™ßÝ™ú¸0€Ÿuy Â60.«`î¹Tˆàª qT¥úÉñØ dpì 3ž–ãág#G™Õ‚!ùa±ôqê©`8Êò¥)ow¢ïSWnE'•h¾Õ¡Þ.§U±"sÓršI™3)ÃÕ|eLô=t…EqFºFuÎÙx'Beà*`csàY+5!xN!éL¬l1ܲÖs×—4ΤɆ8öÐ>óá:¶´Y½jX%÷—¥eªr8ÞsN…Ån|½­8dÛ{45ÔÌÅã(°‰“¼ẍÐÈ F)7 Ã¥ÀþÝq_ÖeÀ?["~»¡TßžFwºI¹“*©Ò+žáÛcë{¢wÿ ¼ÛSEF»3½_Òã •ôó힇儲„þ@ç€Ã@W%_pèj[.÷6ÊVÎq#ìb­UÕd«FB¢±¢Uh3:ŒÌ`Í]™L`á ៖‘½œÄ€.Fƒ3²8 7è‚fów×´Õy¾aÌ9Æ^(\ g]µž!ÇÅGp¶Á <<Å–`³4 ² ~ÝW‡Ð'—¥-´¼w–•n¶H-ˆà·@e÷¡ïîcÝ· ˜Ð±? .8¼ìü肞ñ–pÇÝœ3p| Šæ.é"ƒ*‡ló¼O¸•¬^•?æB—˜m">_Æ,]Ð-L63ÑÓÀ 4wú¡è Ez2¿ “‹—_LxÉNàe†XÌYØy~áÊ C¬0¼®:0™UÏSFj‡9ƒÛgv‚­fj‚­fæÌX°Õ¥Õ’ñpíª9O\o•²ÿYÓös®˜P£å½ ‚u̜졑Ç~uƒÑ9½¦6¢Ê=¤WwͶ.jðˆ]x£A; û8#ášr§xÁ€KÈ–{ ’gÐ[®¼ ¤f¦g*NmUHƒ¼Ò°…YJ‹n”¡gÝœîö~‰\Ö<{VqÉeåm¾PÿHð†øšRe@‹¤„.q«Bæ°cNë­âÄr¦|žþ÷ˆ/°¾Ë¢;ðP/ÖAŒñ–óÁ·  B±n>Ô…WY”è™Ä„W’š>|Á= …Ó!Á'×ô}sฬΠM߆¢ââ9òüaÐjëîÔòƒ|áÄúL&åªÉ°€é¨+Ãg&f×öåðª3ÞT݉žÃ`Ùö&. ɸ¼À)í©®å ”ìßõ?áô(ý³;oýèÉ Ù\8äŠÊÍ\³“uý1±ïPÖTß;pr~e¤…ô5ÑÙ*yðÂÁ©¨E UmøK1Ù*'yc;ïrKµY†ÿEß{!n‡*‡+³zìê©àb­ÓGáë.)­àžo?~¹ý'Èìtendstream endobj 953 0 obj 3250 endobj 951 0 obj << /Type /Page /Contents 952 0 R /Resources 950 0 R /MediaBox [0 0 595.273 841.887] /Parent 934 0 R /Annots [ 954 0 R ] >> endobj 954 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [494.463 320.367 508.402 330.367] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 949 0 obj << /D [951 0 R /XYZ 72 786.278 null] >> endobj 201 0 obj << /D [951 0 R /XYZ 72 719.477 null] >> endobj 205 0 obj << /D [951 0 R /XYZ 72 698.281 null] >> endobj 950 0 obj << /Font << /F15 393 0 R /F30 512 0 R /F27 394 0 R /F37 380 0 R /F26 391 0 R /F39 496 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 958 0 obj << /Length 959 0 R /Filter /FlateDecode >> stream xÚíZKãÆrÜü 9ÀªÍ~‘샳÷ÞE<ˆv`PgÄ EÊ$µ³“_Ÿª®jŠ”¨™1,$ì²ÙÏê¾*J.bø“‹T-Ò,*ÍëÝ+¹ ¿ûE(}uÔÓX-¬Á·g:.CÏ¥¶"K,ösóê›·Ò.d,\ì7·¾ïÍæ—èf›×÷ÝÕR§6êzþ-ßo±d¢ŠÏeQ¿†— š·µçÕ]Ó–ývG6E·nËÕÕReQ±á.øšFÍÔ}ÆÿüÐ$*k“S7jjilÓq§]^7-õÛæ,O_ÔôÚû*_Ãjÿ¸ù+ìd)qËÎïh…s>B7­ý2ðØ],‡56l©æ6ïú¢¥rÕÐò÷‡ýr¼5-Q\Xà›·*̤HtÂØË öî{MX+¸UÅþ.h©X˜%ï¤ÏÏŒF-ìÄÅ2‘Á„8Ú ¨TWK)­Œ~*ú¾¬ïðJLôqO'˜‡:}º‚š¼Íwì°›‘ ŽKÅÂ:ã'¿Þï«r ã›Z›h×T8ø ÑIÄ—Ùo©^ѤZEà Ȍ÷û§™e¥‚m¤Ü!¯74—™™K%"Éô˧Â{í˼*óŽNæÍÛUÙ·yëAE»òK±K0ÆE?=”=éÂЛ6Xô¨'Wƒ¢é ôXÀê‡+¯Ô¨tK™aR;ѽ©XÍ[v¬‡k¸- Rø Õ¼¸0Ù«ïnŽæk…±0«sBÚä²±_)…Ì…7ü‰öÃ/ëþji•näo×× U`ëEõklcªÚ+®—AR0…)—)<ã,'´Ëm±¸}µ4Zdvá@!ÌBgB*=Ó ãud"²,¥ö#¹$X$6v3Q•°›·3Z’ § ·ã¾ÂN5W‚œöØoا6Bƒ–áve2#çR åe"À0gööó¤hÑRfÏÁ1ª›D¾;ì@ •Í;Ç 4i„ö74A±'Ðm›C…Š'㦴RpP8³†Iê‚`¨%¿ýðñç™u¬ΨÑI‹æ”FÊŸ¦_¤™[ÀHáÒl²ÀûïÞÏ¬Ä Êù@«Öit]Ü—¡Ê£;?_YôX‡¢#³Õ Uq’MÌ6oèÊ;ð<CbÔÌ©dBË£ÌEÛÖÍŒÄÆ8A0D Œ/äû}ÛìÛ2ï‹êñ*K"Ü€ûÍ–ºÚèöP¯“Ç8ÂzdzWÉ ½e·†\zPü—ÇvÁ ¥Àj³d²{¯sF¢#¿ÍUO/pn‰?7z剱8ë 8ã(.1/Ñ °AÔYÐ2,–Ö‡¶ –p.š%åe¬º†Jƒ‚ãË-ñ€¨Åk‰? eŒ° Àø0Ê®;°[è0ÝCß\‚ë<´ûjpýî ®?7åæÿ ýAÚÄÈBûC[{ÕŠõD-¡mŸSõ½Cõ, EOlvÊGL|‰àà>¬øWª8çA(”g$Ž ö nÛ‚•œsèße_™2•`ÒuÁиÏÛž˜ÕmÛìFÖb¢ªìûŠ:z&ýˆþqÏΧëðl/wÅd­©+æïM]„µwûЧsð\Qbx4ˆ¯„s NŸ¡œGy£©»1<»ÁC M£;Ä×~›ã6 Ȥê#üÂK·§c\—¿ÆÒx †ÚÛY§Àåe©|Æoƒã ¾ŒjàóÕãœÅÍÔcüøãws ›Ž"13U"ÒôE3-µƒ˜59ENЪô~ÃÚQE…U6}“¤×‡mb1|ÝyÍcé¼±²nèÙV]wO €–qÉXënà:Á¢2ào܉¬ mÑgãILtW=î·¯g›ûˆuÐÏ£*Â…KVt ^T´"^×6ª“Ѻ©šö„þqGåÜš‡Øë±/vùžGÕ›æ#4·¼f712n ¿h4±†Ñ^ì‘tàùÐmõÆ núBWö‡~ý7CF‚ç[SŸ ¬„üùÑW&c»€ ÖM aeQÿ ÕÎmyRz àï)¶ìºrEú}r#0ႈ¤r)èE½ÌY¿‘°E'Ìq•/zÀæOÍ¥2Bšä¨øñ’¿Ã »©OšXߘ¨i»ýPÓr¤È(ÁDDŽGÂlŠ}¿í¨ L¼T‹‹§¼”‚ÏØM‚O_áwÛQuÖ³,Àï{î5âùñÔ.½¸ÉŠØÌ³1]å+¯õqÇÝSõ§?¦P°¦ CÂ}¦@JÊïÀ¸Ž³s¤ pˆJž ]LöÍÌ4¨ø"3fŠñ þÅüÐM²u>uÙŽCf¶ˆiÚí#Õli(k5:"xä^¥ îí˜%¤ÑA±íeŶsŠE×Aèc.Љg7ãçÉ$®²Ð@éæ˜dLáÛ1Ë¡œŽ2ïâH&¾ #e°A±ÁÀ/:½Iú¨hypyK]i,<¾ŸÒa^¢¤c)Úšx¾rV¡¡%r9<œ0VØ·‘Ù‡*:Qv‰H”ÉèH‡ýk*å›M‹áƆ_=nÆQkZý³X÷¡á[â¢B°Ú\r«Â ¨ÎÝ€ò¥IpœªS*9òè°ò1ØÀ†vÐSx ‘=3ò~HBµ÷q»?_õX ¸Ä1)| ã0ò˜|>Ù¸IéžÕª°£oi2Ò—$aÐ6rHIf9'K9L¿¤/]Š¢6=´`Ò.â V ½õaõ]á?ù°÷ž5Y)§‹‹g.,﵂×8ŸNK0´0QÑgâº%8ìÃâ‚"P¿ì”Ï wEqêø@§…þx«ó9¬Å¶ûE(}ÿjZaO§Ä¯Næùo‹ñ>#ü$(ûœ ˜ü>¿;ݯsìqÿ˜ÐZɳi]úò\œ6NŒo(âŒ\ÎId”?§zr%XA‰ÆxœËÈ¢{jâœ3¶çTÇ!‰‰cN©óh û5÷täKu´)Û‚Ù,¼a—sCƒ‡Ì(Nž[ó `ÌQûèñü'8瀖1N¤æk&uç™åS¹]ýLnW?“Û5/ÍífÿÝŒÒüG?Àë×4…ެ:ò–uðAòj¢w¤—êD/³(üø`ÐKâ;Ó—˜XÐ QÓnüP˼ÓâÏ%îCìo9É€Î6”6Ó–å°v&]î:ªöf‹/.ÇútŠ;¯)4¬9b±$ ‹¸:’(ØÕùîŽ>]§cŸ®³pÄTGeÊ`AßMùç¢Qî èR>Øw6H™¼ Nr./åG×ó7K²'ðR|ÁŸI” IéÍõð˜Af".‹ÍŸIj…OáKãùOðTCž›cœ=Â0ü<5|²4òRÔŒ‚qÞúŒ¯W 8 ÚÝÓcÝ=ÁŸ¾({Ù1ÿãqƒendstream endobj 959 0 obj 2888 endobj 957 0 obj << /Type /Page /Contents 958 0 R /Resources 956 0 R /MediaBox [0 0 595.273 841.887] /Parent 934 0 R /Annots [ 960 0 R 961 0 R ] >> endobj 960 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [94.621 282.186 108.561 293.095] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 961 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [155.032 282.186 165.941 293.095] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 955 0 obj << /D [957 0 R /XYZ 72 786.278 null] >> endobj 209 0 obj << /D [957 0 R /XYZ 72 719.477 null] >> endobj 956 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F26 391 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 965 0 obj << /Length 966 0 R /Filter /FlateDecode >> stream xÚíZK“Û¸¾ûWè¶œÔKKáÏ21ËrÃD–Ï–»|F÷³Øú;ôÑL¥%Ó ¿>3q®tΊÂ@C1%³ëó¯ïÁ9ã¹ Z¹{ñýk‘ÍxÊŠ´˜Ý­ýœ»ÕOIY÷7s-trÇyùò׿iíã?mupÝÏ©NiìPwå¦v+úªšzC­‡mÙ»Û›ÝýmÆeÆ”³9Ç#~ïkË6@"Ó´.ýâ:=Y¡?»@|‰Ee—÷pdŽk^¼º{1×,ƒ+›Édªƒìà>™,òYëfës%Y®AF†¥ÙLæŒ 95n+tF¸ayžÑ„£¸S¦ŒœÍuÆèG”˜”{ ~ÿšëÑ(‹PaÅÏq¶¨„†uüá¬R1 Z†Gæf‚Ñ9ÜAŽwÁ8W'}2 Z+`φsœðzÞh“x-ÆýeÒÔÕ#¶xÒou $s$é¹X”}˜o[G]‡Î­ØÍ\ñ –ÃÛr³¥ +÷ÑïQ…•5~õ¥­JÛ•¨]Dµìhá}Y¯¨¯YSè*.y‚4à¿Í ‘w¼—–.UO{éf‘ó‘/F–¢3k Ë› KãYÁ PƉúËûï_M›ÁVfÚpq+×-Û2\ZpZ–>}ˆA,Ýž‰kp{W=a½¹æLòßæL $úBo"ßÞD#o²CCò°.…Ù®ïõúÝ>pƒ_²ÐǼ*À'JÖz˼F0TJMÂNà?–Õ¡ ¾%beà ?´â ÙzÚ´ßÚ0êhû-}Ùz>¢ãàÙè“Û‚ì§hz(’¯éãqá µ)˜ôôñskJ«ñ¢pdA~‹:˺ô<ý¯S•Ø@qñ»¦EÔ ×_úX×÷.úò¤þbo .|àÙSão–~ñt|Ã>X¾¬”H¼²1¢FÇž$zfßÑo["”Ë܄ܺ£àâü|X3€_6pæCB rpØ5\3~üzpu¬hνããg ÐmJî¶~ø”ŠK²"oíó‰à$d2ô5Á‡]`r÷ûå7Ó˜< Ü÷Dî¿9r9Gj–æÙr´o Üüá~•pŸ/šzË5ÿÂýVQÒ[×R¥ú¼æSÀÇìù©4[û;%aûä1‹É#„½m{jÚÕ ’ÌŽ>¼ƒÁÎ:üŽŠP4<‘˜œ¥<æWÊNBøÍ™éV ëƒ=ø;2¹ð  {9„0½=eàà gú¸°*%§B©¯¶eß»:ÿÈ;ã„Û5íchüÂô³é''<éû}UºP‡\ …»4újC"’nq’cÃʇ²ªŽìM屚Âo£ÂPLp>Î O,{ª U¼i=„w ²X^¹BIrf21¦ôöó¤r–óll`þ,>”GRâIŠ QçcŠïÿ[Š#… ª£ÀøQga}ˆ!Q”J“š*DªtŒÜ‡Â6ŒmpM5)ÿ¹¸V-ã ¬Æd_bÈ€J*¢*PÎ cR*¨· 6¥Fyv.mUy%…»¦š34‡tÁ„…è´(˜á§dï0òNµ/¢ô[ ªT%Ê*ÐÄT fÜ6qdΩˇ¾°°u˜mù9•^ðǵÀíÚ¶n¦+‰BF,$ËAšÇ9Åü9°ËeÓ®€ef®ð"Γ˜÷<”£I)ítH‡˜–'Oñ,0nN ‘=ÿî •Á*y3—À“vpeò²¾A,9¦Œ—ÃR¦ Úèåå„ìu·oGÕLäd™ç¦\”¤¶”Œé3gZÒí,ÞÎë 5 K˜óâ<ÿà¿þM”ãJJÙc†c€fëCE£@žT¶Ý8jzŒ¬íοCQÿÎÞû7³Ë—Q«rx°] hf{\Eo_Þ¶`gúh{˜•»Xµê»Þí°mÐØ›C»tñõ…rUàhßÇ÷&PÅ}x¥±­ /Oš*0¸Ã·3ª&ãæQÁ.ÁÙ®ÈÝÄìÆ5Þ[hEæ¨ý3Ѥ)mò¤¢÷öÝ›·S=ïâDñ¸k,ò?8d’æ´hø?NG`œç$vnUv#ØÔWL˜§`8yþ%ʹ,ð_N_Ø> endobj 962 0 obj << /D [964 0 R /XYZ 72 786.278 null] >> endobj 213 0 obj << /D [964 0 R /XYZ 72 199.968 null] >> endobj 963 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F26 391 0 R /F39 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 973 0 obj << /Length 974 0 R /Filter /FlateDecode >> stream xÚÝYKoÛʺtþ„D¼œ‡ìÎMóêM\ÄÀEÑ´4²ˆP¢LRvÝ_ßó˜¡H™–²ê¢ðBÙ33ç}¾3³þÄÌÊ™ÍÒXÚl¶Ü^‰ÿý˜…ѯ0ǔڨØhüº@¸” ©ãȨxó²n ¡ì)fêݪåk!hUpÒÄ)H§L€óèÄ™øòõ©m>ɃgIAÎ;L“ÏùRÖ_ÊfQIÃÀoŸ5aÜm(“#ÕÆO- ¥ÏœÒ'Lœ&_œM£Ê=`²t•'jù·u~×íK6W*ÕQx ÞÏîÁUc)#OâDe”þª]ÝUÀ‰°<ª¯äpôÎaÈ ŒÁJ›²EX•G×kÊò8»)ä¤Ãïö±ì¸ð`ÊWø+½—Òð¹b´JX‘¸ ÅtΟ"¬ÃŒtˆ@0”' íj¨»hL4îþj¦’Ÿmù¿@Á¿£Ø;ñg©ó0‚wÎNTåíT8KÈ´!æÙÀÂÑÏøÛ×aJ˜_dnð>Á7äÿ2ϸèžAL\ï{‡k¹’o ¼ãéˆlÀ>‹¸eù=šÁ€öèî…’/çZý¯kþg²ì±ê¯«ºðtdtñfz^N¨oÐ œ 8Ý9@¸ÿ @ ÁgÌÿ °çÁGp×7S…Fi¨lªéZL¬ö©_çÂçØ<‰æÆDEuðŸÙøË¬sIŒ;ÎE°Ð66=Äx1‚Á»³PƒõÁ³´nêíÄÙVÆIšËÝ?}ø8q~ ˆYÊÀD=Å'6F££>ý}²…˜“çö$!¬¦’S9´œò‹Uß`&H½ ”õ=•퓨õIÔžO¢®@„|1‰Z¡&M€¼`‚Q¼ý ½hè¤8kM¼õåë—wÓÝš´âØ­!XŸ<`±ÐùâeˆäØŸéôèÕT°lÄeXg‘ÄSëih g©¾Sµ&x7ƒpdzáðTlU}2LÕØ¦f/½$[WPó­¤iÑSpÎ$ˆiªŠðFDJÝ)ŒHìç -$°d³qá;cRÙ¸X96¿e-;˜fÅX;?žS€>€ŠjŒ¯Õ]ã 9 °w ˜Ói!¤…yeƧˆ{q™}H •Ë8ƒníD’¹‚ZJøÀD]•À.Ï6Œ½ˆ åße1ưžpÒ? L8 Å‚ ~&Ø DõI%æc»–®dÏ…ÚCIà’¿È4óü~_Úó;8C­ ã# ýœ§ÃUÙî«bð¶Qû—vÙ0æR2–Û¼­ÜCÿäм®x%£+Wu@R¼YêZ‡‡—îÙqý³Œ³á딕žv_Æ^åé¨ÌbΠ\£\pE¬ç !ŒˆÞË9òÅø/óGf:ºÞá¼G‡äÞ¾2}¨žö›vÂrxa›œ×€ä DíÓΨ¥Ó“n‡(Ýñy4&kj•RG3ËbØnáÛÍT¬@rârV}ö–X‡–n´ÔÿñÝ%5¹äÙuÅÞ2Më{Û¦¨˜›}SƒËm[ïO©u>î7‡/Rx%úD³ª°õ” ?Àb®Ã>4É£¯;O¼-€'"ñò1Œû6‹ž&Ð"@§÷â\® ¸C_\&±Mè2¼cÿè_´=Üäé‰ôõËOñ/Ÿ¥¼ñPÖ‡–u ÆO¯œÀ ¯·¹陟cÁC…ú¦°hZžá¾‰Td¤!%ÒÓ'a˜™xÆZ¥²P«„ïŸñ—Cü~ ¥Ä‡p€A lÜÚ5üF³T̯¶‡[ìËCËÿ¼7fiê¶ÄKü+7¤O(Eb|Ò€Ï'0굑¤Ã厃ÆÄ,zE5KW²k¯x½­·î‘߀€j[ÐH<ïÓwìÚð¨krËîù¶ ùPnªô&<<=6EXt¼6r |'z[“!|EjfÑ¿DØ ‚¹eMæ1-AIi†1 }Ý6Ø †=Ge˜^ÈN=†ÓžW ؼ¼Û„Ç2øDí”cƒyƒ³ƒÿJ³ÅŠ‹ûUqç§)G'!Q‘VëaWÞ¼}xÉ5ÂÌHU~•Ÿ÷;híá£Ý”k~ë€mÇgºQK =Hõy/ü›Cb®¡6íl+˜ŠÓ›$`z)ÍËIå¿ïù‰endstream endobj 974 0 obj 2399 endobj 972 0 obj << /Type /Page /Contents 973 0 R /Resources 971 0 R /MediaBox [0 0 595.273 841.887] /Parent 976 0 R /Annots [ 975 0 R ] >> endobj 968 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 30 20] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 977 0 R /Length 978 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™k©à’ÏÈJŽendstream endobj 978 0 obj 29 endobj 979 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 29 19] /Resources << /ProcSet [ /PDF /ImageC ] >> /Length 980 0 R /Filter /FlateDecode >> stream xÚí“Á ‚0†9÷Äo)r# QnU^M<›èÁ¡#8èOŸiNN$þMèkûú•¾÷G Å}ûõ·»x¢¥™¤Äö«8Š{%ë´w(*!Ë3ÉÓ¾J3y€Ÿ,TIQméó×Âõ°ÒZ_­Ø¨ëz&6Ïs6´Œ¶mÙ˜#cÌÛuÝÛêe…¡snš>8w<ßaù,Ü@x<é‚£”Öß¾±r|ü-&`ƒ О|Áw3ãs:Àú!åUÌ„ÜùX®4·Ä ÃÐ…á&.EDˆgÛqeWÏ Çó¨ÿ“_ºÄ®G´/{)Äendstream endobj 980 0 obj 255 endobj 977 0 obj << /XObject << /Im9 979 0 R >> /ProcSet [ /PDF ] >> endobj 975 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [393.34 169.824 398.794 179.521] /Subtype /Link /A << /S /GoTo /D (figure.2) >> >> endobj 970 0 obj << /D [972 0 R /XYZ 72 786.278 null] >> endobj 967 0 obj << /D [972 0 R /XYZ 120.726 535.822 null] >> endobj 217 0 obj << /D [972 0 R /XYZ 72 217.517 null] >> endobj 971 0 obj << /Font << /F15 393 0 R /F33 497 0 R /F39 496 0 R /F27 394 0 R /F26 391 0 R >> /XObject << /Fm9 968 0 R >> /ProcSet [ /PDF /Text ] >> endobj 990 0 obj << /Length 991 0 R /Filter /FlateDecode >> stream xÚ­ZYã¸ò¸òü²ˆk)’:˜<Ín2É$AÈ4°Ù`![´-´,yuÌLç×§.ÊòÑÓ¹Ð@›*–xëøª¨d¥à/Yåz•Y¬óbµ=~•¬øïiZsÚÔĩŧW×smÒ¸ÈRäÿöñ«oÞ%é*Q±Snõ¸#ÞÇêïÑÐýÃÚØ"Úõåv¬»¶lð9‹Êc7µºˆF|Σn't~<ÕŸ}ÃÍR8šÙ?ñÃPÿÓñÃ?ÿôÕïçÅi­c“8Þü´ ­ó.ÔÊÄ.uóâu±Êc—/—ž$×£±ËrØwxóKbJcí ^ÇËÒù¾å=/B€VÏÍCÙVW½§¾Û4þÈÔz`bÍB컇µÎ£jÚú ×½Zk“ÅiaWëÏËÑ„ã…imùrûü|Ê¢-Žq(ñˆp~"•-7%v~Äž)Ç®—Œ×òx]+¤ÞŸz?øGKÚåªE$ÞT”Ŧù­œ™|{<ñúHlôî&îzæòŸqO¦(¢zÇc?ã@ÝÄWj/•_œXΛŒ'ªëÛ¡EŒØª¯ïô*UŸ@ŽA0À«”l½GÇ‚­m×tÒ[ðV‚»HH2­4IXÈZôzÂÞǹHãÌß¼3fa­ZÛØ8-6û 渰çDÇ…-„¡ä]ÕeS—¨Í™.„ª›†'|jƒWãí¢=,qÞཕ%ÎÅàŽ¿´²–n…A³öX[ĪȯÔç4ÁÌÚêhSÇòÄí‘׺‚îÅ>ÅÛ‡²âƆ\¥‚G ~äÆ(/–û}î¾YèÔEžËœ…‚Ÿø¡©xYD,·ØžIøäLö÷éPow„ AJI8ž›-„Q pÁ¸#‘)\l®|ç¼K0˜Ô¤Ñ·¸ “ád·ÙµAgbÐôñDow`ýsÐËH2ØÐ ´ít»…wÉy@ûhlšz dÑTê^¨™¬tvÃoîØOSæà¼KÜû3?<ébŽ!ç„ËÌ"ƒÃ!oo1Ã>†btƒøú®›z¦Tõ°v;^Nî™ BwÉ“X©-лý‹ ð¨ Lh°»PiC#¹—G)Tóâ yT> x0Dê~ªéV‘%_ÎÇ®<¬ÒÞË:³ØØw¤ T£nÔd Í”é­‡Ž ¬å&ä’‡±]X‹¦¢ZN³±N.5Ž9àqáC§)jCkÂvȳˆ,g-]·( µ¢gÜÞ–-§ƒ© ®²hšÙ週A6ˆ£¢1<€P¶í4wAPßA;lQ £¡ˆÑ1¤œès n‰GGÃñ¶!dhDq̺ÕÆ´à9tÖí7Köñ'-o¼dA8¿½¥ÏL:$¨‚Üî#,šÒÒvKfž‡*P6ç’R°zB h‚¸1¥ÃGvÜØº,µ!åPïi}Øö¿„wÞgìôqØ0MÕM›‘Œ 4äÂ<• çIždE#w.†ó +Øœ¥Pм;lœ$¡ló¹úXß îàH”]ԨɲèÔ””_f9È©kÄUg7ÕR$eÅ6'ÿ\ɆŸáàýÈÃFÅu3¦Ïò¹zE;_¢Û~#F®’KÊ ¸á”º÷o.¢‡^ pJ:çHQ³8ÁÉäè: ” °v`ËZâb`bm A{@D šÃ2È%átþý46u€ÞUì_VMV3‚ìïá%ëb§³×Q  Š”ÐqnMµK~$«ÇÆÂGî˜Ãq‘°õHŽñ\ˆH™pOÇÛ Ã2‚§dTöÂRò»è¼4ØKŸHuNHy˜…Œ‘׌©ãv뇗\‹@_UŽ%X“SM#•Ü÷ΟªžEvvv4!Ï‘rÉ(ïê~Áð UÅMi;Ïwë6*ˆóÌ,§‰QÓ`•ˆ€ gä©À,÷ÔQ^¡nTöÀtô#˜½½…qƾ”’Ç #K„4pf[v>Èé?ƒQa Fÿàá½*ô †ß®´÷Á. ')¹ ¹<8ËÞ¬;r¼0Ÿ¸NYÖ”@&è\æÕ… —'Q(÷•Ö†Tµ¼c8Ô„EÊ“ #‰i®/úDŠf¾„è+f!}fÅæFnKàQktÆÅ낊×8WWu~¹Õ›‚&G'&©ÒË'Я©ƒ Áù–WÀXõ w‡›5ì_\êÀèFyàê]ÄQï8â-TÙ¨‹>ÖÃT†ÉØÊµä%K¶àBòv>Á)P}5‹>P®GÅTˆ&ÝÈ J*çb5`ßøÛ¬êDE7 NЀŸó8„“°Rîu‘ jdgƒÖ9,rf´Û‚õ«{5³8Ï36îBÊ 2-ÞÖó,tßȤÅýR†)”)ðÉÿl…ëÊx!¾·HbH–qyÛÉ·|%5Kók7ž³¦A®¹¡ºñ-nL‰•.¥ô0|Ìäáü^¾Óò°í‚ ýXRºQ˜Ñ©Ô¤é" I*ÞI1§©øÎñefÆ8™ ÷I¸<É8(cBO7  b‰ñÀUÔð\Ñ—84Ë)[ ê‹«K¹ó”«‡9’O4ˆƒî¸puSnIŠîÜhš„ f;seùDËá|­‡XŽ?@ÜLžÈàWáÚ/Y|õ€£I-O/öðÂdz óÌß„5‡›Lx mNÛ–[¸­Â8´Ë†¼?%@ •Õ¨t± ècßqV\ÉË\hârràWwªáNʼnJ^KË {ÌBáé(%JAùÉ´ò »èƒ„ÛϾ݃ÅɉÑnΈyßv©ì2!> ”?‘‘oRÎzƒš éÒxÌžy¤¾Z¨PbòÙ -™D2{ø2 ‚¬E"ÂÄ¥o|­¸Ø8¿F¿’ˆ`>BrÁà¶x!äJ!¿`ò[þ0çºÄFA«} 樕†,°r¨Ë®Tl\±êýj·KyaП™>Ã,XØåÅíWpß¼³ŠVÆÎ¸P–^VËrx¾î‘†“ÆÔ.êWi6_Ç"e?·øR©’‘aýïž™5¼K._­à”óP8äKÙP4\û«ÊM}N¨È¯ô³ÃBÏÛq˜}9È&æD$”šSúXF°\œ” >üˆlÄÏÙú­œÆCד[HYŽ!“tj_‘öïèC97(G~¶e§-Ž×"êš)|‰2Mb£Ÿ'J3åò,‘._—\m»Ó‚eþL‡âB?OQVü}“ÉŠó뾸y¬÷”¿<Îée˜¥ KèùÃãKBg`Ò¦zëÙ¸¯ $¨µ›×’0¿¿uH^cÔ A’½–0d7)‰6:†<õåÜò_* Zöendstream endobj 991 0 obj 4047 endobj 989 0 obj << /Type /Page /Contents 990 0 R /Resources 988 0 R /MediaBox [0 0 595.273 841.887] /Parent 976 0 R /Annots [ 992 0 R 993 0 R 994 0 R 995 0 R ] >> endobj 992 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [294.319 748.292 303.286 759.508] /Subtype /Link /A << /S /GoTo /D (Hfootnote.11) >> >> endobj 993 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [122.441 531.505 136.38 541.202] /Subtype /Link /A << /S /GoTo /D (subsection.5.3) >> >> endobj 994 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [319.427 305.559 324.882 315.256] /Subtype /Link /A << /S /GoTo /D (figure.3) >> >> endobj 995 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [459.301 291.404 468.268 303.226] /Subtype /Link /A << /S /GoTo /D (Hfootnote.12) >> >> endobj 987 0 obj << /D [989 0 R /XYZ 72 786.278 null] >> endobj 221 0 obj << /D [989 0 R /XYZ 72 407.847 null] >> endobj 969 0 obj << /D [989 0 R /XYZ 88.587 141.006 null] >> endobj 984 0 obj << /D [989 0 R /XYZ 88.587 119.088 null] >> endobj 988 0 obj << /Font << /F15 393 0 R /F28 523 0 R /F33 497 0 R /F39 496 0 R /F27 394 0 R /F37 380 0 R /F30 512 0 R /F34 583 0 R /F29 547 0 R /F40 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1000 0 obj << /Length 1001 0 R /Filter /FlateDecode >> stream xÚÕXKÛF ¾oý :Ê@<ѼôÐCƒfÑ´I“ F‹¢)‚±¬µ‘¥$w»íŸ/9ɲ-¯7z(A43É!?~¤Ìƒþxˆ Ic&’4È·W< ¿Aÿô#쑤Ғi…« ‚ó^r.Ë¢ø’¼à,Žã`Îe̲,Cñç‹«§×\<Y°¸q¢‹Õï¡yi>ûcñÃÕ‹Å K&¥$Ï‚Ogøÿa÷Ó ë7ž^oy|W_½» Þí]‰“‘ ‘óN,Ï8‘Éì³àƒs¡9 Â&˜Òœa2Kƒ¦nö!îEUÆøÃ¾^Ûõ®)fs©’P>›ÍU¢ÂÅÝL¤a›i˜×Unº¢‚+ÚYÚnknÛ'°ÒÜGüHÔÖm­êÊ+_š¶WÐzEþmÞûƒÒv­Ö¸ŠCS­0˜à0`®œ‚<‡ÄªáÑ©Æÿw]i«¢¥j€v›Â ¼¸*ËbÅŽó„VðÉ%\¢ g™Ö—³¤$HkÝø3 öè9ð‡•%à͹J™ÊÔ9 ˆ”BT(@Ŧ8ˆ­_ÜøïÚwöOL¦—Èg" 7¦1yW4'áQ®>†6¤„‹&@‚qÁ‘OS5À_ÄÕŒ+0â üf¸XªÂëY‡u³5º|§¹ˆ˜†Ð¢’çÅMí¢%âp]n… m…Qè°Ž„íö¶,¶íõû«¢3¶liѹÃú¨ŠÆ”´h»f—w”Xºƒ~C®pngs³w‚{Áá>èMKg«¢Í»$q‚_YÚÝæ×Ü^pÿ;[–ø¤±¶[»*Z9?ñ¡u×¢ç£Ü»·Æ¹§­»MÝzíƒ"#ÿœÆM î*ZÚj¯Üaò?2V,ÎÈ6äQ¹l÷ôq(¥‡ ®Ž5j(.uç51¨à˜qüLÛî¶þ¹Û”ÀÕ$b€·:ks±X#©ª,\7Öq%Ý{àBí™ 6ˆ®,ܳ䯴ž.˦0«{óyv¬$››¦±DÃ.üèrʱ´+o™¨FÉA5Ö“ô³›…½º%.îI¾-º –îéàYû’h©¤d4Š¢ÒŽ²(”o½ ’ Ç ‹"äPËØ‰Ø‰²!ž{™÷ÛbíJ/FÛ°£ÏU‘ûðƒÁ²÷5%_!-ÆB1êÑ4ųcÔì“ =7æò?A‘±M0 œBêë)pêËd9Âðy¼¾v…Få:?ŒH3@žŽºCni~CqÉH#°§Ké]ðo¿]|¿øí틯ßüòb"QæH{yläÏH9Ù‘˜77ìgìzã€ãw¼¯‰÷Øbc‰jp‰0ßõjÏ®èDƒÍtÌtù®iAxT”¸ÞcsÛ•÷¸ŽÉ<è#àLâÆa'(huÕ¿è¦9”3Íz·b‡GÖÛªŠbU¬žLT¸’©X_.ñ†/V5Õ|l‰Æ2ï圛º¿•kqXê±D¸ &:Äéð¦§4áË '`éU%rh;S÷áQÊ"¡ï#Òó”Å'.£X‚•?Èü3a¨¯æófÔØŒ˜*8–fGÄxjæÊDÊ/3„÷¸~¼>eÇ6ˆýèJOÙYZs9–>Çø-à oôC >ç¦-è+0pßS‡dü==€( Ž7M½¥'ŽŽ'Ÿ–ëÆ®qžÁsäÜ#¾€ï¹àù1¸÷oŽŒ =®Ù½‰ò;dˆ¢ZípqT¸çGzî‹Àm £¼áq|zÂ\°wç›%W{¹ªøËŸæhl?º0\õ®\‘‘ÙçЛóf—ÎZošHøôŠ®wõß+ˆûß5¹çFj؃!Ø ã0ËôœŠmèäó¢ß‚ð%Å)çÿƒ¶þ RuÔÎñ›z¢ã¼7ÝÎ\z¢›¿zùÓc»9šôÝÍú! oä4<:˜ÁŽŸ8ñ¨ÛÐQç{XŽ=í¿ØI¤4ý×$Õgé`•K#*SÖë{Z8½YäMÂÆ9®ÀŽ)jwN˨ÝMµ!c@Güß´¶HÒü Ž7ŧm\ À+øê¤‡ƒ”'Du1ÔÞKßÿ„Θã åñP‹Óð­­ÅgPõT‹KYÇ_Üä¥Î“Bå{œõ“¾ÿeâ8FçKù4R–œI—ò«1–'¿xH¨.ñ@µÿ ýâ%0endstream endobj 1001 0 obj 1729 endobj 999 0 obj << /Type /Page /Contents 1000 0 R /Resources 998 0 R /MediaBox [0 0 595.273 841.887] /Parent 976 0 R /Annots [ 1002 0 R ] >> endobj 982 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 177.999 137.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1003 0 R /Length 1004 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kh à’ÏÈOå¶endstream endobj 1004 0 obj 30 endobj 1005 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 177 137] /Resources << /ProcSet [ /PDF /ImageC ] /XObject << /R6 1006 0 R >> >> /Length 1007 0 R /Filter /FlateDecode >> stream xÚ3Ð3T0A(œËU„†ææ`QCcCÏ ,LA*ôƒÌ\ò¹ˆÆ iendstream endobj 1007 0 obj 50 endobj 1006 0 obj << /Type /XObject /Name /R6 /Subtype /Image /ColorSpace /DeviceRGB /Width 177 /Height 137 /BitsPerComponent 8 /Length 1008 0 R /Filter /FlateDecode >> stream xÚíÝÁrÛ0 „aŸûþïëöÔñĉC‚I‰ßÓÔ¿—ÀŠ’žO""""":ZÇÃ"Ð+?!•“‘x¯þO?§3‘x¼È‹ÄÿêƒßÊÊ  „jÜ8¬  A_0uÒ+²j(芣‚ÚHH˜)dx°wàáýgE–ñ–™ƒÑƒFxhG0ç ÑB¹e FWŸ5r?A›q§ 4e€Åôòm÷-J‰5 ²°ì-S˜ŠØo*h¢·úù*²þ”µ×¿ÿf ¦Ž¥Ü`˜9´¯êçÛ²’ÁþSYsƒöozú>øë YA{ÿ_A0‡­²£q—È5.æ0³èJ'~—«‘ñ"†Di0‚‡:Ò‘`[> ÆÌÁ¹ f±kXx¨ëŠZ.ãaÚ˜™r‘«+uì -Á0gÌÌE"0Â`ÀCiìKE×~Q÷ù´x¸M5Ó%ÃÖ"Qj±ŒZolÊw£ø5bb› ‘Þ(~þvw²bû'YT8$y2ÏÐMx8– 0‹Dc3‰‡ ¥ üQz“³å›6cÆ–½´^`XˆÄÌËÌaç ¥¦éµÃò¶0±9¯ 6Ab‡:‚áÃc–QàáN»Æ`Mu’òP‡„«™WAbΤàЬ¦ÂÕ« U|x¸â×f:†«4é©öä¡+.È:"e̼Dç0Ç(˜Ãµ:É%wÇ0‡ý‡‹,*Ü~uÏžû²ñp¹®²‚ oß;‰gÃx¸\1NÎøcÏe7**Þa†Üð°ùL‘NEï¿¥Lk¿û*²¾ÚHØv/˜?¤p†Üú–l9`XÌ9Ÿ{ûæ$]d:`XÛ ìS&/°X»Yôe¯æ¯=Ì4/Ãø«¯RBéÏEw(n“NrÐ%²Ú·Wì3YŒì)1‚çAm;fv}NÝ&ñ0g²Hù´sè­5ªÇÌÄòÅ6‹XŸ‰‡ÜÍ¢‰ŠôI'Yj¹Ë[z‹ sX;¬¢"v¬BY«c‡UH¨73¶M–c“9lFUÅH¤€‡{SáyP{R1mäOäAùnCÅsøê& 1'wŠ Wi?æ¨Ã ¨À•…NÌÁöÁPÁlx@Ň“Ø`@Å—âžEO·ÛP¨ÖÌáX˜á¾-7èµèx ÞÄšà Ĉ9 „ÒIs j*,½RaˆˆˆˆˆèŸþüoMÇmendstream endobj 1008 0 obj 971 endobj 1003 0 obj << /XObject << /Im10 1005 0 R >> /ProcSet [ /PDF ] >> endobj 983 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 177.999 137.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1009 0 R /Length 1010 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kh¨à’ÏÈOì·endstream endobj 1010 0 obj 30 endobj 1011 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 177 137] /Resources << /ProcSet [ /PDF /ImageC ] /XObject << /R6 1012 0 R >> >> /Length 1013 0 R /Filter /FlateDecode >> stream xÚ3Ð3T0A(œËU„†ææ`QCcCÏ ,LA*ôƒÌ\ò¹ˆÆ iendstream endobj 1013 0 obj 50 endobj 1012 0 obj << /Type /XObject /Name /R6 /Subtype /Image /ColorSpace /DeviceRGB /Width 177 /Height 137 /BitsPerComponent 8 /Length 1014 0 R /Filter /FlateDecode >> stream xÚíÝɲÛ0 DQ¯óÿÿ«déTžcH‰§—®òPÄuc %]­×ëeè‡OH@åd$þþ§×é@$^o²>À½~’eè ‡¨ ëï!$HEA]TX áf'÷TXºsx€º2*é1ß_„´T€ZŽEâ?gðPq_·n7bBñ¼´=¦o‡ÊB“oO÷-ê}»êb+‡oÓ«Gíß5Æ'w2#P‡â\?b²Ëƒp¤©%Ytí>Ä6ÃC†9ôÆ%‰1*ðPPI¶o[‡#ÑÕ,€!Õºšú– 0 ©$SÍ!vyS/±a Ç«¨;V!¬Ùc‡UHPoØf.4 0¬FeÅÌHϦÂMö¤¢¬åäAøCÅ5½{…‡$jæNcÃ]Êšá`xx T£PI¢‚9HÌÌAúÀ*Æp†£ÒGÈm‚è1Fáf’ärˆ5s8–æ@x à z:¨·±&x1b„áT’Ä(› KAïTX"""""ú£_¿>ÕÜXendstream endobj 1014 0 obj 965 endobj 1009 0 obj << /XObject << /Im11 1011 0 R >> /ProcSet [ /PDF ] >> endobj 986 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 252.999 156.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1015 0 R /Length 1016 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kh¤à’ÏÈOó¸endstream endobj 1016 0 obj 30 endobj 1017 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 252 156] /Resources << /ProcSet [ /PDF /ImageB /Text ] /Font << /A 1018 0 R >> >> /Length 1019 0 R /Filter /FlateDecode >> stream xÚÝZÍŽv7 îWJKná,K¥9ÄùÏ$. bvmWSU*âC*³àöyìÄvδˆÒ]_ÍbÞøMÿ>¶3.:ÿ¬ß/ïï:¿;]=„tRŽW‹å|ï”Ø®ÐÎ6. #ŸDùJmœ5]¹änë—#·u`QRY'&[®^£”.ŒA#>`7ÌåËa"L‚ ¸Ž¿Uáåøöó#ãcÆâß©áëQñ]£M+%L™j®Wˆ›NáJµl:U|âíº!DÙ¿N¯•ݧ„%VusUG/__/Áôì]pñÖã(óz¤V®XÊ™c½¨C#P¸ 6¥¯Ró™¢"á7.dKDO"9`¨Ëc ëy(!Ó<° Èæyƒ.q`‰`TDep×A|ôz¹»ÆHW›Z£µ+'WkT„I6µtéjÙ†%µ1Ðõ¼ÁÕ¢=®…H—ß KWË6,Á]‡›»J¯× êUòŽ5\}TÄܯèÉ<—ëkʼnuÖ`Cx;PÄy÷:›B–ÝÊ{­)tƒJ6Oß¿ÁÞ/_™×£G:×(¬Ê8ÌG=;ãà5â$¶% qÔm2Øó:1)­Åubrðõ¼'Œ‚PâÆ¡e¹Óî˜ë—Ã¥X;LÊÉá­â¨ÇUîõ ã•릛S¦dTøZ3É©Œ|mºQi}žÐµÌ‹ƒ­õ^§LɜÔÜïPÝ\ŠµÃ¤\Þè!Ž{\åฆ\,iƒ§L  †Æ²gEj@r ÔðAö¯ïÑ·Êv=®kMs§ Øùv¡ˆI`;TÂÅà®ÂôÙ#êõzÄ€j6†d#¬zæ‚8¬ÞÆ€±a+Ð/8Š:ö4ä„qXk­—JЂª ´àê^’Uß1…t7-Äaª™»ÌZ^#¬ŽUyjG«·zÏ«rùŽ)·sXkíH°ZVe -­^áM¯ á;–Æá¦ÅÍe¦ÙŠ6Jn¹Èœeîš-·m˜´ì·“ÁZÚÌg”5ƒ92Ú :QšúýÐŽßU¸ƒâ#é… Kep2ºZF™REšÏú‘‡Š°«9`;Ðèò e°–v«Q–\Æ`Šm7¨Z&‚~¿´ãwf~=¢^œ]ËåþP£ƒÃ¢üãøÛñ%·«|~}†ó›Ã^»þ¿C÷-lÀ%ÿí‹Ø 9cRüÚ>ý }/˜pñÓH߬ñ3xË>û¸ÿÉÂ{eáÍãÏfaõ÷'êñC·Vï¦üož«‘Ÿ7™’®ÑÙsÇJgJ»@ÎB£Ä­q¼€3LAÜWâÖ—ù±ž½VIÁJaDáA“Q,wÚJC¸ø‚ø+Šòð n~ §@äžéŒ¨3=7¦ uxŠ“ÅÉcÀõŒ°Y”Ë3.í¥Ÿ‰ råË3«éLзfœ‘B!Å3áÆœùîÌvC”'HÕY©Œ°¯TÎÔLÌwgÒð)r!…™‚Â9ZGi…âbŠLð\nÿð!’”Æ™M‚À=FO\ЊPàÅJCFF–&uxÖʽs›Êô_!Ÿ¦Ž½ CÜXb¸j6èÉ(ƒÉCŽBIpQ= ì'†H-À `‚M$ÒTÖ»e ;èrf$TŒ“'ŸÜI(0möCS&~³èg•Â#—#ƒ_\BJUè’[ß( œ« 87;Å|ZÜ­øÍªòäÜéµ ˜ BeùÑŠ:Äá,®é‰ß…¹SÄæ*§à#ù [(ëP…ÀóÙ&\ÇCKú¨™Ù~#0xûS(ÄX#… §dô‰ù Òóž!é{ŠÄÅ`¨‰òGž6fôzÅ"l «‰ÔÝÖ«RoBmgÑC¬B÷„<¢P¤N²“I/[8§:áXÒd¾2"J„-qqé“"‡¨0â3¡_’ß„úyÕ#Z”+$¨ˆÂy1ʾ'¢\‹É‚Œ«m»)BíwaÎm˜k_¹)•€°)ïZ3BÞ ÃÀÆ™èÆËŒD7³7äeS€\‰3&–Ÿˆñ'ÑæJ´…vwS–SßB‚ c9maDm‡ZT•¶ð£RçsƒE¨¼ñ¥=Š­Q³H—W>‰tͪ‘Ñ}Kà\+[RQ-•Óßj óäDÿ1e¶ü¥0Ì{Ž£mªb0ÃâzXò† áep ì³!µR7HBoˆ„¦ ¶@‰â*ƒ¶·(Câ4¶­–5!-(¥Ék¨Á-Šor8–SnRÄ&®ÕÔ©îS§5öjm@! ×­~ Ÿl‚~VcPiþ‰Yëõ&EÍJõÁ¸* ö°JGˆÊ‰jÅ|Ê^/i iౚJÎg­îÒàÇå²Õf¤7JYÛê7 Xñ µdµ74œ°¥7 è˜áÈ­—ˆŒið‡µ |ËÖ‘Ä€^¨á] (hu·Æ&òs¢À›ŸÈÈãzƒJeÆÞD‚\Þ-y-‚e½%²ù¼a%1€zSJæèôÆÏ(Ö*ÅHåãM¦Þå¨ÊãͪÊì ­êåM¯êî±ÚÇzçeAï®ÕÈÞ«#¼KW_Y#¿¼é­¾:ÜÇ VØØP¡ås‡ŸÏ& >¿hÛˆ£qîSæ‚OJš.>L­tòyKÎg2MJŸÛ4qm´ÓÜöéOóß'DÛ" FlÒ4¨±itB‘«†U6ÒžÙØûvŽfüi+ÿ’µ~½¼?ÿò|üéÏ'ÏßúÿZOüŠ¢ŸÏï?ûàÃw|þûQ;޵p>óÙýŠ)OlžüÀ´Í4J„>a°û|Š0~Ã$>ñ÷ÏcŸ2‰ßbâ$|øÕ?™ÂßëuÿV8ñsPœ”ßÍË Œ ëw¿ÿê_"3Ouñ~÷‡)zÌgÐ}"ú_ŸÏ/Ž/Žÿ9x}endstream endobj 1019 0 obj 2542 endobj 1018 0 obj << /Type /Font /Name /A /Subtype /Type3 /Encoding 1020 0 R /FirstChar 0 /LastChar 15 /CharProcs << /a13 1021 0 R /a12 1022 0 R /a11 1023 0 R /a10 1024 0 R /a9 1025 0 R /a8 1026 0 R /a7 1027 0 R /a5 1028 0 R /a3 1029 0 R /a1 1030 0 R /a0 1031 0 R /a14 1032 0 R /a15 1033 0 R /a4 1034 0 R /a2 1035 0 R /a6 1036 0 R >> /FontBBox [ 0 -3 46 68 ] /FontMatrix [ 1 0 0 1 0 0 ] /Widths [ 0 0 51 0 44 0 52 0 0 0 0 0 0 0 35 43 ] >> endobj 1020 0 obj << /Type /Encoding /Differences [ 0 /a0 /a1 /a2 /a3 /a4 /a5 /a6 /a7 /a8 /a9 /a10 /a11 /a12 /a13 /a14 /a15 /a16 /a17 /a18 /a19 /a20 /a21 /a22 /a23 /a24 /a25 /a26 /a27 /a28 /a29 /a30 /a31 /a32 /a33 /a34 /a35 /a36 /a37 /a38 /a39 /a40 /a41 /a42 /a43 /a44 /a45 /a46 /a47 /a48 /a49 /a50 /a51 /a52 /a53 /a54 /a55 /a56 /a57 /a58 /a59 /a60 /a61 /a62 /a63 /a64 /a65 /a66 /a67 /a68 /a69 /a70 /a71 /a72 /a73 /a74 /a75 /a76 /a77 /a78 /a79 /a80 /a81 /a82 /a83 /a84 /a85 /a86 /a87 /a88 /a89 /a90 /a91 /a92 /a93 /a94 /a95 /a96 /a97 /a98 /a99 /a100 /a101 /a102 /a103 /a104 /a105 /a106 /a107 /a108 /a109 /a110 /a111 /a112 /a113 /a114 /a115 /a116 /a117 /a118 /a119 /a120 /a121 /a122 /a123 /a124 /a125 /a126 /a127 /a128 /a129 /a130 /a131 /a132 /a133 /a134 /a135 /a136 /a137 /a138 /a139 /a140 /a141 /a142 /a143 /a144 /a145 /a146 /a147 /a148 /a149 /a150 /a151 /a152 /a153 /a154 /a155 /a156 /a157 /a158 /a159 /a160 /a161 /a162 /a163 /a164 /a165 /a166 /a167 /a168 /a169 /a170 /a171 /a172 /a173 /a174 /a175 /a176 /a177 /a178 /a179 /a180 /a181 /a182 /a183 /a184 /a185 /a186 /a187 /a188 /a189 /a190 /a191 /a192 /a193 /a194 /a195 /a196 /a197 /a198 /a199 /a200 /a201 /a202 /a203 /a204 /a205 /a206 /a207 /a208 /a209 /a210 /a211 /a212 /a213 /a214 /a215 /a216 /a217 /a218 /a219 /a220 /a221 /a222 /a223 /a224 /a225 /a226 /a227 /a228 /a229 /a230 /a231 /a232 /a233 /a234 /a235 /a236 /a237 /a238 /a239 /a240 /a241 /a242 /a243 /a244 /a245 /a246 /a247 /a248 /a249 /a250 /a251 /a252 /a253 /a254 /a255 ] >> endobj 1021 0 obj << /Length 1037 0 R /Filter /FlateDecode >> stream xÚ3P0BC3s…C. $bf NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº((²³ð ”¼¼¼ÜEÏŠÃnö’_yûfÿUûÿÿRþÿÿÿ=÷ÿ‡‚o—€ÄmïÿÛ¿ìÏÕ¿»4WÇ`›ÖÕÕW[µ¸˜¸\=¹*_?Eendstream endobj 1037 0 obj 161 endobj 1022 0 obj << /Length 1038 0 R /Filter /FlateDecode >> stream xÚ3P0BCcss…C. $bf NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº((öqÈ(¼¼¼Ü¯#¦Âá®ú媪ûµµûÿéþû“'ŽCÞ¿E>|yæ'ñ],/¬ü£öVÿŠûÿÿÿõÿ¿{ÿþuoÛ¶K·n{³q'­Úʼ҅ÁËÕ“ Ú?ëendstream endobj 1038 0 obj 180 endobj 1023 0 obj << /Length 1039 0 R /Filter /FlateDecode >> stream xÚ3P0BCcss…C. $bf NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(Xõq4/(yÈî·“¿¯‘¹d¾ïËW÷ö_ýZÿÿÿÿoëãoÝö®Ý0M"Z4ëŠÁZ'¾¹s^(Ük¾”ÿ«êÞ| Šÿ·ã£ão{'æHx_¶°•Gà €‘A€ËÕ“ m,Bendstream endobj 1039 0 obj 183 endobj 1024 0 obj << /Length 1040 0 R /Filter /FlateDecode >> stream xÚ3P0Bcc 3 …C. $bf NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(Ëßÿ÷¿þþûûïþ×ý/ÿöïýÛÿù·¿ýÝ$Þþ®»»?ïά¶uÿÿ08°p¹zr¥å4ƒendstream endobj 1040 0 obj 139 endobj 1025 0 obj << /Length 1041 0 R /Filter /FlateDecode >> stream xÚ3P0BCcss…C. $bf NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(˜ŠLàw> stream xÚ3P0BcSs…C. $bfNÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº((×<,ÐÜòª䓼 ‡ôå’ù¾¯W¿úýÿÖŽÿÿ_Çe˜îÍ-ÛíÍ«c°cmÔɾm1oôxÄåÿ~ÿÿÿÝOžÿÿßcP`ârõäÓì:Jendstream endobj 1042 0 obj 166 endobj 1027 0 obj << /Length 1043 0 R /Filter /FlateDecode >> stream xÚ3P0B#33 …C. $bfNÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº((;ÿ??²ÿÿ™Tdy?ÿïþo¿¿ý¿ý‚yÈÜ÷Ïú÷ýû÷þýcP`ârõä+Ï=Þendstream endobj 1043 0 obj 138 endobj 1028 0 obj << /Length 1044 0 R /Filter /FlateDecode >> stream xÚ3P0BCc s…C. $bf NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(XõH´È(¼¼¼ÜÅÞF¡Šs¯ù½É¯~ÿ›\ÿÿŸýºékµj^0ÉæŽº÷DÂ#ïîû·'ÿÿÿÿÛÿ¯wcËßj'æHxË®[£‘è·¸ƒ¡ËÕ“ ðí>&endstream endobj 1044 0 obj 175 endobj 1029 0 obj << /Length 1045 0 R /Filter /FlateDecode >> stream xÚ3P0BCS3 …C. $bfNÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(ØIÝÿýÉÀþöï}oßÝmß]&»›OzÃÛÃ|wÌóîØî.ß^{ÿ¶±üûûÿÿg_ý»~uöÖmBuÊÖF\1XêèÀÂàÀåêÉä¨9¯endstream endobj 1045 0 obj 164 endobj 1030 0 obj << /Length 1046 0 R /Filter /FlateDecode >> stream xÚ3P0B##S3 …C. $bfNÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(˜vÿG€çÌîÿ'·1Þýþý&.WO.Óí)1endstream endobj 1046 0 obj 115 endobj 1031 0 obj << /Length 1047 0 R /Filter /FlateDecode >> stream xÚ3P0CS3 …C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEÁ@ÿ?<‘âh¾'÷ýûD7;þûÛïÿû¼¾þëËÒ‡…Q¿®‰m`dàrõä¾6ªendstream endobj 1047 0 obj 134 endobj 1032 0 obj << /Length 1048 0 R /Filter /FlateDecode >> stream xÚ36U0€ÃC.#¸endstream endobj 1048 0 obj 16 endobj 1033 0 obj << /Length 1049 0 R /Filter /FlateDecode >> stream xÚ31V0€ÃC.·endstream endobj 1049 0 obj 16 endobj 1034 0 obj << /Length 1050 0 R /Filter /FlateDecode >> stream xÚ31Q0€ÃC.$¸endstream endobj 1050 0 obj 16 endobj 1035 0 obj << /Length 1051 0 R /Filter /FlateDecode >> stream xÚ35T0€ÃC.¶endstream endobj 1051 0 obj 16 endobj 1036 0 obj << /Length 1052 0 R /Filter /FlateDecode >> stream xÚ35R0€ÃC.·endstream endobj 1052 0 obj 16 endobj 1015 0 obj << /XObject << /Im12 1017 0 R >> /ProcSet [ /PDF ] >> endobj 1002 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [436.697 273.278 442.151 282.975] /Subtype /Link /A << /S /GoTo /D (figure.4) >> >> endobj 997 0 obj << /D [999 0 R /XYZ 72 786.278 null] >> endobj 981 0 obj << /D [999 0 R /XYZ 120.235 575.273 null] >> endobj 985 0 obj << /D [999 0 R /XYZ 242.922 342.548 null] >> endobj 225 0 obj << /D [999 0 R /XYZ 72 320.502 null] >> endobj 998 0 obj << /Font << /F15 393 0 R /F26 391 0 R /F30 512 0 R /F31 881 0 R /F33 497 0 R /F27 394 0 R /F28 523 0 R >> /XObject << /Fm10 982 0 R /Fm11 983 0 R /Fm12 986 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1056 0 obj << /Length 1057 0 R /Filter /FlateDecode >> stream xÚÝZYã6~ÏÃî_0öI ´ž•`f‚ìì‘$~ÙÝ,M·…¨-¯¤žîN²ÿ}«X¤,ÙrÛ“c hS¼Š,ÖñU‘bÆáOÌ29ËlÊdfgËÛOÄŒþ¾›ÅÒß Žzj£˜Ñøu¦ã<öœ+ÃljÎõ)S©¢yŸ/>ùô¥R3ÁYÎóÙbíû,VÿNþxõŸÅ_?y±è‡¦9¿ì¦“ 31ùs÷}éšyënnÝöJš¤k¯æ*³É7ÜðîJÚäqw5—Yâ°:KþŒ‹ùô¥Ìs )×:̸ß¾y¶øËâŸo^|ûüÅ¿^½øŠ†ŒÈ ®·y´Äg4ÿbãZG+(šPXÞ5ï®dž„ϸÖÖÊ®æ&KqTÙÐí¦ˆ ²³¹”† àë\àÑäž^é÷(’•û† ½u+üäÉ[¿]*ԣ튦+·7T‰Û¤.·¸šŽz ŸŠê‡~|˜»Û8*Àê\®¥Ó³l\ã ×ðiú–ººíjD<£a8•ç©âž*+˜µYàé›Ðå¶gŒs |`ˆ±êÌkò¾Ïõ”ès1™/&Éð<ÔZôb+u²®ïšýÆ÷'Ö{Hª¡ Ô슦¸ukBzM¿÷›¢£RZ–EUyaÅyè§Û”M8!5ËDJ§cüêêfåp1JEDzNÚ]Un;´+¹dB¢ã,ÕÞ*b-¶}7‹¥½yá3År“÷æEÚž“ѸuH²<ÍÀ<Æ‘Oš]fµ=g¿ž‹°§ÆµwUPU%ƒÍ°IhÝ-±¸…u]U5Jä}ÑÔÁt€Î»ö³ÃÅÏ7,W)fÄyó.A&‡æ]¦;øáLºõ³Íû«Ž¶æíXK¼(º+t‚F°i;bÜu:V"Uåú5Na—¥×žÐ·²92gŠ{½ ƒŽ„s.qÒŒ¥?"¾ƒŸæºòv¢Ûì™þ¤mŠ_Æôs¶Ý€¥Í¶ý > òíÕ_ ‘ AÃ#«±tS{Yv-ué6M}w×<§cÀÚC#=Á{pOêŒ_Uï+ðJ1@ŸNö€6"«3ž‘H[{Ò3 8mC®Ñöð‡YVlozˆâ[êÈËÀ¥=#P•ÁìùT­›úö@Ä›Ø@ºrŽLÐg]dƒrÍ„¿‚ ÊÎÚ %¹ªÁ!ˆ4&‹ª¾y¼²:AxiL`»‰ZƒHk°4ÐìÒkÒù~ày­‘*c©ÉÚÂ’”¸uBKÓ\\b³3À×X¾Ù>N0b¿í¨($Ò†…Ø4CA`c²±fŒ°ˆ:VTnõiéƒK†„¢–úçódï0²ßƒR^äj„ù/Bë}YUÔð¶~9Á²ª[Á9F:·» €{õHß}üÈã©áÄe Mþ@ÔÔŽŒ¿Ã˜”‹8'Ê U½Ýºe׃×Þè† Ê®¬·S€ð}Ià±aSxCM*Ô³€m!ÖÎ|¬M¶_üKFòµ·¬Zx ë鹨aï8páͲó¡TÕw]˜†”ÛýЛ»Æ¼0–InA¼RÆ)2‘œ>mýS'àœ•8'JSh<ÄÆ…O¤S®OÀ¹Ý„OGÞKN(&ÄzJœÕdân/$£~52#x¤OQy¦™ v3$@`ö‹’ù˜–þD¦Íµä̰¡í¸`[Ù‡9;AÆBÜ#&xþÙ#tù‡a›à“|ËÓô—•:!NÐÃä¹ÉtòeÝ•Ë%n-K“2þ¶Ô⊶ôþÊæ·mù¶Škê^ë(]ïN ± ¶öjžÔÞAÅ0| ™°”é<ç)›bÛ§¨MP˜6°9»ÇóAŠ™š|@„¿> 2y²u¡é-ÂÁGª]âðMöå}ó`”M(¢ñDêŠh­häÀGû$©¯Ü¯±˜@Ó~;zi̇ʑ§~‰@Ò äï µøRļD¿¬õ>ªÃ®)ªëói´æ®raðšÈÉ$`×ì7HÒN5l‹ÎQeKbá–¥GY˜nSW«ã¬œ–¥ ùskXzþ6ç7péò̃KÌ8Ža™3”ßá®öuÀåÇ+k|*G€ae¯ ”Iî7M5O½Ÿ„ŸÃè ªöÑ7!âÌ(÷æV~˜ë€êxoI¹ž¸(ª£9RJVÀo?ºnÊï:€^‘ò© Ë è Û9Þ†m¬ã}¤fZ˱Ÿži´ýÓ^ñÙjåQñ5M®£_k¢§+ÛCÃ\AoŠæ.¿÷j%æb¼ì ÷5ù´§Ü%ÌpíûnW=~vRP!6ƒ{ó9)UHz4€ ‘cÒ_x|)Ñ(*RöÙ’9K5èØpääZÝv_/›r×ý8@R.H¯ÔÆ«ƒ/=áHæTÊ„‰†öqBæ Ë¢H΋<|$”CÁÊUí/¿·¿ßøz‹Ø]Z ;`µ}£‚Lnšr…¤ ì΃±ÀN½aÁއ°ÃÁÁ·aî&Œçú–,†ñÇHFiP‚4Ú„µÇ2 á^É"îÊWµS^X<C8ƒÑ±b -È3|ƒa“o„Òk´$W¢zoà×_Ó[›ŒÉL¼Ž©Ó,J\UƒÞO¸«Œ ׿9®l6æŠ'SðÐXG †¥m©IEvBçLä2\ÙûÐ.=BÎ÷½|ˆe1Z"&öN|z–ƒJ¹…ÀÅ!˜Û&ÌÒü%2,j.¾b1%.9M…™¤õ÷]ˆS0ì…žÐ;LÜ×ñ„£.·Å²©Û‰wŬJ÷Ï—¯ñӛׯ¾\ ëÚyÇ3·8³½)é±Öhîðdf|$¾|ñì«_/zë“D„õø³GV»Æ›žwåÊ­X z%Ë®Ûs~,Üða"¿³¿ËáÉúnÛŸ-Ô“çƒDj àa€:Þîoý"¦¯#Ú|;ŒaÇvÄ?ÎÑ^¡C°5zwu"Ø ¾ŸÈ4Œ»<~m0Uèø?êžzéîç 0»=Lz\ài]Å-'¦Ð‡š2²ªw„·âxÄÐg½7VCª õ|æ¥>Þmd ZÓ8óÖí}*VÆœ– ê#¿ó7ì¡KUú9:[íe«¥oR²Œ”lè,H`ä®èBãðg8«Ýß\NèàáûÏ#° ßÿõ÷\AñþܘV{K üÿÇ€£Ã<ÛaŠcŠPÁ6¼}/-D¹³-åÉGD|r ˆÃ‚tcP A®5n¶¼aˬB'iS¹×ÅÔ3ÇG5‡Ïß>}©yp¬>˜µÌÂ`ž_°hðO°%øG`]Ä›<ŸF*qÿ½  û«¥º‚~¼UËc¤¢-‹6Ásï»b¤ÙBS†Ii`]=n}æQ¨ e9J™ÿô]9÷°«ê¥:J±r¸ÇAÐ=ŒØ³¼šíÓáiâ¯Àbîs"åvèw ° yJŸˆÅ /ÑF$m]•+ò0·„‘V´ë…2³á؈ѕ/ wÈ5Ì',)ÆöÐßlx$˜{ð´Ø?ð>†”a9·Eß̽“Ê#%óÈ}?”pÞ‘{Úø·mCî¹?,˂ӂäÀr .nÉéþâV‹^áÃ…¯î f(ègíPJ2‡1AÔeÎøù ÷jªÏ†;ó1%Òs!Izt{+A"¤|"äù?ÍÕuBendstream endobj 1057 0 obj 3139 endobj 1055 0 obj << /Type /Page /Contents 1056 0 R /Resources 1054 0 R /MediaBox [0 0 595.273 841.887] /Parent 976 0 R /Annots [ 1058 0 R 1059 0 R ] >> endobj 1058 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [191.393 707.644 200.36 718.86] /Subtype /Link /A << /S /GoTo /D (Hfootnote.13) >> >> endobj 1059 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [281.48 551.829 286.935 561.526] /Subtype /Link /A << /S /GoTo /D (figure.4) >> >> endobj 1053 0 obj << /D [1055 0 R /XYZ 72 786.278 null] >> endobj 996 0 obj << /D [1055 0 R /XYZ 88.587 135.023 null] >> endobj 1054 0 obj << /Font << /F33 497 0 R /F15 393 0 R /F27 394 0 R /F30 512 0 R /F31 881 0 R /F28 523 0 R /F26 391 0 R /F39 496 0 R /F29 547 0 R /F40 548 0 R /F51 382 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1063 0 obj << /Length 1064 0 R /Filter /FlateDecode >> stream xÚíYKsã6®Úãü ©-‹!|eOãY;ëÍŒ=•pRûH*EKÄŠô‚ÔÌ8©ü÷t£>d(Næ°§”„€f£Ñýu÷š-"øc‹”/Ò, yš-Ö‡lAïnô5Ì‘¤ŒEKüõŒàJÆY˜çÉb%â0KâóòçuÄ¡ŒcÚê²xñÅ5O, ó(_[#Rlþôj£¶ËUÌã ëõqÝÓø¡ì÷ÚTc'~^þPüsÁh•‹ÃäFÅz_jAe3bÑLâØtÕ®Q’å·u¹›ÉÇF¼Û·ÚnªÕViÕ¬U÷GôvÕOÈŽuÛôêSï{å7]ò׺jÞÆ[eçÝ«`?¾}YüãíÝÍm±\qEÁF9Ñ•Çó¿BûÞ·W_½¹º-Íœ‡1K†(ãô×,ž€€h™BÕ-W"ªú½Ò$p’ˆç¯on½Y˜ˆØÊ‡…I(„°ëˆ-ß‘¹‘Ì…_GîÖGôy4Å)d<ÿš‘Ï l6%< 3¨+$bqêQ´’àL³DðøNƒv0ÌîÞžXÑài͈2h /õ¤RìHGd~€q&Ã8w&ܾ{ýúœ™Ò™ÙP²I)Áó2Wv¸—w¢ 2¢3IfÍ…&6¦Ö¡dCÏQ²êúp¹’I\W•,Á¢0RžÃ€IpRçsÜê ¼\VÖaúqnoI?1Å ·1Àô³CEÞCñ@Àò™“ð 2²oˈ6@?‚~ãÁŸž.Â$ŠŸ9ì—‹  PaÛ ¢qÏNõ8Oø>bRw½› W1ñÌŠS©Õ  ¼á‰ÏÂHäÏÀ e#¬æiu(«¦jväJ‘ ȧlÖg€rô~‡À‘2x‰ó"¸T?UJ¯œ|Lò‚¢ ïA YëêÞÛ¤<¬ )/„ 4 ¶m]·«h—™öüí|qUŒ…Ø4²ôÿOOîÍ©ÿ$)ÓÞi À3ÜÄ/ü9”äYÑKßÒŒ9¤Æº­ibÞè;š,íó´4áœ*u]a3â¶orã! Žºã}§Ö}Õ6X™ Šqëámh¬-ÛÊ¡XÇÀC§.éóí)ÀõYn£še60h=¤ù‘¢BˆÊ*Œð{{lŒÉVöYÒÃÓY³üL/Ir xéH‚ïÞgèï á4;M"3Ú‘ß@3K¬—fÆ@;·Ð¦¦-ŠÉ|šœ^a™$ê¤zxpÀÊØ@Ò×Ĉ2 à½Ä0Pî l2 Iƒx—€_ [/ë~ßw{zÇP/a© <ÿw¬zEZŽM]ÕÀ„ÆC Q6ôà j&oaòDÜ9MNnp¥¶ôcEY-Lx½×vä÷m©í–kèÆÊøl‹VµšU‰q‹5‘.Ðs@×»Þ5n“+ô)¼ãRÉI%ÌLÀ“Ää/¡ºÆ,x×Y‹àŽâ«4¨ æL zVCŽ>´à<>hC>Î,ïè÷Z9f1ÉÁ]ó¬‚#Gp ÇLþfyÍ9.’cõû.‡eü922ÉNêš0ñ•ê_A‹¶Îü>Š#Z«#¹†¶}ó÷‹'ÝFëv£.ˆ°À}*†r;Eà¶nË~¤ C',Þ¼,¾¹ù—µšPÓa3ƒ½™ó x$…#@{ S™ÙÏNp>¸‘f ­Û+) |$&" ¾uÐ íœ2e+妚ßÍøŽ¯GçažMz÷¶¹Ÿf&&ÞÝËW.ï Ÿâ8 n[¨þŠ,°|fj¯ùFa;j`j½²-4µlÏ “r]¢zx)·÷ _ݵ4Ò Ê³6ŒÖ÷À‘ÁÊÙPzÌB©Ü2š¢Ü\K*MzšÒÞ¤sºÛá³À²8iá Æ¬–j”¶:r¼ÿ ¥3Ã)(=Èhä—Ð\þâñ:–éÐi”¬ÜìwºÂMIWL‘Äxª†FôacS’›þÑ® ^ yÒµm©}gÕÕ'»ØÒ£ÇýÆYFŸ0Ó=”&Þ°…‰¼ó¾™ì•áih>7'œÏ¯Nèj€Ñ†¥ T8ʪUÙˆÔÕõtÄD[Üêl™CŒˆP§–ÜáÌC ;\XNÞt½*7$br ƒÓ¬Ât¤Íck‡mê—ÓÑ]x¢ì {ËÐl[Z©`í×XWM` z«7ƒ¨qþ,}\@±E6ï†zA´Ô)Ížìl21Nm> endobj 1060 0 obj << /D [1062 0 R /XYZ 72 786.278 null] >> endobj 229 0 obj << /D [1062 0 R /XYZ 72 286.104 null] >> endobj 1061 0 obj << /Font << /F27 394 0 R /F15 393 0 R /F26 391 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1068 0 obj << /Length 1069 0 R /Filter /FlateDecode >> stream xÚíZmÛ¸þ¾¿Âí'm±Ö‰"©—i{{ÝÞ[ÑlMQp%z­F–|¢´ÉÞ¯¿)K¶Öñµ—´@Š"’3’óòp†[EðÇVi¼J³$ŒÓlUì®ØŠþÞ®|ëk#N!y(ö>À¸2 ó<†O_æYc!ËbZë·÷W_ÜÆéŠEaå«ûå¹/ÿܳ~ÿ—ûoî¾ûòz-cü¾Òý뾫šÇ®ý&’Q«¦§ÆmÛôw¿¿¡N±U›mì¼›#îZ77×ÿ¸ÿãŠex¬tµf¨ˆÜî n›Gb3{Uèv³9ž¾kËM­ID4›¼©[å¸Lõ£v3á ÷ß¾ºÿóÝ_ݶúN5fÓv;8 C1W_Þ_­e˜‚NÖ\†qž9ã€ÂB½N¯6WkÁÃL‚Y%|ųÅ|‰‹0‡…%a–¥Äp0h ±Žó0æ|´ 4Omr‹;üâ–É ô GG{øƒ‰£K˜7ò‡…rð#<3K6ºæ!‡ö: Ì?=©?ÈI9øe ,Ï1Ûëè[[}½æ\;­š ­Ì9Ú ~ã ÷TÕ=;Ý\ÇyЪÜWù~Cg¹0ËÒPdâàȯ½ßÎ4×cQÁÜœÐzÔ:–xB>s¬ÛªQuý<Û*Þ0.Z Š_ œŠHŠ>eeö5¸±=Pô4:žç:΂§k™ªªÕCíÄ>àð3µÇµ6CSôUÛx Ž®$C!ÑçÀTù§G†oÛ'}!.Œ£¥®{õ~qôùl°³4‹p²ŒüÅ">fa v>ñÂHœ x . w&Ã\ô3 wtó8×…9?ŽVâº)uI#}Kßüÿ•Á`<ÙÆJ(Ú¦P0Qy¡Â¢’\4šðz-bÜõDn´. Ƀ0v«m55Ž™ÜÖ WL¡`G@ΣÀ´;ÛbÁƒ¢ùU_iCÔwÛªÀ@ÞB7Ëa7ë±zBVÝPמè´hlZEäZ?¡]S—¤W§ªÎª&Ëœj`TwîêF|Éuª  s~B Ï/¿}d^Õ” ’ ™:Šè—y¶GâÞ ØØ¶]õ£Ó‚ªi —ƒH]_ž´€±©½dÌ`ÄÉÙì—,¢:›[à8XSõÆAžÄ_n¯3tíxãÄnñôÐ"…l/qÇq€µpjh×ztº,èoP8¸›Ù£¥]Tî®ä"¥Ä¸ÍRw`@º8cìU§vº×!Ò#lRÓR#%‚`Á«ºß¶ÃãÖF45†LByk,Ù’YîQ…Bdæ@•3¿=b&ˆ|dŽB–”ͬƒÏò–ǰ£l¶£WÝCr:›…°Vi hÔ'({@Bs@fx±¢Ø±æpŠKÓJÍÿ´yÍïì1\ZcyÍ ï^õ[¶›8-.òÇ‹)˜@ž-:@ñ¹š$ð袚ˆ2ÿLjŽïZ¸(4&øfŠ‚áˆÁ­£TÙ<©l7ÑÆ»ÛV¶•û@ÇŒ“L{¼Æ;{OÑh¡›~¿§pA|1›ð?Uf€í4áP]¯7ªðµÁhvžÄÄ#Ü”Ç'Q 6îôŒÃH|»ò­¯ÏèžK¤~ñµãeIèE¾8YwíTA¯Gl´¤r’!–/¸È¦®Ær¸$.£8,‘ÌUYÙ§E#<ßiµˆ-®ü™E8y qòEçÃ/=ƒ7Ö   #ñ?^ñˆKÁ&ý ñ¦¶Z:UÛõ9`ÙòܦX"7Ž ‹¤0·ÑÐÊT=BD“ŒÄ29±mÀ5b-U¯¨õBæÂ™cŸ·à –röÐ 'ÿ˜ÍÈ0Oæñhú¶;½è)sáØ¸xë”7›Éƒ öÕ{]ÛÚM€nb*âžzõÖWPØuo.1 ³+Âüâè8FÛÙS¦ÒÒ› àVÀ3ržLóþWÍ Gh—ŸrØ×UáÓžøßJu ¥NEú©3ýóeÐò†äÿÇŸ…!½šˆ”þ«èSBµo³h»º±{¦l¢­ü‹GÄ–zÖû°Ñ)µ"%ÄW&Sû6‚„wèÓm÷Ö-ç/F»t]ž€g[iDÅ 6¼Ï%€TÊÚ.$1F?Njº(Á{ú‡¤£±E§[0*ä¹ùXF#T@h“ÒPìá© JÚI¼Fr¯QНJ›¡&Bµ¡/å ĦnŠÔèäÚü ¾eK¼Ÿe@Zg¡ » )_œ‰lWÂjÚ°y¥à6ç—®FØØwtOÚ"ù3·úú¨%ÈRµiÇÚÌ ;í1Ô&žöS ô¥à’ØÃôCKù*Ïg–%¤È¥_®·yªJ»÷ß@5 ´Ÿoz8¼5!Ž–ÿÁóxÂÃ8—\ŸÚªÑó¶Óúã¢jòy ê/UÞõ9@ \ÒÆ‡XgßĦž$  êÊô®öjÜ«Æ 섌 w<Ù¦1™Ç& ÙÚkð²\<ˆ©Ë˱@µ6=Å‘œÄùBu¸Näˆ&“ç3NÁe ròõJøÈ2ÜŒ íôQÍÚcèÒ…3[s +~cXãÒÈcý¼ßŸ8ÚY¬÷\çmÔN×Ïÿ­ ë«oþö§?’«Ûª®VÝvü«×GªÛd~)<|&¯D®œ™º DYB¿'àÿfÄ1 9îôüIrò¾‚U|æ=ä'±^Tßendstream endobj 1069 0 obj 2219 endobj 1067 0 obj << /Type /Page /Contents 1068 0 R /Resources 1066 0 R /MediaBox [0 0 595.273 841.887] /Parent 976 0 R /Annots [ 1070 0 R ] >> endobj 1070 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [332.241 439.56 337.696 450.47] /Subtype /Link /A << /S /GoTo /D (figure.3) >> >> endobj 1065 0 obj << /D [1067 0 R /XYZ 72 786.278 null] >> endobj 1066 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1077 0 obj << /Length 1078 0 R /Filter /FlateDecode >> stream xÚåY[oܺ~ϯXô¥ÚÖË#Š7±@\49I›6çœnQMÈZÙ«F+mt±ãóë;ÃÉÚµl§úT°(jH‡ßÌ|Õ«þäÊ%+—Z‘¸t•^Éý}^­?BIj£„Ñøö‚àf”Ü$ZøØ¾$/¥ðF¯6ÒAÃ{_}YIÓw~Bï—iw|÷æ Õê÷Í«_­~|µ'J¡M '«X(Ÿ®Úbu=O•ð)HêTh¯ŸRðw[XAš•Œa~µ½£·»DoÊ›¡-Ö¥Td~³Þh­£Kzíú¶¬o¨}Wö{jÕM]•u‘µÕ=vȨ˳ªØa[Gy³Þ$iÔ´»²Îú¢ënÿðêõvR7±RXk¿ÁôÊ8ac´‰|QÜ€¡ Œòð|朞=;™&¤X0WâÌõýû¿ÿðv½1‰‰~µ•Ÿ./ß”UõaèÑ$cÓ'øòá¯Û÷ïþüšEY¿¿ vY÷Ô84»ë*»Qr´ìÂÁ²/$,»pê­DjV)˜Ä®>ÔÂçM*œå~iEšºSÌlt,´U`-k=mX©%| ngØI…O4ÇM[8›,j`Ü$7mSi¡”Ã3srIOÐKA{c…„ñ·9îæqÊB@B¦Ó>q¾Ýe ðV&ºì¦À¦v„×¢£×ºéI¤.ÑØ•Õk¸§îâë±ÊØeS‹õÆ™§%¹Ûµáj(H²¹&ƒœ€(I½PqÂñù/ØWk‘jÅb%ëÖ_†²%µttÝ´lq?èàøãqàOkDÛ;ßl×ÎEÍàÙ;áu A Ñåƒèûµ‘QqÝ/è’HPÙó”}°ÅlæÀfEßC|Chx}w½iÔ£A°qUö &±VÙñPä§ŸÞ}ÿvûiûáÓû×o¶ ë{-¬“3[$ÎG°ôœ—óÑ®<uƒ¯í?WÇG7ÕýqOß²–Ul‹¼9‡ŒL“Àf- rnš,ÏC4ƒñëTGa·*º¬*œ"‰X ¥&l8¨'£ë¶9,íÝHá¼yùøÁ-MÊb¬l'Y7áøq…nÈ×`ô=½õû¬g¡zìáQC7dõåY:ÕÎìH°tšŒà1bÀd˜ôÝ(ÀµuæÄnKPatÔ•‡cÈFE1uåàe¡qEò,x$çÌ˱ÔÅlobým_VÅ’wIHÓZg¡ù!J 2‡GÛ&h°rŒ A¥²?dÇŽôEXásWC>„¦¼XÐe£ÀRê“,å‹'”’à¤OŸÐÊÇ!,úˬ*áX1û‚3\›÷ë bAß”ÝEò¡m‹Òzê¸i³ã¾Ì;’ û;[)£w,Ñ훡bõ Û2A¹éÈ9 çvÈU¯GpBë/‡¬åæå\ý€ ìEƒtEñˆ3ÄZ$°¬N‡Ü>§Ï…zŽâÚªG³:‘:ÿ4yz¾pfAáYúÀ݇ôýwh„¦ýÌo;‘-BƒÖõPçœF´â4‚ým‘uÃ() >ÆŸ`Ç+›’UãN_Çh-«òj\0­5c–ØgDQe)ŠÒj5¾ #ðzN‹ØûQ*Ý•?¿€WGwû¢¦eOÏ›¢«ø‡™òZ§çµG Ì;ôvˆAo‹:/.È 61PÁ¹=S˜c {!´ü’îÖš~¦7 •‚ ‰v¦uœ+tc„Œ ]½ÁInñhõÇZ”˜¶„Ó– Îa¾! uUż;™pÒÑk×Ï&§ÂÌ?ul†ÎÏb¤å=÷\·Sýp2ðDFSæe?f7‚”=A=ò«bû·5(°ó?euyªŒP¼ÑG¸n¢8_,Œ7/a4‘~ÿàhoË]ÐìšCØHUå¡ g¤À²×CKùXÁ Œ¦<ôk¼§¡ÁÉ)Öh*>?DžÖ TFmדlØ<³ªº Y2z ­–²ËO’õŸŸ,˜šóF åp|P&ÏÚ,ï•®‡:â§‡Ø /»±AqdBªG‚ʳà?U^Øi¢î¾ƒl€í”åÁ Ú# ÷Ìây õ>Ô­dö¯‹Ô?•c|¡äÞ””N:š~TòV` œo‚ºõnaaÌ+ÉÈŒî×U‰zb]¢µP¡«SƒÇ]Ô0©Šx|2˜^IäÔÇÈ M4ÂX:o©9Z ³Gì»c‡± Y 6è`ƒF>XÇd£Ø9¡ÏeMóeW]S =Ëžc·!(Œ!Ò6JÛeÒÐÔ!Ž‹–Êœf@m´ C?LNbŒ6#î7¨¦}°+/…Z6ÄGœb|òŠy6t¼ì¡ žßú6«;Xë¬Ù],èO·(ô9²~ÿÌ…H{¤ï‹Wé WîÿãêCëÕ‡{þêc×pFѰø ™¦º§[…»@$°ˆ 6®(Z!‡ W$E—·%wò¥È¿†Ž/J¸<>Ð!+ƒU2¢È( üçÁq[*бC,]k`(ºÅÀY~çwˆ$DZµY(³ªÔÂpìÅ´øªwEê4×®Ÿhs³óp1]¯<áåjÌž›]ÙÌñ©vò€P@ÉÌy?ÔÁå­ èØÒ#/7c´%JmÈžnÒ8„Iç Ýðl5õÎ,Óc|u’‰¹árRÔPöÙUUÐ0ÊÐà¼ÖuåU¨Ø¡kŠÔ¼)+¼:½19ÌXá£û_kElƒZ>UÊ=Ü+áˆ>éÊ ïæØ–ú|ðPëпyäsñÍCéofámÑ}B-àÂM <ñ0;ÑTø` Oö#h壻 ÞAAŒÀ2>Ëd(™‘LE~Ú|æ^žIC¸£?/`¬¹Çÿ¼">Ÿ oÏõS C†JÝx {àß ([…k¡SN¶+»c•¡+߯9 (—0Ú˜³àƒý7E]´¡<|å¢Ú@Û‘¸ÙPñUÜ™Õ=yñTlÂ4§¬dÁ³•‘BK{êÚJOp é› …ñ"“0É;”ùíOÀªàÛXÆ)¼evõë¥P&MÇ“3³™ùJ;S9Yºh„pu¢3ÆEŒ©¤K fÖ±Hýé1‚ÛæØ–Ù"í2P%è±JÈ—žì è7§-rt.Sá> endobj 1073 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 426.998 172.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1084 0 R /Length 1085 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kh¬à’ÏÈOú¹endstream endobj 1085 0 obj 30 endobj 1086 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 426 172] /Resources << /ProcSet [ /PDF /ImageB ] /XObject << /R6 1087 0 R >> >> /Length 1088 0 R /Filter /FlateDecode >> stream xÚ3Ð3T0A(œËU„&F¦†z–æ`!CsK=CKC=sc#C (mRªd¦à’Ï„CLendstream endobj 1088 0 obj 59 endobj 1087 0 obj << /Type /XObject /Name /R6 /Subtype /Image /ColorSpace /DeviceGray /Width 607 /Height 244 /BitsPerComponent 1 /Length 1089 0 R /Filter /FlateDecode >> stream xÚíÛOoãÆpÜ,w›í‚\¶ÈƒžzMÑC·€á)rɱ_a{/PÔÐPQ±BDïA|èè±§F‹0‡ ú&â¾õ°º£îx¦o†”4¤µ–D#– þ#þl9oÞ{#+åì!ÕÞú.¬3‡vh!w–¼–¸«Vøý·ø=°æ÷À*]ZcwÖÕ}°fß«pi]ÞKÝMëboí­Ö#Ý[{koí­½µ·¾cKÜYÌ¡5¹›V¹³¦î,黳ÄÞÚÅúÂõ%þ§Ž¬ X¸-c9‰9#ñŽ+Pž3Ë×VX¸±¤G®ÝXÒ¥å¥ÆwΕuqG­´·Uhkà+V¢ÿpÂDêoMÁ:|ìÄj‹¦N¬È™õFy` VÒך;´N´Å*kÖÏ’'ºµ¤±â~–8ÖVéÊzæÆ’¬n,ùñé!©­i/‹#°Nµ…X̲ò^ ÙËÓQyeífÛ_…U¨.Ö™}If=,|Ã:‘K ËÝn(+Ú’=,aYW¼ŸÅ-«`d:Ê~y¢X #Iò/°°+M„e•]-AFÆúhe±®C#³B|üÉÊ"­L[q!~5ïj­îÕIm¡ÒXÈ……++îcE¶uÑÇJk+D[éŽÖ¥mÚ’­™ùˆ–µA+¶,é)tÓâ[[¨aI`• ‹niIÛ‚\×í`™×€\­,rç,G‹¥uµ«uaYÕ]cmwS%bÛâ½,µ´&¤Ÿ5jZóÚúB[¢³CůÊÚR`Ñ»Z¡‚cKÎÕÂʼ®×ÓP=pfêiOk\Y…z(Üךk®¶.¬G:jõ³fµ…VÞ°¶\·++Cþ´²æ•5ínÁ¢˜ ÞúZ‘¶¨e ÁòÕbíØÞ‚g{(„š­,,ÚÁ«´- V¡:XX•ö´JõÊ×ËuÓ=,ȳŒÅÖZåÖÖï×X¼›5޲ÚR+‹5¬+´ÝÊ¡mÑÚúñ–ÖÌNL&áU·¬ì×¶U¼ÝŠíÄ$ G¶Ev´Bk©Õ·,\[ùΖxˆ":¶,^[ÓÖô'µ´xuvW‹ƒÇ.,oe%ÛZh1×XaeòÝ®£ôùõó–%jk V¾µ,Ÿ©Ã–®a.Æòö,õ\[Ð4,TV¼´ðf‹{D m­ôv‹yä:nYúúÖ2ùªn×n´J•yDÅŒ6,SwT®­b£õf¢òˆ‚5¸a w´Î‹ˆ& ¬ÿÿèo%M cѶ5ÝÍ’øÓämV¾“%Ÿ`ï.ºëš?žÐã¤Òm­Ùh­õ¦Ë—•õÏ£[gÅ#É=·¢ Êÿ½ÀEmý{wk^K¯!2¥üÝÒúæð6‹iËô ãDε­yν9Î$]XÉ7‡jëli1šO9§;Y—*7½ZË*M;Ä›N¡ˆF,¾yÃ!üebi-‹êö[o)A«¨ ƒ Æì‡:˜|%”± m=¿Ý:¯ûÑ•%úQ¨Ûœaàˆø«Ó•uv«Å[Äá‡~„*KGÉøëÊë™m‰¶EÁ2{xª-Îÿ‹õÐ(3B`k+M´õ£›VU+à\[g «t¦-Akë³c%¦5¼Ñb–UHаm¥Ÿ}b¬éx½5ç4Îm‹ZyE,+N?ÿ…±2òe‘×µ%žj +ÆWÖXf’ Ò²`v•äñ «¬,¤-b,8†G`¥’L¨5öqrTYŒhëoµ†•ÅO¯Ôõû‘¶&ÉTea3^ÉÑO¥'LI†MëB[r¹±ÄXÇ`‰°eTVqô3cÍ5²-‰+ 1x¬¬÷E½…WYÊ#•EÞ7Ö•Ž m+K ö¾÷›Ÿˆ'`y²aÑjnSc}K×ZùÂÊÅsľý¹÷áËPÀÒÞ²þnî x¶±²ÚÒßã´i¡±* á!öQÕ–°,˜)¬,]Ï%p/Ð`yÅŒ•]¾û—ó0Tl¤­‡Æ’- fðçxiiƒ†•j+ëõ˜ÿVe߈‡ dek‹B¾×°PY55J(î ƒOŒëúö`8Á*{l´rõ7È¥tIÁ©Âh¬\~À|m¥“ø +‚û<”>âO—–´,68¤!ƒR*}vÉŽ¡óÀ;_{ ‹‹€¥Œ5a/C½_»²²{ÇO=‚õ×0ÂÜWRŒu©7¯Xü‰±ž¥ûrHˆ„Ó…¬,é³£‘’4ˆ° `}«¬TùÂXϵÅO´Eu#rŒDm uι°¬W˜ÛÃÎñ9½‘kdfûê RýÃÃhU£È¦U4ó¹5Ö¢,‘tÙ—\Ö K5-,覧‘´ÙYîÌšÁõweuáÆ’0IIêÈÒû‹qËRÏQo>4ÓMÌ»[Êkžâj›–Ãz«hýòy«Ý -ÝY£Â…î¬ rgeØõö³»µq¯noí­½ÕÕBwÓâ.-oí­ÖcèÐR{«¿õƒÿU‰‹üendstream endobj 1089 0 obj 1881 endobj 1084 0 obj << /XObject << /Im13 1086 0 R >> /ProcSet [ /PDF ] >> endobj 1079 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [276.28 397.667 304.159 408.576] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.13.3) >> >> endobj 1080 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [138.06 148.135 147.027 159.351] /Subtype /Link /A << /S /GoTo /D (Hfootnote.14) >> >> endobj 1081 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [456.225 148.135 461.679 159.351] /Subtype /Link /A << /S /GoTo /D (figure.5) >> >> endobj 1082 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [82.751 91.278 99.134 100.565] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 1074 0 obj << /D [1076 0 R /XYZ 72 786.278 null] >> endobj 1072 0 obj << /D [1076 0 R /XYZ 215.695 540.879 null] >> endobj 233 0 obj << /D [1076 0 R /XYZ 72 342.361 null] >> endobj 1071 0 obj << /D [1076 0 R /XYZ 88.587 105.524 null] >> endobj 1075 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F39 496 0 R /F26 391 0 R /F30 512 0 R /F28 523 0 R /F34 583 0 R /F29 547 0 R /F40 548 0 R >> /XObject << /Fm13 1073 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1099 0 obj << /Length 1100 0 R /Filter /FlateDecode >> stream xÚå]oÛÈñÝ¿BOmXî—¼ >Ô¾K/q‚œîm¯him¡I¤bûŠþ÷ÎììR¤DÛqQô¥0`îÇìì|ÏìˆÏbøã3#f&M˜0ély{Ägô÷eF?ÁA*-™V8{p®tʲ,bJšÇáÇÁ9ã© »¾_½ºfÆc–ÅÙlqí`«¿G_ëbu<×BG þù}^›m™wöcÞ­uÜo}øeñîíå9ÍO6°}züÅ_f\¦´˜Í9²–íáD'·=V˜r\*ëêÆcº?LNiPT º‡M8Äñº£óÅÑ\3¬Ì…`‰N½LO&³tÖØÙõÑ\I–ê*!g2e>û€A‚4h‡',M ìÔ3•H`.a:“½$¥œäøê‚ëÁ(Q(¿Œ>öP€ª4œëáz^¥b´,ód‚йdÆó„q8Èi`ð Ö$‚§=#Z?ÚÆž‘#‹Kz"Ñ&øÆÛ´ëz[‚!ÈŒGWÇsa"‹å•ÿ^µu¹í,8”n”·´¿²í²)ðhÙU8ã0ÕǰöÿYvÒVA ŽqÔ# ëmµìŠé )F†¤?€kl·m*Úëœ6Á¬pX9Ô¹D_WÃ`7iµÚ“of@‡½'ùÙe×zmÎ7#¹tëÆ¢ý¥|'–,êÚï ”ÉŒv惦”Æ‘×IA`¶ié,Ô&7c0ŸÑ‰k x‡Í)þxéq”^2²Ø^Êð=i@Huý¶¶èoFøø`ž&ÝHÇ/$²Jĸ …fWSIH¥”²øý” Å,5z …‰4  €äáY%¢öC™§ÕÅ2/ ÊìñÐR&Òä z¡n”᪹W•Ê`wœJzNFØg2y‚°Ú`ó%Ð ~_7«¢• ¹«An€ØVP>-Ñ¡”q™¿d´»s˜Œ£—‡¬é»Kö0Ù4µ›.mÛÚØ•J d–ÜŸqNîj*£)KÍY–¦/2+ˆÐ‹Ótœ]á¡%Ä—ŠpHÜi1àN‹=îPVóæªèš¼)@Bio®c’ä¾Áµ‰xAS)’vW¸°äøˆ–[Û=NÜ;pçÆa0Ã^’Ä%2)ž E®ÈF{QðŽS–ò¤O râè d'd|PÊášÍ›²° 2BÇÄ..äB8ëòw\ ŒÓ$®v«œR®Nq¸„ÅÉ.+}<[ü¸øëÇóÏï?üz>ÁOÆYÒ»æ”]Â#-†ºïK¬GìLˆyæ¹…iýþüooÏ?MJbo𠤝“èwP,ëmÓºŠ1õþŒ»OEr,ä{Ûü¶@Ÿeúïå1<ÄX¬åHT½î”TÑ]StK6RôyǾ0•}aªÀç0TÔ´|›9&ç@4EG§–%X2¬S 1~‰5ðŠ páêJ@1¨?añn]¸Š}MÓ¶ƒ²ÓWò-!É=dƒ™ê’uÝÔ< •a@•rW­À|¨#EE¶[r:OÁ©Š®›üfL—Ùe¨ùé ½°v'ÍïÂÓ±ÛGc2’Uëä?é$Àë1Îøs6ñVx| Ÿ¢‰Lé¬?“Ø=ˆQÏà`éÑÎÁ¡rþI} (àµ]¿ª·W¥¥ã«û×á$¸B Fqÿ "@Ä~²"º÷T½‘¿õ$FG¯Nh±…âÆ_âÁ–uHÊ4¿z /öx^M\rB´  ’@ð|‚±¹¡ÀõIc“¡7—¿¼{7%· G~°ÝÏ]Uñr ä㢮º·>Åár7rös}k ÜwœàEÇÍ8Oŧñ) þéüÓåÛËNDúS¤Ï¹Lƒ#gþ9=nxmhÆ_šÏm2ꊹំ̧„x>Ñ#ÿ[îö‡nʇáÔéÜÿ¾^]—ùÍÏ„ò^¤þýú ÌŒzpR>Ba¦×±ãèÒû}~»)ý$§Ô?hÛt^66_a¨Ï2ÊÝ®à]…Ü(j–Ð0ÂY`WŃ µ"T*¦ª;£[ áÛ¶óÖ°lO˺ÚQ×&¡¢«¼ïßå;Š:jצ¡+¾•#d(Ú jû-—›`ã÷˜«ŠÒN]-ãnÚ53tÿJo6`E=-!/ _õ9òÀŠ?(;r,®‹vBcþZ—ï0qP.Qþ*Ÿ‰¶mA †QñY`.SÉRj†þZÒÓ>rwòà5û]â ꘧šÄØ25OôˆSfô7µˆ¡¾Qÿ'â3W L5Ô*`WÎ\¡ ¿+ȲÑ3“ÎN·¹Ò Ô4¨Ñ÷£ó#µgfà,ž(Õ < Ís}_”¯LpJÄUƒÖÕ€_ßcgfœ/ÏðA¦£k{‡ƒ$º±•mò’V—õmx}¶´zõÛŽ ú(íb '–6)n°Ù4õ¦)rb,6ÑYÙ­©™'BàsèP% ðXíí~¸‚ا3&ðg~jØDqÏÖ'm>I÷oR€~õã?æýhÃfendstream endobj 1100 0 obj 2326 endobj 1098 0 obj << /Type /Page /Contents 1099 0 R /Resources 1097 0 R /MediaBox [0 0 595.273 841.887] /Parent 1083 0 R >> endobj 1096 0 obj << /D [1098 0 R /XYZ 72 786.278 null] >> endobj 1097 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1104 0 obj << /Length 1105 0 R /Filter /FlateDecode >> stream xÚµY[oì¶~÷¯XäIÎêH¼J)ú¢5ÚÀ@’ µÚ]ÂZi£Ë±_ß¹ÒÊ+Û p ?,I ‡Ã™3ét“À_º±bc3 ›mÊÓMºá¿ÇMh}c,©´ŒµÂÞ‚Û ¹*Îó‘|kiaVŠ‚»¿ù|—êMšÀÔ|s¿'¡ûÝÏQñK¢ÓÛ_ïÿ}óûin*c)%Û´ù Uч𠣿ÍëðÀç»Sª6oo~ºÙü4 šŒ4›­`»~ß”‡7LÉeþ§MÑ«¦à¦Ð”ä#SÊUSDl…ýÓ¦˜wL±`Šyß”ÝWôŠ]5%#SôǪ¾¢W²É4!1–LÉ•õ'B€™g›®ÚìÖ’¨õùŽ»s‡±«n·2‘ùöv :£û# Ȩ:×øã/©T÷·0X=L‡v‰îÐ*§Ý –Jr’*ýôDEéâÃ.|@½,pvÏUÝc[FE³ã([ÍJŠCás¸q9ïÉ GnÍ®êj×À–ãÛ­’©÷9(ñnÃeNçÚ ãÎwÙ‹=KÉdewÓZR’id ´û²«*j«¨«ú¶Ñïhwü§ Päq&ô‡‰svÄY¦Þ‡—ƒ=T'Xl+"°÷‚K¾ƒC1ϲy¬¤ŸyŸþ÷‡¢qç±.†êÇb8âŽBX_­–Âñ’"äêºnq'ô„4unèŠîºi‚Rp¢D ÈÈkÁ"†‘!TÔR`àó ¡<ö…`›æilõ"Œ\„mê1Ëc¯,ºj?ÖØI" þîZÂ>6û³ýÁ|GŒŽS•M«óCÊxœ’Ç÷ïļ֨c¥ÕÇ…SŠ`±wRßóѳû°•¹€Ï,Ž Gï“s×>.ú0\ Ü:Q–xáNѹ¾òÞøŽç ”|H9§&Ž€…úiÔ"Sr¢i-ÿüÃG 9ȇ£çï;ןë‚AбÛy#þÕxë‹Î[1%!€ˆÈEX0_ô>¤°Ü —œ!¼.w‘ÂüT3XÙž`AlÑO~AJ8ì)¸8øÚ﵇¤±Qq†”Q!ð‰ömÇ9#BWGOÇŠ2>ÈS@°±’ka" øõb&$'˜p¤L uÊ/ÐíªÝXV~þàÍ” a€3TŒeF‘;ƒy¥w¢´Á¾ëôÆèkcq”,ÂÆ…EšÙ"a#dR´¿²E¾ÌÄÂ0D¸Ú%A»uW»ÖAÁá¦ñLèPÑGt9ŽVϘ½+Òkgˇö¼²±‡¢ã8ó9áœ@8ã^ ìµ,zS\ˆ¿aAÞ36íàʪ€CžÜjÜ„+šÒp®AÝ®Dó›ªïÉôÌ[̵àœ¤àÞ$±æüÙAÎÏÈù×ûœ±Šå'n3¾¤Àê4ÖºžE·«1yË$Â(à&Ñn%£ï`Û`¢WèCæ{gohÑõ¬›«!9µ–ZEbc Þ rP4sOœ¶ÿýee#ŒmÈ$MÛlÁŽc…Æ”EýÉߎÂÐ>¸é½‚/‡–ã1qøTÁqšö2ä-Xã‰êcÄ®±)‘²{ýÚíè¢ì.ôfaû\rŽg] ¶ï ùù - KB!3X¨÷Cr*$ªaYÕïºæñ‰¡¼º¿Àm"¶¹ñ){Hk÷°r[‘"ε—"ŒøøâvÄÚ@·PÎé&M&^ç=×1Wêª3€· Þ†qÚ¤Éå@þ€,Rvî<8N\8hÃñ&e=£¶¢* ßèHX³rÞl¬¾´2RS¥&–g%^lWÙœ±ÐñïEÎ’x>ÄÃi1wíñ›& RuÛWt»ö:\vñ醷}u [©áÝÀ‚ \šEæ†îPÌȹ(ªËl…5ƒ¼Ô+âÐë3³²·LÇ™H—›“jÚ\ðÈæšÁ‘\m6®a«[[ù¦›óX)±µéÛnÆ·Võ5-Y „‚òÂL·:#УÇè•TáêA>>V/rçJ÷@ˆéV¤ùÙ<­$ˆIŸª–¿FÇá%LEÄQEÆœf;¾Éëp%×ÑØó|=ƒm…›( "4½‚Vï<«Ú4Îèÿ' ijÒ.=3o•l:þŽcÖîy!í»‚L§$Ôü0#Á?]áI|5KmÓ«ž°ÿÃÕØŽ;ðÅ÷òZà/fíß0J×8¼.¬½`¼õvE3áwY˜°™ùÿ?̾­É³öË>æÕð^M½ª¯ñÿ)ðŪõì¾,ÛqbÍrº òCÍ%U”ÊORWïC®t²ˆ|‹¯‰/³ôÿF¸ã|ôT"DËKL~õ¸Xâǘÿ®ž?endstream endobj 1105 0 obj 2634 endobj 1103 0 obj << /Type /Page /Contents 1104 0 R /Resources 1102 0 R /MediaBox [0 0 595.273 841.887] /Parent 1083 0 R /Annots [ 1106 0 R 1107 0 R 1108 0 R ] >> endobj 1091 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 871.997 83] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1109 0 R /Length 1110 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kh¢à’ÏÈPºendstream endobj 1110 0 obj 30 endobj 1111 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 871 82] /Resources << /ProcSet [ /PDF /ImageC ] /XObject << /R6 1112 0 R >> >> /Length 1113 0 R /Filter /FlateDecode >> stream xÚ3Ð3T0A(œËU„æ†`Q #©k g†ÆÆ úAf .ù\@ˆ— gendstream endobj 1113 0 obj 52 endobj 1112 0 obj << /Type /XObject /Name /R6 /Subtype /Image /ColorSpace /DeviceRGB /Width 871 /Height 82 /BitsPerComponent 8 /Length 1114 0 R /Filter /FlateDecode >> stream xÚíÝKì&Ñ{ÿû•#ì‰#üZ ª@prÜ_—º.‚ùüƒrÀ.’FüÔEÒ€c$ðÒ$WH# %Æ€ÊØQðÒ¿2@¤i J£p¸4†ü6¹ `ïôVÀ–­›4¶„Þç;ÝÃpêȨdwj"Ø»_üy}ùðí]ŸFþ”4Ss£eœ.[€m:åðy¼ŸõÈ ;ÊðþÅÉö–Ìì€îid°ÿï?m(sà©í!7oiù¿ÁÒg¤ÖštÝ׬RÐ75†@ÇÅ @“ïç·?µXO°e«T–jŒõiÿtäþh¼Ù—0â¢`iŒµ²ð¯îPвb\—º¦ ¼«ægø~\ iA˾(pæpÇ˓ƋÒ1èÖ.tc»Wz‡|fÆTÃOi¤‘ I®8qò4Î’F) œ 9?·;ˆZ6Ï!A3\¥;OÂ×ÆÞ±Ý@3*ƒ¶—ÆŸîôöñ~‡årHÆÀÍÛnøÇ·‘ÆY•ÁM`¿>¢å²Žñ~`F­&FÐ ƒmŠ4¶»ÖK+Cû¨áþC´P¬’þµîq_RtG}u½4®“óÀRÒX¿…ù-Ò˜úw–ª þfK'¥bz©É3eš±>èFl-6x#Ö7ÆÆuDí•9¤Â/%+îMW6ÆŽI†í $o3oå4×\iœžÒ±®0ÜxËp&ð“IãMJ˜<Ï˨;Ë#“6'SM\CÛ1GW?Ìì0بž"Oo–]ç­æš{iVû³+o„é^‚²ÔÔD÷1P«5Ì)ÝÖ~Òø(v:‚.F5ç¨`Ü‹]¦ŽQ_Ñ7ó–:Ý7±Ÿz‘™<ímÏÌ7®ÉÌ>¬yäηel•á™7-ùhR(\°¯ û&*²Ÿ4v÷#ݺUÒx¿°6dÏ츉%õ‰±{Í’¦àfIcÒ&ÙYÓYƘ±}ý6ÿwÊyýl’7ö­‘¬H¯Rëï¿o/í5Q#íC_ Úѹä]ëʽƒSµ 6íâU…eµ}Ýý–Wä-§”ŒŒ¼j:šÀU4s‰É3žêŸÙ§1/[™c¯ ž¢X£F\6W&ÞoZù{I#úæßN¾ÙKyW–öG½öø&ëÀÜŽÝZ¼ é(iì˜ÔÅ:Ò8þKYWO‘ÆkøÄë°¥† ª£’¹ãyŽ4^O–²äv”4Îêmw•Æ+n¯Þ.ëœùF£¤±l²±ñè`5‡lŸByµ4~:èÒyÒØ˜Ÿ©òIÕQÈÌ•Æzo\A'º÷Òx â×7²¸?úF{ÇÊQ<Ø †ï‰+ É{mΪðu·]¦ì^_V8iŒý ÒX¹2j)i¼Ÿ®ÑÀ±G8Gí3"©š±Òà@i4sHÃÇ}¤ñÒø(²D ÐÒÖR7×TJc£€MYï7¾÷3À!Òhiâ£×²À©'ë¬Õ©¿M>×7ë`„§sò¸Ò»PæOåpüÇ'Ýý’ƹSC5Òh³ó 3q”Úw*ø¬Êu(eÁ8»0Ïì•@F.­ÓÖfIcˆ­5&Øâ3³¤Ñüá9“WùŸ.h™Õo joÇËÜë<‡.Ùy/IöÒ1w×Ý5üÜ¥þ裕ö{¥qð®½ÛÍçDM¬Wt$Û:‹-[*üR»˜›gå½ ,2cP9?Ð-#‘8bG? ä4il<ÙL¼££^µHc™ºdüͤ1°‘¦–<]VNòìúè(•î'…eÀxÝ1¯4Þ× ‘Ž‘´év­)~eŒëHcýV;‰l¬Ž5_+QwœÛ_¿™4^On É|ÄT[ÞXélImí4it£@¶4^_öHfdìÈúù©þÕâe•óiU¯íUz©NýàìT—$¢&V2ë¥1ï»æJãÜß ü¿¬ö˜ƒ÷JcÈyJ÷Ò¨8P¯/Ë2óÖÞæ­[B8$=ºÅ2o£ßÒøs÷·`Pûá’9KSÿH¬+Êvœà“Oo˜‡Ûë¤ñ¨Ö¨Œ÷·Kãà{ó¿`"xµFŽHf 4N"Ì}fØ8ùû^?‰ï ×E#ÀØþA¹MÜ}¨¬á'€=‚}<º»æ¤³B `®ˆÞMùóøÓÁW†Ä©ë à´èþù²šÑ7WŽÊŸö×ä *³- {¤ww¶Ge/,¢²©ž €£¤Ñ4#il‹Ò Œÿ—ÆöS•ÀÉÒØr>¤Bà÷Gý(.Þè¨X<µG€Wó×ß<>ã8endstream endobj 1114 0 obj 2664 endobj 1109 0 obj << /XObject << /Im14 1111 0 R >> /ProcSet [ /PDF ] >> endobj 1092 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 871.997 77] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1115 0 R /Length 1116 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™khªà’ÏÈP»endstream endobj 1116 0 obj 30 endobj 1117 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 871 76] /Resources << /ProcSet [ /PDF /ImageC ] /XObject << /R6 1118 0 R >> >> /Length 1119 0 R /Filter /FlateDecode >> stream xÚ3Ð3T0A(œËU„æ†`Qs3©k g¦ff úAf .ù\@‰ lendstream endobj 1119 0 obj 51 endobj 1118 0 obj << /Type /XObject /Name /R6 /Subtype /Image /ColorSpace /DeviceRGB /Width 871 /Height 76 /BitsPerComponent 8 /Length 1120 0 R /Filter /FlateDecode >> stream xÚíË’$' Ekíÿÿ_¼p8bbº+¤«pîÒ®©Î‚‹8!„B!„B!„B!„B!„B!„B!„4úü/á'B!„Ðy¸8ƒ‚KF!„Bçá¢áF„B¡ ‰hD!„B@#B!„’¤öÃ!„BèNhD!„B@#­þ³€B! ½úv@!„Ј^Í@S „BhD8!„B¡¨TïÂþÅZ¡†‘¦@h ¹¡ñ*bLîßç?ë) *‰˜¡™I™á4z¾Êœ?ßE—!! à(\ñ§>¦ÃN„@U˜q‚yF^ª`Ï‹Ž#—/¹ƒÍ‡£ `ˆÐÐèÿ$£æ<'Ìü+É‘+&pã`åºq¿w0˜êe»«_‚Ð%Ðø0ĘîƒÆ¥Z¢Í3²EÛ™0´ßW GôKU¦àüBUACÇ–þVt¾¿‹+™ã.çG µ;4 iМÈÓk7£¼ß#–Wœ=m>3…LÌŸqBãaFeô5tqÐH>µ r,:iv‚FU IO{¯ÛÜ7V Àd\Üeà`†í Q^Í…F4 ¿Y“‘™NßÅuòiq µFòaz¼E Ï¿ôÖV£¡®…Fg戀F -ùت=Ku¤„ßkà"U(4NîØ'ÿ ŽbãqZl¯‚Æ!]lÂûúª94ÂÒ[<[¸HH—ÞxÎù¾ ËÉ ó$h$áˆDZl窱Aωµ„ÐhØA:y" ¨w–60¬ZS© p¤”ë $¹ží댵þÐ8ÖKÊžÉWhd (îåã«»PrúÂlkL†ÆÚ›‡û@ãO|"v-åž´Ï|®b ÐH Î‡Æ8ÓÖBãåk@Nb\ýÎò–^ ´Å4"‰ ;¼®¢4úÛ窙‹öo«å—{Ï|Þž¿j Kd>§6ØÆÝQÃzîòæÊÏøò LGuƒFÛm*Û«Í4EÑ3µ1¿4޹"¡9ÚZ¢péMÕ¿æŸP{O£­JFH™Çìü4$—eF *Û¿þßáx·` 4ªÌ`Æ]š(í =ç­j¡ñK$Oæ‚Fy÷È‚å•-öΟ’öRøÖhwN÷¯+G ñh¼ ·õù5¥èㆄÑsà”ŸNñ#æu0 “ñ¶$÷Ù ÿÚ¢  ¶óï¹p–5ÕÐ(éG hüD¾®´ák#úhëËyÒ Ño†ˆ¨üÂYÄÛ8bÁ»dK~ÚR}léÇ^åÃÕ¨47C£¥rŽgYùfhÌy<‰ü³‚Žn-á4ÐøÚ†£ÁŠž¼³œÐhs㦓ZP›å‰A“Е  ñZhŒÞ¾tOãódOz˜¶ÍãBh̼éÚFw«‡¸%r ÑÌ3ÓwPÇ0Ï7Â%Œå ‰±ý·¶…Æ“lv4Ê'¦ ×²üúœBhÌI¾v9“FŒ#òU>ÂÚæ«[„;c9Ájލ¡ÐXó=©ö©ž÷=žGŒ} qòJ·¸Ä6 €«?#hìÛ£'Pí÷GCcþ!÷„)&îcÏ‘_[^ž1•ļ/ Ã6°ªý~æjgæˆ>fra[£%kæ°R‰R%雺ë€0× foŒÇEçœ'4û33Í 5Þ1ÐXU¸³ý­W²^îÜeËDh,i=§ó;ÇÏfù [¸“cþÌ߃Ơ? 4úK"¡nôgµ´}Ãóœ+h—‚|ùÏS¾kH;É϶Q:q‹NÄ`lŽÙ9Ðx=æCcÐTL¨‚Æ“Jv[<öóÀQ}ä!ºœQ-,n¤90%³Ûî™f‡ßÕ'—ŸŸ¡Fé-%;²3ó5\YX+Û ÷jÕÑ<퉳í%Ùù–°öš¿ gÒ“3iyßÁŒjøî.’’æÇAê\l¯-k8'å3* ŽZZ7ôÐhvþ´Ë5­ Q¸À±t–*3ZN 6 i7»FŸÖ,ß e¾ëéyYg÷™½d S2J½Þ~4v†FùüâÜ~P¾9éóÑË|Ç@c…ÖîÂu¶˜aIÈ|Sr´üöx}HÐ!—8hÔf[’é@NŒ£ÍqÂòi½¶Òâƒ!d¥Aã1™S(ˬ¼eF-myá§ÇNÊJJ q¬¼aæ¤a«Ãþ!fËòJRìæåwá&^ÃêjÄðñ_A“‰+ÎÍg£¹LäyŒ´øàŒZ ÐxdÕ1zK^\GÌ[èÅqæ3wãô›ù g½UKKèÉmå_jÜ·N‘ÆÄÛsâî[@c‡“&’ˆqLÖ*o•a9çrhWªýD!ïDÉE ÇûJhg=ÇÉ$m¡QòÉÉ~挰×Ìnð†ÖlÚ;‚N¥}:½Fð¼ð«ìÛA£¹&áap±4öÉ(…Ðx›lkIµ7ùô¢ A¯a@»>Üh¸lPiƒ1'ÛR›0Gï’ïÑB#¸˜ æU¶ª„×ráæ¹µ-4VÛh4F Ñ<ÀÓºÛ“zµùr1Ž/ç&kPgÏÑ…„s4‚‹Â’ED_løê× …Æ¡>Ó× pT~(ørttÞ‰$„Æ×|¶'4^x&:§Žá|Ûu|†¿Õ™Ðå% 94šÃWŸŒ Sê3ÚžÚåS¼sªePÌ÷”¡‰<‰OÄèZ2ûð|þYBÕ€òT­‰rªFÖBcòÝ}@c·Ê ÐøüÉ×°,9æÏ h.– 8ªüº¯ºívn\ª.™!:ɽùÐh>ãOÕâP·¤[X~¦9ϟמ{Ífz_ÛÂ-4,T «1vyÂu 4{%y\¦%Z…¯Õݨ946ñªƒÁò+0 {rjï·#6Ìé'%\9e¥´!ƒ»<ó0htF~ö›~ êmƒ^Ÿbãó±GÏÜ„ióLjsììôu9o·Z(™ÿ[«Îþ\í߆T7äÆ- Ñ`°Ph4{ž|^Fß ÑÖ¦êôæ¦^jôìÜ(§ÛHß““ù¯áI”ÌÚ®è6Si7¸z Vìï(C‚ ™ q[×Hß““ö$K÷b¼{¦x¿ñp¦’‡‘%<À7X.:"á–³—zô 8ÐhhaìwvÎå/Ñà¢qÜkÍÞ¦§€ÆÕ=64ø%ÁJk¡V3àê“KÒv ‘„˼͕¿ÓWòøôÎYt†Í‚&}ícñf Ïÿeö'áZÕ_ˆ…pZ4¦p”Š6ñ:çóúy,dÔ Ôývá'^Â6~3¤½/íb*¿…–Ê)ˆØex iç’ãäœþúa† rNÜÌéèÙ?i¡¥†-QÝÎW¶=Џ©†yjޑբ („B!„B!„B!„B!„B!„B!„Бúç_ÒP‹7endstream endobj 1120 0 obj 2935 endobj 1115 0 obj << /XObject << /Im15 1117 0 R >> /ProcSet [ /PDF ] >> endobj 1093 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 871.997 76] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1121 0 R /Length 1122 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kh¦à’ÏÈP¼endstream endobj 1122 0 obj 30 endobj 1123 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 871 75] /Resources << /ProcSet [ /PDF /ImageC ] /XObject << /R6 1124 0 R >> >> /Length 1125 0 R /Filter /FlateDecode >> stream xÚ3Ð3T0A(œËU„æ†`QsS©k g††f úAf .ù\@ˆâ jendstream endobj 1125 0 obj 52 endobj 1124 0 obj << /Type /XObject /Name /R6 /Subtype /Image /ColorSpace /DeviceRGB /Width 871 /Height 75 /BitsPerComponent 8 /Length 1126 0 R /Filter /FlateDecode >> stream xÚíɶä6síÿÿ_õ®N»SIbâ®Ë~)  =B!„B!„B!„B!„B!„B!„B!„>Ÿ‹€B!„^pñX „B!ôáF„B!tp#B!T'F³¨27² !„P‘èÌ: ÊÜÈj „BEâ2KÈhBýíYô_bÄ0BøCš"úïŽ`)ÐCÏB½B#ŽñÏʰ@#Âð!ô|9vÁ7²숩¯^ð\k7 5BBãr÷È"ìL fãÁí£-§¦?Ï 4¢š³$ˆ'æÑVû<boÛÌ~<Ý>Úßÿx!:þý˜@#ªÉæô ˆÌƒÈÈÕþ|ƶЇ|Ë’¦¾z1nUß ¶RL_»æ‚ µÙ2¿=8‹G&­öϲ;‘˜5ÛÕ\=ÔË?û|×ZW‰ô„]U6°Ì[OuœHlo3¬ñ¤²ô²g±“IÙ¨,`AŒ/ÿ+ ÙâßçUÛh¼ŠìWqœ-  ³¡Qv-sSX`A#¿}AÿzïÃò¦óÇdaƒwyhÞsį)ÝÔ‰ÃöIŒ­O7–Ô…¼¡qÞ…V[hVówíÞ0`Äv'^ÊÁÐXóM`oí…;Aßã†ÊÏ쇵í4µ^B~ÛvF”¿¢ —Ë­}£›Øœ¼[kÈÝ~®óÎõ/3þlRM©)•ìÊ`½ ^Y¯ {¸µCBÕí¶í»D'›ñ}"Êáâ´öW®¯þÿöÕL"§ØÚ¡ÉLèóK•ƒ»øÃyPÐgxLÏ¡¦s¯ÎÚÚOAa¡jÆŠý°üsIÏï/ÌË>l#õ·Î= QFYüWü ⟠Y„Åic;¢üÈ‹¸ t ­W5þ÷7ê• `\^=BØmµm4¼z}Y¦{µ*§4Ýnbh|Ê àýœi*4 øMú•C¨¡£w_¡K_X§v… 7­>Ç ^@†³ËŒ1ÐøÌÍèõ—K»¯>¶ =ŠŸ½ÀÆoHŽÉg’Þ¿ÔÙÈýæ&D•Ö©]áö’lÓSW=7nƒÆç`ø€àØzH»Ñ9~3· Jàú\ŸË–»¸ÍGÙ”!Ì0--¸È¥Ÿê» M»‚þñ»÷V}.e“®§r‹Øu 1?þçiÔÓóS ÁÐøÔ>(‘}—á½_º+Ê/ùú- --x?À*lOiÓ™Ön—^{Ý_K‡Æ'û²-n·§­Œ¿#4*ÝÅrbtÚŒM?mÏ÷CÉxKÍ Ø·KìŽLÈ¡Ô ~Mh|tíÇJ ¸½}°#+`¹§YÐhµ, q6š@ãÇôãŒí Ñé?±ò!¶f ˜lvP’èš7æ ‘ 4V¸ëaè””G¢z m7âÛ|§›Ø›í0ç,bô°‡…ШÉýrcbCSnÌ‚FWnÔŒc²ú…Víñ)[Fãm"GŠMú.C04*gkœì¯Dkί„7“¿>cæ3¤@£kýJl3#ÑÑäNŠëðaÐèÄxÓH²ˆñÑÝ>‹œ—b2ì4æîgî^«3ŠPú b>MÂ5‡ †RR÷ÕÿV<ê'ý ãü·ÙôÔFÛ´ÍMƒ÷.Œ˜;„â\µßí:8D˜4P9y† PtÒÕ)¾{è± Ó}šU5²Së}#èÿÏuòY}D†F“¬ªËXuýÍ €ßâÓ™s‡lbÒ“¸ñe@™G¥@c÷—%(¹Û°S 6ìyŸ{^S6ê5‚FaŸ¿tÃÇ1w æ3ŠÓ§mžž„FMç‰SAŠ»ûö\®Sά µxPV&ò^Š ØŒ“ZR7Âc1Ý%ëÉÐÄ<”WÈF+ósDVШYÆÃ ÕÈ*@cñg¯ùÊÖcÌÎî ÁXyæÝ]·gaÐXa­¼G9YAcÊõÏ«÷8ž³6ŽÇƒШVè°E«ž®tnŒÙ§Ý¡ñ±èé2ð$«Øh²[MþÐX“®ëCcÀZ‰ÏÛ«¬ÕÊAâÌBy··ÈP»û1¼1wÒÞÙ7`…AcÊåß >€‚õø8ÛéaÃ0[ÿ/Ç,]Ah,KN~[³Ç똇˜ü[Ÿnv Únœúƒ+eШé½l7‚Øð ÁjŒjüZ¥#ÊŒiÕ‡d"žÏ9¯Éüä ¡qç½Îh™¾ésíôñ•~}ÑÝ[bêUQúa14Ú¾Ž‘!Þ +8Xï××ÔZ”i¸¸ ú™«˜kzϸFý\hla™@£ß¬¿ÙVØpÎv£Îüú2€xqÄù5S0׿RÇÙ¦;ó=¬(îʲ Ðh3LËã h,µqZ7|z§E}‹$zhô0Ú"èèG¤Õ2toëü‘'OnÕt=rU³ÆM·ûä‡á}ÃÛ-œ²Vކɶûí«ÆÝ`sû&é 4n†Æo&g KHÛ5öõ éíF]¬Kv~gâ§lCü³²¼ož¶l€FÈYl0&Wzg_# û²Õ°¡ Sw*´ù}!‘lëð_.4B㪥vúfë n´]„ÁßbУs‰]Å@ãÇn¥üØË5Fä~Uªõè&Mí4Ö…ž•=! ïÃEÅ",_´Ÿq£"q3IáËßk.®pzõê—|ÑUÉk+b3XØ ÏévÍ—h´âÆâp%«wÞO\øÞÙ8/V½g ¼G´ö ! ±7VÑsê*)[³–¸)«Û¥Üñs¿ì9÷!²ËxŠYŒi=›¤ì ÙÀBìÄhܶÝô¶Ø³tújRåo)*gí«¿=j¿Púø¾~ÄqmùÁ(7/iˆyÜ™©)¡7uvÍæ/ ²-n‚> /ProcSet [ /PDF ] >> endobj 1094 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 871.997 86] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1127 0 R /Length 1128 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kh®à’ÏÈP½endstream endobj 1128 0 obj 30 endobj 1129 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 871 85] /Resources << /ProcSet [ /PDF /ImageC ] /XObject << /R6 1130 0 R >> >> /Length 1131 0 R /Filter /FlateDecode >> stream xÚ3Ð3T0A(œËU„æ†`Q S©k g†ffF úAf .ù\@ˆó jendstream endobj 1131 0 obj 52 endobj 1130 0 obj << /Type /XObject /Name /R6 /Subtype /Image /ColorSpace /DeviceRGB /Width 871 /Height 85 /BitsPerComponent 8 /Length 1132 0 R /Filter /FlateDecode >> stream xÚíÍ’$­ Ekí÷_¼²Ãᯋú½dž»œ˜éÉ!„k!„B!„B!„B!„B!„B!„B!„PŽ>ÿCB!„öÄ4"„B¡ŸÄ4"„B¡ŸÄ4"„ð!„~#Á!Ü®5Ûã€ÐEKhDá Р½ar‰¯V"BhD"Ɔá!D¤@á²Ø¶‡Á!„@èO{ûç28,B×q„šƒFøßq`Ј‚ö4þìä{Å2—2H_nŒ@½ív|ØoÁZÖ)Â!#„‚+”¨`Å=爀Ј֎Дµ×…iT(ÚMnpðo™zÍ0Jß×Û׬r Å®®Ã }›çÃ}{Û—ÿÙ+R!פ¼ß’ûœè§ß›ú¥~.  ÑÖAGßzÁ™XÜFeôK ÔÏAÓß+]ÄýÐ(ëE‰8Y¬¸)£Y5ÿû…ʤ ­ ‘éÙ(i&:4K§4Óû‚Ÿz‹ýB©teB{>x”§ÒA°oãÛOLÆmrÿ¨ nan„ÆEškîF ^3Z ²òþQˆn9qõó:Ÿ´9HY›‚÷q¾½®(’˜ÎŸ$Ù=A!8é KX k/ŠS³6/›¤ÚÃÈüŠ£…Ôr°ç¦£æÌªU Mí75aÌ׌èÙÐøÉ–1D¦OïÍVuŽ¡à]xñ8uZÜû*0³ï%VnÆæûvb(ú P$ùÿ;‚NvÚ†E'âì㞉 x”fÅ¡ÑÙ×ï¥uJmÁ}p»‘òmƒv%˜ùÑÆ‹œêøæÈ>³jÐ8 ¥j>¶Ú•%¦«`jöE†!ÅoGÍôϯßf§\=’:»û‹UnIûkB£þp5Gç#hœ½•c™ô§–FÛGxäÿc ±È2â”4^TŸÿ*0s[ó@éXΑBã’¿ž,˜N¿WûɈýnrÛÖho‡ÆêîvŽ8ÕP m_×Щù…ÒÙ’Tû_ë( ÑMŒ@£q ^—˜mÞŒè@£ï¢¡÷¬=[»ë8æ´3Ÿð$h,]×G×PcOÙ‡>¸àéÒ©+V€FÙÃÖSõfhÔ|µöº4ãíæËö·¼ãà¯:¥súdsé7¤@£ZØr$™•¡±t;™»žêJ4jrãìO9:ê!SÝD—·¦±m¬DˆQ0¡§Ö")+S!ûú}ø©×…ÅÓ æmŸ‘•fLùQ@ãÑî¬yÁ6 ‡£5–e±Œ[Bs|W€Æ£ƒ§êd£ì;GŽüÆ4ŠŒÕOWпq»1Íx/46—Ó;l ":; 1qˆ±ú´N*¹–™u"V}%Ç·XÔ¸±´‚>4~;Útfƒù‡\ ’zâÖ Ew€F 17Ëç8ê­‹Î@ã¥Ð˜n™‰Ð˜¸£9r§_Õy¹ì4¸”¦×D Sb;¯ »ÒÉžE qÕÔ½+§¿mG¨#X¸%ÞZŠÐ”¡q¹::<çTtÞ<ªè{§û(“ >õ¥q!ƒ°‘X{_§·ÆF’KÆëKîUŸ•9é/ø´`¡ûy©Ç@c$zV0öÉtˆ1Çv‘äçxŸ–Ó¦{ÚÍ5xc7¡MEçSÆsÏ£ýÇVǬñX/J=°Û=-ÞȸUçLì^×¾êÝ÷°èG_JAjûÊ.0žÊöOA£¯V'qÆí]d}éS{{64þ¼_™ êvm ÑÙâ½s“Æ Ðx]åö“ ±bSöéãÐh ÁÇNù­!¥ªôw^îH§ë}Ç€êèÜîû÷§ÚþÄ»\VX¦¯y`ƒYfГ´Ac0ïm¦I&wB£ñöŸ4îÝrº:uÉ7žšÛß Ï%Øxzª?矞ÒÑÜØžv°éù6G’ðñÐèXDñ¿©ÐÒmœ¹–é>ÉŠ7íLÆ”ígEk>{…U34öï”}^±!·y”fl>.?…F£ ÷nuý<³6•îÈò§1|bT@ãjé‚Ušl| 4ÿ÷Ü|Že¢s34Q0~x°JäÔÆ|œÙË{7ª-Íà3¨ƒÆÜ_³›]Ù?cõ¢b“ ¯QGŒ+ã¶.9‹ŒUJÂǤ>-oWUl*}¥YÕÕYƲ_ùGbh¶ûÒèÜ Y?3hf‰1Y–™â*‹š+¸Švµ öPE— }8«¾ÛÏW‹|•*‘áöÕ va.Ñ aV«º Ì4„x7VôT1æI²²yYí¿Òm2…*{Zö¥ï)>ÙÀSv1S!X;‘b™G…OŽŒ}"4£•4þ¹·Í…ÆÜÔD]déõLGš±Wv—Ί•ht;¥ÄâØðúج¢R"å*÷·ÝMg}cgòÐþ×Ò7 è²rƒ 'Ô=÷(}# ‰µGðôa̪Bq”¤og,ç¹ pMtYI÷ÌEÅó§¥&­êÒ¼ Ä,íNo¶u˜X—þ98‰—}޶äqÍþ?½ò”ÚgV@©NgõSS]kµ‘dcÏýbßtËä÷Ë—Ll˜fl³–ôú5Ôš¯s;Q¬¼¾"éØ$ÆÕ~Å`oäéŒܾÅñ,1ßXáÌuYи†sŒ3^QqþéyM'16Ñ¢f“=—ÜÐx1Ž@£¯P$·À -Í(«ìxº¨ƒÐQö,×éݘf´#P–3Ͻ8°÷cYÙÒÿ½ií#öt‘Oÿ²oîDrŒh¬;-}64­£Ù’¤81S ÀN¡;71­ÎYÑ h,úÂh\yWt7?°SÒM=[¤æ®/G#Vw=JÕ¸ñ¨5½à!½TRãáÌá³Gfùm·•rê‘’‚BãO{N)h):!ºëº ÖÝŽœ…Æþ¼Y1®¤£ç5Ñ_Ú!E1E„-nð h´ï@‹V™»S|îŠ.¡Ç}`yëC㕱#å?¡±m;ãK3ê@cz?„gCcóNyÅZÝD°xÝñe¹Ñ!%ÙXT"+Ëö¾¶Z²Q„+ú4ÙŒãì;îB‹®§qnÿªeèG²ˆey,% š§Ò·~j¶]Yy¹:h4–D¦OM1q7åÎ{îbì¼v1 뼿îH²ñÓÞ‹þFh!Æ£ÿ:½S™݉CãšÖ·zÅý%‚”˜X¤”Øì4s(«à%Äfh\IïöФãÐXîmHÛê¨öÆáÚlö q5¾f%ëäY½ž][4ö4ç|4®ìFîE_¸ 7Oë`Õ¥ÍN#Wç—° mçBcƒ 7 H齞¶Í¦»È³ÔÚ×DÁCÊ 57|Ûìht¸q5¾Xñhln¡\Ñ© h¼WàE˜fhü–¬<©[,†ÆÎOФ×rôŸP8º¶æÎ ÐYƒGcF q–ƒþ¡®ud‰Ie5ÿ“ Ñ8Î?ãŽÔþkjj~V¶W½»+O4K[|_÷tŠ ±Óó4§-K¯#õó¹µþÚuÙêAc€¡qš–Œ§ßë°¿‡TœíÏÏoR‡Óܲi¢Ú¨D:W¨AãÊÈ4¦ÔfÄýôŽúnŸÐY.˜"V×7ÕúȾ³|»Úö h¬€Æ‹ˆ±n?˜r!}莚tµS‘æ½éÖ~4NayQ´JáF©i¼^Ñù‡EkÖ_Åýƒ¦oׄÆê±zRMcäîØx\¨H˜D|Kš1=F4Fö#§Ð8ÝÆñ[êc‚“Þ¶û~-4.ö ¹Ð¨éÛ§Š€Æ†ßËâëpö§ qýõN_5o½!ÕL:÷¦;–ñ\ÇìT#Æ}ü‡FAi~N õgJƒ¾]¾ª;ÛVI“E6¤ûÞ¥&hÙŒ{àÇ@£N˜ÆHÀggM¡#â“ ±ÓY) F|{õp=7D!X 45õ§ÿKó±¾ã…ÐNsHF[Çhf€ÆÈÔlÌ4~›Á«¡±Ÿ¯ªWqÿ›ä³HµÒì>ñÛ>U°ö^ä)®GB£8¼wI§‰‚)kW؉OV"^A£fJ§úU‹A©plü0Á$r{èçk¾ªÖ›€Æ¸]Ý› 釯‘Ô‡Æ%Ð+R¯N6*\­_‰ö«:SUvO ¯²×K—¡ç-Á½§BU9<‰GOA¦½%¨ Æ©)ŽOmFdkyo²Qç>¾ZJGí~\ÑÌϯehtw©ªK qŸ¬Æ‡×&7¤öþîOAhT³({?(Ù<Ì4ëEˆ1×ë¸Íõ²æ|shï]ƒw¥_Š ô!_‡ÓÆ»ºY¼·‚Emþ\á D$¡'ƒâOµ &t²yÆÌE€­v[çåÐøçX)^B‰v0“ê` 4žòƨÐSã…Â<7â¦]“Z‡^å0úsOªoj…—ä^.ò* Úi$U›Mn09¸ø¹1. i.ŒÎéÐ(»‘¹h±ð6.óæäÆ]þŠM¥¦§"‡Wç·{€oùùa¼q1Vït ;gÓ°v$NŒ!„BH–F„B!ä€Fˆ!„Bí¡‘â„B!´FÊòB!„Ð釀B!„ìÐȰ „B¡=72 !„B!„B!„B!„B!„B!„B!„Bè1ú׿%n6Sendstream endobj 1132 0 obj 4029 endobj 1127 0 obj << /XObject << /Im17 1129 0 R >> /ProcSet [ /PDF ] >> endobj 1095 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 873.997 83] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1133 0 R /Length 1134 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kh¡à’ÏÈP¾endstream endobj 1134 0 obj 30 endobj 1135 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 873 82] /Resources << /ProcSet [ /PDF /ImageC ] /XObject << /R6 1136 0 R >> >> /Length 1137 0 R /Filter /FlateDecode >> stream xÚ3Ð3T0A(œËU„æÆ`Q #©k g†ÆÆ úAf .ù\@ˆå iendstream endobj 1137 0 obj 52 endobj 1136 0 obj << /Type /XObject /Name /R6 /Subtype /Image /ColorSpace /DeviceRGB /Width 873 /Height 82 /BitsPerComponent 8 /Length 1138 0 R /Filter /FlateDecode >> stream xÚíÝ˲ë¨EQ·ïÿÿ¯*âV§"αŒ 3yhÌîöö£Å$Aøº¨æó´~J#u@£4RG´{#u€M“\S Ž€ö× êÃGkÀ¦Óm€:¨#êTG €:F½7é àìôÖÀÁ×8ul‰¾Ïwº§ä’WÈÔD.ð†Ñyðíõ¥Ä·ÿú40ò¡dšÖ˜-³uÙ64‡×ô~>Õ#?ìhÃûäÛ.É)ÞÃÓÈ”ÿßü´¡Í>³:Coþ¥åóvÄKŸ—v¸kÒ÷¾f퀱©1:þQ¼Ô±ññÝåÇñ÷¨—±¶l7íÀRc}Ú?¿?šuŽ$ŒP‚@8CcÝ,ü¥;D´¬׿“Ý¥ ìuægøD>JMoAË^(°Š¸‚éå©cÈ—Ò1w]èžÌvïyÎŒ‚C£:’IPÇ$cœXH¤Ž³ÔQŠoPÇŽœŸ;„¨c»OêK ŽÆÒ*áûc×pPnjΠEãÕñ§;í>ëï6^& êø´y·$~ðcÔqVg° œ7F´œWÖ1ę̈5ÕÑlÔqðš¢ŽíÆµighŸ;Ü?‰+ë„ä ?Z÷ì/)º£^z–:®“öÀRêX›ó.ê˜úq–ê >fËPå:Åôx<¦+¶{àÈÅxXt'©ãåþDPGêQQ|‰:^~d{úÕÁÞøçÒê"» :^ wÿ%­ÚK¥Gø3«ãù³ÎÑÜy»nêÕQð"üÒ˜uaÖO ï? u,+¤¸ô°ïds/uÜ1&Þ<òif–:ö}A²á×H™`ÌõFêH–v…a÷ÍêX/?~˜¡Ž?å0I‰%FzïÓîºZrŽ\JÔ‘:B ®¶³.üÔ¯M÷ZÏZ˜®IÑqgëÛ>ê8 „ôÛõ+¿Õru¤ŽÛM¬4{w‡œøC„Ôq)o¼òÏuL öˆ“Ô1ö7JÆwPÇ2“A ]d7ÎéGX¿¿®»¦TÜ>©ù3¥äXt#Îìë{cã΢öÎÒá—RÇuާŽ+{cGÁáøɻᷲä5W§çOY§ž¢ÝE¿Œ>\Pu¼þ§i?òƒ\Ô‘:RÇW©ãÏ0ZÙZÞm’:ý*Õ1¯/Ø&NFÞƒº%uLº ó*Š•&Œ¨cìñ3ÔQæ¤6øÙGýÄEv¡iðu'Úòˆc :IÒ†ÃuRtb-q<[$ùËðnÿm…zJYoÙòàÜá`VÓÈ‚ñî€9ìxä- Æ~wá!ú„~¨«ý;*Љ·É Úã\u|4ÜãêØqxTe ý0u,hÃ)U”G_ëôß{ç°þÍ×/¤ÎUÇuL/$ÍÂÕ±{ݪXæË¶_† +áÐÓwÈ»^[¯˜¨ŽWΡ:•ê˜=dÄNù š®£òPãN»dÝê{„ÂtOtÆ #¬`Õxü,‹)õØp‘{ºå>ê <¿@Oá"ÐL¾=rngÞNGvEvOù—2™ñs “”˜:æ•M¥»q’î5ÎV£XƒZs—HøÊÅHýÖ,eêx…n½ˆíxÓ½úy ¢®Ð–£r/ÿ·©ãu»¥cÝ×d’¶¹6–^Ϙ#W¾ÕÔý«·Ë4Î.ê8X\íìÄâ7DT¢4&$ŽVPÇì/È~øe ý.úîg¡Ž¯½òÂd|×MÔ>«W©c_M{ü…ìÑj uì8µì€YAËŠ`Ô1#‘Ö¯±)«”æªc÷¢É;OÛ+87lðÕï¿£í¾Ž¼;¬?]ü÷;¾èÁÑ*uv¤Ž÷Ÿôi=lxŠu°ì·ýfu,»'}dx]aұˤ&ð™©ãŸÃbǘU<ÙŸ­ŽI…š§Y]ÙP#ÓñúUT½®~ÊÕ¥—RÇ›-C×ûvyÍýjVû°+ß&Ó½)e©E÷Q«]˜S†­óÔñQì$ÉØ^Ì­:FÅãàýÚeõ}U¸ÔÒßÄÑj#?y:æ^¯a÷½š“ˆ5çù¶½­2<óJ”Ýb¢ÙWÐÊjç¨<}ðÔq¬|{_í¸¥Ö´“&S‹þ•ê˜t#í¬Ò–Ýþ±#þ1Ÿ7¯„^¼×1i¸éÛ;=Ø‘™^¥:æ>¸ß‚‹M#“»¾`©ßѽüteºø²ÂÄÒÁ›[‹;ûéö-n“ ™wwÏp§Ãí•að®ËÍY“Ôq| ÿóÁ‹HÂĨ•_—:bdaBûdlñ¥îlO«²5s ™³:Ž¿“¹K“Ôq5u¼†L¼^¶qAÔ2£-ñ@àåS¹×±øiMT©ãÈ7N×WDzÂãý!—¼ >O6äwì¿ ŒÖÊQ~;uì®ç£²SÛã ê8ÑÀPÇkàп¾ùÅ_÷rQǧ2~ÇM¥¹%]qoSGKϲÕñúreFÆŽÜB’”çÕñrc Ê»èÓ9Þç3:vÁ±×{T <:BAžI˜XÕ¬WǼך«Žsß3Ð8—ù,ö ûªãxø§:êÆ^¨Ž×÷Ö’n0o-áUÒ­—y7ž¡Ž?P/jb?\5g©cê‰5FÙŽ÷XåÓ%ÔâˆÛNÿÚ€z€Êxß]ÿ70ÿ Ê)À29¢šêX³˜ÒŦœNþ¾ÇFbàÿ†K#€‘„‰UÇG'¥wÎÈZ³©(€³ƒ}<ºoŽ%َ̳œ—ÏÀ©:zó›V?M|dH¨ú~¼-º>¬fΦPûcò&˜ƒóeß,€—¤ww¶Ge/,%´©¶ €ª£’#u|ú/Z€:òFÜ«cû)‘Ú €:¶œ'©ÑØcË¡@š €=úIŒ8¤ÀÙüïøPÑendstream endobj 1138 0 obj 2582 endobj 1133 0 obj << /XObject << /Im18 1135 0 R >> /ProcSet [ /PDF ] >> endobj 1106 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [237.148 386.215 242.602 395.912] /Subtype /Link /A << /S /GoTo /D (figure.6) >> >> endobj 1107 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [453.41 317.864 458.865 328.773] /Subtype /Link /A << /S /GoTo /D (figure.6) >> >> endobj 1108 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [102.333 101.683 107.788 111.38] /Subtype /Link /A << /S /GoTo /D (figure.6) >> >> endobj 1101 0 obj << /D [1103 0 R /XYZ 72 786.278 null] >> endobj 1090 0 obj << /D [1103 0 R /XYZ 121.366 462.595 null] >> endobj 1102 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F30 512 0 R /F28 523 0 R /F34 583 0 R >> /XObject << /Fm14 1091 0 R /Fm15 1092 0 R /Fm16 1093 0 R /Fm17 1094 0 R /Fm18 1095 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1144 0 obj << /Length 1145 0 R /Filter /FlateDecode >> stream xÚµZëoä¶ïçË?áoÕ^E$õ ôC.©ÛK( ´@S´D{…ÓJ i×>÷Çw^”´k-ðò1’Ãyüftê*êªÐW…Íc]Ø«jÿN]ñ¿W¡õcÊ43q–bï Âm Üš,¶y†ôïoß}}cŠ+¥â2Ë®nï‰ö¶þW”Å*Ûl•Ò&úkÿÐT®ÝlMa¢›M™F}·1*:Ž›ßþðõÊ®T—IÉë·:‰³2#.Ž›­Î‹hì÷þØìýˆ]íÝFÑ3vòè~lä™°ó•G7<3á±gš,°Ñãf&tüsGÑe$Û¸®ÆF 🎾«}Í\úÇæÕ‘' `œå‘·d66{<å©=ºÎ÷§±}ÞØ,ŠñÎxK…Â,é–·k"8©±Iä;w×zl«h{x›ð0áŒÍÈŠ²rÖñéÐF)‚p¨öî4Êj¼÷;AG•œ¹¢ŸxdZ–!ôh^ôÆ0p`1£cAP5¢4…œ¸¶%Ìð$œV VR†Vßù¨³PcxHNó•üûȃØ1šhÆk qM:†\ýP“‘@“ažŽ>’åxÔ<@“ÇÁvü(D;:´¦(±¼¦GGnqšG\¦qfÒóPÕŸ‰ã”¸HøÝ»Î=½)ôŒ4k¢à^žÃø¤½¬žÇç¡›½Üdâ÷Úõ•Žs£~M˜?*0Qßt‚÷¨;縗»Ÿöw!2jSå¹@¹@ôNýÚ©ÌU_€Ñ´CG–°bnË„Påì?Ü_¸ÄWx¦¾½-˜3¡€]Þ²Ël{W³'5ˆA´àè‰óU¾¾Áà[rDtšŽectâ`}ûpyXB Ä2Ÿ•õ’ùý# I¦ânCõ üåle”ÍF¦çIèï·!ÀÑVPü¸µò˜‡™2z?!ø<—+äéÅrÁ™yÆÛÀï ‰f?öí )¯ù®ªN'#HÒºÏ4 ˜µ„5fã/½ì\IC¾Ÿ£ãà(“+ à rù.Œ°ŒuôO¥dÄ:òP=û'ѬÙÝ“P$Ä(¥\4àù‰YäÐܹ®¾ž*µƒ¼èúmöœ ?s1á>Ò¨Ò®ùq$™‹TGJ%‹çÌ z‡¡Ü~䞤ЪzÒµrYt.ÃCÆÓ.Ÿ}²íkž“3Øhì_Èyøz%ùܪÉB²P Wá_ä’Ú=ýðït¡Ô† ½Teð³Å”¡ TàdÉ–ïw ^A‹B@ø_&’eZRÆe"ôVöÀEa •$ÉÝÙK5PsÑâ,ÉÂ^Ø“Õ1‚tØ­ ô€ßågí ÷€^õ9‚s¼;Hr 2”‹)ÜC£%èùJõhiAFbŸ pÃè¥sXx’ºy”xÉk)÷jÚNÊC:Œß\~i Im*òæ÷hJ¯~½áÔ{¹CÈÞ`rúÆU®pÿSÛßI^NIÅͦ@7-‰ÇBŒß¬©#8A‡´FJ¢—~¿ÇðDˆ-º)¤#]¡†÷$õTä´è¤<¹¨Q2¿°ùÂo6àkOâ ü|{¾äŽ\í)ɧ°u:“(Lpåy‰–\Ó1R¤2 ¸ü´CŠ &½Py ÇÑ·÷ˆ“2Ë’[qX•_T×Óå‡#È‹AnB5ií^@#ÖÙ†µÔ¨„˜“fosnòeYììò.èËô6-ã\¥ÿ×ÿWÿT‰t^"dÉÿhêãî÷#w‰ÑûþÔÉÿ2€á÷ý'?®šA™Çzª í<åI"P¯Ç’º(I¡Õpª|.ìP4Õe!@ƒÆSÆI C¬õ¼×Y!ô"€ƒbr'íJÑ*ÐOs·Y$–q”³¢¾3OÀî}7Î`~šðŸ`ÎäÔ²gò2|å%:û*â:œëKj“ƒ æÅ[諸úüªÞÉå>šàì+šó¡|9Ýendstream endobj 1145 0 obj 3270 endobj 1143 0 obj << /Type /Page /Contents 1144 0 R /Resources 1142 0 R /MediaBox [0 0 595.273 841.887] /Parent 1083 0 R >> endobj 1141 0 obj << /D [1143 0 R /XYZ 72 786.278 null] >> endobj 237 0 obj << /D [1143 0 R /XYZ 72 761.372 null] >> endobj 241 0 obj << /D [1143 0 R /XYZ 72 389.76 null] >> endobj 245 0 obj << /D [1143 0 R /XYZ 72 270.086 null] >> endobj 1139 0 obj << /D [1143 0 R /XYZ 72 177.263 null] >> endobj 1140 0 obj << /D [1143 0 R /XYZ 72 127.649 null] >> endobj 1142 0 obj << /Font << /F37 380 0 R /F15 393 0 R /F27 394 0 R /F33 497 0 R /F39 496 0 R /F26 391 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1154 0 obj << /Length 1155 0 R /Filter /FlateDecode >> stream xÚÕZK¯ÛÆÞ»@»ïJèÆ`1œ_Ù9nœ¸i‚..àE]445÷Џ©”må×÷¼†"õ°ŒÂFk¶†óâÌy|ç;‡V‹þ¨Eªi–„:Íåö‰ZðŸÇ…oý}<ÓÆ&Œ->ݘ¸²6LòÅÊÄa–Ä8ÿ»»'ß¼TñBEaå‹»{š{·þgÐj\¿\Y•ÃÆm{W¿[ê4p}¸\%¹ ^ 8˜Õ8i©³`/O»å žÚ¾¯ÞÖŽ'-•ív·|'lÍÝ=/qͺj¤«ÝÊ4^S UÛõò_wƒs®^=§óº?´ÝâÀ“ïïŽwÖ)ÈPó•ãü–ˆ`?c ‹òºhÌÙk²Ðfñm Ä¡ídw“_ØýïÕC1ì»e¬¼:äUsßv[ºú·øæ“c)hfôz\þr™Ù íPhQðç¤;T%?u®èÛ¦†»æA麡¨*Qs›¢+ÊÁÉÚ‡®ÝïP—QãF{?¸Æï¶«‹Ò­I+ˆ©JÞ⦇åÊhÔ|+´'|,šµ4øç¾mpòÀOo"eÑf°½-Ðæd—µÃ¡F†zÇöØAÌ_jmDj´!ÅßM»„‹¿§Eïð}xWhZy3Èf ûj¨ÞaËÕžQÖ®è.˜ÝûMKãE˜NDˆ]^„Øî7í¾ÆKÇ1f…GÀ‡ô(Gš6Ê Úǽ';±<ƒÜ z”X`7>.|ëhÑ„9ûY Îi˜§SûSñ¹uçI.äW~ÜÄ“ÈÞr ±ÑaßJžÀ(M27¸7Ú™—‰Àw"5=+Í€nº}Y5©Êè qnMâ4ìªãÎßöE] ¨Ò/Ȭv¬‰Þ `Î9|ÀÒ0IÍçÅûEñãE…wV6øÉu !)>Ü£B“e²ÇÝ]Fg 8ĸ ;lÀ)´B×YT[Ázö^KÂÇÆ†ðI`ˆ·y»d“A€D2Õt%æà$ªŽÝ<©jÖNt-ÿrœ{ßµ[žï憄4~X»¾ìª^¬çÆ$h”p Yé>±½‰ûfì¾p¦¹¼¬¥×žÃDÁF79xb˜»³l6Ÿ~›‹¿¨ÍÝ-S2 YEù—³ÉÄøì'€ÙžQùÜöŒÊ‚‡ŠQ›à< 6‚ÖòØÞó2Dù Pžràà@¸ztwìUÁÚãy®Á8v%VH'šª°¬Ûž=§øjbxIµö] ÕYðnI¸uà»C¿³­ŽÆ™}õ»`9@p:•D8yQ ª®Þ^€Rl™´nåRˆ ‘·R4[Ç/CûÄÛ?rÿ#¾f<à\ÌxúF‚ºVYh$¦Çô²Wl¹BÔºÉX-ˆŠÁ_Áe ”­éE@ÅûžßÓÁÈüDF{oyhVèßõÛ£Û‡®Ømª’Â?,ëÓoºTöy\*ù¢.õø.:TÛΚ< ^»`c†]-†â²G%abçpn’,ð¿cŒ„6¹ü¢º¥ƒÌ iWàiiª>H©¬Ikø~(¶»š’k„}Z¼x‰9ž{懼äQÒ£(Ëoy” G‡*÷]'‘MÛZÅ>ÆÀƒ" §~çOü¾‚`ÁNiÞr†­‘¢M Ò§G_Y“?·ýÀÄfQ&Ñ+ÊÎ÷8¥í=/Uëy;..jˆºë?¸U?ˆ ¹§âë:ÑØÐgÎ*'i˜¥ùuO»¾^™‹ÉDd"¡rõšÚÄ_±«®0˜c ! …·RMôÀs·-±ƒ&…y'¶tœsÊA´§yȉª‘q£˜/^mBM•›O+^üïë{Î 6šüˆú´J‰]Åzݹ¾çô[OÊg“eÞb ’˧(€ý ]0U*„ÔÙ :ÞZI‚§)wãqE‘¼v‡á)σï܆÷!§Õ ãFøË˱õíx¥Giì$fMó# RIðt3mãQ ý®(}—$Myܸ?À ¶ØÆªbå…<ÙËž÷ücõDgê¤z¢3Æ>h[*HØÇQ.ñ鯤€ƒ'¬ Ç&Êùp²«+úŠ®ŸéyD6TAO•bÖê%FWHÙ¥Øíºv×UÁ©þÚ_Oæqò¸ÏÝÆ]ɨw\4$ÑℯN‹®FÒ-œà>ìꪬ_Xå² xJú»ëÚëIÁsj”¯Á)‹Ä‹\­±ž6@ ´Bú/ÝóŒK>°Ž£„òÁ¼‚×úJ_ Z•guRPrVø•bº²ìeRŒWæ„àÎBˆ à㾪žK¬å‚ƒCnu,^4,&Vc™ÛAÛ½ÔG&ZZõ®ô‰ÀÍðâ^ÊWe…[–DÕØlÑør“ÌÅÆ`#ðÕ²êyo+U2“Ó­ü¡3ØÜKZ̰#æ¼´á‘Áï LjÜ7¹X.<ñÀ“ö\5³Ñ1Ë,JÏèüÈ Æñ^¢ÞùeD{Õµó^ò®VÎÇ‚ÆÖAnTö+oê±g›†ä¼ÎdGâyòg– ÿW0£`Ñ튡NŸ$¹ÒÄ“[_Dø˜ O¬}”õ‰Ýžà™àÏ,¥»&o@£¾À}…ΔfÄÒtZ)®…B£ß—¥£„Ëv•ôzM¤R…ƒ_€aþþúÚOêݶõRцú Ö÷¬Š¨s Y¿'Ö}Ýîv‡Ëe/“û/Ç”îÉ×Vù"—å’òà{:L¶züN&ßä4òò99™Ã'©š¸iöµèš`¦’@y_Tu,Ò ëzvÁ+Îê<~½OÄ¥Ðs‚cö¯€T²ó.ù%뎜ֳŸëÒÎÃ4¾úE)ZèÒ•©Ð‚^!gʳEç÷“wšáÇÐ0Kôˆr`žfç‘¿yi#ùz c)}ÙÀÅ ¤¼qàêš¾ýÆÌÏð0p=i²û$j^àÿSŽCÁ&@,x_»õÍį—8…ŸÞ(c_Íçò€¨5QcÐ}*Ϙ>ð ž¡ƒ_ï«§rè¾å.ÙS>æËé¤âqÃZœ¥ðчtṟle¤le`sH-³ •ÖÿG hüZQ‹‚gVCø—3M‹ŠTF·9+ñ’ðæ4­àqrËCRu–ccÜÑñÀÿëC- endstream endobj 1155 0 obj 2974 endobj 1153 0 obj << /Type /Page /Contents 1154 0 R /Resources 1152 0 R /MediaBox [0 0 595.273 841.887] /Parent 1083 0 R /Annots [ 1156 0 R 1157 0 R ] >> endobj 1156 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [390.103 685.335 399.069 696.551] /Subtype /Link /A << /S /GoTo /D (Hfootnote.15) >> >> endobj 1157 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [267.387 348.35 295.266 359.259] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.10.3) >> >> endobj 1151 0 obj << /D [1153 0 R /XYZ 72 786.278 null] >> endobj 1146 0 obj << /D [1153 0 R /XYZ 72 732.484 null] >> endobj 1148 0 obj << /D [1153 0 R /XYZ 72 667.406 null] >> endobj 1149 0 obj << /D [1153 0 R /XYZ 72 620.119 null] >> endobj 1150 0 obj << /D [1153 0 R /XYZ 72 568.59 null] >> endobj 249 0 obj << /D [1153 0 R /XYZ 72 459.296 null] >> endobj 1147 0 obj << /D [1153 0 R /XYZ 88.587 92.018 null] >> endobj 1152 0 obj << /Font << /F15 393 0 R /F39 496 0 R /F28 523 0 R /F27 394 0 R /F26 391 0 R /F33 497 0 R /F29 547 0 R /F40 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1166 0 obj << /Length 1167 0 R /Filter /FlateDecode >> stream xÚ½ZKÜÆÎY9ç¾7s Í~ña %öÂJûà  Œ^NÏ!9æC+å×§ª«š¹Zlc!±ŸÕÝÕõøªzÄMâ&“7YžÆ2ËoÊÓ+qCïnBéÐF#µQ±ÑX{aà.ŒÜ)ç©Áñ½õù07"‰‹¤¸¹?ø±÷ûÿDo‡ÛJdÔÛ±ÞSùáv'³ÈaEEM;8ß.¢áhyô£k\g‡ªy¤úÉ ]UÒ„ª9´Ý :Û˜æhÔÓ-µ·2>RÃÞõeWáryäxqKÕ‡½Çÿxƒ}çk=Uû걩~L„.ms+‹h¸ýïýßáL;‡/üÙ쩜„»V*jôªU¨4%-Ö}¤1%îõh;[®£¦£íy~KSf>A¥³=Œô§€!–—I’ðàsì·(Ò¸PébŸoþ€Q0äó;™]Ü”,â,IùºîÅOß~÷Ó›»ÒÀÅ•‹Üð@`±D·êi gÛ÷´AgX/•±)Ô¼ÔÛ¦¾©~LLÿÄÆšig@‚f¼Þ ™Æ)È8õ¢†Ë^Q œð©ªkÚvã*àH:¸Óy˜6ï¿í™n ¡*³å䧈““Mà‡®½ðh”i¤ª'9vÔŒó}ó…Ç·;%Ñý±â¹á;öî0Ö4Þï¾ý™DÙ3Çœ©ÝžÏuUzz~¶ˆžŽ .0ôH÷L” Hc-Ñ^•´LXáz¬ˆho ûÌ}íõæÉ‹ò{a×½†A•·êin_·Øóf·¨?O uÚ²t½ï!9ǶÒuƒ­xÀÁÙaì\ïÉ‚æ·ýP¤®ÎÕÖ ¬„É,ÔWéaûhÃ~÷1s$]¸6炌b«ÛFD?ÜiÔUì¸rÍ'ÌUtWá®9‡Ä°Šš,uƒ’*á´{4LX¼ð*þýˆ¾ËžØÙWÃÔëO`ÏxŒ_Ûˆ·XòÆÏo©a:.6[µ§jË[™ÖB‹Ïâ²–•ËXëô%1q*Bµ)|_í‰1,„Ž“­-ÞÑ¡­k2>“ÜIû§¿úê~†(&ÖÍ3°õY4ó<Â$$ä‘Íâ¨ÙT ‘Ùpç8~gëúÁ–ïð¶QqiÀ4ò®m†·_W‡;†¢Ûeð‘ŒÁ`eÛü¦s7‡W;­bpºà8….ÇBªn˜¯²Ðò˜çõÏ -‰uª€%q Sjã`w7—Ç…Ô“ë¿t× À9#fˆ0ŸSéX© /&éÆ>w*VPÞ¥1èÑÆ9Ã9€N†æ Pˆüeè©…‰žðrz*Û†¾^;@ÞØÖRãÝ66’•÷- þ| $•ªz[­Øôq X>–*€ºû-¥Ö¤ÅD“à€_“¿û¶q´9÷Á•#Yì¸Ø«W‚„pJŠ€Ë\yFwîWfH¥q’ê—Ð?Pm¼ÐMÖ“ó¹\ µÇŽ/GÅÕ/Q¿'“”gø{⎪§/¸^@cÉV-ÅËòÑNÄï¹èËd¸ñ™âk4’€Æa˜†·¤ÑÓ4÷apM_‘ÑL½—¹pðä)¥1œÜó ] h¢‚yŒíá´!-àÒŠ$Ÿ¤åÚðÉ  ®äË4¿ÎeÊßô2߀ôš$"Ö´A%t~Øj».ÄsXÅKëÜÞÿP茤I)ü3[£äÒipÓ28¥f+¼µÈ§è YÁ.tML‹8ÉŠOÐÛ—%AÛÿ‚ÄfãæÇþÏÁ\Ç‘Åa ó) ô˜7OHçñô¨Ð¹2ì5§"ÜÀJž€-4K%÷à8É£oÿõÍ7hR’‚” µ³{²IFüÃVGŒï*o)¡à+Ð8é:Âú{ê Ô—wFmÔ‡ôÊÖ£‹=ÍÊ—oÿ5rœoÀa¿a• ØÀ  3y}•;UÀd¿SX‘ê‚~ù Z|à”‘tå´SoÍç>1‡:HËß L›å°my`«1 >@DŽ&÷ÎmÆT¬£ê$ _KF¸ý@U`ç€_޵%¤B1kôõ¹¼pé…Öà²Ç„µí5¹¦T>´<¡VÆ xŽÐʆ~¥±-ѼWe¦sb”¹‘ãàp†. ó!ü}ÞŽe)ùëØ1õ›Ú±okõ3æcžOøk†/u ÇŽùŸ§¨å4ï:%Mèx.0þÑ WñÀ™›z`Œ¹w¶ Yb.²0Õ"‰3SÌ€$MRL!­)¡¢ÇÊÈ…¸W°0üÚŸ¶L§Œ³É'hEÎÀ&×|Ñ [ÈD®¬L°I2G³K—UÙ ‡[ŽDôÂбšùÅkP’77Ð0ŸÂ I¿™ ÷…ý=}Ñt{ d,ŵ!e³X0÷µYWy1KØl» òŽ$ È‚sx“"Ù¾IQþ„<¶¸ñI¡'ß¶ü%l6øÃf¡§Ü¡xÍǧcK/HMt„‚Cs8Ë•=ž5"ŸéÔÙ©þ‚BlÙ°ª\CŸÔl椩/ôÐ$O+f—¹O§sîP­œãœØhê‹û»À|×ôy#™ªX@ñ«Iý;Ii#gÃ9 h'DbØëñ;tN Xß §ºp4ÏÑàŒÏ•à´Ë§åFÐË€CC‹5ËÔ-UËöäõ8xo$le9 $¿ Ë¡²`BlçBrBïb©Ï™\‰)ÕyOÉ%|)Ø…¡›Æ<(Päl¡4 %M!hô¾¯‚îgµL¼:U]{ ”xþ¡D>t_l1!Ëb=éú›¾D¼ÕmðA›8ù'r÷˜†¹XðäK÷š?˳SoóAÝPiýX¿‚Ž#¾)¬Ï‹u$”-žö'W >eŒŽžæ?R„–ϰšY¾h[³¸½Ñ³<šïs·q8&d“PHZb¡(¢ïîžÞ¥r40>ÔSCáùA“„6hòvòPêÜ5|žsÛ˜uR(K=CTª§ Âg ×ɦ|у? ›É|¥ÑÇÊÕ{.7m³ëpŽ¶Û“áÜ{:o+¸ =VïÃmi‘ùdö3§;okýÕa •†X4aZÈþ]³‘Çèƒ1zª€Ëk¿­ ˆ³žÌãT¥—ÉXð‘üS¶‘ÉJçÔÕ¶4—O'/‹$Œ®ø©• ƒ­½º[ÙÜyõ ü3!œ4Å÷ƒ†ÞÕ”Rp^oy°âÅ›!Vgà ç7`¤ÍRðmÝvUïáy1ýÀeð?ðÝqϬõñ¿fË'”ö ,žëpôþ Ô鑞JŽ·2VõàMY¡–6d À¶r ˆßìÛ÷=Ëx¸ºÍ4Gþk<7a–L Ìx I)8ù$Êäõ2#?´þ©›šˆendstream endobj 1167 0 obj 3218 endobj 1165 0 obj << /Type /Page /Contents 1166 0 R /Resources 1164 0 R /MediaBox [0 0 595.273 841.887] /Parent 1083 0 R >> endobj 1163 0 obj << /D [1165 0 R /XYZ 72 786.278 null] >> endobj 253 0 obj << /D [1165 0 R /XYZ 72 626.755 null] >> endobj 1158 0 obj << /D [1165 0 R /XYZ 72 506.485 null] >> endobj 1159 0 obj << /D [1165 0 R /XYZ 72 470.42 null] >> endobj 1160 0 obj << /D [1165 0 R /XYZ 72 395.829 null] >> endobj 1161 0 obj << /D [1165 0 R /XYZ 72 330.545 null] >> endobj 1162 0 obj << /D [1165 0 R /XYZ 72 269.503 null] >> endobj 1164 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F26 391 0 R /F33 497 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1175 0 obj << /Length 1176 0 R /Filter /FlateDecode >> stream xÚÝZIÛȾåàò¹„ tsXU\}³“iŒdr˜F2@ÄÕT©Å˜"5$å¶ç×çmEQ"ÕmÏØ@èÀZ^moý^•ÔE?u‘é‹,OCååö™ºàßÛ _ú ´1eœ˜0‰±öáµ§¼6I˜§ Ò¿¼}öÍJ.TQqq»&ÚÛÕ?ƒ‡MU^ê<Ø\^›´ªž¿+Ûû¦úÙ­ÂËë$ÑÁ·ï.u¸î÷¯÷ݰqVòÀ5e{y “¬ªæþ Ú²,X¹×‘Š·b’;\CÆÂ@n\· 6²ôлzÍåVf¶»]]-Íaù³ï]G æ¸óÝþNu­ðøÎÖ8ÈÒH<š‰ƒ­íÞb¦5&°4ð›MØ“g¡ÒJxtÓ6Ã;WVkàѱ2ÍÃL§BÒ.`yX(u´™[ Üi;[r„Ç!rá… ÄzNïë¡ÀÈ ÕÀßµ&Ð-Q~jÔ¶»gîÙ‡kL ¹Û“Ëv»_>=÷н¯q¦¼ð¹zžóÑÒ@j§î HѬ¹„  ¿¼9(Ì@‰ÆÀÜkª”#p~zYÖmÏG-¼ÛXŒ< ˆí]Az¼œŠfŸˆÀ«±à®Vb ¶ï÷[?lL–!Ô®À1r•ƒ (ùà1ù) á‹èøioÙƒ(ÉP¤œÓð©Š?úë/ªþ< ÀoIÌèó¶ç¶‡“;MíY…Uõ[×9ÂÀFïÈ  k¸gqª Ð$ÚTÿÙ“*h9D \'‰éXT^«Ã4ë»^ÒÚh‘©C‘°:|kUI›å¦1C1d@mí:ËÇ*èþË¢VLØxŽÍCµ"ëâUÈG¥Ÿ&IÃ,òNú7 ^ÜKûMÄ‹øcö;[:¹ëK“PåÙÑy÷>!¬IA_aÜVÂñXÅ£ ÀF‚Ð6A¬ØˆzM왹ŠóðÆ÷‚Ír~5™Œ dË×”“õIÔ`}ägÐ7BÿÙ‘£½¨¡Ð ~Û :=ÆÒ*x%QÓ'c–‘3Ð*é©ú3™õ’uüÀyrF΂¤UPîÁ³NÌš%yþºR©‡†fn†±Ý•ð1ùoÐÁª4ÞÍM–¶•²ºôÖÂ\œÁ+ã”þü³»è£hô0¾ÿp:ÝÔK>X•dþ¯ u—5[&‘0öEPk%ºy̾8è¶05¦ø^~uöþ?`aú#,ìèÍqb<#¢œævi<ë™òRµÌ¯ÒóÔ‰´V¡QéS0/3§ëhÔýÏþ #Hr»endstream endobj 1176 0 obj 2796 endobj 1174 0 obj << /Type /Page /Contents 1175 0 R /Resources 1173 0 R /MediaBox [0 0 595.273 841.887] /Parent 1177 0 R >> endobj 1172 0 obj << /D [1174 0 R /XYZ 72 786.278 null] >> endobj 1168 0 obj << /D [1174 0 R /XYZ 72 441.543 null] >> endobj 1169 0 obj << /D [1174 0 R /XYZ 72 391.929 null] >> endobj 1170 0 obj << /D [1174 0 R /XYZ 72 315.217 null] >> endobj 1171 0 obj << /D [1174 0 R /XYZ 72 279.152 null] >> endobj 1173 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1181 0 obj << /Length 1182 0 R /Filter /FlateDecode >> stream xÚÕYKܸ¾;@òæ¶jÀ­•¨÷Þœ`g³I»ÀC6Äڔäñø×§^”(uíL“Å"YdU}UE…wü…w™ºËòÔWY~Wß„wü÷þζþ 4挓ÈObì}…qo9÷Qâçiò5þ0õ£4âuÿúðæûû(º ¿Š»‡ñ<Ôÿñþ²ûïÃ?Þüø0OKü8I¾. ²ÅÎâ*»±ø>ÂÕ¿¿g0 eäøa·cå=œôn©Ü;ôÝ~Fî5þfÞ‡IcÓwBð·ðÚ¾¬uÍ“Lywÿ Sêr,™t*nt½0=îöð_kYð¨;mÊQ×>J4̨õAwͨÛg<ÊÝ^¤ß‡¨‹‚Î@ÌI앸\yÚ˜Þp³ê»ºÉ¡‹ûfž®ÊiÀó&‰×Œ<Ò_"ÈR,)Ð˶••v0óTš²µ®þÀc#Ýèö º=èUýÔÖ«™nÊÖÐõ[:Q°:‹n`1^ùVÚ àphÙ{xG­Œàeào]žË#j;ýÍUQàŠFšO¨ø¹×tÃôçªÑÖpúð ‚ŸyÜ衟L¥ß=EB‡ø¯;ŠP!0ù™;UI§ˆ¹.¿\Z¼uÖO¤¼á$WmkØÝòŒ¶?ÚÃòÂ<²ÅÉ^–s5«éOå¹éÐÞ6Î<€ênŸ†¾Š_ƒ‡Çßâá‘õð0 Šå¦ mM5 Äô¶ÜPû »lÇN¥ÖIaÌN–9¹SòÏ…×1çfXÓH4ýc‹¶„³È[8ôg šìŽ/ººnM ‘È@™®ÆÙ À\Z²æ’ìOh½Òi1‰FÌt¶Çj2f6x$Ð"½y"¡nŒ®ÆÞ<ïòØ{Ùz¢ØcõÌ'ù¦ß¾mvt´©$SÛ>3›‹ðÀà˜¸#Å ò\‚œÃ*³”™ÌQ œ5óúòX°—u¢?)^…NÒoÐIšÞ;vij>£ARÂUO7mQ‰r…1@¯ ’¡£#g‰GFF‹—ÈI0€Ä 4Ì‚ed9Q­‘8Ê(ˆâÈD_òßYÛ€ÝVíhÒF¤­£ h!Ã(0¾•æ~¤´pâ‡ÙvT‘w¿+ÀÙ»]’g±÷ûô8èq`ÙÜl ¦Á¡ëß':f¸Ái`ʉàäãŽ.ŽC2Bü…Õ§ 7#ÈÆ¡2Íed›æÀé"Fl8ˆƒ\o”flÌ<&ðˆ3™9žÊ‘‡î27»öu*ÑFr¿,ðަG±ž¸×–æˆ(š$©÷cYáȉGœìzO§Æ$lÍB @xšùŸ:¦“Gf’¤`c{È$GÖFZpö(‡å}íc3+¼i˜JF’´ðtÉ©×:éVÈõÐRÿ²¤Ð¸”FZ”²e… P6BB”p!»( âU¶äÅŠX(>ܵçß%òA§æëîæ vä ¡•(vÇYÂ6'eøMAÜæ3µDÞ¤ ( ?¸lSM [ì¯ùĉõi0Û+BÙ4pb=t¦ŠÄN0¢K —«ô¶Ð·^…w’¦Û|d\ ü}'9ü*W”Än8s¦ ¾ÏëJÌ>lP^\,·lÚòÑF¢Uv.¡Z³Ý±ÿ.ɬQV,èuZ×’  §dÈ “Í㇈1Iˆ“Æ(¶>@†d´àWs,»æ³MkóXÒT`ú?€ÈqLòÏ÷|YrØÈ ù†l²ß9’«šR.úÊ? €çhʳ½B®¾æ˜{2Z_ÏÝîãqKÓèá‡Cp˜+?O²Wƒïûnü¹;ô·Õä8æOmÿˆ÷‡…£ŠXÁts¶a8̽¶yoC‡ 6Ìd!´&h™HìÊ³Þ ë®â^“R4°íkæ•hsHSщ±Q÷6¬4‚JR­Ïà |˜Z©šÃ^ÇcÃ\ V²]3s8Ÿ cLžy—àƒ |ÜQ- (ʘ¨¼§†œ?w…"d•µÛrœ§#*Ü(¡×wD¶ïÜZþ¹t Ó¹)ñ°Ø‡¨3ç˜ýp hÄÁ$ð€ƒÌ9MÓÍÙ-à(r™”.ãu½þâó7Ó|Ä ýkN"f–)oƉgIˆ.¥Xfï  Dó|a‹‚® šö\Îò Í@ 2~Yû(.Št-Q6úŒ« 4´Xˆ[$ðµe9NÒUíTkÉ>L¥drcci 1¸/Ió™Íh§%á÷é$9‹0ý,tá$3çæx²‘|ë „1롨¯¥^ÊÛ/IßVz6NÊqÈé`ÆÑvè¿lÄQñ ¬øop%ÃÉøqxÙ’9(ßcÙÏù»“˜B/ß^.’$|Çü˜Š¿’ä¯âELyŽ>6ìqœ ìǹë ÄCªe–Gþ’ÀJÂt „7Œb ‘¼±•@ck%@ËlÁ4¹C¶µŠ/Ø&÷¥Ex4u=OàJ­72•8ò3• [/­OÍ eß>Îý P«Íðù8ÁT™,8Nˆ{/$®C†0:(ŒÜOhâò`œbW¤‰¾ýˆ¨@kEk\ʼn„«ØºJ_`\ŽÁ‡Ä 6—²‡Ì±ˆÒÕ‰^®GâÀ‡†¼¯»a1Ñ‚waÁ»°à]ÈëÇûÆs´ Y„L;)Q‘´ >ó¿ð2^ŠmxÁÏ^Ðøö¢2’yeøzè‹nÇø?îíwcÜšc]&߯HEØ•H$3{ù`<¿È=Êbó `šNô^Æïxl£©‚ñv-˜«Ù+$.yæeÃ×EØ whl®Ÿ—o䈹k”Ø]?ÙÓë´¼R/¸².¥Ö„­ˆ#-–wì%cަ«õ§[ï)¿ëUvlJ»uVÈȉìüT ÓYÛ<´2åÊ“-8ˆ"Ÿ}˜¯‘Åùw^/œ³a–= 2ãéK•¢þp|áSZ–ï}õ[šà‚dÑ©¿6•ûco7R‘ò•úB}÷?{ Aeendstream endobj 1182 0 obj 2893 endobj 1180 0 obj << /Type /Page /Contents 1181 0 R /Resources 1179 0 R /MediaBox [0 0 595.273 841.887] /Parent 1177 0 R >> endobj 1178 0 obj << /D [1180 0 R /XYZ 72 786.278 null] >> endobj 257 0 obj << /D [1180 0 R /XYZ 72 604.41 null] >> endobj 261 0 obj << /D [1180 0 R /XYZ 72 501.313 null] >> endobj 1179 0 obj << /Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F37 380 0 R /F26 391 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1186 0 obj << /Length 1187 0 R /Filter /FlateDecode >> stream xÚZ[oÛ8~ïþ ¿ÕÔ‘ÔõaÒ6²Óm‹Ô³À`vPÈ’œhkK]šfпçFݬ´ÝE€˜")òð\¾s¡ÔÊ…?µ õ*ŒG‡Ñ*=>S+þû´²­_ gz¾q|Ÿ¾3qcgnŒïDó_nŸý|­ƒ•rØWÛ=ÍÝf¿¯}G…޾Ø(å«õõE¬»2m‹ªl.6&2ë}UsãC·kò¶-Ê»‹?¶ÿøùZù“Õ6Úuüا5·÷yÃ[Z¯n¨u{¡£õÃ…×wP;ÁÞÇF¦TüNµk“¢Ä¶ h¨áÍóŒgì«òBǰ& îëêÈ­¤äßüKÑ¥ôôoWy‡Ü¹Øxž‹´ñ]“×<žòk&ú®‚Šû3¡´}š6?áÙñ´ YÓiwtXÝÈhéõÃ}‘âÀ=ÔùŸ]Qç}J2 ï<ùþ:ËÓúñÔu^ÕwIYüEGð °¡ÌøÍ¼´sy Ús‹ÇÂ}Ö`7– h‘sòñÐZ†Èn çÃ`}_ÜÝsëÆåß‹žà“ϲƒ^âL&žÁóCÑÞW]Ë“îIÜŸY00ɾô©¬æÙ¸$†¶÷2Ï_'»‹ tÉ:–vËAS ˆÖ=ÐÞÈ[ƒºžŸq¤/ƳÊDü&UÖáH•ÃÐ â@¬£U‡b· ïFƒÉ™tª‰üÏE†òŘ@c&ÁÏ®¶ƒúzµ‰ŒÅêi‹~ÚÊ•rT¤ غÃëNïPr_û럶ê#›ðuU¶(tî/Ê–Ø}óú?ŒÞ;&Í'âÓJ‰ëPM8Û•MqW¢]NÛ’»æÅ¬óP”ùC‘µ÷/D4]èP¡ì±uL¾ìUú©)þÊÿ—÷~Úu{|‡4[¸\M/vB?D:&ŽVu¾Ú?£q" È××+9J›¥qXÁsCQE!O@Øu¼À¬ð…€%LR2fAJ× 9±öd¥eÏ1[ÔÀ‡÷úyýY碢…*X tcíMà(å-œÔÖ Mð3TÔŸc†þ¼ÿ %âWÛÕä@´Çî¯OlÂ"C¯Àüʤc~¬êGlk:¼® E?ñxZ6 {t·¶ƒlÖÜÎ’6!ÀWð§‹ì{°»$â\`¬\P3ÞE©1ì¹1ã²Q.ã ÓÂJ óóåèe“ìŠL<ò ¢÷d¶8%%Î÷«óÜN²‹ËIÀ)ãM(g„‘SR'ÇÙ{lžŠÁ×GVçÈÜoc矰uM— þƒ£)ú.b€‘Œè— û+7vbÿ²j™4r¢¸{3nSX‚+*ÁOLÔ@ÊŽ„›Ï)ÝÛ·{ ®N<³NP¸Îù¥} ÍŸðÁqá:t\?´îV&Í:)¬ñF.G,ø[׉UŒˆÝ:þ¦$')È´á¾1Sàñ>‘~^RÎ `݉ÇmœBséÜÐ@…C÷ù DE3&¦Ÿ|Äv×´dhql&\H«ã©.0pÈƒà ¨=<òƒönÌOâZ¢š@³<°Áa L/Ê,ÿ‚M6Z7á5xfY•›¿rð¼<ÆÌ­gË0£’ºik™`°Î7 Þt‰ª8¢Ä¯„ÑÕuÞ‡VÈà2­È°³þ5äÀè󚣥Œ»0ž­Œ#Z·j ²Ô¶hÜϼ+x%ž˜”vÁ¦MÊ”c;ÀŸýS å™¨‡FjCã^ RÌJyNÔ+Öà2Ê/Œ×/yå5’¦}ÁÕ‘bÏdõô Á$>äƒ ,™„ }@S8Á‰ö¡S¢•E† ‡_p1‡¬¸h"05ìíæ}(V!ä›Ê 9M«zx‡ÉcˆÃI󶇛,ß'ñK\~Émù¦ª¿r S ³Å±HE?\ÎÍ!wî–¢j9‘eIö¹8-úå(Ïd“çGØIöØ–U_Ökݓ˃äAê"®’vncûÝíóÞHfVioä}ω Ċײ7 U|æ®ßݾºúx{uõöÕ»×W k+:ž¯{;e@õ]Hû§•˜IZ`Ö‡<É(œ÷$1ðD1X"‹7‘9S-èb†¥-=°ÈØÚ? KBʼnƒõ+6ás“(;ETAÈ`gˆ»sÑ5§h–æNKÁ9Ôœ¼AC^•Y8ÊþK‚}rFOKS…X”ùž0µöaËSÂôãô™0?üróþÛ²TN¨ƒ‘«joöËfá÷1ÁQJ† ÜÃç™h‰ˆ×S(~ú@®{´ÀIn{¿ýøòæíåíoOj§y/¢bü캿Q@ !¥³Ðu,¾¡Kâ8¿¼µ+Ê„Ê3^ e˜uõîšM~wÄÜ! L:ZÌ%kox ‹ž*Ð(çIŠZçRá =Y>Ô}5«Øâã`‚-@qä— ›¼ÓÓ í£Ø ™¤›\‡èìÏ~Ózž|¨ôëâ…šì‰ Þu~z"KÅ5¾ŠðDèXÊ*2)@:9ÛYO. àq(òƒvžDŠê‹‹à§¯wnïí¾çr±IÕ„ˆk‘°4Òœjf‰ïBMsó% ÁzÈ=ãA&:Î^ væ=Çhoì (Wv-ÍŠGá@ãM¢`TS2Óš‡˜¶®$5™øF¡åPÂj8•ÚøNš³TjcÜoWò ˆ"êõUõ…ÃC.i5FÊ{ˆ\W¢JøB±ý#ÏaßC¸º´òò6)p¾Áˆ%ÙpÕĦhnÃsq[9¶ò|'ð¦ùÀ‡¢Ló¯ãh%CKt\fÕÀ~°”S ™R–÷µŸŒ}uÓòCÄ/ô©÷²Ûh @`T")dÐÎBÁtWð‹¼¤˜e¾`§ÉžKÜž¥Ýsûú†[1èïKâö05 È£KÄ6çW0iJ=[µôF²-5ag”w2^-ù˜íö*ø)í¬Í7áX{`É„z­ÝЏ¿ÑµúÁ´ÀÀxcïì ŸS\s3·êÊ cvHº4•¼ÝoÝóµ»²0XXŸýQ 4X+W{ ôcšðå' FŠªø6]†wèzé\Úh$‚ÙPÈAxè¡d\œÝâeðôfëÑûYúTóEEÖ¥mlšúªÌÆsýoCIਠ쳪á®m9Â\JÕañâ(×u›ôÕ<ìÇÜÊõzÿã¹f 8f×`hØjÑ%fCZ‹cÄñ¾eÝ{àhëßüÏj‡d>b'VpûÈl81„`µyc@ðoX(®© [ÛþcqHäÄ×ð׸®üfE“vMoÇö{@²dÏ:OÍÎ8Õ¯#RÙ’©±ÿQÞ:ÿ“/d”–#©„g ðŽo“Œu¯Ðë9\mµßhHÕ'•ÿ’q3iíû97&¦¼‘…á‰T`©³¶DÅyw,…¥Ð†¹ö×ô¨…Ôâ\A\oo@L`e<^[{Hº¶‚ø¦H%- ‹+h1HùVdlY-òIö(01°y|~nnrß¼„£à…û+­A–(…¡ÔhbªH™ÈjB!eõéõ‘-ÄS íåu…y6i}ꂯåzWƒ‘ÛwùJ ] ØPö‹€¿?ÏæKöµBñ;&ÖÓo1ä• Þ·(eÅæ^ t´vÈÞÜâ`ö&ÃÿŽ¿´¿5ÜÔb·¿“Æ!YaÎZÕÃR_.@ìZ¬õº?ª®3.K‰ý±yX†ÑÃèv 2Ï)‡'#*¤UŠé^{j™Rñ¯õ)äÌØö#”•È2ó¤„Ì7¦2 5£þ-dƒÐZØ;@:ϬÎ6Èvô”kb´Æ’ª†4'¯ë éÑÀ³ßLÓ®ægT=œÃÇ–åÍÒG;Ê ßµ¾éí¯oÞ,¥n«q¾Œû°^ yhÉ œ¤çøq4dÇ@wY-‰9‚pÛŸm@O-_;áo"'KN ©S]$È]Ü|vÑ‚*à„³‹xdñm¥æ±à ¢çѶì>uS’ñãï}`"ȇ°6@È¡J2¼X8_>n˜áZì„FÍÖç{ .X.|Ê Õ—G¶êêööãÍÛ]¾¹yýñúÝÛíâ1°€ì÷ȶxÿTV›®þþòöòŸWÛ«Û'j!*ŽGñ]-Ù–/×Wø[€\RºO™úXìÇL‚{;$û®æÜÁwñrþ®;¥ZQ~)¥fœRùîôÏGµVŽ!3ùæ·>¡?ßB㧤þOìð_EÅ=endstream endobj 1187 0 obj 3843 endobj 1185 0 obj << /Type /Page /Contents 1186 0 R /Resources 1184 0 R /MediaBox [0 0 595.273 841.887] /Parent 1177 0 R >> endobj 1183 0 obj << /D [1185 0 R /XYZ 72 786.278 null] >> endobj 265 0 obj << /D [1185 0 R /XYZ 72 761.372 null] >> endobj 1184 0 obj << /Font << /F26 391 0 R /F15 393 0 R /F27 394 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1191 0 obj << /Length 1192 0 R /Filter /FlateDecode >> stream xÚÍZKsä¶ÎyÅT.¡\;0|•µä(Ù]»lÙ—8¥¢f0ÖÎ V”ò×Ó€hµNUªR: ‚F?¿nJ®bø“«L­²<*ËW›ã¹â¿O+?ú ¬ñÎÄhaœ½²qíw®µyjpÿoß|}-ÍJÆ¢ˆ‹ÕíŽöÞnÿµeý`ÅÅßnÿüõµÊft.r©Ü®[yõÃw—ïß÷îîÃÕÞ¾ WH!Mæ¶—õ6@Q)‘«lAñúæýÕÝwß_}¼ƒY€ª”‰ˆá üα¼PYô|±Nr•‡®áÑýÅZå‘åIg{¨¨ªy¡ßWvC½é«¦ë<Ï¢ëj'®Ö*MAN /‰r+診<ž/ò$zºH. ..òÓÇ¿¿zws}sõMèq,òøìZw -SºF†×À ]CË,ªv¼¯ß[lðå}Ùv}[Õ¸–D[ûK,“ºÂÛñÊ®iƒ€á¨%Q7ýÖîü& ­Ý¶M3¶|6¼ÀÏ+ÉO‰Pz)¿CCJÙ”½Ý‚¼“$‰nIZ눠\wÕÖ¶vËë}ÿ£BqSÉk»²/<´mÛ´d²+™’&èdC_¢à4ûòøx@‰‰š/î› üÄ‹t,íJˆaÅ Î4·Û´•ãiË;Jž¹_/³@“n¿¯:f*÷ëN0ªë`C^g NÒ ÷`bRQ!Læ÷ÍéŸÓ\'Ê€búqâé¾6FÈ\N,®·Uk7}Ó>³H¢¨2º ¶äýÀÆL¤s&UÄ•„hÃJ&ôÅZJ#£ë‹"†¶@˜X(Ö\“Uà ‰~$ÁôèçüÇpH,LÁq^L凉c]ùÉ«--ø6i‰Bémm»î-,eôFëÞ)Çÿì쿾ÙNÓÑx:&Iªßéä‰uzpdOÙÃk“äà(ìXñBc£Q£7W·S¸7"Û‡­™Hsõrvx9cHˆÝ¹âÌB™ba>>Sl èƒÊD_ÝÊ»omÿ~¤(ôKlb~TÕ=®›º¿ùæ-Of¯â°.öíÉþ¯¶2Ò_®•ëBÈ8wÉXºÈW­]íÞ¬!Håf• Û4þèÀãu.²Ô­C°€¸Ï§d‹$ÕÄDœ$£ ø à:`k T➣üNH€„4Ó¾ñš:Zg¨ÄL†ø¾4Œ×©€T¸¦¿ÐÉ0‚wI™½’òm?´lŸlËY=’“7`­`‹=ÛrÁ!÷ÎQÎ’P`çñ¾´6H6•›‘ÐSÕïy„ºŽ8Ebf¦6m<{ù¸žñ·ÿP0çä¾O…ñÖn]º2 «bž3îqÓs€+iD‘ûÃØ¢,¡SŸ-1ÙÉ8ºAôƒÀJÌ.‰”Ä+®”5ï ,B2†SÓÜÑûøÓû÷3Î)üwL’‹9Š ° ,6Ÿ°Ë°Q7¡$ •ç'0¸‚AßH£Çé$€ÃØ®ˆçWرr’$ƒ¤/"ŸÁ¢ŸÐþJJ²™C#°jëfxØsf=Ú#')ØÀé6t¸Ø^§4ŸžsèeF¤*ÿMHbi¢¦[}îHgY*@ó?¡AÒ5'Ð…˜n¨ ˆiÎ*RO¨p[Qr(áê¹ ‚V X™¥zn>þ|ùþæ›»ëï>ÞMb‰(2=¿Žô0†8ÝMš‘©¿¶›huzCSn­»G¥B$ÒB©¥H– ùÃ凫۫`ÍeÊÒ…aœPˆB&_kôèˆAVA5Ú0d°§Æ™õäH!‡‡x¯_ñwE£1ÆhH™·¤•N6ã@ ‡­OûŠM§¤ø†«ƒ”ð`ÚI_CÉR—X¤o*{ Gcª²à×UY0šUYi“ÈÈ€p*Ñ2ªzGcÏUŽÉ20DN…¹k­ýÃÖ? íN²<ÜÞU5~ÀìÈ1ìŽøLƒãžj•Œ}óÓ¼BñL¼=ÁºÃêߺþ¬†Ñ®šƒ³‚qSAàLÇêðË €FEÀ2Xbâ!€Þn=c\Va•¸iŸ¥+Á\®ö1Õ e„Ì2aFÀØo~ñ™‹t¬×¿^,q¬D»2I/Ë5÷rMfU2L>Õ\ÐÕTbšè¦w‚Qçr9Ïñ›²(¦¹ï˪öõçÐq’p"` xvK@ŽÿCØ="dÝ$÷ñvAgð£>ƒ Á†¤þ ‚F¤¡¿BK‘šìÿB›/…Ðùç!4…^Eê¹pæž:sWÔ‚‚´\ö¶ãéØ}À DTÔpv°å–lhrkŽ8ö‘Ï‘Ð\‚â~îL98Xº2¿nkryg¿'AÝMå®4°7yã¹óæ®~+F¢—› Ä"ÇQFÁ—Kw8@~‡£Cë|3xsÛŒÞŽó ²—E¾³BÀ¾©!f©".1éà܆TaDœúkü.hŒÉø%¬:Ç1uêfGT¾ @$ Tç²- ©%ÅÜpÚïËÞ0˜ø¼¦JøL|æ náiU"ÏËÃC_¡£?ÁGp¤ÌÆÉ?'CQ5BÃ×Ä¢˜¸g‘-‘nÔxyäà‘‹ ËK6Æ)é]#MÂy+NÀæð Mй_¯` 9JSÌ*g.ÇÙ  D²¤ø­9­{á½eÞoå„·`:7ºcÙûZ²‡V§åŽK= ¹ƒ$5g¦erô­T6X`tí:p!l¨n‹BIå{o9vÞ”ŽÞ5ÇGd,jºŠT”Áš¯ß»WlÜ×MbuÖµMq²­ºÍÐu–ž¹”ë: ›§|­9pƒ$ XC`;–ž^ì<MŸâ9f:­í¬.„]—×xÀ×. Ùcõ,L`›šÖs†4BY'úÖÎŽµ,–›íØ5t:#£ƒu“ªuBÀžRí­—‡êþ5˜ì·êk“³†+$7×pýÖÖ¶¥ž:$–ÖËöÓëÊ~w¢=,¹Ús pî•ÂÀ}šðsä©ï»á;xÓ/qx$Üþ|B ?ôí°qQÞk1MR?Þ½y´sMžµH]zîÍ×[»(žÑ¼­·£åh™GÝ3áyN@Í¡£0Up˜‚ÇxÛŠ"®œšÄ0„Š<”)žùNùèÎÀ.(íw¼eě̼SQS[ÎÁÔVŠp:¼qO ŽN|…ès[!ÃK¤ÄÙ#IÀãV<&Üc0’ƒ ó_¤NˆD¡!⯔ÈÑ!‘s¼’”ß×Óúåï)ÿ¤ÑOÝ0}2#Ú. Éî4DyÔš1ØRµnK*Æ`úXYð‚w0W\1`¢ã7Oƒ­´ñÄÖ}š*µCá•,Ð)„ÓAZP\hÉtÒŒº•ÍÐs?Sú² %;û…ɾi«:ÈD~”"ÅMÉš´Gwiÿæ–é‘;¨hêZ—™×pz®aüŠÐwöà>RT¡è¸•̽aºeX¬H râ5_ð*£Í¾H‚ÐÉö)OfKå‰ùÅÜ缪‚š{…‰:æ¤(¼Ó6ü‰¯È €yà/\ä>x`ˆ;NÅ ÏN¾›ŽÿÂAxi²]žŠ€±ïaà~Ì¿çZ!±£ÖâÄÐORãSŒÉ£ŽÈd¦p«p¹fܽ] ºì¹øŒLÐä#lpo‡ÛÀZI‘}à—²ŒV —N'3Jã9W* &çËŒmv­—Í tu/l,²gß{Çš~7(IŠY|ã590k×äÀ!ÒJÀÞÆ$ÁË¥_=2=þ#{"ÏSîç¦oß´ø8ôþüËq¶/ç_†§·Óå—óÀÕÆ–ÚŠaÆÁÑBy°áZgE€ÿ9™ÁÍa ª4 >ù)f´JUœ¸_ç÷û›©²›“1àÂEâ¶pܺ=ÔBÿOr¯^¶8•ç°ƒC`ˬ‰m5RôÐZ‡ÄJ·±¶½m˾œ½;ÆGß|ò ²ä=-î8ÐY×Sºõ½ª)E0î~¡!¤U"Š´øoBLá•~Pÿühñ¿6¨ëãLÉu{f2þ×)‹1~_©Ô¯ý ‘‚è ±™òù.H–žž PʼüOJÿ$TZbendstream endobj 1192 0 obj 3150 endobj 1190 0 obj << /Type /Page /Contents 1191 0 R /Resources 1189 0 R /MediaBox [0 0 595.273 841.887] /Parent 1177 0 R >> endobj 1188 0 obj << /D [1190 0 R /XYZ 72 786.278 null] >> endobj 269 0 obj << /D [1190 0 R /XYZ 72 678.527 null] >> endobj 273 0 obj << /D [1190 0 R /XYZ 72 349.17 null] >> endobj 277 0 obj << /D [1190 0 R /XYZ 72 285.814 null] >> endobj 1189 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F26 391 0 R /F33 497 0 R /F37 380 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1196 0 obj << /Length 1197 0 R /Filter /FlateDecode >> stream xÚíZKoÜȾûW r h¸ì›LNŠ×Êzƒ];ÝâÀ fz4ÌrH…ä¬,AþzêÑÍáK– 9: »»š]U]õÕƒ›þÄÆÊÍÒXÚl³;½þûyžþsL©ŠÆÑ „[­ÒX¥›­2q–$ÿýí«on¤Ýˆ$Γ|s{ ÒÛý_¢²î_o4Ñ®9=ìŽEû»×½ý·˧Dõùô¡t;×­QÝŠOoÞÿðáÓ‡woß¼eúß<Œ¨·BÄÚhÞchË?™,ì|óÝõOŸÞýxóž6|s#̈㭉-ˆ°•2Öš·çZwŤáTkP,K[y¥IbkmÐD÷z«‰ú£Ã RïÝçðÈ¿~ÍD®Þ5¯·2‹öe}S*úå5 Ý®oZ§Qs˜ìÑÄíiº²wL´ÃMÀ\±ë]¯‰"Gyý¯éG'"Îs;ÖoǺ]ù1¶m•PѱÁSq £SQãè‰G|_ø¬£¢u<Ùº¿ŸËÖíq$¢¾áÙ»sY…©£§œ‹ˆ§ÍDë´ÑíÑ/öDz¥—$‘«ÜÉ/6êy­ìø¥ÅŠ­á)6jJâÞ ”©fÖàDâß¶-‚p0Ä!2šãW¸ ¥âTæ^çS³^êÝj²j&¾âM‡¦&±ÏEÅÓ•«ïû#>{é`ý¾dÃñ,ß1¿+L¥"άù C0Ô –¤ÑÛ‚¯QK IÔT£ø:àAéècb´b¥TÔ=ðJîXß, ^hYv¼­©ßS5=O¡ßà \sÇO|%9ˆ˜©hÍà%(?ùjÝgÚÒ³±whë5™«’#…¾z{{ÁH@‘1RÈ4™}SŸÇY€3‘IÆãç¶zp{w` ëúö¼ëWìù47È9ôÒý|œ÷®ê‹Ï/“<­À±'œá1©ýE,Nië;8B§ @ûdQÖÏ0ÂÃ4ó ÆæŒ—9LŒL¥ ÖlFËXšølÉK¦Ñ«G-ê}xá¡iOE_6„ñ€‹G×à uHóP»0…–Lê“ÖÀ›Ó‰þfÞ‚˜F%ù<À^ë::;rŒ hAd 8‡ï úëŽw4í={WúŒNÀ7²4ˆË¶±¦ð eFJYy“ˆåØ‚Ö^¤!çPž*æˆw¤Bl»žÙ ð`£ JeelÄ8pᆪ"°¸ ®¸ž¢çÙw<Ѻá?<²6“¨èü˜ÏO¢»‚àX‰i4ºâ¹Ò¿°œoóˆ†3t(<íŠsÇ€' º;°dV«èº µ?”c/:çêUτ͉Å#‘C€s}Á“Œg°`TËt™AùÄ8xßî±bKÌ3Ö‘ÉØæáR{Q•wë“drœÁ¨Ë=Ôxî½cçÁ±´É}éÃܯ€L4›Þ 2ò+ѧPeZJ~¡ ¡`©.N¬mÀJ¾GA“èþ´E×ûeJdpíÌœKšál¿æÃFé–™©Ö——8ãÃ_"ÆŸ¯o~à2m×ÅŒøiœ«)†x§É¢¸xÐ,×"Ÿ5ožÀš Úïù°&ß30ó0êࡽ«*¦À4Â6à^1®æÎ½'KYKùšÄ<Ž~ ½©çÑ}•Vkþ-yÕµ5fMfq3F&¤ \á´Â, ›–—@ðP‘@ŠyƒIG˜wŸ‹ÓCõÃÖXïóö–N3+wJ0ÈŸÌŸ—žÉš¼T!K‘*ÊEÓ!K¡,Ðzȇ7 ÄŸû•¼ž¦2 õõ¾„HÕ•«9 A$…:<óè­)ÍBB^®Gmƒ£_Ê=s–]8«\¿ ‘/ƒÌAŽñšÝ’õBi¢’:Nm¾˜1‘üË[ …‰íeþúWè¦à)E×O ‚í~€§‡¶,ð Ø˜d´5¡‹vvR‚ ý\“@KîOì–è¨ÊE‹·§ ³Š•˜7È ^¼5i}ç+* íœÎSlÉ|5©¬ñî¶v©‡Y øbUqq8­Ül¦Á²<ñ©ÀÑ¢¬†hQ’¯ÂY£[ä‰hàÜ µ¬ž†e˜\r¼y'ÉпhX‘ŒJ$ieô·3æj`ŒÚÒ¬Á¼{œ»¯ÊçGRm^„MdÀøt_==ù°è;Þ(¿§ñŸF%fÑ>ñžPñJ“±§àd¨éê=÷“«§ØÒœÒӰ쩾͢÷5OøÂxa¢èŒÆ! á8¬ÙC6]ØÃÊ$`9ÂS‹=P{æ.P²B(×ë7+Œ…D:ÿ€™W¾¬4 ¤qbª)Ò@6˜`>˜`–.âV–ÎLázUG¹„ÂO~ZT4C·Œ- ¹›XšÊtHÚ3lõ4ç{ÿLÜDÐ6Îô´ˆGkø÷Î÷`vW9ž¾˜ÎZò%a'â­J§óXeîÐ6'ôÑ27xœ;ƒtk‡JëÀ_¯–Ç2O_ª„$_¸” Û>·³=ŽÁ=ÂeëtÖ­Ýdè"¤ÓP-¡þIQ(Ôc I€0"ºÞ¿wœÅ€}½!»„ð3Ø¥&ÏlRFßb2·”σÏOÛ(¢JLõwÁ ˆóÝ®-ï.Ùd{ÿÁ=2Íá\ÓŽŽç½Bà‰¤ÌŽÃDA¼ã.éí+Yb;ÎͰ¶úŒÔgOô2úXÙÓ‡cbZŠ9 ¹-rêžx®uP§Ô>%§ÒÉÈòµ`lÞ;n#*>hNày>£ô9®<4m UnáSPŸº²èd¨­óP[S vE. u¨í ŸÛÖqbÆ+“¼"æÊk:…ù¨®V32 uT0囦îß}ûL•„H-‚3WÃj\%ÜA$Þ;¾nÜúª‚kMºSŠoÎ󯢪)ö¬\2N/óÉA¤†›j™ò±‚(B=–T'ÛœÇé—²)d6-õmÎ5^ÑóÐrùlso n¹ Ùnàalæ6›zÆžç¨H±!éÄ=MUqç3âp­f–ak±êšÐ› Ö(£®99¾Äƒ ­Éq3øùªì¦l»’w@‡«E3Ñw!ô«XŠì¿×Ly·âÓ\ÿcƒèE~Õaã–×B6IjÛz®Cï.¼œ¿*ÁÁ±Ê³Më6‡W Fœ™MCD@ËR­,o³“š}e€ç´|ù •0j«8ì)ˆ¥ÔŠX7kynœËà1(Waö ЛæB7ˆ‰ý(e©S)Öø¾0mӢŠ˜AxE[€p"øjIŽY$ð¡ 2Xì’PÇÛñù£ÒH>»ààòÙKŸyr„óˆšVÂ/šZONßrúŽ h}àƒÀgP·ZQÔŠÓå•ÖFsn;wÅ=,jø~¿ MLç݇ MŒD5ÿú€ž `Ëu&}î˜tŒ0迟QªÞVú=_3ª°,0‘ÿݧVù2£È' ,¥œ5¦6&ÜàW…qƒD‡ êy×´Èvd$}€ KµÒ±ÑËŽ À—CEU½ÔÒ–. È@eΙœXý¿¢?]û4¢gqèÊkÆÏ±Ã“øOÑ)ý?:tÒøÒ¾ôŸtìb$_†1kçf%•Œ%5žž9áßh€_Iendstream endobj 1197 0 obj 2764 endobj 1195 0 obj << /Type /Page /Contents 1196 0 R /Resources 1194 0 R /MediaBox [0 0 595.273 841.887] /Parent 1177 0 R >> endobj 1193 0 obj << /D [1195 0 R /XYZ 72 786.278 null] >> endobj 281 0 obj << /D [1195 0 R /XYZ 72 313.424 null] >> endobj 1194 0 obj << /Font << /F27 394 0 R /F15 393 0 R /F26 391 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1201 0 obj << /Length 1202 0 R /Filter /FlateDecode >> stream xÚíZYoäÆÎó¾ä/è-T aØÙì—òz7Ql¯7k%/¶±àÎpV„9ä˜ÇÊò¯Oݼ†#i$H@€¦Ùguu_U·¸ˆàO\yaÒ$”&½Ø^ˆ þûé—¾‚:î©cÆ¿žè¸ñ=7*Ó$Æþ_ܾøÃk_ˆ(´‘½¸ÝSßÛÝ÷ÁöRšà.‡Ÿ4ø©½Ü¨T÷wyw—7ü±­ÇË ´ÖmÑåX§Ü ¬É¶wAQíëæuE]aEä¿m×rhâ^0-ÏšWÛšfÝÕG?Ã.ÿåòÇÛ¿üáµ4J•±a¢O/,+¸×l?2t /7±‚›=/ÖÖWP°:(: ŠR`¹¼Ø䔥1MÞõMë8a:uœ:¢¨î¾èËþwèwýú®Y² ìÒ± vY—ñ€¬i2dþ7d-Éø³Â¦þ€ÿ?À´&ðä?÷YÉÅ®¦]E³í ǵÁÇ&ÏxU%Ü WQðkÞÔÀ%£™KØ“÷…&oû²ãEËuŸ.ã8ÈÊbÇÃ?ô×W5ÿžlÆ.·­R‚Ýen4:Ï«é^bÚʾî+XWé„éTB´ ‘~Ž€\q¥&PíÚ³2Aê4víÉI‰;øË²“:M‚›Š«·Y‹â®mP£$j8]×’7Mݬ!*ñ¾]®“Á¼Ê€i§¼Bc7þV¼Jªze J'¤ëçhóŽ÷"ç÷ã* å\Ÿ²ã±©M‘‘ÑE¨ÏC#’ÐÂyL‡Ü’uÉ96ù§¢î[þÚ÷ÕÖÙ˜]Íz@ °ã^]^–\ÊHiP[?ò˜Œ¥«î;&e4p¤nÕ=,!aok6HAQy¶½®«îæË¦)ÚAF 0qÍ‘ˆ­à‚ÛMÆS)ç8íiVa{»ü‡HèªðûΖB“£[Zh¥‡©xM?˜…"ª5°ºp Ü’LÂg_øãç>o ’$Þ·ÈI ûÅ«ÛÑÍÄ¡݈H…V«ó^é¼§"©dFjÆóhà#œZ,c”Ö›ö¦ÞTYù6÷CGÜ4ô᣹â-1À—t~@½Õ6àœg:BeÓ‹&¿Ø¿“§saÃHÅ* …T+Íÿ…kyNSÃí£+ŽB¨‹ …ñLãý6_¯êº•^×q³~K£!ÂXÄc¿a— Œ H-nV$+tnT¨ ¼IB!Ööé÷óÔU°¡B¤Š›å(ý)~þ)öø£è69Wy˜ AŸ‡?x´ßu i¯4úŒÑ— wrPÉsV_‰0ÑÞ5 E¤õ#^È“ãÔä-7REº……2ëH±šó+T4;¶ƒ•+‹-;4Òk ¼JQ6&z]¸ýcuö j‹¥›‚z¶èÚ»¦wFkêýI—¹Îãô óÝPhÚܵ—P<Â5 §áŒe<:†SU¥oÆâ:³þe‹.BÄÁ¡øx‡öM¯ÐN,V„ía’~†ÿ…¹é@•Pä˜VpArÿ_Kø¡¢HÁE„‰ï˜lÀxÌdÄ pæöÃVXèÑ{PˆX v´u¶giù—Ê:Û!l щ m,O]¢¶vœ, ÓÏ}Ñ ‰Æ/tÈØmüdIµ t†u tfG`œÿO¸}žÁ§ƒ¨82+KRNlÀý;êOüùà¸Ï¸ƒr£ÿužŽüå·ß¼}ÿòÏ×ïÞß¼yý-;ƒßCýŸòî%0EûK€âÿObC¥ø4®æ_’†&¶Ïñ%*ŒØÝþoø­ãIlÐ%ã'Ðk‰0ô$=ðÀøäY¢ºïË…W«áTY’XC·AW Œ6;už>_s LWs˜>˜{†êÊÛé…Á'„@oŸÈB+°1Ñãæå·ËùÙž?™™Ânz2ùªÎËlËÞe*©Ùv›ƒL%AÇßíÃyäT£tBH§¨R/Œ%§˜ê£Ÿ,s£›¬ú˜»1û¦>p­pBZ¯*½qóòVõ‡·¬§àU¬ãçâ§Ê7•S<òbëÄEۨûT'|©æÝÞ|Þ¤’)².¯¸8 , P;ßö$)Ô«"“H¥- 9À6))â9)Á„é¾¾iòÊ8lk9בé[÷••÷x>œÙjGbœI]$«“." WŒÂU”¸½ª(žž$6¸õ[ ‹9ÊÚ¨"· ; OÛ’ŠDéDE–gœ»co&Ž]³ù#Û¿ïÝ1GÓløkéå¡XÔìÏ©ýÇp——]öËzžEÄñ$@9‰Ò•K³ñòÌä¥sòžÁÆÜSô¶2e:ñr@ßZ.‚éÌ4«¤ô˜È8uX;Éj)9ÑYÄçw°]$Ïìhx‚@¥áp"£ê¿É,üpa sOF,-ƒ?«å­“PQhRåçeŠ~\9-2eÌ(P"15¯ÈQ‘“õ-ZXiõHí]Ý¿º0 m ÖÊðÜmÐÆ˜Àåè߇Jš%4xvæ‹á#+À¡„9ak‰ahI!™¡ ž¢2{V® à=ýd¢A’©žH6Lîâ<ÊlÐbKzÅâr,#–£­òÜ0…%«6/”¸Ÿ3ÜÍ“àIãT®H×ÝD¢B«ÏÚr׿åÞeƒQÂb==ºuË&” ÆoáT璇ɽ8§  “Ãôò ½}Ç Që¾D›a¦É t˜A^%ìöVømEh¬™)ÊÀ¡¼Z1aÆ9"‚“Äì7ñ:ûE”„Qä÷ûæo_½fK%”ÒñÆ ¸ñùx•„Z‰9ÐäÛð¯^袽òJå3ÂÓ|»b¯*U$Ÿ 2™À¡³R0úǯ$ôàž½óFöGo —aƒÃ¯ðbàg$š3cNÓ+RÛ•hRÆÑÄõH=æ@°?s kGnáW{Çb‡eÂ@FA"Zç1}ì›<ÿÝŽËCŽ}éTÑ÷ ± pç5 Z¦.Îfæ” å|Ç… #êf7\€ÔÌÊlpŸuá¼í!?Ôd9 ¹Ì³ŸÓ‡´"J“KõÁœßå«é³ÕàlS%‚ò=”Dà}é«G|`åœ/λÖós ùOLÕb®c~s}ªÒgû¡45 ȧb—/ÁK›¨#+‹îRE­í) ‰Ñ·u6ýOÈ„}ñpƒWÞO%ĆÚÂõþ>ìß‘«ø=…³Õšñ„Âð{±xŠÁ—øè1e ‘AéTPʘ(£^Î;¤’ïªiº3ï2°h{<öZ‚„1€(ú©ôl‚ö1GFþ¢$ùØ©Žåð”BN²J0#F´€Uù¢[GÖ±àLMŒ¤àˆÞ}ùÜÖ¦í Ž”q`íV¨Zq¸‰_îí¿)s~챺“èÑ[^‘,NL¸3qãÇ‚£‡Y§W Æ]5$gúÎÚ¬]üHcf'tö£á¬ìÒ.A¤`åKi×y2ƒªÅx%CNŒ7²¡õ‡;\çü+%þ(ºjàŠUœkÐ};Ú¸¿öyóðLç($Z5IÊâ‚‹¤,Ór]bž 3£è1y(ƒÓKܲ~w)R€gúIž¼²¸ƒôq¶ gަ|á‰^¤ŠóR!y ½¼àÏI@-É ØÕtˆˆâÉköojä.I6²¸}Œ¿`Ÿ­ñôÓ“X´®ˆ‡Z¸7R{¦Që~‰OLäÓr*’Ù³˜Úí¿K1&Úm¨ôÜ÷óõp‘Fá/#f™*¾…šŒZ#çUž™ÐNÑÚY,›‚§PÓÃÅ×q«™GŠ1Ïýêúï¿_}óåû·×﮿yuûêÝ÷AxÆëÜç¿u×îPô*Ì»â°mþm¨1^wa¿šÞÉ0ËÀšhnŽ9‚pI˜Êå ûj€–î)ÎnT¹{Öƒ†0:š¼«3·ûvþçÄ> ßb1È#jÓµwFIp+|È»|í(“Ä<+Ødqd•œ àáL¤QŸuq$ÂHz. 7~ F¥±Û:^ ïါ-çÊ’I®,ñ8ßelg ";7“LÛ2”½šÝ?dÀ ¿HpÁáá¹OSÒ?\’g"Mÿ:K>H=ÓØõ”±s»~½{ÎL =IrÑ3\£B&ÍedÒƒ/Géw[3;À“µ\ÃÙ­dx**~:i3Ëç®Ø‡=ɶ£×Iê²OT†M°ÄÆß 1¹·é2_6€p÷ˆÏ”{U㺜\OÝ©bÓ!¤Ã1œ`2O¢ZÖ™Ñ>_AÉRq~ö¥J’ŽfO, Au4ˆv:.~šê[>ap1xuuúü%ux*è¸b=W´ ÞÔ>8{£œódž*ð—qìææ,\¹}à ûT&XJpùdí ÌI8,ÁïIùH®ùì’¡¥endstream endobj 1202 0 obj 3571 endobj 1200 0 obj << /Type /Page /Contents 1201 0 R /Resources 1199 0 R /MediaBox [0 0 595.273 841.887] /Parent 1177 0 R /Annots [ 1203 0 R ] >> endobj 1203 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [306.514 294.732 320.454 305.641] /Subtype /Link /A << /S /GoTo /D (subsection.5.8) >> >> endobj 1198 0 obj << /D [1200 0 R /XYZ 72 786.278 null] >> endobj 1199 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1209 0 obj << /Length 1210 0 R /Filter /FlateDecode >> stream xÚ­Z[oä¶~ϯ0òRð("Eê’>9Æn²m6l\´@·XÈ3ºi*jÖë"@þzÏMI#Çøa(òˆ<<×ïY]Dð§.R}‘fI¨Óìb½ÿJ]ðß§‹~ôW˜cJcãÐ|z†pÕS®bf‰Eúïn¿úæµN.TæQ~q»%ÚÛÍ?ª,Œ/WJYÜ^æIе?­«/ã8è.Wq?õ¦*ë{|2A³åß›f€‘_vŽ)ovE[¬;×z|Ö¼È ó®åÑ«/«}ÙÔþò_·ùæµ²¾V: mn‰»k_npc•Û¶Ùó¨ÛõSpP?UÈhM<élàI¥ÁúR§AÏNÙ ¬·M»/:à‚'öÅ%¼ôÈ›ÜÑrJ±^;ï^Cåð"3­ÓÓq’‡yœ‹H;U•w WÓY˜Ä‰]-l“„V¥Ïlë0ÊúMÖq*ÓP ­ª>§ÅâØ5xÃuQU¿’L“€*×¹êŸmÐô­ó ãi<”ÝŽG­ó,Q‡Ò¦WùEE Étû«H>É;^ŸÈÝó\¹%Ž£ «%*/M‚‘2õ-'«(³«™j× ªøyÁßüú&¼\Ù4[S“Éûòó¥(4MÁ$y¶¬}WÔkw…f™ ^?z^w_Š}Y;9g'ooO£ áv«…[½…ÓA×âY¼}ÈðCd£õ¾U pœ¨8øÎ­‹#Ê.ΜWz&¥3öD°?œÍ£€t’‚NJT/Ϲzݦ6d­ônËfr@$ Æ)W´´ƒ°•®îÊÙZ¸Ò-Í%a”€›†±Ì¾fÕÅiö+ÿè;·÷ _“¤¤dg¤)TDœuÓñ î[¾UÓè»H]ðâÆ‘m”l `îtµsÒ ÍÜñëMéÀ|Ë¥@„v  ¤ Ä?2èÅã| nóÈ<= > Ï®Á#L`˱˜èNq¢Áwþs,[Ò<݉ÊDˉyª(m/‹t,Q|)AzWmyË5DÑ®=‚ƒmx‘M+³@‹ó@HäG!*&Êu£†”{ŠR1AèÑ@µD2qºY*×çÙ§Š–Öভ+èz8ûï£ïdz'ïúb#Hœ¸K_ùÐ^HoŠ–ö˜P>Ät’ Xzœ LLé6W½@OwyvòZÊŠÅÁ *äÒC½‚ï9'¨^¾ `ònMǧÁ®ã·ž ï{a„õ¤{ÜΧ o|L)oùŽÔ‡C·?tƒ(R®\i° „«¥*fã©—Uؼғ¶mJhŠLP€FN@§°Ù¸/â:õV,sŠvÊfŽŠS´å &b&H¯·lãùYÒ³ÈúAj†zðœ¹gÐn}.žÞn{¬×ècg) ÉlmŸëLÀn`ê£T4‹âìï*œŸA(²Ï7>0Ñ™çÝ“!Ç„VgBT1 l>a‚20 ĉ‰-üI¨jr+¡`'ô3}ãW¤ë+4$!s£—Ú’0 &T9®U\I®©*¢Žÿ—˜í±¢°óKGZG1\¢Ã²S€ž¦ì#^Ó1Ám¦b¼¥ôPŽÛÐÔ;è&8MÕOÓ~*¥ÝðXT„ö¸¦C†ÐIdà¥ç{fZÔÇ÷,Òˆñ+æûò~'0®ì(^õ=Hüp5?Î+š›†KÜg’7 ׉ F\˜á5QE -Îù§ºéjZ¦¬JŽPü˜’l¤˜Õ‚Sŕ̮'y°ƒ{;ßñTHM X5Ž‚ÇoÑÙ“à]-„HAâW}¢åã°}±Ô–8TØñÐT#õŒ`PLì2T$›'úeHŘž°{¸m[”žL8 Ã…ûªÀ¼ª¡ÆBê·¯yþsY7ü6ɨz2ÉT±±'Lm0K,HBga”Æ/“„:õ­ 8#@èÅdÜ-À#‡¶Lð+6¾÷Žc*²sà’ýÄØ> 4üĶëUsσ¡ç«Ô¯’R) U2MV}ÒËZRxœKô¦¶‡úñÝ÷ÿ~ýþ§7?}¿p×4;iýÉ’_+=l÷ѵ-"‹%ÿéØ>zúzÂ-²…΄’,Æ[¿zÿþãÍ»·?¿ûåÍí«7?\¿_8F)3éÐ3Þ…˜§ì´Bǘg¬Dacc©oGéÔ?å0YFCãÉÂLidàôýšó\6>õ ŒUTÙó´P×r­ñM†+`yêÄ_jyÞ@º³xç4´y> endobj 1206 0 obj << /D [1208 0 R /XYZ 72 786.278 null] >> endobj 285 0 obj << /D [1208 0 R /XYZ 72 761.372 null] >> endobj 1204 0 obj << /D [1208 0 R /XYZ 72 463.518 null] >> endobj 1205 0 obj << /D [1208 0 R /XYZ 72 371.135 null] >> endobj 289 0 obj << /D [1208 0 R /XYZ 72 195.501 null] >> endobj 1207 0 obj << /Font << /F26 391 0 R /F15 393 0 R /F27 394 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1215 0 obj << /Length 1216 0 R /Filter /FlateDecode >> stream xÚÝÛnÜÆõ=Ú_ú.à¥93¼MÞTCjÜFv`«E‹¦(îH"Ì%·$×¶òõ=·áeE[yLÁæ\ÎÌœ9÷sfÕYê,ÓgYž†:ËÏÊý7êŒÿ>œùÖßaŒ!ãÄ„IŒ½g·rk’0O“çàUšÔð¾¹þæå¥1g* mdÏ®ïæz÷ŸàO›ÿ^ÿ훋ëqYÆIò<6Ï6WÉÊæ×n³5&šbO-´wøÍ‚ÁO•íþ°ÙêU½ 7Û,6Áå&ƒc‡£û¶s/6À¤ ¶…¯ÑAÕl%¸BSÔ<²s?E*nª¡jQC3DؘàÜûýÐUÍ}Ï»ªDð¢{äþ¾@ê<2´û\õà ¢'×7 PMðiSž:hq»øŸëºjçHøcVø#²ÌÉÍ ày×µû“½Î/¯¸°5ñDögP ¢nÃTÅ¿ ×A”ÀVÿÀ´Õ™ñd­î¹?<·Šºfð‰¾k|èy5¿/8ëù@k—|@°%€˜0?1G’@Îé*ׯˆNÕœpm!‘(13‰Ì“T!Žc „—¯²hXLfZ‹N;Bù!³cð»VDÈ}.ö‡Úùµ,ä8qìálÄôå¥ÎL˜ã}­nþê†óºF|߀Á銒þ)^ºàŸRy¨r%\ôÌÝU}V`¿Ñip[#t÷‘*w-k÷ïL /XPƒÊzòíu ‘ã™Îõ  ‘¡hùŒöÔiV\âÕÁ(¹âƒˆ!ΔE'-V \GjCåÀ ó4ù œ”u§ ÇÄclWÚ[©$ øÄ$^8 à$ÊØ–ƒ$<•3¥t˜#T]Ý®ˆ”‰C£= +ÄßèW{”±®sµû¸IÒ …`æF šª… å€!N$v©úr†÷ H‚­Š³P%fÍ+ ñ’ÉÍA/E_ÃÄEqÛLÆ('£Pu 5™´: €S{W4ý !Á@…±UÏR…™‰¨¯öxÓc=k}ýȈP<€gñ5øÎ&JB­“Å)^È2‘¬,}J9˜«I& @È·àY¯ê((`>¿'I^Ô‰G¦äyPøu‡C]•…øÂ,ñSî³Èn7ÈÙ?nH”‡÷eWŠÍÉšufã âÚ6$NQê)*=‰œ¢láz^ñ±*¸!ìD°Éªc CD†âÑšŒ#YÜŠPm‡R`ÒàÕL;ÙjŸª#̦Ù)¦8ăNÓQûuš³èÁØ®úƒëÄuñȤÄì›pìSEŽZûß±B}ÇÎ ,ƒíä¬Ñ|cï„F:Mèò¸RÐe¾eÈ·ed˜Ð¥ž0\3‘Ý™89͈<ò^®wà ž%Fÿ/þs. /$f{¨˜`£‹•ØÕ,½,¬Ø³c¥À`kç2˜ìbp÷dGBÖ<ú©B‹×¸›Ü•¶¡Všn–„Ên¶`MpÑut Ðï‹fW^ùÄ“lu&– s^à^_P‰SÜ›R˜<öG¶‘ØéÜp옖ì vw¬™`:Á~ÕG׿@Q#¿Ãœ¶lâ±’|,F†Z !Ãd 4;RÏuù©wrÛ}aM`ô°lÈÑšž¿Ì Xä5«¯n1D -ñΆOâÀY­ É-8×QÃäh/ý¡(å$æ|{l¼:zBêóÊÝ$&‡S þø]¹ÇŽvœ$!mÃÞ\¡K×T±\ê¶àì a+öãf"”Ò~Û[6#ÚJMhg€6#&gU#PÚ&øÙul‡\Oô´ì{V­%ã—虞$´}¹NGÃ$1¾Äô-Ìî¼LHRSÊ:Öc\˜¯ž'ëêÚýI™˜˜õgîW‚GÕ{ (î—‚I!תÕ4ö)ËmâÉÉ,' '´³©ÐB;Ë´K½,.“X%*õ-âjsÊhq1‘­Ð g$pZÏ2ä(ÃعœØl¦OŒæÂù¢’Ž{ŸØ_b,‚›{{‰C‹àñ }2úº‘¹nG~W¶<7o‘-Ÿ¤ËŸcS¡}&þC8á•f¼iƒžfˆaÆäÒÁè<åϘÜ×í-¦ûØæ»wUŠ¿Yæqî3IuH¡ŸZTH8rG8)„x5rNÒµJ’º–Hµ;–Ør$¨!2MÓe²D常7ÁE òi"ª+äd VâàÈ„iö NTåa”wܲ€3Ú{á°«‰=qîSbA¾Æ¹/…ä#)W82ŠS9àKX-µS6Å[ºö¾+ö}¸²;8¸®¥FÑx;lK^­}1–¤’Ð]›$oˆ¼ÙàN‡¡™Ç¿?Ô•,—´³õ§tΉ-Il˜éôÄÉBLÙR5‰ãNùî\Ѱœ·[­šS(¯}éIø˜Ãõ“1ú ÆŸà‡¯7@#ÏáãØn+þ\nÀ9)À&{}YÕâKÞÃÕ·L´/G«±7‹T/…äTÀpŒÎðüž³çekèa8¼Vãco+%àyÝ«q÷UurŸSŒ¼ÿî‹õ-“&aªÒ_Wë¤XèÕîâÝ»›÷¯ÎßÜ\¾}s ÿ½»:¿^+jmeÖ· V¿Ûl3“çÀ‰ÌWÇz¨¨jgypUô”ÍÆy$!¾g+ŽPþYôÜ)†ÁíÄì’mÌì¥â ç9«žàsâÆ{á—¶ŒÈ“ýñ0ÏY}…Ó®úe’™™ÿE¾ üŠ4„ѯíêYaxýÃÅÍÛ/ÞÜÀК8ÄQ˜µ+‡XÄ_e¤üM‘Y:˜ŽªÖû ’AâsIP擆f5æ(¬fƒ9Cù-?Æp½â™B+Ž”ê\ÚNa¶¹è䘎«9Š|9.rsk‚];ZEœ#Õ{*4à¼sÌ·õØc{±A:mÀ¯Y‚û|~Àâ=WSý·> endobj 1212 0 obj << /D [1214 0 R /XYZ 72 786.278 null] >> endobj 293 0 obj << /D [1214 0 R /XYZ 72 552.504 null] >> endobj 297 0 obj << /D [1214 0 R /XYZ 72 353.656 null] >> endobj 1213 0 obj << /Font << /F33 497 0 R /F15 393 0 R /F27 394 0 R /F37 380 0 R /F26 391 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1220 0 obj << /Length 1221 0 R /Filter /FlateDecode >> stream xÚÕZYoÜÈ~ß—ü!Oàá’ÝÍkÐîÊ»ÞulÞ²@‘=BrÂÃZ'>u5‡ÔPrò(°ú¨¾«¾úª8áEÿ‹D]$iì«$½(ß„üïþ•~…6–4‘ö#ƒµ¯nŒ‚ ãìb£#?#”ÿ~ûÍ·¯Ãè" ü,È.¶;’Ý–ÿð^_¦Æk»ËCÏþž޵}…µØËüx¶)Ú±¹T©7ØÎ–,:´÷Øb®ª»=IpuŸ_ªÌûLØ¢¼ÛËJ<Ëò †S½eñºmîüËѱwÕ´ÃÞÊ~:›÷­¬{¨KÞÌå¶yùÏí/pšMˆ”Ñ©ê ¶š× ‚M~°\ÚµuÝâÎzlHa,µ?!þ± Aº…ñ€ÿË&:îÀ¦\fµ¿¹³l‰ç‚=oÝ\‰W‰Xƒw b›ÀÐò…èràog‹ûø»•sîºö²1¼Çž¦…’íº¶ÃUUà½o,7Öy?p©³}ÛQY¹;Åf9·Ó ±¬ú¼ï-œ7önkëV’®mäɱö[Ö¿ó_áD‘7öUs‡;þöµJfz§£È7°{Ö¾!¤%,¸PP“úqìäèœxü Œ†)ßBÄ“À†Î Sߤé´Î8Tu¿¶ŒöÁ^Dì˜x¢ûËÔêΑBб^§AÕ Œ×dÐD× ƒ/t¬<-U÷¬"y³í-sº6lÿ- —c¸¹ŽYOÚ¾¯n]ß窭ó¡j›žEÚ<ý,4‹×ç-¤‰·E-ùrtOˆM¸ñ4å7ÊÈ,SÔÿîK¹GqP«¢Â¼$¨M {ø¹½d†éDùàYMz}{°<ó}ÃBµ-ïdÍü–¦lGZ"vûKgëÆ¤ýØV5kúÜv…õ±ã›ëí ÑT©.6YÀ~ ÃØ×±f $àÓzøþðxÐKP¨¯Â+Š™Ùä ¥s“oÃëo>ýpõîæõ›·×7×ï_¯è^›¦¡ŒAÚ„¨sß¡ñjï n3 ¼cgáòFB Ñ-6ÍP1¨Á)–O0”…ç¸娑ª*x‚cÞ¡•VdˆP¬in[3›”Wk~@m¼2?€”¾Ø^<;Øô`*õSPZœ"òÃÌW—0{z.µòòaª ½Ÿlð‹ ˆuã]#‚­+(‹ ü(ã?ò0[GédGÕPMN'ÊÖá;òN$ÀxmÇCJnaÛŒRÆÑžËÞÔJsGÕü(V—ËÌî~u”ÀýÒ ¡T€m ÝXÈq <ã¹þwÓ¶«þM—ñŒd~ ô‹±ƒWÛŸo ðþãÊ›fÆÏb3³Étl€AÞ‚¸%Œ)бc.½ÓÚÝ9ÎïœÈ…!ž`qÍk7ü=´à0Édƒóg:ví- û4„pa«Ï¥c?`öBžëã§ë'ß+ ?œ+>˜r^qË4 á¾" U' rť틮›$ÞÅZ—y¿…Ú Njܨ*þÈÍÓtäK¨‰© ±¼/šlyþ„üæ}WŒ¨q°cU„pöeUæƒe¼$hÀ‚-psþsÒ+šP”íé¨ÂÀqY¢´¸Fæ—I <ç>ïr ² rÒrM¥Ú'6åü¥Ý­±œÀœÔ+!RJûJg‹KÉëaߎpÐëN‰%ú æØÙ™!HeÊŠ7H7çêQ`bÀ'€ýŸª¦cSâ1 zìG¼zlë-+¡A¼™5’·DÏgÎ,l Åݯ2±zpŽîp5/ ü·”Hƒ/;&<ÊØåJl¤ü´ØÞï…DQmbI1e 08$X„ŽÍ Y.të¼ LN^ßÛW¬Ѐñe!>`‹˜ë ’F ÆÃ¨¤®ú&ƒ•‡‚°>šñ„}=m‡‡0O¾–ˆjdiŒ™Bilv%û€ø`m‡¤ ÖbZ±šß!¶×v:¾‰€7¼Ù¹Ù*‘u°Å±ìy$Ç °LÎu{7¨V"6 ^Å&pÎÏâÖ&ôˆy”ïªÏRVμá‘áSn¡®Jn„X¹®Ðÿ“ +::¯ÝýȪÇ52K˜¬¹n{rÃPCÆ‹{’)ïºw™§Š®‡ØÎa|Ãj‰ ÃÁ»#×Ñ<ŽM]ÝãyìtËq˜yïwÜ ‘eד¨vú›(O’…Nÿy.¯X= ð‡½';ÝVØ‚²eꪎJ"v-Š"ª_élà ™7s}½ -òp,].U~àCC¦SÄáÞž'.TÞ 6 Xn›±óþ•~}&; A³ñõÙ´‰Ÿ&éÓÞêéùÐY¬ìà…Áµéóˆ]¯9"ãÇA4¥Öj òçSÂD±v‰µÍ“!=ø_™PûHA3UC¸dLâøùD¥É€vl;.Z';é&ƒ(ËÍ_5©³‰uìû`9¸à¶v·FµuèÇ&>?õâ8‹S£Q¦”X©:žy%!!iRŒ_¥j¡Éýwƒ(ßCE‘-¨cp ª] ¦PÈ k¸ ºÑý±~ºÜ9O $ìïƒö}qš~7r¶ Ë­ŒÚþœ–M“)J^N2âÍ»¿]½}óãÍë÷ï¶o~\ÍÊ!“žS³0nA„K)‰Ø¬@4Îò Pƒéáoä¸@´@2¨.ã#bV‘Îäc|àÒXŒZäͤ)n‡sMA;ÐÊ}À’c€ÈJM)”†RÎBáQ¬†@€ýSÔöŠë•ŒÊé”_¸Rää”>MÖŠNI=Rìh{Ž%`*ðèßϼèB?!ª–– `p*Îa\¸s¤ÈîÄ >P„6åØyÞžìP´øî±ÚÁ–LæÇ„_SkÁÉ\­è4ï?çO£þµ^ÅtVÌÉ ÔHù௤F…¡õÜHLÍ0•t#37òa_Ñg=WIŸL(t ô³nsÆ è™=t¸¤p^f<=ª OÃuÆ mW®Ç(E9;Ì.<â˜K][  b•¤ú¥¼¥Nõ¸u–^"„/Œ­ÆÀßœÿÈÉÇp6;fO„Ãݰ;ʾUÂfúzC…ÿÜžº¼¹³OôÍpÛù·…}¿ù‘9:GÈO^©ÈGÂ1ç¯ Ñ:X@tìå’ÆZq? E DSf‹¥³ÅÌó‹¥Àv²D¦úóÚZÊ•ûŠ3é¥ÜÈ(K¬rŠøUæŽÑ´7pmÃêGÊHY2±Š'UüåÀÑ“Û.ï$‡î¶€Œç‚oäÞ¥©†êä 0Bu„<‘¦]b?×ã¥ÎŒ¦XôJéíù­¡âoXŠTé¥ñ›W¯þr½½^Íákã« ™S÷Õ#/þÕz ùu§°D†¯äë7Žy—€fwò£†à’Ì€¢èŠª§|þþÓJBld_sðÀË?£ÈÁß5Äèƒt%¤Ò“áÑ×ì$ÀŸ¸°ñcïé'.†÷c0Ÿ šµqF Ï‚’xì•’9£%˜ë öNþÐhT¸Y¬ÙsbØùÈ ŒŸ ík—Ò 0舔÷‹,»4_ìõôãùLÌáÜÍ«µtrùq> endobj 1222 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [355.575 346.298 383.453 357.207] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.14.3) >> >> endobj 1217 0 obj << /D [1219 0 R /XYZ 72 786.278 null] >> endobj 301 0 obj << /D [1219 0 R /XYZ 72 629.216 null] >> endobj 305 0 obj << /D [1219 0 R /XYZ 72 331.033 null] >> endobj 1218 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F26 391 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1226 0 obj << /Length 1227 0 R /Filter /FlateDecode >> stream xÚÝZ[sÛ¸~ÏKÿ‚ßJwVXâF}s»ë6±3±Òv¦íxh‰²8‘H•¤6ëýñ=€H™¶“ÇìxÆ@\¿ó ÄORøã'¹8ÉMÆDnNÛ7ü„þ>Ÿ„ÒßAF-•–L+|{¥á,´œIÍL¦_kÏ3&3IýþeþæÇK)OxÊljOæ+×f¾üwò‡ÓÿÎÿöæb?ÓLiýúl°™t.ò‰ÎçüâãÇ»›w×7ó»ß_ÍçoqÄ/¹|À…eÊXÿÙRrÿùŸOgJæÉY}:“"MšÝéLäIÙ}ÕxY¿.z(q›|9&):ó¤n¼´Øl¬€ZørIƒK;ÜÂ~ráw½©,ô‹¥j[NÌY[¦¥ñ_­iÜ4¹§–5~Ge30ÚŒãÙY×¶-ÿ·/»¾\2\Læë ?NSXX۴еɢÙo–X4оÛoú°I–¬Bƒò—b»Û”^\­HZÔþ¹Ûmª…ß&ì¤o«²£º¾¡Ñº²§BAòºüBï÷U¿-vnéhæ»b¹¬êh%yòó©Ö°»û_eR¬ú²¥ma677a›z¾©î'öR P1ÚKè÷Ò¸½t¯U]õU±©~Å;B-lºëa¦,˸úntãìÝ»›ó»÷ï'6ÅX–æÙP'dÐ P#ì5)lÑO½ô5ÃO„+ͬѯ g&U¾QKÀÜ÷¾°¢ç¶Ü6í#–9 !k,!Ї:§ "Ëk ñätõ% yUTÒ ¥‚n€Ø¯‹Ýš”CJáõñ·óäP´Ï£Cf,ýŽ˜óòêÝÐçÅõ¼MÑ&W,ËÔ"ÊCÄè49;i™œ«M‰eíY ¥‘-5l]–KàFWᙋnsñ3¯‰$ ,\Ó9Ô ›VT5=AÕ% 6ãi°ÅÐr[µ/z7µÅ?‰m° ýfW*BgA—ܾ‡ h¿;VìÃ÷_uù™†Hë),#ƒe2Y’^Ì´g1àæE±ï¦`iÀ@øç9`‚/™îÛ¹Îpš™G_6Ps’;Mµ“n°4æÛ0’ˆKòhÝþ DO&ñÜb1„a)7£Ý{Á—JÄ#Àfû¾Ùȱ¼ Ã’¥mI¸j›-}4Ñ¢oà¸Ë@VŠ ‚9Rè¶ζÑ4 =­Çà¸õ#5F Azk£ùŽ–¶öl°hºžÈÙ’$Ûݾ¸šˆP46Ï;Œ< :þ^ÆO×·.ί.¯¦£l0 &ÕCwQÇ([hñläGp=Œ*°ôkMgȸÝEÛS3ü\ǘ\»xŸÁ{‡"ÙãÅbß¶©ÂÄF±Aí­@À’:„b@\R…±ö¶*‚ A30 :W\ù¨0.Õ@•áeÑÔ]µ,[²6ÒÑ’‹Lœ«†ˆþüJŒñýD ×7w ‡woÏæg“á,Õ£ÄL áÿ™Wü}½Z•‡øÝ]oT\¤ÚQ;²C ïtÔŠHAšcRˆÎ$Â…&åà¢ÝÌÜW"ËÇ_AÌI®Tæ}[lQo!« :.? !Œ®+ØÆ{Ä© qi$ÿyß—Û]ß‘-J=µ•4–ŸM$°ÁÀ0 YjG4}1’_ñ0eT$ã‚ åT®J3-Ùt~E‘3œa”%óz.E¤Óãù‘Ž4SI nÕ 3½ª«þ]uÿ‚·Ÿ–‹QTø{È÷ü‹óéãÉÍPÇr¯cZ+J~b(ãÙÃ/*ü{u…ƒsn²¡VÂ7ÚuaH–ÚèЙ3 Bð½¢Óã*œ%wH•›Œ‚àŽ/Ñ=L„6ð$Ø@5Í ¹…e»*¾î (£K5á»¶r+‡bÌ2ÀÔ±ó;þ¹*¾&:¿-{èåCÑÛîÚÜãêwÒó›÷nn¯æwç?MG/†e#ÀšX™9£Ûæ¦ç1çÖ¹`ˆc9“’ËŸ+*¤Q×™z g°èÏÉ (’Õψ%Û@Sçj¿qÑ‚3>*•páË®mÀl1KÕñ«T»°Ÿˆ°}ѹØš8KˆA|: báx=øÝÑz°Yôc°WôÔ@¬š½s…rIzŸÓ(OAœAH™S}ãÜö-¨d7E®9K#ƒs‡Ê„¼a4Æ:‹Üë$<ï‹%~d©òÌ¥_\Ó£˜‡ÔV¸ÈÏ%éð-ÆnÐæ`ÔeÊt––NvÔòAòBP´‡É墧 uI•”2q÷òâO˜´ôѾî€9:àƒ>f­[8زõ©î¯[üw˜O41Ÿˆ’Þ“(, ¶³érNˆƒ†/û`Rç,Wãœs±~ —ýÛ[lü«·³ã´b&¼Ÿ©ÜEÛ’D¸®¶sn§ôw#™¿(£ì{»ì¦V—eÌfâ[²æaBÖMè7—Íxœ“÷}!Üký4|-¬fÚšg³Dà'ï6d>¡Xþšã’xùG2<²}[’Ìßç7Cs‘ü4¸õù¼µ„ù­‚ºJðsÖÞZwÔkA4CNtüe:ùM™úŠëE)ÈýáÎÀßÑfí˜yF£ùº„Up‰ƒCìì\L*l]€ñ8òê©}`rÉý§ƒ~7ÍÃpŸ¹ Ä!p%.ëCæ³yðyXJ‡âÞÛðø¢ÑΩöÝ!uËÎÙ0 ›Úõ­cÒÜ 2¸S·˲ü[î€AëÜEDáÝÑÒ†±,tè3ƒ×ùüy|y9„Iâ5rÄì^7 °èkT',ý ƾ½;EÒªö {{vg=Ó4Y !ü@`d&AÛòdõ}báàå‰4èɉjø¬¨¯ÃaLNõ‡_¤L5™q–ió²I¹œº„fV /u;§ù ³×)ƒØý— ~:Ï™d€id<ä§ë ë€~r ;à\h˜ÇuŒæÖá’;J nÉù™ #;ÝÄÈ¥œôG jÄòdœ  \´Õ}|'B!ÄcP\4-x Þß«½aÃ4èT&”I~¸}‡~^¿)ðÉ>u{—? TúÀ‰·ûY0c–Ùö§ìH¸ËÀŸwðÃKšø)ϪjKÏîøó'wcئ˜²X<S«¿"¡®Ç m%•¿_JãÜ(_è* Å´Ä4œfé'Êôó²&¦Ï™9r'C±Ãð"ü¨dê‚Rz'é«ùª‹\x‹Qõs`‚9ˆ¿VÄ,Ç{™â&ò]µåK·Â¨]1þü#yž ™9ê£ÅÃ_¡íÐÐ> endobj 1223 0 obj << /D [1225 0 R /XYZ 72 786.278 null] >> endobj 309 0 obj << /D [1225 0 R /XYZ 72 143.718 null] >> endobj 1224 0 obj << /Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F39 496 0 R /F37 380 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1231 0 obj << /Length 1232 0 R /Filter /FlateDecode >> stream xÚíYYoÛH~ÏËþ½ µˆzد}sÛñŽcŽØÁî" Ä–D„" q<¿~«ºº)ê°,°ÁŽ10`öQ}Tu_•øÄ‡?>‰Ä$ŠC&¢x²Ü¾âúû2q­_`Œ(U Y °÷ áL1K’Š)=Nÿøœ3 :ëÍüÕÏ"špŸ%~2™¯ Í<û§——ÝtˆÀ›óÏo7zùå¼Ìò´ü—ø4þµÊ3èñé¿çu>5 X;Í"øËœÂdO=Y½š)Éâ`’°€Ë‰ŒòÄ4¬—‘²S¡œÌ8 ƒx`BÊL\àå~¾àÁhä'”Gn[€”X7Ð |JÅ$Ùåá‰{Î$“О…Œsu‚OÇìIxH<øØ»«ãc¾ÉÛéL&Â[õå²Ë«{¾·M§"ò°Ã½Åtéõ­ÎhEWÑôIá!ñ󅆺&mÞV·öju0¿I›ì~*/m4ÉjOg¤ˆà-œP;^ä‹‚—‚%Üi—=©éË2/×ÄMU²é,ä °kN™Ìdè³ TðÖ MYÙè®o})¼¯Ó ôÒ¢Ç[J‰›ß- ‡îý×J˜ ÝÕWUC[]ç]WØmIñ±Í½´ÌNœÁý€©Øm¿÷7ùúø„mJ•Ãs0§sƒîÃ9  ãIü¿3~´íÁúßõÛú²x¨7;Û¿¼þíã{jþum§ŽA¸?áÐ2¢'AÌ¢ð{ü€d¾R/ÄÄßåx8ö<ð¶ùz3±×Ñ$z‚Øx¡'XõÑ‘êE¦ýzM–ã¨Öf¼Óm‡£Ç:.BxÏ yÆÆ‰˜!"°f%ïÊÞ*=²·7Êß³Oo¯Ì]¯¨ßèºÑ­.ѺtFN@$R’€œ€Jè|úˆ¸ñU"ä«°aô‘æj㫼4²A‡h(+ú.С=œ2gÏ(cËíwÂAüñŸWÜ¢í@¦à5í%û®î;”‡Þ™= =ö¾¬›ª/-]Ó5ñ¡‘lO$:#‘ð(f Œj,’îv’1Þä”s }ç˜ï7¹ñ{(}@g´»£ ¤»£ yñ`ülV̸îÑû_±FèÀœ¸9A‰p·³U§jRT‚ãÍyýÿ[·&~Á"ïZ·&í¨µ¬¸kmè+âIáó‘ªI•’ûª†Ç)ß÷–=¬,Qi:¨Ó,³Á+ÂX˜Xô&I‘ÞÖIÈ8¾è·v Åg¾e«F?%½OÚhÃobÕÛ±ámo²nªu“n·ÖlAlãÛëo鶦HïU” Ä×@A@ Ñùà(Î}™¸Ö/O8$ÁÔá–px"“Ç¡ì㛡}(å]•;rvÐZ¦­áÀ½= íd?Æ–~“¶Ä°…Dº¤.¸gzçîD{‚º©:4ÝÐ銥µfjóßm˸›P¹)5¸h¶›ª/2Z:€1³|›5uYõëÛž‚‡A=Ųeü´ï󬳔YEÛªÐ++{Aým©Ÿ‚ÜÃcÕ5¢Ô èGZXù.¨eΰr¿òæ>oÝ·Ì¥/:’ c#ù.«­}Ÿ¼(ô:_úºDŠÅ*†°°HE?»|L»tÁÛ_ç×W7ç¿Ô4ý'|ùQiŒ·ƒ/Bq‡ „tp>Óí²ÉkGB)‰™/‰\"i1šè«\ô…ÙQôŵCôå $q7*ú6ÿŠ>ZvÒ†²2³ÖåSÀQ@÷ºo0®„^Õþ¿`÷Oº»K[0ÿ‹"]·;+²û•ÿSý\ïÑ{Aä**Ô·û֦ݘ±Ç ÄŠtaB7´ÊÁÊ,owƒK€ i^Rg¥SÈŒµ=Á@ %/ƨıÆ$ÙÊ»Ö-"húRÀ‰‘îHã-|Џ Ê J¨;ŠÈ€Ì䨀Ì 4ÆFù6õ€qÝ4ޤk,6*¸mPIÀ—éUJá ‘qÇpS M§FßOèÓÌ‘ã§a1äžOÀÆæZênuZZ+h•øv¡¿Ç%t¬¸].˜W/©K‚ÚMN sXL „Mgt¢Ü±â*·œ¹ ‹ô°`·±Å€g#‰™òº³i/T-ðƒB…te>"Â\àH…ÄöÀã5[À±XÁ&˜à|œrï=ñm†ü.¼»H ¨jЃ'©lÐŒãicP 6Û¼ëS4–ú÷n‰óæ*Ë #6‘À6>Ѿ§ò8ð_)Æ8ß–#°‡˜h£‹šniÞÁ|wÖGDôذtU•žv*;x]Z ¹£å¬o{ð0öB­»x{÷“¶W‡O² h}“¤ôz ®*ç­lÜÃ[£èËÜ<Ëßãè` Þ:Šž«m"‚ÿt0øËQ cÂ곕sJtž‰1¯.onïÎ?_ÜÞ½=s{ýî(Œ‹ÈÈv&ó!mþC1uöáêú·³kè~8¿™?ÍšøC±öþêf~usù"Xzwþæ×ËÏ&Ey ÊGìÜ_^ÝÞ¼ ÷ùx6ÿ‚Þçâö…8býÁ©h>pÄ™ÜÂò“è@2‘¹ÆNP#ˆo+XRµ¯ 6 °ö€ð±+ ÀÇ\´Õ…†<0PHЄ”#,ˆ°=x[K8!H:€츢?¶óÑ×iÓµ¶Vä@Pû0*šÚ²o8&8Øh6¥'©›ÊáQƒ-`¨A¸ß˜:fÀ}†±¢¼ÖÙ:äk‡VmHÎbÜ@íŠÍ”8üdë¶i‘¯Ë­­,ÓN¿W¥¶uç…+¬Úªð1ä]¥Û¼x0»Eòh7r»EjÔE£²W¤ÆA‚ñ5G,e7kº|•.;»7J¿” ±W”„=0:ñÓi¦:¨va®ûÆ,:V³0b~$-)½œƒ/bUqÈÙå>P5Õ}¨À{gTk(›’p¨}(€u{ W<«þLj4ôukƒµ¸²í‡TÉp©"r Å>b€œ%!?´ëG ³8I1@ÌàŽ¦ŸõK“-쥡"ޕر½j "*(%”Ï&¦Œª³<íì¨Cõ6å½îtmùœq¸^”„‡Eæ/ ýÐåŒØªèÛ£ù˜Òö•˵ý`—>údŸfyÕP)IwKéu}Iö „÷Ã9›´¦ú”6y+Œ˜×2›ÙKG³ã €M]|û£ص˜4Km2»ÀûP5Ú8:›Ö¡¹ƒ'ØåG>: žÈ$¾¤€­ªov|}ejÕ-5Ç é«ý]ëLßWV Ê±¥†ú÷ë."ÓVUœì@_+›¶YWÆwæË¾H›™Ò${4`r3?VÏÅ4J.±þôtá(–‡ ÌðÄQó? É|endstream endobj 1232 0 obj 2587 endobj 1230 0 obj << /Type /Page /Contents 1231 0 R /Resources 1229 0 R /MediaBox [0 0 595.273 841.887] /Parent 1211 0 R /Annots [ 1233 0 R ] >> endobj 1233 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [127.454 588.389 141.393 598.086] /Subtype /Link /A << /S /GoTo /D (subsection.2.4) >> >> endobj 1228 0 obj << /D [1230 0 R /XYZ 72 786.278 null] >> endobj 1229 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F39 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1237 0 obj << /Length 1238 0 R /Filter /FlateDecode >> stream xÚÝYI¯ä¶¾Û@òrR¯e‰Ôz2ƈy1ðs2@&>‰ÝÍŒ–¶–éÿúÔFµz™y×8èCSÅ"Y*V}µ(~ˆà?äê!/²PåÅCÕ~?ðïÃý4æLR¦ >½Â¸õœ[†E–"ÿÏß|÷V¥qê${xÞïsý¯ ÛlãX%ÁóÁn¶:Ï‚wq¼}ê6Z“v¦²›?ÿõ»·1,ŽÂ2*yñVÁN©¢-ÞŒ¸² úÿÿ#Äÿ"ˆB½}ÙlUØÉð.*_íRäa)‘cŠ÷rç(­Â<+…ÉuU?aË<è3Y9xì[¾ˆ‚ñÈçUÎ4<·›»jr}7²LÓÁL<ªLÇ­ù°Á5¼Cãv–¬˜ºë&‚vPȇm¬"¸5PrŒÊ.I¼ãÐïÓ¶vAi¤ƒ¿ŽV¦q0õø¯A a:X!Ön¬æqù`ÖMü?ú¹©q¬‚zaË]?Y¡Ë»6­ß^Þ÷Ÿ³àtpÕ–x›FÛìè"–=%ÑgZŸ+}Ý^X–…™ööîþ}©,,•ç1òkÓ|ÆaôGÜž®'Ëáê˜ÞåöÄͬ,^·0sæák…ÇÉ5rˆ!Ó«¾=º†tO¦«™ ¤¾Ñ>“mG¾n•Faƺ¾î“›à–ð ÀYÀ0BMà Äa‰ŠeO)C³§da,îöÏzª$OÃ?ƒñêøl¼É­/~ÿgŒÂ´ä‹|Ó PûÚLNæØŽã&ØïÉ'´3âC ÂÇ~:6®ò+ö= #4\uá'ø4dW2˜A6v]mѳÀ¨Cþ‰Ù;Ð#^í0ÈÆÈ“WÆ)š§¡ïö “2ÞýÜÊÖè4e|ć~rž…½µdÅÂü8¿Œvâ1ò¬p9ksdÇ‚9rÕ’ í¬™æÁ¢Wg: þB‚ã„ñ >àöà][2o~|^€Y²$LTü¤ÇY¨3ÍÐOP®õ…°éÿñú€4LÒôõ€lÉjó+ëwG]$‘bÃÁKDMºôRó³á¿q3£`›p¿üíépv5“:VhvøhŽhŽFîèÞò[5ŸÈ8µæ{„û2üxpè8 ~1/®c×y!ÛȈ@'ìÓÛ$Iƒ·›" ȪpÛƒ™a€á™ ¹aöJÀkÔ^°¶"!R?Lk)nß§E?+ÜQ$?lÇ£yd{‡!Û) Îvze pS­¾’2Ìâäw`oœDéÊ„t7Ê¿9<®½Ù÷®cHË_!ÙôÊ‚7®šÈ@Ž0˜¼LG rÇÆ^«Ëõ±: ó4“÷¶Û…ˆo¦Ó_ÜÔšãxG˜¢ £Ì/ 9%J‡ NXÛ+)Vj‰ã µÄ˜)XEÇc(ñ¿á]ÎÙÓû(N*!ºßäŒwÌ?ظzWÑ[3ŸóxO[Êÿ|äYÊx๱»éŽ¥C^×q²%ˆ  Ø£®Ý’,@¶·€²x5ø¹R@ßBð<ù{Á’"?ŽHA0€;”Ý=Jy’yY!o0:¿Ùj)kì¾Ìƒ3)õ”¨žE“u‰J¿)°T3¬]ôUªµ!4b QQð†çڞÌ :ôoRG!B½YÐv¥¸.Ø ç¼§T‹ƒ >r(¿}©•é$q.9&ŽêÁ h'|* "‘Êq)ö“ìP‚éž;@•£ÓtI Ñ,9Ľ$2”É;# PPH¿««B!8„ĨβÍy_'Ïñ ¤½4uˆZœåiVÜdy÷½›~ÏqŠ‚Åàö®c&ZsNöÓÄáa’ìIÐ[|¥ç'SUýÌ”/Cw Gÿ~ ;¿€îËŒ ëž™8@ ¶¤R˜•­êŠº04ÂY,eÂ9‡Æÿ ÝuýÇðSÂO™¥w&Ã| ÞÒ¯6÷y"õ¬Æo¶t†«„\AŽ))(Vz™ž„YAX¾J` ÞiØ>y†\KŒáÃèÿÂèÄ÷Q™RŽú3*ôý,8ئâ{¾ÜóaT &¨9D„f0‘ië´%)/QbU¿Fëj#KÛãfÌX3q7ô-Z˜ÆÒ×3ªÃÖ€™ð“çöy Ùm`ÐÙÓ]¼m| öq¥­i毥:™cð„ÿ}yÂ+OKoy™Äå´¼´’ߥå"À2'i»RÁó½~âXÕ­Ûá?3þ¿Û^8’@v 1*=ôŽ—†Éì}ÈX»oí9Tâ É9~¿Ùæqü¼¤ÇÈ eâù‚¤bDE»¾x0Ž4ŽðìÛ÷p–,Í~ i:3ÍG&9:Jj”[jôNò!È=Õ›¾'ôÍÿ›|[lgP¿n¯•gH’„ì`ÝÀ3ç¼›l=ÁtE •Õ#§&.´á#g2KJç·j £–ë„pâöæ‰ öKîGãιðsG– 'ÿÈÈE UÜAÆÂgÌo›ŠêšwvâÜžúØÐY²Q)¤¼ë)¦17Íž7PN¬4U,-UUÞtœ€$iz/ çô?1ñ–…ó¹=?Y(‡]: üûX'£ÔMxbvnb)guÕ¬½lèJâ®K û¾äI(Ⱥ‹„9æÑì­Ÿå‹ìO1Sœ\Y›ðÌR0™û­®ux†rî$ò)ÖUE®‹†é+dE#æÙú7½³äóQXˆ®m dþó`NÏ#2ûéêŒ<èÓK½Í!ºБÞ|yURtÑ…ôˆq„)d¢súÔÏþSGNŸ:h9AÎ Ývühøï×ÙM–‡¶±{³8 Œ}3K¤ÔR¿èbIW·"õÕ—ˆœ-%éE3Ngø1.õç”Ñdü+èi†ª{_EF@œËWX(iEꜧ^6$®•‹Êœ_" ¶P0²ó˜ÒoXvD”u•—…Zló°½ß=°¦¸*A†@ƒBtÎ;¢¦8ˆS“y˘* ŠH¢z®/ Ÿ«Ã–+Õ €-2Ïp ×îÕÜLŽ:À Éðø¡|W`¿®¸ÛȳŸ<ò:l›ŠD—°_¿X\\$åXÞvÅëZ·15§ÃRùîmOq 6äF8 VQVƒ›î­yð°6>wáÉ5"¼¿™ uÅ{¢Uü]0c$ϸElñýÉÌ| Ì|3SWåÃ#Í9Ù¬ÙŽnß±Q«ó‰0!WšI—gï´ t¡ "ˆ}ϵÜÀè?qkîxÜ@¬„Û¸EŠ­_|™ðºuo Xi û0¦¤è‚Ù—yºn#˜QHW}ñØ|m–¾É NþÈc*³náPåE¸àæW¾˜a d&ú^ §Ga²ú^ËMæã½ZØH„„TÉ·--ß¶”|ÛzâMî·¥ö¤–ö-Ô{Ÿ¶^ý²õÌ _’ÈgðßΞx0¡ïÜûtÇy˜ªWÕw{µpó¯(I²àCw¢Œ8H p™LiÉI>B½ótNmds˜J á?ý S |«”³b H¶90áÎPJDÉÕGgpÞÖŠ÷¢é Ö›#U)V>D¼,ÅÊòAÄÕJŒ”ÜçK•Š"(_+&”ŠCg¯•Er}B›T_)Wþ Uˆøendstream endobj 1238 0 obj 2957 endobj 1236 0 obj << /Type /Page /Contents 1237 0 R /Resources 1235 0 R /MediaBox [0 0 595.273 841.887] /Parent 1211 0 R >> endobj 1234 0 obj << /D [1236 0 R /XYZ 72 786.278 null] >> endobj 313 0 obj << /D [1236 0 R /XYZ 72 761.372 null] >> endobj 317 0 obj << /D [1236 0 R /XYZ 72 670.148 null] >> endobj 321 0 obj << /D [1236 0 R /XYZ 72 157.947 null] >> endobj 1235 0 obj << /Font << /F25 380 0 R /F15 393 0 R /F27 394 0 R /F37 380 0 R /F33 497 0 R /F39 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1242 0 obj << /Length 1243 0 R /Filter /FlateDecode >> stream xÚíZmÛ¸þ¾ýþ¨=¬yâ›^ ôC.i®{w‚dQ¤èV–má´¢+Ê»Ùûõá²dkÍ¡—^_ ¦Fä3ópž%|þHÅ"Í&ÒlQÞ]ðýùiF߃Œf*-™Vøô‰‰K¥3–ç S2}zþÓ:4SZÓVßÜ\|ýZ¤ ³<Î7k7åfõ·¨nûË¥:ºáÞUý{Îß]qgŒuL/^Õv×ôðÕŠž®èñ/µÝuï®.ÿ~óÝ‚‹üvp48w[í[[oÚjEÓ‡WÕ®ßz}/Mcº»bGO¥‚³pÔzñÇ›‹x±‚%:󾋘É<[tÕb}±”ãB.–`:üø§¹  C‚#èOX–¥4c€T,•àx©s98QÊ'¾ÆÓ}ýšëÑ;ŸPþ=:3q¤‚s¦¹>Ì …ý%ÄLIy2sÐ¥dÆË„qXjj0$Ø!`Ï΃Áwƾ̩íåRrõÛŠ/‘F¦n/EõU‡Rõæhší»}ÙﻊޛµŸÞÓö—"V»]S—E_›r8BiÚ¶*{•[`ØåRÉ,ºîIæ™¶¬0—Þ’10-ž?‹ª²þ1æÊé’2ÚVî RE·Î¼ª,öÖIð`N1Ì*Ðä{üËÔ+/£cà­H™·$]E¾ª 8sóèw"%u»ñë ýε~ šÃ¾Ç.g´IX.¹ƒðÁTº£3–)‹'ÊG§v¯ÍÑ´Q€…’ÎèÑ{vwBŒ$ʶu‰Z·3À<´ð§êySßÎ3‘§~’Ýš}³"Õe‡nƱ>œñýõ]±©,AŠœ%àš±‹úmà­‹¦.PêœG×~æ±=m[¶Âà Õ½ßÀ‹z&G´Åšà“iš,›ÃÕ©×UÄ ðªZû¦§DyŒ1vHe“8ðX2Ì©n#s©Ygßl«ÙX³Ô'"ä„™- ‰%€hš´,ºÍþ®"ÿc¨øø&[”rŠ ¾&µK ÂEyæÊ¤ùLO"NA Ç ”hˆ™K¸!wtt±Æ “Xzœ‹D¦XœÊ‰‹võGà=‹XP‚’™Œ)™Av@ÍÞ?Õ+ïHŸ`ÂÄŠ÷—:‰Šf?çxžgLºšw¾Ýíæü³4 °{ÌÆþ ÷:Õ© ¯ÀjPY¼xµÅ7uoßTÝ›úcÕLq #¸“:1§­ª@ŠC%€ S½Xfx÷5²ŠñåO‹0úž˜n¢<0f\+å9$õtmö´6´Ä^)(“üðŽ<þ¤„{M!ì' ã¹¢õôHcà“a½tA ¤ÜûIÌR óq²F 9'–dó„WÜ:©­z&©„:m®n€\³qÝ8ög;¾®¿Ã2=Æã u) p/ØÊÝ 5½ð‹„KæÄSÖžÉ7ä’gOÞtÁ„ éà®Þl}² ›yƒŒ§“,eBO|S4q)=%‘5wž”îLçeÎ…žuׯóë15x.Þwè¶$2ÀèžÂP£-‚î!(žþÔ&d=©©.÷ÖÓb<­Ž£ŽIF9ƒ"œ„ež*†"lM"ÚÓ-EL[:e­¡)¥®P@ÞCC¼î¢]5àˆ«™xJ%½SÚzyè Î×2¬qeí¯Ê®3·Å-Ujüp;…œ  1¿j—_) ÌÜ‘®#ÇWi„.pè‰óàT{u5®{ã{XÖÊ.*@¾Þ·%ª°ô¸Û÷4–¸É:9¨;¿õCí’M«;°¤niìêN÷“ØûÔŽùÔABW‚v9o¶Á‰ÞÂPçšîŠ–yù¡ð=$:¾+J[¥ËÇiÒ‚=df8Åmh$VK "å8ÇC_ÍYêêž2µå/h¬¡gã™øTg} ÁÐZÿ`6HÏoŒ­1nïíõÐïŒýàlÚŽÛ@ìÿ@ý2gÔÏõ¼ÐÐdzý_:×ñÒëeÆÒä\»«b¦(B „Sê¿®Ûeíw¾Ã2ØC希îT4ýŸû5$þ4$Ÿ?ÄHZîŸ+Ñ’P‡é¨ú4«8L‡6@U½ÝßÚêû¡ Å•ã ÄÐtÊ 0çxç¡G—8†'žV$]eázÁD†.F‡ë¥³:ñÒ],7Åe,Q(?\oÏMµöúJÓµAZxÙ°l&}€Ô§º=#¾h‚—>ÐþT¢Œ2É aùt!ÃäÐyÛÞt¡—J!U¸\sè°ƒ?}é´)j¯Ö{‹0Ç䨯5íòçª3¾æ å¶/ C€ü©á·„ Wpé …ò%ä"ÿÛQ8S·,WÑÒSÄ¡š eåÔ¸v1Çz©hÌ Ë|‡z ¶-º=ñ“M9%Ë~Nº´(áUSæ\áÃǃ5‹D@®˜²ï¡…±$±õG¬Ç¦ã}ŽY&ò1C»2 £°©o¾Ërt1æ>_Ú¶¾D¶}7°ÍmÝc“uðQ‚w6Må9+ÔÊ®vWyi`P§{ÚÔ9!ÜãP7 ñ÷Ùþþ„‹è-D_Br—¿}ûÃ_ßüɤ¥Ï¼/Á=#zÕPäTþƒ¬ÿûíKúÝ”WGTugVÕ±ìã±àÑ æÐ,«é·aÎkÓöׯüÊu•nÓÛ½nLáWÛúçp 0ëæÏ/nÞ^¿÷vÒG(þæÈTjè³3lºä‹q†Ohr•?‡Qñ²Ëßødu†RñüwN‹óäK¢ô»¬_ §B³<Ï> §_Q:9ÖW~¹q߸;Hf½ž9ïº)6¿ìUÆ2•žƒ½ä,áü ìA…Ù3`-Uš‰ÿÃþóaÿ˜è_ úÀ°ý ò½ôóÒô Ï‚õ¡^ ÿº7}n¶ýÜÚφ´LòO@šKuÒ±x&¢eüÜý›í¾ý~É‚ã$òßHÁ!ÿg ŽçôðZKÒOýO !8“¸ßùf?ÓÇå·Ào»B?ý½ÿŸÒ KÓendstream endobj 1243 0 obj 2342 endobj 1241 0 obj << /Type /Page /Contents 1242 0 R /Resources 1240 0 R /MediaBox [0 0 595.273 841.887] /Parent 1245 0 R /Annots [ 1244 0 R ] >> endobj 1244 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [498.875 613.108 518.269 624.017] /Subtype /Link /A << /S /GoTo /D (subsection.5.13) >> >> endobj 1239 0 obj << /D [1241 0 R /XYZ 72 786.278 null] >> endobj 325 0 obj << /D [1241 0 R /XYZ 72 422.697 null] >> endobj 1240 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F37 380 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1252 0 obj << /Length 1253 0 R /Filter /FlateDecode >> stream xÚÕZY“ÛÆ~—ÿ+OÜÔÂ\8ô&Å‘";.»¤M•\qÊ…%gIdA€@ín’Ÿ>fpØ]:‘S•â3==3=Ý_€X„ð‹X.â$ dœ,ÖûbÁ¿Û…o} }L© ŒÆ§gWÚ$AšFÐÐVñãôó"‰äµÞ\½xùVÆ i˜.®nˆæjó×å»?ÿøÃŸ.VFšåï¯Äϯ_´íǶÎËí§ŸBòÈ×uv—]–Ÿ6—üÿîü¿]»Ž¼l¹±¯6ö´ïþ´ãáòâoWß,„Šmäb%P6)mª£y[•íû¯ÝÌõ.«ÝNÚá)Ç–Ì3q+ªrËÍ![Ûêæff¿7E¶M64÷¦¨2GÔäÿð‡A]}÷úêÃûOn?m•ÍMUïAf¹¼øãÕ‹• bùJ'A¢cwùp!J“Em7/VZ‰Y¬”"!* „TsÀBCˆ(H’˜ z… )ø—A ·îï\©™;‹;|ùV˜Á¨›Ôn/Þä„(•y]wX¥zŠgÑÌFW*PÐ^E€ùÓ“úƒÈ4 œG™ ýÿŸêý»n¿´Öÿ¼±M;Q}×Kú/ Xzr†þOtqªê’»|Óî¦3w6ßîÚMÿÕ:­žSi¡ôÓ*Jq¦J«Ðüÿª´ë±’@!’ús¼/›Öf› _´¬nðß,íý¡Èò2GSB/íç /mýÐ¼dÚm³¼¸Ä‡tyw!“¥Åv úPŽ$oÖǦáîª,¸»ÝUå…óÖîn¶;ÔleµÝä_ÙÚ–È»%=ZTR5±®ö@®ƒåFÓfå&«ñpÊ,ë NŠ(\€·Spƒ‰ZV5“º-æUÉÏ$‰!¯CVg{ ¾Ñ‘Ë4 ¢(õªA64£x¿ _Lu9Ã' b7Š®g æ=ÃE› [}’KèÇÙoý‡{鸀Ÿ›a!b‡{±1‡ êbtOÞ%>v²øÉ=E‘w.tŽMH~&ĵ2‚ýz%š»sHáOßA× /c@L¯g­·öÎ…2HâÌ5†}“¹b7Þ.|ëÛ'LØæ”'È;ÕG}ó Ø¾$ÂŽHGwµ³sb€Í›ÈÍÞx6s))à˜§ëŒ l+V +ÄuþS(´E ˆµ3=þ$7€ý…t Ã~{s†ŠŸîvùŸwø({&­½oã ^ó²æÉò®x0‘\¾wP“¤¦co¹ÏÅ”"&11Q”9,Xó@Ƈü~Ÿ¸]‡îòrSщ‚ÉÎ`Üv=g†`5^s Û:;€D¨[/×ËŠdÃâ80Ú`º^Vîfê¬%hľfW‹ ·ÛìÖ!>N§±¶ ¾È¤Ëï¯ñ`ŸóêØÞ',üªìw¶¯'a*FÃÐ ßHªUÝf{”5lWÈ«=o¨*;hp€á ˆ;6ús󼒸й±ƒ\ Nì&¬uçb¨¬ÙnëêÆÏšP€×Ù™Ýöƒ (ªzîÇÑR+ŠüzŒ%$sKŽ Y€" hœbѾ»bõñËOÎSi:åKÚdâ7é¬4EhÔÍÏýù¤‘GzLP 3À)£’ANÕ¡Ým|Ÿ—t v–ìƒc¢t0-wÓ¹#Ð:#–Ù/ǹ N7ª£œãÇiÚ!3ñ*æIO¶lçp¶ Ew:Ò³Gîw³ÁðA¥89Ih£Ôîg±b‡rÆc÷—1ø¤ˆ ¶h¸—ëâ¸áÐ*Ž'†}CrŒ’°D¬DÂmæŽdoáÈLÄŠ»]ŘI2nQ ÿã.ì‡vã¸Á{ÄqÈB ¯1”Ưáú_º„HŸFSˆÚ°*‰3J‰“˜ 'ÿ`yœ;;¹"ˆ`tF1$Ž”U¹ë:ö«N\ÚÅ‘Óst²C Ë—0Ò…ŸØ¼l]<ÐÞ¥NGz‘KPï|ë÷<÷Wä‡}ÖÜ·S¡ÎÁ¨±«ÄŽÞ2hxd`Gîü–¿`Žò(+“èʱ;ã‹PjÈÁ‘L5:;½93ˆºŸÁþ4HãgÃý¤Kîža±±xÄ’µƒV€|Ž]šœƒ)•$ ,RÔª´…»k¸„BŠ’†ýäªÎ·$‡Ä6Ðñ R±¨’ÔG·Ðê• ÒÚéôäeσ¼•I‚_ÕÇÛ1ÅÛs† OJ~>߈ 5p*Þž5Dǽd·ìùXBÅ'Å@“=´\dØ #ÒŠY¹ÒL»¦Š4F"§£‡ÚK Zû|»óŠzKƒFvÀ‰$Yí²I¹îÈ“#lC¢@(Qüç˜2’}€Öå+Ø‹8ZÝä­m[Æùˆðˆþm]Wõ¿r"d>2¤ƒ¨± )Ð\Yx&Z´bªnñ"ßçC›Âã~gÓLŠÄcáø0ÈÑflvC¼Lõ/áÑ)`jÉ2pºÊõŠûñR=…ÃÔ…¼n ×vRÓs9É7Óº{•6i1Ä&ôPqè¨gLèŠFü8<+<’üªúÖqàÎ"oÛÂ1V®pÁ(Å}AŠ ­ÚvÇiç<}‡Ò#äÇIÊÈ…Lý‹öI øƒÔ¼ÆOBé-ëéCaÙ;¿sËù¤#ŽzÏ…9رó2d‚ñÀ‘Àm˜‡™3Ðδh. ‹´Ãwã¼­Li3>5NÕ»»¦Þk°`»›zÍ­)O2T¢®f€LAæ"RWâç¶ý$ÄXªhÆÕÜ1îǃBH7Ö¡/•`%Y‘NNâ¶#Å$ZNäÎÝäæa+ÁÑAbÿ/ÇŠ$†C.*Án—%Ê$vAiÂy=þß@ÎTeÅ=“5'4ƒq** ±¢Ò˜gû÷cãȰ^ZCv7sÓ½Öho¸1—< £Ù;‡G±$ôøX¯³|ÜÖa¦;ù ¤Oô]z}—=ÅTñå@ñ#¯øz´Íù a éÃðç¦B E*ÙzM|Ë1 'èz2%Liœ¿ÛÛW§Å»•T*ˆ ¾ÓP::zîå-ìYQJüd¥_§ %&…†½ ´ÑÏq¿ò…ò“è0ß™r…,ÈO®Jõ ¯<â`ÿP䎗Ë«®8Ÿ×®¸?@МßV0Íl¿{ãöÖÕV3÷ÝÕ”.ùŠ ÛºÈ•¡Ã]©«ñªpé &ïJ'J,bˆ )H À1ÀZA”ðRf€\—Œ=ÍåÌ:XºŽÎ_æÝÌ2XdŽÏX&>™7³Ëàç ç/s=YFÃÜ/.´ùeäsBƒVŒïð:¢.I­4z'pÆRç.˜ÂCLÕÂ•Š‚02_äo ï]ÔUïí&·!œèKŽ ?³Á§b¼iè“ÿS·t6ëÒd ;d>=">.‚ g+ÇÓûSìXªs4?yR%Í¢§ùçÌB(5sŽæ'gh~ò¨æÇÖñù§y.þ›ÓÈç–Yi‘"V@‰v$Î5²3Nõ˜‘¥gœJŸª7ó°‘Š¡.ø˜•êÙm@8“—˜qúšHk—ðTnz ô—Aõ›¢Á[|ÄÅ8=´a¡Àßq¹N-!¼tÅ  r^|ÕÖù¡pÕ8ŒÉ}°‚òóÅé4+ã*À9¦ðû…Æä#ý· ]ÁOõùÈ4j˜$¢î­`ÑÝ›NN†-ÿ"òðÁKEWÉð™ Nö§ðÙ‘/ªem'Àa” ˆ»ÚBî´5Úöï-±BÈ©sÈ/‡¤ Œˆèh¯¹Ê…E’ é%qaÙŸE8ÉŸ_q®õþ†‡¾À:[Ÿãê¯XΔ`fÿâ5ßÛæ¸¶}a÷±ÏCªC_8Br,³`¡›š=ÖfXî®êB=Türþ ?ÉRîÒ]zé‚~˜@rˆ|u9’®¹ú‹òõ$¾[PѨlnT¸ü‘,äèødsEæ#½ cÇ3ŒPÀf?“Ú&!˜¥÷j÷Ûâá°›+ÒÅAú8‰Bì0W師[ä÷Š3ømV·sõWÉŸeýšµ9A å$ÁÐtûÙT®4hÜ¥tŸ$A$³´µëcœ[¸ÏbPˆtü9Ý—‰—×Ƕå2>â„„+4¢@Fé"Éi1üÆÊ$Xö¢ ðø»Â˜–ZÁÒ±O#âë×î X¿ 1«‰ðK0!fÖð‚AW8·ÉŽÁ{?ǨtÂgÆ&q/}Xª ¾3hFl&Û:Avn³¼Äú>´žÙ$É3¦³ ƒ•î¼|1H76ôi€Lžuj”LásOŸ3‰&ŸÞ ù„_û7èŒj”endstream endobj 1253 0 obj 3516 endobj 1251 0 obj << /Type /Page /Contents 1252 0 R /Resources 1250 0 R /MediaBox [0 0 595.273 841.887] /Parent 1245 0 R /Annots [ 1254 0 R ] >> endobj 1254 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [291.815 564.018 305.755 574.018] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 1249 0 obj << /D [1251 0 R /XYZ 72 786.278 null] >> endobj 1246 0 obj << /D [1251 0 R /XYZ 72 248.207 null] >> endobj 1247 0 obj << /D [1251 0 R /XYZ 72 212.143 null] >> endobj 1248 0 obj << /D [1251 0 R /XYZ 72 176.078 null] >> endobj 1250 0 obj << /Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F39 496 0 R /F30 512 0 R /F31 881 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1258 0 obj << /Length 1259 0 R /Filter /FlateDecode >> stream xÚÝYmoãÆþ~ùп äKéÀâq—¯J‘m'×^ÛCë .š¢X‹+‰8ŠTHêdýñ}fgH‘2íëè‡Ì}™}›y晕ZøS‹T/Ò,ñuš-ÖûWjÁï}é÷hcÉ(ý8¢ÚG—½ä2Œý,‰Iþ··¯^ߨx¡¬·'{›ÿÝ»?vWË(Ð^·³\h¬)©z÷f}¥3ïý¶©UNmÊË–;»ZÆ5¦j¦±Õú‘[Š–%~:Ì™ŸYHÐlwnšzÏ}§Äü«e‡Þ×uÕÚŸŽ"Y>ž·öÛßaÇKEG[¹oËÇÃîj†Úk­Ý·TŒÝ¶Â0ò:õ,WÚcãŽ`sª+tbúG*‡žáO·+*.•Åvw¥W´Qªn3’æië&·O{z}¦ ¥üU³V—zåkº&~tµTJGÞ×PjWT[L’†ÞÝ»?,oŠÒÒ–ÓˆUÁse£¹ì"Q©ÜS§Êâ~fÅ0ðÓDd–ß‘JZ–šÜöR«ÔÓ…ÀW±¿¥G£·v»«éüiB»ãŠd“©»TúVuǽíñpetN¯hˋƮݵQ u;Ñéh'Æ™&ÉÓSMö«3? {!ØF 5ýÙÀškÌ¥dîÌðªÇ®(‹Ž.ð‘Û7ÇjíNG&´Ô™öaSK‚:C'kRÚ;4–왦U ¦ãöBZ*»¶mkš_Á€È5¨½´°”Ôû@Sñhñ**ŒtŒZ½á!C÷»âaoTDï2¾žÌ£¼º’žaÙº‚Ÿº‡9v»ºé5‘EÞµzݼ8ǰ4 ·ÑÐÁ²˜´E‘ Äø%®7gÁA©®V´_Ò^}{{F¡Ø`¡0ÿÐWAø9>_þ±¿z•d~4p؇sÁZ!`D㫺Èy—*]ùmv’lÇ’l¿-öEײÜÒÞ´ÚL8Ñò¦ºÂYÀ|6fmgvH®1l@¿à‚{≎Z7yËU#ïô˜¢¯9i¤·0ÜÂÔWp¨–…]Ÿ£bTp> G©€稓ÎF†™HÀ¡)p½¸àPý¢ˆÝä±*ö¾}XƒÌ> yô*j WŽnÓ‡¹Êõ=½‘8xŒ• s º¹ß¹CÄèADz´÷F>­¿¦Äš,˜ *²C;9íêR„Fü…ªtÁôÑTôŒ1y=£ií¢ 첋@žLNžËðàj–óK8o;à‰iäéf´u+qPT‰¿ §©Ð-m¼î³‡½?´ï§8ìºè×Õõð ÚNSŒÓƒœþ<·%Þpý™³`"(õÅxb\sOOŽõ…±vÎó‘÷rœ˜ùÅ‹¯1¿¸\…³š¾ÆÇË^|"ù‹9×cNé-]ÑXÎÐtO?äõú½èOq4Ê8‘ܺ.ëæi^¦S§fÇñÏ@M‚!ôéê@1Ù/Lf deð‘GÏ™P•ŽùÙÝ79ÝÚ‡î^€D®&$òy…&?…Þл0èÿÛÉ¥ÑEƒ‰i¤4#b˜5½Mgü6ý`œo(A"ƒX)Só#áè7$X.þ»˜lmu–ô¶àÌJú¦h…–#èXþiî5ýRç_êz¯?6ë—¶é8m/)¿¥`‘²'P-û‘„1ôúXXäöËgï-ÍÒiVkå‡ôý²n³ôr *¢õ w÷o~ðc»endstream endobj 1259 0 obj 2552 endobj 1257 0 obj << /Type /Page /Contents 1258 0 R /Resources 1256 0 R /MediaBox [0 0 595.273 841.887] /Parent 1245 0 R >> endobj 1255 0 obj << /D [1257 0 R /XYZ 72 786.278 null] >> endobj 329 0 obj << /D [1257 0 R /XYZ 72 719.477 null] >> endobj 333 0 obj << /D [1257 0 R /XYZ 72 313.395 null] >> endobj 1256 0 obj << /Font << /F15 393 0 R /F37 380 0 R /F38 495 0 R /F27 394 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1263 0 obj << /Length 1264 0 R /Filter /FlateDecode >> stream xÚ…‘=kÃ0†w/ý Ú*A}±N–×@3´«†Béà&25qâ ;-ô×W¶ìPL©Ñp%övMTjÝÍ€É_â\ý!¾cFÒëyß×í¹c©‚öe³ K1§ÎW­?ÅN92’ÖÕ̺˜ø²ë¯¿ÀCCÛksJ¤ïAÉЉ½”~Ð.e^bèœÿdãhO‚ðQ"‚âztnƒÍûÉrSWî!¦UÛ;X®ì& ‹PâÚî9ˆ0he{Æ,¡@@üçw~eóŠIendstream endobj 1264 0 obj 272 endobj 1262 0 obj << /Type /Page /Contents 1263 0 R /Resources 1261 0 R /MediaBox [0 0 595.273 841.887] /Parent 1245 0 R >> endobj 1260 0 obj << /D [1262 0 R /XYZ 72 786.278 null] >> endobj 1261 0 obj << /Font << /F33 497 0 R /F15 393 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1270 0 obj << /Length 1271 0 R /Filter /FlateDecode >> stream xÚÕZK“ã¶¾où J.æ¤V ‰¾íz½©‰—«<·8µÆHЈµ)“ÔÎŽ}ú’’8;qNqÍA`h~|ݘt•À_ºÊÕ*/²XåÅjsx•®øïã*´¾4VÇÖà× ×aäZÛ¸È,Ž{÷ê¯ï•]¥&Ö&[ÝíhìÝö_Q~³NSe¢ÛæF§Ñà»ÆÕýÍZç6ú)±IÕlÚñöƒ‡¯ôæßwõíÝ«Ñqª­ìJ­’X—Ūó«Ý¸´(â<ËVëÜÄV¥Ïoûù£ØØXÃ'¦X»R&΋|~‚ïÛÁÿ wýz•¦q à–&V ~u\š‚ÆÞí+8œ*MÔûÍPµ ŒÄ¡ªklÚè“ïž°¥£IÜãš­Œnž[;·zínTuž?švàÆÐ„äš§CËc⛵ɇ=٨߷§Z˜ßÃOɤ8Á<åJÅi’Ê©r:UÇÐ0âP5[dª³è›S×ùf¨Ÿ¸ç²hï>y&4-S†ê ”(6zìªÁK'í ;EZÂüíià·2µ{⹃påýú#wÿ”¤æá2í¤,cèZ­U%é)’±óã*´¾“›Ÿß줻Aßaà‹’KÔ\­–˜oÚ¦¯ú„HR_ëRƒæiS8î°mXê|ìÎ×Þõ¾¡ÝÂ<Ž<ñ³_@Fú&Ko*OsJRé€3oP3¼\º, ÿY®…4t¶±é â ±µIT\%¿ˆ3•}ɧ±X²)F¹¥àPe9—Û-ÙT”'I‚ò¼Æ¯\¬F')t×v̰ˆZ™ ú Gž|ðhwlá*Ÿ-©t§y* i]Ýó¨³i¸Ú$“AaOÕ'’"«´†Ûñç®0MwÓx¿e l—IN6ê3ê܃gEQ™Š“<'M±¦¤eO½Ç©6£[ÆßŽî(lÿК||¸zwð°Ç/ –KKUÍŸš­ïzb–G-ùŠ-÷<îÝÀÛ‡V¦e,a„.DÂè#v¨`1¤òPÑ8üÈ£½¯»SMLÎNVí@6 Àc×Þ×þÐóïhö@·J³¸ÔÙÙÄ;ÔMƒ ¹¾Úp³Úz‡-‹÷M¿,lÂ1r4#ÒÄß­ï7]5n™ºÿ­„inx3€K²ZEØV”Ã\?éfç§°tÚhÆãžÌ‘ÔÞ?1Í¡Ba£jª¡ruõ«ß‚ ˜®k‘P¹h8-pèüt±Ùxôå™±ÑûjÉ{ê$‹0‡µ5qZæ_ôž‹†ºà=A/{O€™žyÏEæÊP—QÒ`êN¤SÐLˆD7 çf}xOkñµ)xrcÏôåüòJ6FlÈE—Q䘹a3eþZ² c‹iø®mDÝñë±ö<àöSœ™€åÉ‚®F›}âAž}Ã}uë¶t‘8޵ªýDq°sK†Óƒ>¬«¦\5Zj1ZùDþBO‹ªB“ÄE±o]i‰ oz¦Òù°1†]š РBmë_ "ÙKÇ Ü•Öñôíå‰?&gcúc] K®€åÙ² ö÷ÜÜV@i#¥?ݯq)ÜÖwÓù{YÜ ;6aIþKkµ§!p÷UÇͺ}€“Õü±;5ä&ú˜#ÎÏB;=V©fýSÁ¾ÿ€‹æ¾fÜ›| …ü[ÝÞßÜDïЉ\Çä˜Ä¶43t ñSĈ­h™ƒ«fÊYØÓeF†B t’Vë2„u Šóƒè”ˆÝƒkª_gLМ°ç]GJm!ÊkõB¤D( ­ Bç£Á†žÍ3Dî±K-òXeçÁŽ U8×è„t[ì1ºS¬9õüµì¾’ Á7« ¶ Ä© @©8ƒtà c–3€g^ŽšCòÃ×G}²ïmÛÈú¤ÂÞÈçËÞ8à[ðÄÉY\¸iy»•—0L¬4Ü$l)µç@7Ç)Ák¡·¼'÷†TžƒžÀެHÅÕ3ŠÔš4Hú(7òõe$˜9`“ÄIöbr ‘ñ<(h½þø?FœË4ðLó÷Uíwðë½ë6û£öý‚.¤)bX#“¾F%ÏÃÍÑ=ñû¾G æI ”HYuQ ‚û¢$•˜½–'ýfAS\#žˆèëD½àI÷4˜™@ ÙÞÜž$ å Ž›°g³`™…ÜPËÙ~JµI% âÄAk¶;!ÀÂ,x[YK¢&d/l·@bÜŠ#w]{à[)4®ô§Žº™[Ì‚ÁX׉ùäX͹™ FÒä,! [0˜é‰ûy@|—íþé€bçHÝÖý’û½…ÄCdñÃû7o?‡nAfÌ! ã^/p*bç›÷ÿ|Ž ØRù“Í|ûý7Ïq1qY†KF±äc“‡•Þ¿{îTà½3H Ê¹ç|`Ô 9H @ÌÚþ† $²{)¸N[¿©áCJnIäiÍ2ìíšý@^ß*mö®ãÖ_v[XhSt2ä²evR\ª²„z?TÈvYd®²beˆŽúLO ëHâÙ# ¾BBˆÞ&»'(ì½<´Úš8ª€¼owÜI•È®c¸ú9ÿ™®O(h’lý!3âKšÒš ‡ ÌûäùzÌj˜¼i»ñH-@Jfˆ Ñéâñö²PaFV½GÐVp¶†ôLKZkÀÒl¼áëK°pQ!Øÿùµ,wÂ.ð³*V£§¨¸ÐA«ÂÛ† g´÷p.þƒ¾Ö%¤_ç) —f0—*5m÷qį۪Eh!¼€|â«°«LåX±L4ø›ßAÐmÚH†þ ©áfÅì ÖZ€ä<PKe¬Œâg »>øúÚ .±é?;U,Ë<·€N¨<ƒDy>… þv˜¯QDïäžè2eŸ37Hš`!QËB†ÖÈz@£™§1¸`†Ç#ßY=n¨g² MR)›Îœ$Ž%HfõÄ}á4vðlBµz" ”Àæ#êhÛm)¡²pÐá9ÛFT9IxŽFCQè˜Â¸åƒRÊ5¯^´m.˜á†»^ì ®!_Aà…ãÎðìsbÊ8KÍïÈ@^ÂDË\ŠbY‘PPôùLôØÁ…1À”›á$`ˆj³´å‘£‚ÖôÂÔü¢Êt,¯•Ñ/'Çë!€ÕŒk¡ô»õÒ»‘bÆZ¶«‰µ*~ƒ¿˜À:O ~lÀw¬4â¯ädFꔲaZã±a§ªRƒ(¸+Ôˆd9z(“Ŧ  î.ýðM{|z›Çg±ðv±ÿbB1F”-‹*)&èÄS(ÁbŒƒ¥I°2 Ç:HáÚ áú$t~äÊÿ‘¿†Îmð‘qAÍ\ë éÂÂIsÌ_ó—5Ö&±¯r–Àâ?.ìIh‡¶o' p¶>–àSú,KØvrûn)l‡mØk$ÃMC=É qŽ£ÄõÁ{É­¹Pe¸l˜cÙp÷4ïÑSÞ6¯,I!jñ="Óq9‰/UYÎP΢‹^)8¯ß¨«‡KàžÄi‘NŽmÂò‹S£ÃTgz[‚)Â|yƒ1Ñã¾"íßóçÁZ~±µãsî Ñ#Gyic^`]Ý·¬²²é«ðIï³x®ÞÚ|Ùý*ÎÆ×§Ü_Žcí,³¶V–…½†ˆ›°´|CV$³+ÄO §z¨ŽµŸã°Æx)=X ðûüÈsˆ†A¢·“ò×#ÙbŽžÌŽþ_:ÐbÊ;ÿË©êBéÊm·šzÓñ¾qu.š^•‚g(Lúo†Þ_?£”ŠŠžhwIYüög§öúe;Ö¥yÞ¾žç†r¹ö ’ þØ[ÈþÿÂ}5ÜñÃÑm—⻸É!èb|OEçºÊݓު䲆®Â£ ^†¨ŠŸ—pä=¡iNË=3Çä~ãħý|^*©ReY­mHÐæÕn~¢puÅ5b…Å©0[Y©yc¤±e§“rJ‚C+EnDa~pêø½ÖS‘ÚÉ ºÊLä+Æý8‹^€ ¾DÓçÖï˜<ÓfÆ‹}ä8̶z‘Wç?ÖÓÈ5> ILf¯mÖ½Ô©åvœ5¡\ÞoÒ‹ó0£çÒwþÃLþãG?¼­@¬?¸í\H™ž=b0SðGyvâ7 ð‰’0•¤1ãéû±8Î!””J°ïçâ«×ÒJ³¯b9ü¬ÕWÏÇö<ì¬^24¥ÒXS=ä‹O­Ey¹ŽÒ €ÚLù?MH±endstream endobj 1271 0 obj 3295 endobj 1269 0 obj << /Type /Page /Contents 1270 0 R /Resources 1268 0 R /MediaBox [0 0 595.273 841.887] /Parent 1245 0 R /Annots [ 1274 0 R 1275 0 R 1276 0 R ] >> endobj 1274 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [465.234 645.672 471.087 656.299] /Subtype /Link /A << /S /GoTo /D (figure.7) >> >> endobj 1275 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [378.027 527.131 383.482 536.828] /Subtype /Link /A << /S /GoTo /D (figure.7) >> >> endobj 1276 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [491.907 142.771 511.301 153.68] /Subtype /Link /A << /S /GoTo /D (subsection.5.15) >> >> endobj 1267 0 obj << /D [1269 0 R /XYZ 72 786.278 null] >> endobj 337 0 obj << /D [1269 0 R /XYZ 72 761.372 null] >> endobj 341 0 obj << /D [1269 0 R /XYZ 72 471.219 null] >> endobj 1268 0 obj << /Font << /F25 380 0 R /F55 1272 0 R /F53 1273 0 R /F15 393 0 R /F27 394 0 R /F37 380 0 R /F33 497 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1280 0 obj << /Length 1281 0 R /Filter /FlateDecode >> stream xÚ•“Ënƒ0E÷|…—°À±ÇïJÝT)RÛU%vmy@‚J@£*_ƒ¡M£ž{Ç("nP¤)-1(V»€"?>Ñ4{q1OrÁ°àýêOdÌ Ãoñ3*¯%¾r˜ ,µÓ’°1Ðç@{ïÃ3d M'ÆÈ>8 Ì’5h^¯¾˜KéR*—0|¼@3£Q“¡ü¨æ‰eÚíÊ>áCêrR(Á†”曮ߤØtMÅŒËPÝE1W4L·C@…E mÖT‹Ò#ë…]ø½Ö6Ýʺ³­ß©óè#}ž% ŽT€L8µ,-‹¥§þx%#„Í=tÕ:kÊCQmúµÛny*½hF¶ÝÖèð«-Uå¡—C1ôʸëë¯Í ByÝ8Œ±ÐRnòN(oZëyí‹?S•&˜ÃTTRWöi~OÎÔåúASõS—‚Çôè­'77šÒLa¡ä¿º÷ò“rjÜß .·ý7*4Êfendstream endobj 1281 0 obj 380 endobj 1279 0 obj << /Type /Page /Contents 1280 0 R /Resources 1278 0 R /MediaBox [0 0 595.273 841.887] /Parent 1245 0 R >> endobj 1266 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 612.998 467.998] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1282 0 R /Length 1283 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kh©à’ÏÈP$¿endstream endobj 1283 0 obj 30 endobj 1284 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 612 467] /Resources << /ProcSet [ /PDF /ImageB /Text ] /Font << /A 1285 0 R >> >> /Length 1286 0 R /Filter /FlateDecode >> stream xÚí< ·^EuJîå˽ß]šV£hü"´E’{œ÷ƒ€‰€R `(A Ä¾À𺡅4J°6ö¡«¦´¥­}?ÁÚU«íÏë~Ìž3sîw£¡7«,V‹ÜsöÙ³gÏÌ~ÎìùÔ  ÿ+?³þüº^<½î†hœñ‹Ï¯;môìÂæ¤>„!ë…IvpÞ/^øìúƒëÏ/4Q‘?ŸYÜ~rý£_èÅÉÓëB|œöC^8£¿8yæ¦w]õî•=9ùÌzBœ“OÜ´:»_2½î­ÍO=·ñ®ùÞù©VöÍ®™_‹ŸMVåûü:|ß´Ú,²EÈÑw]?qÓ¾ùþ“ŒO­µã—}s&O0øãøö‰“‹Ö]t~p»7òd†8Žü'°Ÿ,£$&½¹Ä¬¼çÀ{WöÏWßÿ>°6n‘~¾þkeŒ‰ñ×~ðC{xLe–®.sB/ œIn`Òõ·:?TçÀ ¢ÖE=À¼Ù@âB; ’.{¬ÉƒYXŸà_˜„ÏW¹ï$31¿áàÚ|ÿØ„¹i÷úOÿ•þ‹\õ}ºÒÝBg§—eÝ­=x «|/Œ¶CÀ¯+âæÊZá’Þ8;´ò“,—úS³ŸžŸºi~ê#•§@/^GªAµ0ÆZd¥<LW€+€$¬ÅÛ)JÔ”XÚ„=7± 6À|šój€Ögª¥ÈÖ“Ræv„m™&à€+º<äè,´XÁ†ÁƒôŒXi±¼±ƒÑºÁH‹åTþˆ%ËÀP± 9H ´Å\¾ÖŒmvl5÷¾ùȾÙÞ9{5_D}sX›ñ¾q¾JÑ€ØiM.q¿úèVgYhh7/ÞÕH ðÁÃ×¶îά¬ªë}?»½Më xÐ–éØ«È=å(®Ñm4$µ¸­F¢!9Ûnœ¯±‡×¡¶ß?§Á¬öa>H\²éœ4Ô$rdS¢–âÁ÷Aˆ°lA oreƒgf쾋`B¡×:­¾ ‘ a`ŠN^úñÐ6§)B±+–/¨]õšQ6QøÐš¬¨&þ0šÞFc&Nõ®4° ›—!þS®µymô>Û˜¼ Ønñ€‘Á›Ø˜¢±µ (<­m,Ñv”Be{·ÛŒÖ¢ ‡G«"Ϊ0#¡µcé°tˆƒim¢@:,åíZû*Kb¿K V2N3.^¶µ³o_kçÞºµ3»`íܵv"VC>Z1H+&VEˆjZ!ÈÄuª¤§Ìé°ˆ‰w-VtX%þl° ¤Ã `zbÚ%ùµ Úÿ7ÒëÞV¾úí/½Úó†Ud%Në&0WJ‰`é”àˆ íT‘A1Y¹Á؆@ZB&f5$ßbH‡b\l± ¤Ãò9«ÜbH‡ùÛ]‹U –Öà˜B‹U Ý4ä9],l]®¶ 8ÑA]Ò,½…v@Ê’ÞºrÛ,ûØáãW·“.¸"·ÍŽoÜñ‰;WŽoÜ&_Šv}ò(½[/ˆ‰ÅQרñvþ~×JÞø™{î^¹÷ØÏÞs'a†$BLjEûî:ˆ÷ݽrÿû7î=ö©;0:ÌÉŽ„ï8q|#}@ݺqבÛÔÏ©ãpçÊýÀÆÃedtwœÈܺòIÂ6eZémÓ£²2ÉÛ?¼rÿ±[fÇOÜòè-<ÏeíÞŸ¿¾ð³ŒùÞŸ¾/Í£âGO¢Å…þÝ+ŸÙø…_<ðKÜOªþöÅóQvý~yãWžxüh>z÷ ¢†w+ò)èí¡V\>»ñØ{7>ùÈíSÝÔ•ñ™—8?r÷‡¸½nûôµÏcÓ>7 HÛÂ=ˆëì8ÃÀ„戔ÚYð6Žó,šPf–߬ }v›­r&[öhÉZˆ‰c…´JêtÌèѬé°$'®Eb@‹c3<(Ó ¤ÃJ6¡%%+ ƒŒÕ¿F`<@XßÙPMàèµ’*Ë´/÷6-ÁäÔ‰€ Ù7;ÍÞÉ,6õ6gU}w*~ôÐÊiÞtuöZ^f£—»ªÙpºûæK{I²1¿·ß˜/Î7옩¾5ÆÙ#Ƽd÷ÿÉûè5ÙÜSLEÞqLOñ¸ëIÁžÒ;S;¸!Äéù~ðîש˜wÊ*Œ¾œdh™pî%Èb÷«6~Ý~úCW·fƒ÷ö•yo‹6Ë80즮>ðÌ£ÏÜ]…ø~möäÁÕ9€ùõ%`ÿðUå¤K[-jvÃ} GŒŠ^¤& ïº %oeülS•ðý³r6¦Þ7¿þÙ5¶V…[cµ‚9¬ÔfOoÝ|ä†3€[Ò Q¦‚ë0ɨ‡e”ÌižX·òäÁÓ³§ .?t„‡—˜Ö,ÓÝ~hš{¾þÙ1÷€TNh_Ön1ª„ôÕ1¯¾¿%‹íÀó+†(»äį³?ïæ]3‰•ž+ûe› AÂû¥ú®)ˆôýž|xXF¸ÌbVÔR+ÝŸ5>y¸‘ܪrãpkmçTªàr*%Ð4ò°g›‘²Ù8p»­Ñ(‰iÑms7¦EËQUÅ úgÝbH‡å“|kÒa•£Í«@:,ëá[k4ÒaÕ•ŠUOT,m;Öµð]óŠÒå…ż֤¯š×.é+X5é«X]Ò'¦Z’¾ÑT·I_±nʦAµ´ÒaÀb¢Ú<†tX^:³X –M5H èx¯ •÷zÚ`ÉlçŒ ¤Ãª kÅêÖ‚UÖŠÕ%¬«¦È«K‘‹ )I¬øƒþÖ]ö;çgµÿïÞYÎÁâQŽÍ?ÜC˜L›y]h» NƒcbCA±ùQèþÕg1H¾ú×|Ø«ìUûÊ,xÓH;n±) 0'G÷ÎßsàFŽ·m.8 /ÏY —:así®Ý gÝÊÕÁÃv^9Ò?êæÔ4ù‘ÝŽ†Ÿü£ð3äÀŠíi÷Pº¥~~æqV2­Ëd»(£±QvA÷´n¿ïg¥¯&KuxÞÔé^€\È>¨ôxÀVç×<IK‰ŒHòÈ®nœ¿wEÚHZ×nÁúP¸¥äA=v&ß—AÑò¸eA •¢-DÓ6¯Cº ›l·d:ö²eP‹Íw]š—÷Ò6ˆ1Ô ´Ç-jP:(ïØ pP1„çB -×8 £9 !€††R¨† ËÇ~Ë{3²Š!C òÎ}4C‹¶S ™öM;yüÞŒ­b—B¡G\àÕ~ŒÖ~=ä)©Z`$Æ4öCgêP ¡ ï¢Û#„µ¤ÀÖaìCìÇÈ…`—B¡G?8gaFb;8§WY²Ni<ú®—÷fp£°^)È;÷Ñ Îaýç|âÒ¿7ƒ«Â¥PèÇÑ‹eÖ†óùQz±*®Q·r¢Zµ^¡”ï¢LÒ¼¼—™Ì&RƒÒ¾”ªÔÊ{#’Cx.ú!и&ET²i®y¢§¶ “âP笛 X?Eñv‚âK°žËJ©Æó‘dúÓ]lU2€·Æ”¾BÆb*íí /C¤SeO¦m_qðCÀ*j»‡éLÊ©®\7g·­’ñ²JøÔͯñe•LEIz‚’J½[Vbc_2€²l&Çe«4n«(bÿÌXIZ [#¤Í+“Pó–@šíY7¯@Àc"îx£mÄNš±½RyÈ#NC7М&HOg²nW®›·óºYðJž¶µ¢rnÍÈÖqxÜ\ôÁ›Á¥eeë†U„¶›ÐŠ]'4€šCzÙL¨àŒ:¡3]·+ÖÍÙõÇÀØ€î¹Åg`éžX‡µ1HÐ… ‡@[”–4gÃx;5BÙ¡D›U¿À–Æê !@QýÞõc…ž·ÜÁ¥/,MXÐx· —Ae7jpàùÂÒ6Âö¸%]™j¶¤§‚­•+ˆOHj5õ ÆNPŒëo&€·ŸÈ¾vEÒ½I—l›ÀygÚ#w Ð*WÈV… ¼S*5¹#¤©ÁUrhM¼ ­Æš^EÂÞ´¯8ðE3ï@Ù¥8LgZ…{źÙf~ x+÷Šè©»ÖdÙÄüØ{bUo~@aú:i[+«³Ë—\¥"øJ¥¯B¶FFTs,ùÒH©½h× Â`…”;4Vgl˜´”¨=X?â4£ò|21¥3Y·+×ÍÛxÝH'ŒÆ-²U!£í²É¦ÁÆeeë–À¼˜ØNhÅ®š $v±PÁ'tBgºnW¬›mëfœ• wøÔÝÀw;¹¤ç¼š x=E y‚ë•A¥.y‹ë0øPP^‡üœ±øþ%zìU Œ›ƒ0YD“¨ ŠXH¿swd6~Ç †dŽxј¬ßéa»Êé\n“ÐS§,ˆ‰×+3Ƀ৉î²@Â%Hz娙îx'³#‚ì9´õã1b…ølðv3ŽÕôùÛ!Ej{s–<.'42&aÐ<Ùàe< yà 2a] !)H‡•m zEúض¤Y•™Æ‡v泚¨bž˜Ç\ï •ð$ÛÔ#Ø¢—~ë¥ö³(QÙA£îñz,ÃÙ®UÐ/,³¡o ‚Òƒö­Ð/Á)DvЫ]îãìx91ÛÁ¤Vl2Šm[*55¦å¦ryê̠͹×Hå©1uS,¥h$Ó)J½%­w¸%-l;Ú¡éèÌ b;´˜GÏ¢Û!cÑÀ¥m,‹:ÎÃàL£18l®Ì»“8!Кn’Néì —»ßÍÙæ:˜ÔMTWT§@ ãTV-Ú) °Dn¬©‘>õ&×L¯;c9~âü%Ø©ávÕp‡KF½÷ál››Ș›ŒVøÒv™õ ™AÁ)ÊÚ4®ÆE5YY—á0‘ Â.÷q¶Éù°ƒ²i7¨„凙 ]ñî4@û;јÊzÏ»bðÅ m*Ù#ÐÌûŸÒ[ºx =:xÀ–O¼…7' H•ng¥YÚy$´ÇýSc‡ÀqFþð.ŽøSx”¹ŠÛˆã©sÈÃR‰œ,í'­Š“Š:¢°ÜG@D)ŠŽ–@I¸–Ù`ª õƒÆoq\e"nUà­è3óžMâ¾ð‚Û”ÉÕS$Ú9ǵÀ}¤“t¡Œç0¯FÄÄÖLõã)Ð1Þ 1É—¾x›!.Ái¼Éd  …d`Éêt¸ /ùF¶ ÷Bµ†°Ù³¥°ÖkäyÞqcžjÄÁèyöó¸êt·!r—É™JnâøöœU0½|ÅEã™ 7îé&FY«\¦ó5 }FÊ 5±e­¬bè’ˆÁ£(€hˆôùÚˆæ+smGÅºŠ™±Ô%VZd¾*dµÏ<¡ 9žÉDœ$Ä®I±… ÄÐež\н–J²+œÈ¦+8:¥¹uÀܤá ¹Õ:*H@yBëÈ-ÞLMíÔØ@F ‰Ë-þ° Ñq¥tÑ:•Ê2°Î ÏGH(:˜tºËãX,†Û†V\ã‘ BR!+o Ç+TxÞ!&iX’uíçaÃÆÂz0.8[Á£Ð!÷Õô(¡Ö—CÕ@Åß”’RÅb= ý ,¡"ú6ÀpIŽ@Ù·ë£Z…±!0¿‘VÉñJ‰–AΨ°9@ð§‚'Ç‘!´5…#*<Û‹vÀu0¬Ðžsgcd¡qðò‰o! ´CµfÀâµfe[v’– o&Ù})¢£Ø?„ê»ê@ž§v.2Ãk]¬ú 4fž^†ÍÑÕa€YˆEÕ&‡áéÄ׃‘cs@Ò#†!¹x«Ì¡t9Pöâe`–P½ìB2VF\Rí@—0Q+H? n.XxvDxÏ7RÀiYÉ ý2.*y Ž.q­ìçG*ïˆg}¦"]:v(®ÁPÖ&†€ˆ¢L8o2&àͦƒØ€"¢°¹àØ·ä?h lq/csqo ÷‹èð•´<ƒ!õp`Šc`ƒî<ý:BÀ‚dì Í8ÎÀ–£S_R —"ú'€8îÜ*,+@@Ùk²ÊP¶¨1~µÅ/ж€+Î߆ Û8°{Iž<´ƒUg1×( )þ¸zv–…ºx°L“'D€.ÆÕ&>eæ&è°ë©óVýu®!Šr¤ø…JoÁd×v„µ%ɵ¼XÜ©k¹2#ãÍ‹]Gm1F ÍÄ@€Îò[çÎ).{ç×áoÍÄv ð‰$¸.“Ͷ¦YJ‹¿Bâ)Ë ^ z ëÑŽ¤Qj¬ÿ¥L#X_Ch„Ïâ)±²€‚§ð,Ž"Ã6(݉9xŠBX47 c£-07äDŸÀOÐNõ¨râ'ªV‚Ÿð¬ÚEqÁM°Í­ºMn"ÚONƒ¼jÀI°-¯6¼„¡³Úò¹1Eà$[ˆb­øDj ùˆ£G>E¯F›<­N±œà 4ÙÀjZmcëBc~’ñ·F NÄ’'+n1…Pa\ÞíȈZàý߯îÜ‹Ÿ?î /ÿó_¼ð›¿õ%ýÛOœ{ñwŽýîW¾|á÷>wî•—ázú—?÷Õ¯ýþ…¯_À¿ßøƒ‹¯~õÄE.Œôò£}@ë<ÓúC õGüÒW¾~áµ Ï¿tðÿä«Ç.þÙŸþù7Ÿ=÷ÊÅrÿŽŽï¥%sñê_¼Òrñ¿<÷…—_„¾‰— H‘«W±4Óâ†þ ¸×ßœ•‚àlÿ?ôýb3yº~x«ÏŸš×bóù W¹SÜAù!æ\$¿ ™–Ž÷â¹W`^|íÂ/üÕ__<ÿò…—/| áoþîo¿vñük^zôÜ+/•èv~[6“üê?üãÅóß¾ô•¢{,ñâ²ÕR¯y#|köÏ^?ò-õFø¶úª’•ÌÿzæðFø·Ù¿ÿÇ›³ï”iÐK5·ß=ñ=š—R*üŸ4ܰØä!|ûü÷Õ›³¨ïyS}ö:‘Å]úø].;ÜÜ÷_¥þ–ß¿Wêoéå¿_¤W² öë|=ŸJySz›ÜÎ*¿­ô?(`¶endstream endobj 1286 0 obj 6056 endobj 1285 0 obj << /Type /Font /Name /A /Subtype /Type3 /Encoding 1287 0 R /FirstChar 0 /LastChar 184 /CharProcs << /a184 1288 0 R /a183 1289 0 R /a182 1290 0 R /a181 1291 0 R /a180 1292 0 R /a179 1293 0 R /a178 1294 0 R /a177 1295 0 R /a175 1296 0 R /a174 1297 0 R /a173 1298 0 R /a172 1299 0 R /a171 1300 0 R /a170 1301 0 R /a169 1302 0 R /a168 1303 0 R /a167 1304 0 R /a166 1305 0 R /a165 1306 0 R /a163 1307 0 R /a162 1308 0 R /a160 1309 0 R /a159 1310 0 R /a157 1311 0 R /a155 1312 0 R /a153 1313 0 R /a151 1314 0 R /a149 1315 0 R /a147 1316 0 R /a146 1317 0 R /a143 1318 0 R /a142 1319 0 R /a141 1320 0 R /a139 1321 0 R /a138 1322 0 R /a136 1323 0 R /a135 1324 0 R /a133 1325 0 R /a132 1326 0 R /a131 1327 0 R /a130 1328 0 R /a128 1329 0 R /a126 1330 0 R /a125 1331 0 R /a124 1332 0 R /a122 1333 0 R /a119 1334 0 R /a117 1335 0 R /a116 1336 0 R /a114 1337 0 R /a113 1338 0 R /a111 1339 0 R /a110 1340 0 R /a106 1341 0 R /a105 1342 0 R /a104 1343 0 R /a103 1344 0 R /a102 1345 0 R /a101 1346 0 R /a99 1347 0 R /a98 1348 0 R /a97 1349 0 R /a96 1350 0 R /a95 1351 0 R /a94 1352 0 R /a93 1353 0 R /a92 1354 0 R /a91 1355 0 R /a90 1356 0 R /a87 1357 0 R /a86 1358 0 R /a85 1359 0 R /a84 1360 0 R /a83 1361 0 R /a82 1362 0 R /a81 1363 0 R /a79 1364 0 R /a78 1365 0 R /a76 1366 0 R /a75 1367 0 R /a73 1368 0 R /a72 1369 0 R /a71 1370 0 R /a70 1371 0 R /a68 1372 0 R /a67 1373 0 R /a66 1374 0 R /a65 1375 0 R /a64 1376 0 R /a62 1377 0 R /a61 1378 0 R /a60 1379 0 R /a58 1380 0 R /a57 1381 0 R /a56 1382 0 R /a55 1383 0 R /a53 1384 0 R /a52 1385 0 R /a51 1386 0 R /a50 1387 0 R /a47 1388 0 R /a45 1389 0 R /a42 1390 0 R /a41 1391 0 R /a40 1392 0 R /a39 1393 0 R /a38 1394 0 R /a37 1395 0 R /a36 1396 0 R /a35 1397 0 R /a34 1398 0 R /a33 1399 0 R /a32 1400 0 R /a29 1401 0 R /a27 1402 0 R /a25 1403 0 R /a23 1404 0 R /a22 1405 0 R /a21 1406 0 R /a20 1407 0 R /a19 1408 0 R /a18 1409 0 R /a17 1410 0 R /a16 1411 0 R /a15 1412 0 R /a14 1413 0 R /a13 1414 0 R /a10 1415 0 R /a9 1416 0 R /a8 1417 0 R /a6 1418 0 R /a5 1419 0 R /a3 1420 0 R /a1 1421 0 R /a0 1422 0 R /a89 1423 0 R /a49 1424 0 R /a54 1425 0 R /a59 1426 0 R /a88 1427 0 R /a112 1428 0 R /a44 1429 0 R /a4 1430 0 R /a134 1431 0 R /a2 1432 0 R /a11 1433 0 R /a7 1434 0 R /a28 1435 0 R /a107 1436 0 R /a24 1437 0 R /a12 1438 0 R /a31 1439 0 R /a43 1440 0 R /a48 1441 0 R /a46 1442 0 R /a80 1443 0 R /a63 1444 0 R /a115 1445 0 R /a108 1446 0 R /a74 1447 0 R /a77 1448 0 R /a30 1449 0 R /a69 1450 0 R /a150 1451 0 R /a145 1452 0 R /a100 1453 0 R /a109 1454 0 R /a26 1455 0 R /a118 1456 0 R /a120 1457 0 R /a121 1458 0 R /a176 1459 0 R /a127 1460 0 R /a123 1461 0 R /a137 1462 0 R /a156 1463 0 R /a129 1464 0 R /a140 1465 0 R /a144 1466 0 R /a164 1467 0 R /a152 1468 0 R /a148 1469 0 R /a154 1470 0 R /a161 1471 0 R /a158 1472 0 R >> /FontBBox [ 0 -77 85 111 ] /FontMatrix [ 1 0 0 1 0 0 ] /Widths [ 0 0 33 0 31 0 0 35 0 0 0 34 39 0 0 0 0 0 0 0 0 0 0 0 38 0 60 0 36 0 52 41 0 0 0 0 0 0 0 0 0 0 0 42 30 0 45 0 43 25 0 0 0 0 26 0 0 0 0 27 0 0 0 47 0 0 0 0 0 54 0 0 0 0 50 0 0 51 0 0 46 0 0 0 0 0 0 0 28 24 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 37 49 59 0 0 29 0 0 48 0 0 63 0 64 65 0 72 0 0 0 71 0 77 0 0 0 0 32 0 0 73 0 0 79 0 0 0 84 57 0 0 90 0 56 0 89 0 92 0 76 0 97 0 0 95 0 0 85 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0 ] >> endobj 1287 0 obj << /Type /Encoding /Differences [ 0 /a0 /a1 /a2 /a3 /a4 /a5 /a6 /a7 /a8 /a9 /a10 /a11 /a12 /a13 /a14 /a15 /a16 /a17 /a18 /a19 /a20 /a21 /a22 /a23 /a24 /a25 /a26 /a27 /a28 /a29 /a30 /a31 /a32 /a33 /a34 /a35 /a36 /a37 /a38 /a39 /a40 /a41 /a42 /a43 /a44 /a45 /a46 /a47 /a48 /a49 /a50 /a51 /a52 /a53 /a54 /a55 /a56 /a57 /a58 /a59 /a60 /a61 /a62 /a63 /a64 /a65 /a66 /a67 /a68 /a69 /a70 /a71 /a72 /a73 /a74 /a75 /a76 /a77 /a78 /a79 /a80 /a81 /a82 /a83 /a84 /a85 /a86 /a87 /a88 /a89 /a90 /a91 /a92 /a93 /a94 /a95 /a96 /a97 /a98 /a99 /a100 /a101 /a102 /a103 /a104 /a105 /a106 /a107 /a108 /a109 /a110 /a111 /a112 /a113 /a114 /a115 /a116 /a117 /a118 /a119 /a120 /a121 /a122 /a123 /a124 /a125 /a126 /a127 /a128 /a129 /a130 /a131 /a132 /a133 /a134 /a135 /a136 /a137 /a138 /a139 /a140 /a141 /a142 /a143 /a144 /a145 /a146 /a147 /a148 /a149 /a150 /a151 /a152 /a153 /a154 /a155 /a156 /a157 /a158 /a159 /a160 /a161 /a162 /a163 /a164 /a165 /a166 /a167 /a168 /a169 /a170 /a171 /a172 /a173 /a174 /a175 /a176 /a177 /a178 /a179 /a180 /a181 /a182 /a183 /a184 /a185 /a186 /a187 /a188 /a189 /a190 /a191 /a192 /a193 /a194 /a195 /a196 /a197 /a198 /a199 /a200 /a201 /a202 /a203 /a204 /a205 /a206 /a207 /a208 /a209 /a210 /a211 /a212 /a213 /a214 /a215 /a216 /a217 /a218 /a219 /a220 /a221 /a222 /a223 /a224 /a225 /a226 /a227 /a228 /a229 /a230 /a231 /a232 /a233 /a234 /a235 /a236 /a237 /a238 /a239 /a240 /a241 /a242 /a243 /a244 /a245 /a246 /a247 /a248 /a249 /a250 /a251 /a252 /a253 /a254 /a255 ] >> endobj 1288 0 obj << /Length 1473 0 R /Filter /FlateDecode >> stream xÚ3P0CS3S…C. ̇'çr9yré{ú*”•¦ê‡Õé{%õœ õÝôÝô]llô½t õósJsóŠªìì¸<]ôŒ#Î:ÿÇöÿß÷ÿ·oõÛ »¿×¹YLtýþÖôÖº Ù[®8;¶20r¹zrÒ…A§endstream endobj 1473 0 obj 134 endobj 1289 0 obj << /Length 1474 0 R /Filter /FlateDecode >> stream xÚ3P0B#Ks…C.K0ßÌ,˜œËåäÉ¥ïé«PRTšª®`©ï”Ów pV0ÔwÓwvvÓw °±Ñ÷VÐ5ÔwÎÏ)ÍÍ+V°´³ãòtQгÿ°08p¹zr‡»&zendstream endobj 1474 0 obj 102 endobj 1290 0 obj << /Length 1475 0 R /Filter /FlateDecode >> stream xÚ3P0Bss  #…C. $d NÎåròäÒ÷ôU()*MÕªÓ÷P0Õw pV0ÔwÓwvvÓw °±Ñ÷VÐ5ÔwÎÏ)ÍÍ+*²³ãòtQ°®ÀÄ ÀåêÉ£ Âendstream endobj 1475 0 obj 102 endobj 1291 0 obj << /Length 1476 0 R /Filter /FlateDecode >> stream xÚ3P0B#cSs…C. $d OÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(èÔÿGßÿß_û7·lGöÄ>íýë®go8ÔÀÁÐÀåêÉÄU30endstream endobj 1476 0 obj 126 endobj 1292 0 obj << /Length 1477 0 R /Filter /FlateDecode >> stream xÚ3P0BCCS…C. $bb NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(ØIÅÿ;Ñ%_ööwÙûÝåww¿»û=ïÛ÷êêíµ·÷½½_ìõÿ#ƒ—«'I¡-?endstream endobj 1477 0 obj 135 endobj 1293 0 obj << /Length 1478 0 R /Filter /FlateDecode >> stream xÚ3P0B]C KS…C.K°ˆ™T89—ËÉ“KßÓW¡¤¨4U?\ÁRß(«ïà¬`¨ï¦ïìì¦ï`c£ï T®ïœŸSš›W¬`igÇå颠gÿ>;ÜÿSÿÿƒ—«''@'-endstream endobj 1478 0 obj 110 endobj 1294 0 obj << /Length 1479 0 R /Filter /FlateDecode >> stream xÚ3P0CCSC…C. Ä7…Pɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.OÍÙ<´ª^+Ð^á¸×6>|ÿõ×]6 H4x µˆ²:&¬h¾Îê˜X[ñÿõºßë.ݺñ6ëŠi–„C—«'F3Tendstream endobj 1479 0 obj 157 endobj 1295 0 obj << /Length 1480 0 R /Filter /FlateDecode >> stream xÚ3P0BC#Ss…C. $bf NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(¨ðÿGçÙêÿƒ߿і߽£€‘A€ËÕ“ [´.‘endstream endobj 1480 0 obj 116 endobj 1296 0 obj << /Length 1481 0 R /Filter /FlateDecode >> stream xÚ3P0B#cssC…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº((¶¶È²s^^î¯hïÈöåËìË×¾ü_rÿÿ/ßÿ`°múÿ¿k_gÿÎÌÍ]š«S¶6j+F¢ ƒ—«'ôR5êendstream endobj 1481 0 obj 151 endobj 1297 0 obj << /Length 1482 0 R /Filter /FlateDecode >> stream xÚ3P0B#CcK…C. $df OÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(¨‹óWÿþñèûýí÷¿ßõ÷úû땊_ÿ¾^ýûß®ý{Këë—~ûÿ+üþ×/÷_¿úýoßú½õUUÿ¾~_ÿ†Á…ËÕ“ ù²ACendstream endobj 1482 0 obj 161 endobj 1298 0 obj << /Length 1483 0 R /Filter /FlateDecode >> stream xÚ3P0B#c sC…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(s8k8Ê|¹ª*»J)Àã]ó Ûxÿÿßÿ¿mó'îË)&q¿YTTò˜y4T†©¾zúÿ÷¯÷gæèö‡­j1XÀÄ ÀåêÉš[9æendstream endobj 1483 0 obj 169 endobj 1299 0 obj << /Length 1484 0 R /Filter /FlateDecode >> stream xÚ3P0B#SSs…C. $bfNÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(Øh ‰ßþúêß¿©ÿiÿþ«×¼­ÏþŸRºþ=P dÿïzïß樂·ëßý×k÷_ýþ·tãëûqÿã>02p¹zrSð@òendstream endobj 1484 0 obj 162 endobj 1300 0 obj << /Length 1485 0 R /Filter /FlateDecode >> stream xÚ3P0BCK …C. $dNÎåròäÒ÷ôU()*MÕªÓ÷P°Ðw pV0ÔwÓwvvÓw °±Ñ÷VÐ5ÔwÎÏ)ÍÍ+*²³ãòtQP[8ÿÿF.WO.ÁÊ@endstream endobj 1485 0 obj 103 endobj 1301 0 obj << /Length 1486 0 R /Filter /FlateDecode >> stream xÚ3P0B#cssC…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº((¶·È(¼¼¼Ü¯Ã«Dzɯ¼Éÿ}¯_?þëoMÛÊõÿOŠ^ÿýÛÛ¶Ç^Ýz+L"ZômTÛ ƒL \®ž\*}6$endstream endobj 1486 0 obj 156 endobj 1302 0 obj << /Length 1487 0 R /Filter /FlateDecode >> stream xÚ3P0B##sC…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº((1â(yyy­Àä*~Ͻ¥µæ¿âëë&zHÿüOu÷¯G×]ûºuák㮘&:¶20r¹zrH2Sendstream endobj 1487 0 obj 150 endobj 1303 0 obj << /Length 1488 0 R /Filter /FlateDecode >> stream xÚ3P0B#CcSsC…C. $d OÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(¨ssi¾|ݯÀä///ÕßÛûÿýTÀ ÀÈåêÉÜô1“endstream endobj 1488 0 obj 124 endobj 1304 0 obj << /Length 1489 0 R /Filter /FlateDecode >> stream xÚ3P0BCK#cs…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(ØÿG€¿ÿ÷ï}_)ñÄrýûýïw´+\`hààrõäý-¥endstream endobj 1489 0 obj 122 endobj 1305 0 obj << /Length 1490 0 R /Filter /FlateDecode >> stream xÚ3P0Bs#SsC…C. $bfNÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(˜Ê(‰\-½>±jÿøó!ýÿ§F0³ƒ¡ËÕ“ *í0endstream endobj 1490 0 obj 120 endobj 1306 0 obj << /Length 1491 0 R /Filter /FlateDecode >> stream xÚ3P0CSs#…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAó_ƒ‹BÁ\v¿¹VŠý%ίñ^ª5÷¾üÛóßþÿÿE/­MÔˆPU8ì"4×áˆPËBV‡¢7 ™N$Ìbmmõ~ýɧþÿÿÒû—î—Þ »Î£šp0'lmTÛD¯B&.WO.tÓ@Åendstream endobj 1491 0 obj 190 endobj 1307 0 obj << /Length 1492 0 R /Filter /FlateDecode >> stream xÚ3P0CsKC#…C. $âèä\.'O.}O_…’¢ÒTýp J}¬¾S€³‚¡¾›¾³³›¾K€¾·‚®¡¾s~Nin^1P™—§‹‚RÂñ»õwë^ÿÂïñßcÚäßíÿúíõÿ_yûÿ^ªÿWÿþë—¯ÿkþëÿåúõÿKæÿûïùÿݾù÷_ÿ÷ý·ÿËÝúß—¯ÿß÷eýúåßýª¯_{m#ƒ—«'µUÄendstream endobj 1492 0 obj 186 endobj 1308 0 obj << /Length 1493 0 R /Filter /FlateDecode >> stream xÚ3P0B#SS3C…C. $fn ‘HÎåròäÒ÷ôU()*MÕªÔ÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº((2Ÿ*Èg‘QxÈÎy¡äµß¼×þO¤ç;²}h~½äï®ÿÿ­ÐÐT“ÜÄ#õÔ"ëÐA­C¡K½š–¶z³:&lâeäY,¡›X¤ ~)þÿ¯Û¿" ÝXÿ¶:lmÔÖ¬+ zx04pp¹zr‚xDÈendstream endobj 1493 0 obj 202 endobj 1309 0 obj << /Length 1494 0 R /Filter /FlateDecode >> stream xÚ3P0CscC#…C. $âèä\.'O.}O_…’¢ÒTýp J}¬¾S€³‚¡¾›¾³³›¾K€¾·‚®¡¾s~Nin^1P™—§‹‚²ƒû¼à_ÿ~ õ‘A€ËÕ“ Ø;endstream endobj 1494 0 obj 109 endobj 1310 0 obj << /Length 1495 0 R /Filter /FlateDecode >> stream xÚ3P0B#S3Ccc…C.3°˜¡D&9—ËÉ“KßÓW¡¤¨4U?¨Tß$­ïà¬`¨ï¦ïìì¦ï`c£ï­ k¨ïœŸSš›W TfgÇå颠Ũ’`ÞÄÎaÅ'Pòòòr¿Ýë^4u4îQ¿|u¯ýñß÷?ñ¨qÈ Tøs¾|ùòõ½]r»^4õb_îùòå_õ_õÿãæÿƒ·µÿ¯ýßZº?:ìÚ5 m¹ß'²øk×ߺuë>î —y<" ,\®ž\æ$Q2endstream endobj 1495 0 obj 209 endobj 1311 0 obj << /Length 1496 0 R /Filter /FlateDecode >> stream xÚ3P0C SC#…C. $âèä\.'O.}O_…’¢ÒTýp J}¬¾S€³‚¡¾›¾³³›¾K€¾·‚®¡¾s~Nin^1P™—§‹‚÷¬Ææýõÿÿþÿ¿þýÿ×ÿïÿŠÇýÿ¿ýÿÿ¯¿ $úúÿ”¼ÿ‰"ÿÿBqàBÿ?nü[ÿ/ýnà`hàrõ䔸xöendstream endobj 1496 0 obj 164 endobj 1312 0 obj << /Length 1497 0 R /Filter /FlateDecode >> stream xÚ3P0BC3cC#…C. ,d`–HÎåròäÒ÷ôU()*MÕªÔ÷Éê;8+ê»é;;»é»ØØè{+èê;çç”ææ•ÙÙqyº(رÊÿûÿûß Íw÷·ï.ûžwOvwÙÛÛÛooÏ» bµoÏûö>ï÷Þ·¿¿/6ˆÿ¹õk×ÛîÝ&v°)âkmܵõYWWs]1XØÊÆåvŠA‰ËÕ“ o9I¾endstream endobj 1497 0 obj 182 endobj 1313 0 obj << /Length 1498 0 R /Filter /FlateDecode >> stream xÚ3P0B#ScKC#…C. $fn‘HÎåròäÒ÷ôU()*MÕªÔ÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(pÿGÿþÿþ}ï{{ó‰,©ÿŸ¸ûÿþ¯¿_¿öˆ…C—«'"ª8@endstream endobj 1498 0 obj 131 endobj 1314 0 obj << /Length 1499 0 R /Filter /FlateDecode >> stream xÚ3P0C SC#…C. $âèä\.'O.}O_…’¢ÒTýp J}¬¾S€³‚¡¾›¾³³›¾K€¾·‚®¡¾s~Nin^1P™—§‹‚äÉ×ßwÅÿ{õúï÷uûïÆ¿Þ÷õß6íÿÙ¿ãÇßúw ~×ÿwÓþßÛõþïëu¿¯Ç¿ß[z¿êtýú¯Ûãÿ^/ýW÷ÿþ®׿_ß·ë߯׿_ÁÐÀÁåêÉÍzSÙendstream endobj 1499 0 obj 187 endobj 1315 0 obj << /Length 1500 0 R /Filter /FlateDecode >> stream xÚ3P0C3cC…C. $âèä\.'O.}O_…’¢ÒTýp J}¬¾S€³‚¡¾›¾³³›¾K€¾·‚®¡¾s~Nin^1P™—§‹‚r¢Bã¦‡ì‡ø—_~ùåï—õõõŠSßsØ WÕÚçû¯ÿ»·öÿúßÿÿúÿÿßÿÿë^ÿ½Ýëu×]º#~ýú =«¯·Þßz[&ž½aGbAÂŽÿ0p€…ÁËÕ“ W!Tšendstream endobj 1500 0 obj 188 endobj 1316 0 obj << /Length 1501 0 R /Filter /FlateDecode >> stream xÚ3P0B]csKCS…C. $fh`‘IÎåròäÒ÷ôU()*MÕ*Õ÷Ië;8+ê»é;;»é»ØØè{+èê;çç”ææ•ÙÙqyº((-ž`pžEFá\ã!~Η/lÔV/_¾üÞ¼¶] oò¬ÕPøÐ¼`Þ\õåáËׯí}_õ7nÿŸ¼ö_öÿƒSùÿwÿÿ÷÷ßO &¹í_ï×g¿ºõ6?::»mê†Ý^[O˜$m¼µuõ­­YW Ö:s]1Xpбibaƒ—«'AK[†endstream endobj 1501 0 obj 223 endobj 1317 0 obj << /Length 1502 0 R /Filter /FlateDecode >> stream xÚ3P0BCSsCS…C. ,d`–HÎåròäÒ÷ôU()*MÕªÔ÷Éê;8+ê»é;;»é»ØØè{+èê;çç”ææ•ÙÙqyº(hWb¬pxÈÎaUòòòòØË_þ ÜÌçkª»7oúíóöï­ýÿïÿßÚÿ¿þýG«ÿÿ»þÿÿúûÿ®_ÿ¶þÒö·U72›­_}ëêÛ¨­YW Öh,xÀÄ ÀåêÉ®äWendstream endobj 1502 0 obj 190 endobj 1318 0 obj << /Length 1503 0 R /Filter /FlateDecode >> stream xÚ3P0B#SSsC…C. $fn ‘HÎåròäÒ÷ôU()*MÕªÔ÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(X±4±s5$²-´µºï·rÝ«öן¤¬[ø=¿Èï›ÿ÷÷ÿ¿ÿ÷ýÿþ~Ã{ö›<çüæßøûžÜ‡•RAkŒS2D<¤ï}¯Üô÷ÿûÿ±¿£³Û¸»ö_}[¶6j+6&'ƒ#—«'³EH½endstream endobj 1503 0 obj 201 endobj 1319 0 obj << /Length 1504 0 R /Filter /FlateDecode >> stream xÚ3P0Cs3C#…C. $âèä\.'O.}O_…’¢ÒTýp J}¬¾S€³‚¡¾›¾³³›¾K€¾·‚®¡¾s~Nin^1P™—§‹‚…t$kjÁ‡ßÛ÷¾¯¯þ}ϱéŸôÃßµ@øûý¿û¿ÿ߯¡ÿÿóÿÃ@Üþÿÿ×ÿ­_ÿ+þõ¿éq{õö¨,ŒúumëÚlî¶› Œ \®ž\Ppendstream endobj 1504 0 obj 174 endobj 1320 0 obj << /Length 1505 0 R /Filter /FlateDecode >> stream xÚ3P0B#S3cC…C. $fn ‘HÎåròäÒ÷ôU()*MÕªÔ÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(¨:apž…O DFÝo®UÉËË_^þRˆ¿Ç!ïï¹×VíËÿË×þ/ÿÿwÉø¶>þß¿ík×ÛözDtfÂÁœð­µQ[«ÃÖh‡-låÑ0X2£‚¡ƒËÕ“ WŒF[endstream endobj 1505 0 obj 182 endobj 1321 0 obj << /Length 1506 0 R /Filter /FlateDecode >> stream xÚ3P0C3C#…C. $âèä\.'O.}O_…’¢ÒTýp J}¬¾S€³‚¡¾›¾³³›¾K€¾·‚®¡¾s~Nin^1P™—§‹‚KýT0Áâ<„¡àSËQ  \®ž\É > stream xÚ3P0B3Cc…C.°¥9X<9—ËÉ“KßÓW¡¤¨4U?¨Pß(©ïà¬`¨ï¦ïìì¦ï`c£ï­ k¨ïœŸSš›W TegÇå颠ÅX°jõúõ…×ÖÿGdÉçñPþ&.WO.î: endstream endobj 1507 0 obj 126 endobj 1323 0 obj << /Length 1508 0 R /Filter /FlateDecode >> stream xÚ3P0B#S3cCcC…C. $fh`‘IÎåròäÒ÷ôU()*MÕ*Õ÷Ië;8+ê»é;;»é»ØØè{+èê;çç”ææ•ÙÙqyº(pÿ‡ƒ‰ 5 ?¿üªµ¯µ›¿§ú÷OžõŽf_~ù»ê÷ë·ÿýÿÿßQûwý×»ÿoýºõßõÌÄÖÃÜ]¿~г¿ž ägoØÛ*p¨™•A€‘ËÕ“ V$endstream endobj 1508 0 obj 185 endobj 1324 0 obj << /Length 1509 0 R /Filter /FlateDecode >> stream xÚ3P0C3C…C.3ˆˆ¢“s¹œ<¹ô=}JŠJSõÃ*õ=@²úNÎ †únúÎÎnú.66úÞ º†úÎù9¥¹yÅ@evv\ž. ª‡™[$gè TÀËU¯qÙsX9¾|yéå÷µñ¯ÿþ­úÿ¿þÿÿëÿÿý/ýý?únþÖ«mÛÄ$Âl¿ßäu|¿õÚµÙ‰‰k 6$lüX¸\=¹dqIñendstream endobj 1509 0 obj 176 endobj 1325 0 obj << /Length 1510 0 R /Filter /FlateDecode >> stream xÚ3P0B#SSKC#…C. $fn‘HÎåròäÒ÷ôU()*MÕªÔ÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(pOeØÿ;øûÿÛþÚõ‡£½ÙÄåýd=ÿ¶üë­·e»c I$,`bPàrõä …@¤endstream endobj 1510 0 obj 141 endobj 1326 0 obj << /Length 1511 0 R /Filter /FlateDecode >> stream xÚ3P0C#CC#…C. $âèä\.'O.}O_…’¢ÒTýp J}¬¾S€³‚¡¾›¾³³›¾K€¾·‚®¡¾s~Nin^1P™—§‹‚Kýàƒ—«'Ê/Ðendstream endobj 1511 0 obj 103 endobj 1327 0 obj << /Length 1512 0 R /Filter /FlateDecode >> stream xÚ3P0BSccKsC…C. $dhOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(ØñÆÿÿÿÿC—«'+·oendstream endobj 1512 0 obj 106 endobj 1328 0 obj << /Length 1513 0 R /Filter /FlateDecode >> stream xÚ3P0B#s3C#…C.3°˜¹)D"9—ËÉ“KßÓW¡¤¨4U?¨Rß(«ïà¬`¨ï¦ïìì¦ï`c£ï­ k¨ïœŸSš›W TegÇåé¢`Ã.ÿÿÿÿMÒl÷î½½_DïóËÞï¢òí`tw÷m0:Ëèý>02p¹zrš!8Oendstream endobj 1513 0 obj 139 endobj 1329 0 obj << /Length 1514 0 R /Filter /FlateDecode >> stream xÚ3P0B]C#C#…C.#°˜¡1D&9—ËÉ“KßÓW¡¤¨4U?¨Tß$­ïà¬`¨ï¦ïìì¦ï`c£ï T¯ïœŸSš›W TfgÇåé¢`Æýüþ¶ ÄúÁÐÀÁåêÉ‘Ý1ªendstream endobj 1514 0 obj 114 endobj 1330 0 obj << /Length 1515 0 R /Filter /FlateDecode >> stream xÚ3P0B]c3KCS…C. $fh`‘IÎåròäÒ÷ôU()*MÕ*Õ÷Ië;8+ê»é;;»é»ØØè{+èê;çç”ææ•ÙÙqyº((;ym¸©zØHÀBáå!¾¹V%///ùKqæ{…EkYxÚª_®ýòeÿ·×ÿý)½¢ÊÍÚtb†éÁT3G ¡–…‰Z!+´BDY[6„8Gªˆ9.ñe:˜°!dþ};¥Yýÿÿz×þëu×—æ\çQMá)­[µ·5ëŠÁÂV ƒ .WO.—¥Sžendstream endobj 1515 0 obj 237 endobj 1331 0 obj << /Length 1516 0 R /Filter /FlateDecode >> stream xÚ3P0B#K#C#…C. $fn ‘HÎåròäÒ÷ôU()*MÕªÔ÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(ذÔÿ‚©Œûäó†~ç#ƒ—«'FX&cendstream endobj 1516 0 obj 116 endobj 1332 0 obj << /Length 1517 0 R /Filter /FlateDecode >> stream xÚ3P0BC a`¤bÈeb20K$çr9yré{ú*”•¦ê‡Uê{€dõœ õÝôÝô]llô½t õósJsóŠÊìì¸<]´ëÿ£Ï‰+ä¶Ì+<Ì;Êkïßÿ~€…ÁËÕ“ «3endstream endobj 1517 0 obj 122 endobj 1333 0 obj << /Length 1518 0 R /Filter /FlateDecode >> stream xÚ3P0C#C#…C.#ˆˆ¢“s¹œ<¹ô=}JŠJSõÃ*õ=@²úNÎ †únúÎÎnú.66úÞ º†úÎù9¥¹yÅ@evv\ž. fÜÿqL \®ž\Úç0Yendstream endobj 1518 0 obj 101 endobj 1334 0 obj << /Length 1519 0 R /Filter /FlateDecode >> stream xÚ3P0B#s3sC#…C. $fn ‘HÎåròäÒ÷ôU()*MÕªÔ÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(¨1v½¿þnÝ¿Þs<~ýÞôÿµ/ëþÇï[·ÿwÕëßï½ÿïûúµ~õïëñ÷–þý¾~ýýª_û¯þ}½þßý—uß¹\=¹ÌyEÐendstream endobj 1519 0 obj 168 endobj 1335 0 obj << /Length 1520 0 R /Filter /FlateDecode >> stream xÚ3P0B#S3SC…C. $fn ‘HÎåròäÒ÷ôU()*MÕªÔ÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº((;>UHobç°*h^î7×öÚ¼×þ ÷jª÷–̾üß?ð׿]ÿŸˆùÖÿÿÿD\}ë¿õÿ³ÿ‡]ÿ™[6µ»ïúÖì[[³®®È:Ô&"báÀÈ Àåêɼ’@xendstream endobj 1520 0 obj 183 endobj 1336 0 obj << /Length 1521 0 R /Filter /FlateDecode >> stream xÚ3P0C3C#…C. $âèä\.'O.}O_…’¢ÒTýp J}¬¾S€³‚¡¾›¾³³›¾K€¾·‚®¡¾s~Nin^1P™—§‹‚kýÿÿÿÿ4²ÆÿÇ >02p¹zr½:Ìendstream endobj 1521 0 obj 111 endobj 1337 0 obj << /Length 1522 0 R /Filter /FlateDecode >> stream xÚ3P0B]CKSS…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{•ë;çç”ææUÙÙqyº(¨>ȼà¡UÉË‹\å-ÒKä}/Õš{¿}½ú÷åÿ_¿Üÿ·Âÿÿ]¿zÝ¿©û3ss—æèIxÚšuÅ`Á¡†.WO.NÁ<þendstream endobj 1522 0 obj 161 endobj 1338 0 obj << /Length 1523 0 R /Filter /FlateDecode >> stream xÚ3P0CcS…C. Ä7…Pɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.O;wÇ—õKÿMÿÿ²êõëõëv¯]÷Znß&ç¿e¿¿ý®û]»ïïþÚ}÷ó÷ï³ÿ˜¸\=¹èp7endstream endobj 1523 0 obj 143 endobj 1339 0 obj << /Length 1524 0 R /Filter /FlateDecode >> stream xÚ3P0CcSSS…C. Ä7…Pɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.O ~ ÇË ^û+j¼Pø•7ùåþ—¯/ÿ ¹\=¹wÀ4™endstream endobj 1524 0 obj 120 endobj 1340 0 obj << /Length 1525 0 R /Filter /FlateDecode >> stream xÚ3P0BCcSS…C. $bj NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº((rÿ‚猋ÿOæ™^»ÿÛßïoÿoÿw?ÿïþo¿¿¿ýþñúêß¿`apàrõä¥í4˜endstream endobj 1525 0 obj 140 endobj 1341 0 obj << /Length 1526 0 R /Filter /FlateDecode >> stream xÚ3P0C#S#C…C. Ì7Sɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.Oõó¾m_»öµìê‡Ø#OË·¶:|\þC—«'Ó`%ãendstream endobj 1526 0 obj 124 endobj 1342 0 obj << /Length 1527 0 R /Filter /FlateDecode >> stream xÚ3P0CcS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEÁÌU±:ûúÛõówýú»éï:Ûø×÷Uä¯þ]¿ú÷¯ðÿ[÷Ö×{ýû7õïÿ]ñdzÿÆÿ`hààrõäõÛ6Bendstream endobj 1527 0 obj 147 endobj 1343 0 obj << /Length 1528 0 R /Filter /FlateDecode >> stream xÚ3P0CcSSS…C. Ä7…Pɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.OÓnGöË/}bo£~¹ªþåþ×ÿóÿƒÀûKÿ¿íÛ¶Û›·È¹ëöÖ1;@ÂX¸\=¹jà7Íendstream endobj 1528 0 obj 142 endobj 1344 0 obj << /Length 1529 0 R /Filter /FlateDecode >> stream xÚ3P0BCcSCS…C. $dbOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(ع)Nÿ îÿ_¿l{éîØ–ë*w¬{ÿj·oÙ¬Ž ƒL \®ž\Y:9endstream endobj 1529 0 obj 134 endobj 1345 0 obj << /Length 1530 0 R /Filter /FlateDecode >> stream xÚ3P0B3cs3…C. $dNÎåròäÒ÷ôU()*MÕªÓ÷P0Ñw pV0ÔwÓwvvÓw °±Ñ÷VÐ5ÔwÎÏ)ÍÍ+*²³ãòtQ0Šoà`hàrõ䘢…endstream endobj 1530 0 obj 102 endobj 1346 0 obj << /Length 1531 0 R /Filter /FlateDecode >> stream xÚ3P0C 2SH1ä2òÍÀTr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEA™¥EFáåååþJuM¼/_šÿµÍ÷ÿíåx«ýÿõ¾—ùÛ¦];Ì™¼5ëêj. †.WO.|2 endstream endobj 1531 0 obj 140 endobj 1347 0 obj << /Length 1532 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3#  …C. 22Š'çr9yré{ú*”•¦ê‡ê{¥õœ õÝôÝô]llô½êõósJsóŠªìì¸<]T”]}­2ÿÝŠß6}µìz>‚æ's¶oØpMŒ_¦þÿ.WO.Nw%endstream endobj 1532 0 obj 130 endobj 1348 0 obj << /Length 1533 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3cKS…C. $ff•HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(èIíÿ¯Ìü~òjüÿÿ$¡Â;‘ÅÿÿC—«'…K.òendstream endobj 1533 0 obj 124 endobj 1349 0 obj << /Length 1534 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3ccS…C. $ff•HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº((7‡ÿ?qõ?À ÀÈåêÉê.endstream endobj 1534 0 obj 108 endobj 1350 0 obj << /Length 1535 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3CK3#…C. $fn•HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(ØpþŸpú? 6p04p¹zrD„+endstream endobj 1535 0 obj 110 endobj 1351 0 obj << /Length 1536 0 R /Filter /FlateDecode >> stream xÚ3P0B]CSS…C.°˜L"9—ËÉ“KßÓW¡¤¨4U?¨Rß(­ïà¬`¨ï¦ïìì¦ï`c£ï T¯ïœŸSš›W TegÇå颠Éýþ|Ȭÿ3mÉþ·ÿ·ÿ»Ÿÿwÿ·ß¿Ìû÷ëkAÌ÷÷þýûþý{F.WO.;n:xendstream endobj 1536 0 obj 140 endobj 1352 0 obj << /Length 1537 0 R /Filter /FlateDecode >> stream xÚ3P0B]CSS…C.°˜L"9—ËÉ“KßÓW¡¤¨4U?¨Rß(­ïà¬`¨ï¦ïìì¦ï`c£ï T¯ïœŸSš›W TegÇåé¢`#ÿï¤Ê¿÷»ëîÉî.“{Øžwx;ï‚»»—½Ïû½¾Úÿÿ¿¿­z[6uëÁ¦0ë°µ‡&ä1(0q¹zr´_7®endstream endobj 1537 0 obj 157 endobj 1353 0 obj << /Length 1538 0 R /Filter /FlateDecode >> stream xÚ3P0B]CSs…C.°˜™T"9—ËÉ“KßÓW¡¤¨4U?¨Rß(­ïà¬`¨ï¦ïìì¦ï`c£ï T¯ïœŸSš›W TegÇå颠zG«¡¹å廹8îµUûýzuÕÿ°¯ÿÿÿUûw½þÿïþ¥¿—î{½eí:Õä­YWW$zX1(0q¹zr¨æ?¡endstream endobj 1538 0 obj 159 endobj 1354 0 obj << /Length 1539 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3Cc3#…C. $fn•HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(¨-˜ÿgúà'‹éÿ, \®ž\Eß4¡endstream endobj 1539 0 obj 112 endobj 1355 0 obj << /Length 1540 0 R /Filter /FlateDecode >> stream xÚ3P0CcK3…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAóH»Ÿ@É÷(EÛ‡ìòc£¯ß³û³\ð¿¿¿,Ÿë\õåž/ÿÆíÿZõâ÷þ­ûvMj㉹k¿£¹y…˜ ¸\=¹£7ôendstream endobj 1540 0 obj 162 endobj 1356 0 obj << /Length 1541 0 R /Filter /FlateDecode >> stream xÚ3P0BCScS…C. $bbNÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(Xõ¼°ÿ×~ýßË¿žÿ?Yöúýíÿããë×íû»ÿׯW¯ÿ»þßËÒÿõÿsóö¿^ÿûÇ»õÿ¯Öçí¿ÿUþ׿¸\=¹5öD×endstream endobj 1541 0 obj 165 endobj 1357 0 obj << /Length 1542 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3cS…C.c°˜™!T"9—ËÉ“KßÓW¡¤¨4U?¨Rß(­ïà¬`¨ï¦ïìì¦ï`c£ï T¯ïœŸSš›W TegÇå颠> stream xÚ3P0CSS…C.SÈQɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.Oå‰+ú–þÇêÿ×_»üû­ÌÄe;úU,y¯{+{ËõÌm‰, \®ž\³Û>Lendstream endobj 1543 0 obj 133 endobj 1359 0 obj << /Length 1544 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3sS…C.s°ˆ™!T89—ËÉ“KßÓW¡¤¨4U?\Á\ß(«ïà¬`¨ï¦ïìì¦ï`c£ï T®ïœŸSš›W¬`ngÇå颠<ý? øÁÐÀÁåêÉ‹G%õendstream endobj 1544 0 obj 103 endobj 1360 0 obj << /Length 1545 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3KS…C.K°ˆ™!T89—ËÉ“KßÓW¡¤¨4U?\ÁRß(«ïà¬`¨ï¦ïìì¦ï`c£ï T®ïœŸSš›W¬`igÇå颠gÿ|`dàrõ䃼%1endstream endobj 1545 0 obj 103 endobj 1361 0 obj << /Length 1546 0 R /Filter /FlateDecode >> stream xÚ3P0Cc 3c…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEA9õÿÿÿÿ‚;[¾È‰ïåM‰_"7W}}Éþû—þƒÁÛøÿ[ë®]m3svø~ë֭ä8¸\=¹­ä6endstream endobj 1546 0 obj 146 endobj 1362 0 obj << /Length 1547 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3S…C. $ff•HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(èùø?¬ÿÿõßþÿpý¯Þ=í¨k¾O쨱Ïß~ÿßoð¿ý/ë[êT]ÛÚÚÔÀÁÐÀåêÉù <endstream endobj 1547 0 obj 148 endobj 1363 0 obj << /Length 1548 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3csS…C. $ff•HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(èÙÿ‡ŽËþÿÿ)Ùá=19[ÿ‡Á…ËÕ“ 9]/endstream endobj 1548 0 obj 119 endobj 1364 0 obj << /Length 1549 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3c#3…C. $ff•HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(¨pª-¨µ›ï/¾§}¾ïË/÷æÿÚ÷ëÿíÿ`°õõïø·úoTÛv¬™ð?vÝuÞ2î~°Ä&.WO.Ó3:öendstream endobj 1549 0 obj 150 endobj 1365 0 obj << /Length 1550 0 R /Filter /FlateDecode >> stream xÚ3P0CC3…C. Ì7Sɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.O+Ž€€f_¶•/¿­pL‰\åøEÞÿßßÿ¿¿¡ÎY~“äýä=6Ëy>-rhÝûçÂÿÿõ±k·lü¶Ö™K"€‘A€ËÕ“ âó6±endstream endobj 1550 0 obj 158 endobj 1366 0 obj << /Length 1551 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3Cs…C. $ff •HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(hž+aoâknyyy> ïǽ¶j_¾Ì¿7ÿëßËÿ± \®ž\Ê;âendstream endobj 1551 0 obj 132 endobj 1367 0 obj << /Length 1552 0 R /Filter /FlateDecode >> stream xÚ3P0BS#cS3…C. $dNÎåròäÒ÷ôU()*MÕªÓ÷P0Ñw pV0ÔwÓwvvÓw °±Ñ÷VÐ5ÔwÎÏ)ÍÍ+*²³ãòtQ0“úßÀÁÐÀåêÉœ”"endstream endobj 1552 0 obj 102 endobj 1368 0 obj << /Length 1553 0 R /Filter /FlateDecode >> stream xÚ3P0B]CS#CS…C. $f“HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(Xñÿ‡–úw~"ÖûþýcP`ârõä}Z%Îendstream endobj 1553 0 obj 113 endobj 1369 0 obj << /Length 1554 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3 2UH1ä2@bf†P‰ä\.'O.}O_…’¢ÒTýp J} ´¾S€³‚¡¾›¾³³›¾K€¾7P½¾s~Nin^1P•—§‹‚Âñÿ˜à_tý.WO.œ(-±endstream endobj 1554 0 obj 107 endobj 1370 0 obj << /Length 1555 0 R /Filter /FlateDecode >> stream xÚ3P0CcS…C.cÈQɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.Oµ%ÁÓÿ#ƒ¿ÿ¿¿®]º?±ðI{ìïØuWœ¹˜¸\=¹Â•/þendstream endobj 1555 0 obj 120 endobj 1371 0 obj << /Length 1556 0 R /Filter /FlateDecode >> stream xÚ3P0B]Cs##S…C. $ff•HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(¨ëÿGsØìÿÌÙÿÿÿ÷=í¦µ`apàrõäXJ.Áendstream endobj 1556 0 obj 121 endobj 1372 0 obj << /Length 1557 0 R /Filter /FlateDecode >> stream xÚ3P0Cc#3c…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAmé08Ïyˆùå—¾Oøür¯ÝìËÿÃïÇÿ®K}Û[Ÿýwéß– ×E'Éßz[õpEƒ—«':È<Îendstream endobj 1557 0 obj 147 endobj 1373 0 obj << /Length 1558 0 R /Filter /FlateDecode >> stream xÚ3P0B]C sJ1ä’ 13S¨Dr.—“'—¾§¯BIQiª~8P™¾PZß)ÀYÁPßMßÙÙMß%ÀÆFߨ^ß9?§47¯¨ÊÎŽËÓEAëœ ›Bã…‚¹V%ÎbŸlY¤/_Ê÷÷ýýõÿ®—abBM59¤T4Zjq5ò|UâîhZ$¨tm¿"ûÿÿ×£ëc¯n½™"tµïêj®+šŒ \®ž\± ;‹endstream endobj 1558 0 obj 183 endobj 1374 0 obj << /Length 1559 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3sS…C.s°ˆ™!T89—ËÉ“KßÓW¡¤¨4U?\Á\ß(«ïà¬`¨ï¦ïìì¦ï`c£ï T®ïœŸSš›W¬`ngÇå颠<ý?> stream xÚ3P0BCc S…C. $bbNÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(hß¿ëIûï¥ÿ·{ÿÏÿ²¿öõë·×ÿÍþ[_õïË׿ÿý£ÿWÅïg`ärõäM-1aendstream endobj 1560 0 obj 140 endobj 1376 0 obj << /Length 1561 0 R /Filter /FlateDecode >> stream xÚ3P0C 2SH1ä2òÍÀTr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAóÐ!¾æ–—ï¶8ù>d_roÞÔï×õÿú¯p-ûÿIñ—ùûÿ¿Í~»îÒ†CÖÆ]]‘èÌÅ ÀÄåêÉÈ4«endstream endobj 1561 0 obj 145 endobj 1377 0 obj << /Length 1562 0 R /Filter /FlateDecode >> stream xÚ3P0B]C3cS…C. $ff•HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(è±~¨¨¨¾÷Éj>ÿáÚ}÷ÿ~ÿßïÿÿßþ‡€××ÿÿÛ·ëÿÒÓã¦sŠX›¡ÁÐÀÁåêÉÐg;endstream endobj 1562 0 obj 150 endobj 1378 0 obj << /Length 1563 0 R /Filter /FlateDecode >> stream xÚ3P0Ccs3…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAóH_ór¿¹-ß[¾Ì~¿|ýêû×-0ÿÛ®Ù»?zuöÖmSû÷fIµq1(0q¹zr5°1‘endstream endobj 1563 0 obj 142 endobj 1379 0 obj << /Length 1564 0 R /Filter /FlateDecode >> stream xÚ3P0BCc3…C.c°ˆ‰)X89—ËÉ“KßÓW¡¤¨4U?¨Nß(©ïà¬`¨ï¦ïìì¦ï`c£ï­ k¨ïœŸSš›W TegÇåé¢`ÌÉ9GEnÞÞEê­ü÷}}ÿÿdðƒ¡ƒËÕ“ Î-ôendstream endobj 1564 0 obj 122 endobj 1380 0 obj << /Length 1565 0 R /Filter /FlateDecode >> stream xÚ3P0CCKS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAyú8øûïÛ'튾å¿ßqnà`hàrõä8¿*Þendstream endobj 1565 0 obj 116 endobj 1381 0 obj << /Length 1566 0 R /Filter /FlateDecode >> stream xÚ3P0B]C###3…C. $fj•HÎåròäÒ÷ôU()*MÕªÔ÷Jë;8+ê»é;;»é»ØØè{Õë;çç”ææUÙÙqyº(XY)I­z}âÓþÿppŽYþŸ_<ˆÅ ÀÈåêÉ·j+Þendstream endobj 1566 0 obj 119 endobj 1382 0 obj << /Length 1567 0 R /Filter /FlateDecode >> stream xÚ3P0Cc33…C. Ä7Pɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.OSÖ&¾æ–—ïv õ5ñ/¿únoÕ /nÖ¦/¡QÖ¦‘sY[¿žuýÿV{ÔõYWWdI02p¹zr¹P-ðendstream endobj 1567 0 obj 150 endobj 1383 0 obj << /Length 1568 0 R /Filter /FlateDecode >> stream xÚ3P0CCKSS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEÁXÿ?0“øæôÿÿ¿O‡ß=ÜÀÁÐÀåêÉhP,!endstream endobj 1568 0 obj 115 endobj 1384 0 obj << /Length 1569 0 R /Filter /FlateDecode >> stream xÚ3P0C# S…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAmáÌÿŸþ£ƒŒ \®ž\¿:+Rendstream endobj 1569 0 obj 105 endobj 1385 0 obj << /Length 1570 0 R /Filter /FlateDecode >> stream xÚ3P0BCccS…C. $dOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(XMû[þúSòþK¿ëׯ~oß׿/_ÿþ7oû¿/ëÿ/ù÷ÿÞÔÿ  \®ž\j2Ãendstream endobj 1570 0 obj 137 endobj 1386 0 obj << /Length 1571 0 R /Filter /FlateDecode >> stream xÚ3P0CccS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAmé(xÂ}INîû§P;ùí÷ÿ} ü­z}½eãë¨C‡8¸\=¹9¡1ãendstream endobj 1571 0 obj 128 endobj 1387 0 obj << /Length 1572 0 R /Filter /FlateDecode >> stream xÚ3P0BCc#S…C. $dOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(XHÖÿVQz{ûÛÛûeïw—ßÝ]wwÞýíù·çñ¬ÿÃàÀÂåêÉS‹(èendstream endobj 1572 0 obj 129 endobj 1388 0 obj << /Length 1573 0 R /Filter /FlateDecode >> stream xÚ3P0CcSS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAm‰cÿ׿õñ׿>9þúe=>x¤êo}C—«'óy9xendstream endobj 1573 0 obj 119 endobj 1389 0 obj << /Length 1574 0 R /Filter /FlateDecode >> stream xÚ3P0B]CSSS…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{•ë;çç”ææUÙÙqyº((1â(yyy¹‹â=*ßKµæ÷¦/ûïûÿ—‹‡ù øwÿj¤}fÝýë™Ño ¦ID‹f]]p¨M„Á…ËÕ“ –˜5vendstream endobj 1574 0 obj 157 endobj 1390 0 obj << /Length 1575 0 R /Filter /FlateDecode >> stream xÚ3P0CcCS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAmé(øÓ–Rÿÿ“„£p)ûÿ&.WO.gå,tendstream endobj 1575 0 obj 114 endobj 1391 0 obj << /Length 1576 0 R /Filter /FlateDecode >> stream xÚ3P0CC33K…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEÁBü¿†ýdð¹±þ#ƒ—«'=î'sendstream endobj 1576 0 obj 107 endobj 1392 0 obj << /Length 1577 0 R /Filter /FlateDecode >> stream xÚ3P0BCcSSS…C. $bjNÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(˜²´ÈZ•¼|R¿Dúºç^û×%ÿÿíÿÿw}ô¯·ºë$¼Õ,~ÇíŽæÑn—ÿ÷.Ëþmþû[a×3#ÞFmÍ’`dàrõä›5endstream endobj 1577 0 obj 160 endobj 1393 0 obj << /Length 1578 0 R /Filter /FlateDecode >> stream xÚ3P0B#cSSS…C. $bj NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(X±¶È¨;^þâºørÉ|ß׫ÿo³ÿÿ:øÙþ[Ñ1Ó´_«Y„g7³nüÿ¿~ÿ'Öûÿþ`apàrõäT1:endstream endobj 1578 0 obj 149 endobj 1394 0 obj << /Length 1579 0 R /Filter /FlateDecode >> stream xÚ3P0BCcSS…C. $bj NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(XðÊÿ™ÔþûÛ÷ü²·7ÊÞX—ɘçIoϓ޻»î·Mþÿïÿ_Ý-½Ÿ«Ûº1lmÔV †.WO.F„0Mendstream endobj 1579 0 obj 147 endobj 1395 0 obj << /Length 1580 0 R /Filter /FlateDecode >> stream xÚ3P0CC 3K…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEÁNüÿä÷ÿ±€Ÿ\Ùÿ8¸\=¹ù90endstream endobj 1580 0 obj 108 endobj 1396 0 obj << /Length 1581 0 R /Filter /FlateDecode >> stream xÚ3P0CcS…C. Ä7…Pɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.O;÷ ÿÈ`ÿ¿¿yÛvdO’ ¯]wG\$ØÀÁÐÀåêÉDš1> stream xÚ3P0CS 2QH1ä2…òMÀTr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEÁÎÅHElÿßÿ¯¿ÿ_ÿ_íýÿë¿þç_ÿÿ«þ=ˆÊ2€Ä¯ÿõÑ@FÅ¿ùÿöþÍ ÀÈåêÉÚóGiendstream endobj 1582 0 obj 141 endobj 1398 0 obj << /Length 1583 0 R /Filter /FlateDecode >> stream xÚ3P0Cc3S…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAm‰c÷ÒÓ×íÛõeÿ¥¯×¯Ç˜ï¶M»^ºõëÖ£Ù*ö[ïo½ýýöÛïo¿ýö»vß}οŸ¿?A‰ËÕ“ Ç?Yendstream endobj 1583 0 obj 153 endobj 1399 0 obj << /Length 1584 0 R /Filter /FlateDecode >> stream xÚ3P0BCcc#SS…C. $dbOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(Xq²ðÍQßUâò½EÞßsÿ¯?á\œŽ)IB-¢¬"´¸£žýÿ»îÒÆWßDLy48¸\=¹ÔN*™endstream endobj 1584 0 obj 149 endobj 1400 0 obj << /Length 1585 0 R /Filter /FlateDecode >> stream xÚ3P0BCcSS…C. $dbOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(Xqr÷¨ß›7_éû‚c“ßÇýÿý4p04p¹zrå'-Èendstream endobj 1585 0 obj 122 endobj 1401 0 obj << /Length 1586 0 R /Filter /FlateDecode >> stream xÚ3P0B]CCSS…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{•ë;çç”ææUÙÙqyº(˜6â(yyy‘À{[…»úþ«ïêÿÛÿ1V#"B•eIBzS€WÓ‚®Ž¤-ÎÓ›-ýzÂøõÿ·~½Î-›Ú&.šuuE¢3ƒ—«'SÎ7êendstream endobj 1586 0 obj 169 endobj 1402 0 obj << /Length 1587 0 R /Filter /FlateDecode >> stream xÚ3P0CcsS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAmÁ}öö½ïUW?Ü'¿ýöÿúÚÿ·ÿÿÿwÿ?üÛ[ÿ·¶~½÷_½=ª‡"¾¶®Ñap`árõäùx5xendstream endobj 1587 0 obj 143 endobj 1403 0 obj << /Length 1588 0 R /Filter /FlateDecode >> stream xÚ3P0BCCsS…C. $bj NÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(hèÿ‡‚?}ÜÿçðñÉ~ÿ~€…ÁËÕ“ ý $sendstream endobj 1588 0 obj 114 endobj 1404 0 obj << /Length 1589 0 R /Filter /FlateDecode >> stream xÚ3P0BCccs…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(ØETß¿3!ìï÷úÝ¿ê¯×í4¼ÿ?úò¿íí_WÕ_û¿ü{ü¯ªûÿ=÷ÿß«ýÿ¥ù?&.WO.ë^5øendstream endobj 1589 0 obj 148 endobj 1405 0 obj << /Length 1590 0 R /Filter /FlateDecode >> stream xÚ3P0CS…C.ÈQɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.Oeîÿè`6¯ÿF.WO.€,(Ýendstream endobj 1590 0 obj 103 endobj 1406 0 obj << /Length 1591 0 R /Filter /FlateDecode >> stream xÚ3P0CsS…C.s0ÈQɹ\Nž\úž¾ %E¥©úá æú@9}§gC}7}gg7}—}o]C}çüœÒܼbs;;.Oåéÿ‘À?&.WO.Ü&"Óendstream endobj 1591 0 obj 99 endobj 1407 0 obj << /Length 1592 0 R /Filter /FlateDecode >> stream xÚ3P0B]CCKs…C. $dnOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{•ë;çç”ææUÙÙqyº(X¼ý]_~ûßý»ÿþþûÿï÷ÿ@p}ý¯»¾ì¿ZúzÕëK_01(p¹zr\3mendstream endobj 1592 0 obj 135 endobj 1408 0 obj << /Length 1593 0 R /Filter /FlateDecode >> stream xÚ3P0BCccSs…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(ØÄÿ }»ùþ÷ô>´›}ù¿ïÿøßõ`‰ºéÿ·~Ýz+"{’Lx}ìºC‰, \®ž\ÈK6endstream endobj 1593 0 obj 146 endobj 1409 0 obj << /Length 1594 0 R /Filter /FlateDecode >> stream xÚ3P0C#CsC…C. Ä7‡Pɹ\Nž\úž¾ %E¥©úá@uú@I}§gC}7}gg7}—}o]C}çüœÒܼb *;;.OÖX}¯ý¡Wkõ_Vý­úÿ5þ?ü~ÿ¿þ{ýÛÿù÷ËïþÝŸÏ ÀÈåêÉy­.òendstream endobj 1594 0 obj 130 endobj 1410 0 obj << /Length 1595 0 R /Filter /FlateDecode >> stream xÚ3P0BCccsC…C. $djOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(XusÈ(¼¼|W°¾EzÉß½µßŸu>Ⱦ|ùÂ5ÝWªJ_^_þßûþÿÿÿ¿þßû·î{tØ5©:ÕÑos[> stream xÚ3P0CCcS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEÁ.þ? L8\?_ÿÿ.WO.–N#ðendstream endobj 1596 0 obj 107 endobj 1412 0 obj << /Length 1597 0 R /Filter /FlateDecode >> stream xÚ3P0CcSS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEÁª›s¶ŠÜ®ª‡[^ÚÚ½¬ß¿ô?ü}·ÿÛú[Û¶­ñ–~›¸Æ`#Pì ƒ—«'+3lendstream endobj 1597 0 obj 139 endobj 1413 0 obj << /Length 1598 0 R /Filter /FlateDecode >> stream xÚ3P0BCccSSS…C. $dbOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(˜rsX8^^î¯ômB¾ï¥/_÷Úÿ÷Üÿ~ßÕÿŸ]uëöÚµ¦Y‡­uæ’`dàrõäâ0/endstream endobj 1598 0 obj 144 endobj 1414 0 obj << /Length 1599 0 R /Filter /FlateDecode >> stream xÚ3P0BCcccSS…C. $dbOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(XurXÌ{yQ|ï¥ÚÒüøúK?þÁÛ¹Þëßïz¿+:šW§l}–DÀ¡†.WO.} .,endstream endobj 1599 0 obj 141 endobj 1415 0 obj << /Length 1600 0 R /Filter /FlateDecode >> stream xÚ3P0CCcS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEÁ.þ?øÁÐÀÁåêÉ2^#Êendstream endobj 1600 0 obj 101 endobj 1416 0 obj << /Length 1601 0 R /Filter /FlateDecode >> stream xÚ3P0BCcc3SS…C. $dbOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(¨pù4û¨­°»š0Íõãº_uÿßÿ¿ýýý†:gÉM,ümÖŸì¨T³þoWÿÿÚ-Ýx›uÅ`a+ƒ#—«')45^endstream endobj 1601 0 obj 158 endobj 1417 0 obj << /Length 1602 0 R /Filter /FlateDecode >> stream xÚ3P0BCccS…C. $dbOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(عýGûÿ]«û›{’Lx}ìº+ά Œ\®ž\<°,_endstream endobj 1602 0 obj 121 endobj 1418 0 obj << /Length 1603 0 R /Filter /FlateDecode >> stream xÚ3P0BCc#S…C. $dbOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(ØÅÿ‡÷ïßWT*žpŽ¿_û]lƒ—«'í}()endstream endobj 1603 0 obj 118 endobj 1419 0 obj << /Length 1604 0 R /Filter /FlateDecode >> stream xÚ3P0BCccSSS…C. $dbOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(˜rrX8^^Óý®‰÷åKó¿¶uö¯)\ÈÞrùßëÿKõV;»mjßÕÕa 5p04p¹zr9J1endstream endobj 1604 0 obj 148 endobj 1420 0 obj << /Length 1605 0 R /Filter /FlateDecode >> stream xÚ3P0BcCKSS…C. $bjNÎåròäÒ÷ôU()*MÕªÓ÷Jê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(¨X8\¿æ^úfóÔ?KÒX¸\=¹Öû)}endstream endobj 1605 0 obj 115 endobj 1421 0 obj << /Length 1606 0 R /Filter /FlateDecode >> stream xÚ3P0BCccS…C. $dOÎåròäÒ÷ôU()*MÕ*Ô÷Êê;8+ê»é;;»é»ØØè{+èê;çç”ææUÙÙqyº(˜¯¸¿e}tôÒ}/ó·M}]uëÞÆ[ûÖVÕÍ_>I>ìkiUø½©ß—Ö¾ŒÏ›î¹‘A€ËÕ“ H×1endstream endobj 1606 0 obj 146 endobj 1422 0 obj << /Length 1607 0 R /Filter /FlateDecode >> stream xÚ3P0CccS…C. Är@Tr.—“'—¾§¯BIQiª~8P¾PRß)ÀYÁPßMßÙÙMß%ÀÆFß[A×Pß9?§47¯¨ÊÎŽËÓEAmÁõÿŸ<íÿƒÀ©øÿÿ'y‚Ù?Ù6Çÿg`ärõäfÒ+$endstream endobj 1607 0 obj 120 endobj 1423 0 obj << /Length 1608 0 R /Filter /FlateDecode >> stream xÚ32Q0€ÃC.¶endstream endobj 1608 0 obj 16 endobj 1424 0 obj << /Length 1609 0 R /Filter /FlateDecode >> stream xÚ32U0€ÃC.·endstream endobj 1609 0 obj 16 endobj 1425 0 obj << /Length 1610 0 R /Filter /FlateDecode >> stream xÚ32S0€ÃC."¸endstream endobj 1610 0 obj 16 endobj 1426 0 obj << /Length 1611 0 R /Filter /FlateDecode >> stream xÚ32W0€ÃC.1¹endstream endobj 1611 0 obj 16 endobj 1427 0 obj << /Length 1612 0 R /Filter /FlateDecode >> stream xÚ3²P0€ÃC.@ºendstream endobj 1612 0 obj 16 endobj 1428 0 obj << /Length 1613 0 R /Filter /FlateDecode >> stream xÚ3²T0€ÃC.O»endstream endobj 1613 0 obj 16 endobj 1429 0 obj << /Length 1614 0 R /Filter /FlateDecode >> stream xÚ36P@ÀC.سendstream endobj 1614 0 obj 15 endobj 1430 0 obj << /Length 1615 0 R /Filter /FlateDecode >> stream xÚ36T0€ÃC.ç´endstream endobj 1615 0 obj 16 endobj 1431 0 obj << /Length 1616 0 R /Filter /FlateDecode >> stream xÚ36R0€ÃC.öµendstream endobj 1616 0 obj 16 endobj 1432 0 obj << /Length 1617 0 R /Filter /FlateDecode >> stream xÚ36V0€ÃC.¶endstream endobj 1617 0 obj 16 endobj 1433 0 obj << /Length 1618 0 R /Filter /FlateDecode >> stream xÚ36Q0€ÃC.·endstream endobj 1618 0 obj 16 endobj 1434 0 obj << /Length 1619 0 R /Filter /FlateDecode >> stream xÚ36U0€ÃC.#¸endstream endobj 1619 0 obj 16 endobj 1435 0 obj << /Length 1620 0 R /Filter /FlateDecode >> stream xÚ36S0€ÃC.2¹endstream endobj 1620 0 obj 16 endobj 1436 0 obj << /Length 1621 0 R /Filter /FlateDecode >> stream xÚ36W0€ÃC.Aºendstream endobj 1621 0 obj 16 endobj 1437 0 obj << /Length 1622 0 R /Filter /FlateDecode >> stream xÚ3¶P0€ÃC.P»endstream endobj 1622 0 obj 16 endobj 1438 0 obj << /Length 1623 0 R /Filter /FlateDecode >> stream xÚ3¶T0€ÃC._¼endstream endobj 1623 0 obj 16 endobj 1439 0 obj << /Length 1624 0 R /Filter /FlateDecode >> stream xÚ31T0€ÃC.÷µendstream endobj 1624 0 obj 16 endobj 1440 0 obj << /Length 1625 0 R /Filter /FlateDecode >> stream xÚ31R0€ÃC.¶endstream endobj 1625 0 obj 16 endobj 1441 0 obj << /Length 1626 0 R /Filter /FlateDecode >> stream xÚ31V0€ÃC.·endstream endobj 1626 0 obj 16 endobj 1442 0 obj << /Length 1627 0 R /Filter /FlateDecode >> stream xÚ31U0€ÃC.3¹endstream endobj 1627 0 obj 16 endobj 1443 0 obj << /Length 1628 0 R /Filter /FlateDecode >> stream xÚ31S0€ÃC.Bºendstream endobj 1628 0 obj 16 endobj 1444 0 obj << /Length 1629 0 R /Filter /FlateDecode >> stream xÚ31W0€ÃC.Q»endstream endobj 1629 0 obj 16 endobj 1445 0 obj << /Length 1630 0 R /Filter /FlateDecode >> stream xÚ3±P0€ÃC.`¼endstream endobj 1630 0 obj 16 endobj 1446 0 obj << /Length 1631 0 R /Filter /FlateDecode >> stream xÚ3±T0€ÃC.o½endstream endobj 1631 0 obj 16 endobj 1447 0 obj << /Length 1632 0 R /Filter /FlateDecode >> stream xÚ35P@ÀC.øµendstream endobj 1632 0 obj 15 endobj 1448 0 obj << /Length 1633 0 R /Filter /FlateDecode >> stream xÚ35T0€ÃC.¶endstream endobj 1633 0 obj 16 endobj 1449 0 obj << /Length 1634 0 R /Filter /FlateDecode >> stream xÚ35R0€ÃC.·endstream endobj 1634 0 obj 16 endobj 1450 0 obj << /Length 1635 0 R /Filter /FlateDecode >> stream xÚ35Q0€ÃC.4¹endstream endobj 1635 0 obj 16 endobj 1451 0 obj << /Length 1636 0 R /Filter /FlateDecode >> stream xÚ35S0€ÃC.R»endstream endobj 1636 0 obj 16 endobj 1452 0 obj << /Length 1637 0 R /Filter /FlateDecode >> stream xÚ35W0€ÃC.a¼endstream endobj 1637 0 obj 16 endobj 1453 0 obj << /Length 1638 0 R /Filter /FlateDecode >> stream xÚ3µP0€ÃC.p½endstream endobj 1638 0 obj 16 endobj 1454 0 obj << /Length 1639 0 R /Filter /FlateDecode >> stream xÚ3µT0€ÃC.¾endstream endobj 1639 0 obj 16 endobj 1455 0 obj << /Length 1640 0 R /Filter /FlateDecode >> stream xÚ33P@ÀC.¶endstream endobj 1640 0 obj 15 endobj 1456 0 obj << /Length 1641 0 R /Filter /FlateDecode >> stream xÚ33V0€ÃC.5¹endstream endobj 1641 0 obj 16 endobj 1457 0 obj << /Length 1642 0 R /Filter /FlateDecode >> stream xÚ33Q0€ÃC.Dºendstream endobj 1642 0 obj 16 endobj 1458 0 obj << /Length 1643 0 R /Filter /FlateDecode >> stream xÚ33U0€ÃC.S»endstream endobj 1643 0 obj 16 endobj 1459 0 obj << /Length 1644 0 R /Filter /FlateDecode >> stream xÚ3³P0€ÃC.€¾endstream endobj 1644 0 obj 16 endobj 1460 0 obj << /Length 1645 0 R /Filter /FlateDecode >> stream xÚ37T0€ÃC.'¸endstream endobj 1645 0 obj 16 endobj 1461 0 obj << /Length 1646 0 R /Filter /FlateDecode >> stream xÚ37R0€ÃC.6¹endstream endobj 1646 0 obj 16 endobj 1462 0 obj << /Length 1647 0 R /Filter /FlateDecode >> stream xÚ37V0€ÃC.Eºendstream endobj 1647 0 obj 16 endobj 1463 0 obj << /Length 1648 0 R /Filter /FlateDecode >> stream xÚ37S0€ÃC.r½endstream endobj 1648 0 obj 16 endobj 1464 0 obj << /Length 1649 0 R /Filter /FlateDecode >> stream xÚ37W0€ÃC.¾endstream endobj 1649 0 obj 16 endobj 1465 0 obj << /Length 1650 0 R /Filter /FlateDecode >> stream xÚ3·T0€ÃC.ŸÀendstream endobj 1650 0 obj 16 endobj 1466 0 obj << /Length 1651 0 R /Filter /FlateDecode >> stream xÚ³0Q0€ÃC.d¼endstream endobj 1651 0 obj 16 endobj 1467 0 obj << /Length 1652 0 R /Filter /FlateDecode >> stream xÚ³0U0€ÃC.s½endstream endobj 1652 0 obj 16 endobj 1468 0 obj << /Length 1653 0 R /Filter /FlateDecode >> stream xÚ³°T0€ÃC.¯Áendstream endobj 1653 0 obj 16 endobj 1469 0 obj << /Length 1654 0 R /Filter /FlateDecode >> stream xÚ³4P@ÀC.8¹endstream endobj 1654 0 obj 15 endobj 1470 0 obj << /Length 1655 0 R /Filter /FlateDecode >> stream xÚ³4R0€ÃC.V»endstream endobj 1655 0 obj 16 endobj 1471 0 obj << /Length 1656 0 R /Filter /FlateDecode >> stream xÚ³4U0€ÃC.ƒ¾endstream endobj 1656 0 obj 16 endobj 1472 0 obj << /Length 1657 0 R /Filter /FlateDecode >> stream xÚ³4W0€ÃC.¡Àendstream endobj 1657 0 obj 16 endobj 1282 0 obj << /XObject << /Im19 1284 0 R >> /ProcSet [ /PDF ] >> endobj 1277 0 obj << /D [1279 0 R /XYZ 72 786.278 null] >> endobj 1265 0 obj << /D [1279 0 R /XYZ 120.194 102.296 null] >> endobj 1278 0 obj << /Font << /F15 393 0 R /F27 394 0 R >> /XObject << /Fm19 1266 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1661 0 obj << /Length 1662 0 R /Filter /FlateDecode >> stream xÚÕZKoÜȾû ¿@·P€‡Ë~ð mlÊ®½‹X›²A {4Œ8ä,’µ¿>U]ÕMrDYNN6ˆÝÍê«ëñUÕˆ³þÄY*ÏÒ, ešm¯ÄýݹÖ0F”:Va¬±÷áÆQnTfIü½HB•(Z÷ûëWß]*u&¢0ò³ë¥¹.ÿüáüß×{õöÚO‹CÇ/ŸÉôlq™®,nš²*Üá»KÏ”†³i¦úóùFå:x3vUs{¾‘JUS UQW¿CÕ646ì 6T°/ºòá\fAÑñHÕãSÛs™{³Å—wøÏ”ôb×vDÙ™cgzÓàËÁ/®‚vGϲ ^“ßÌ¡íÏ3„ø!À}:ûFàmäö ®`¶R"ø¾º¥Æ[úð’¹=޽)_/ÌQ r"_dYæ©c™[³76€9íÊÊZ„2NyŠXY3•Êø}Ñ”¸T´Àèî¡ê ­\ 4L[J·¥XßRHf©[3ZÙ3Séή¬Âüÿ‹1¥)©] |WIÊ|qW½¹G)1]Q#-ˆAu0v‰ÜÞPãCm»Òt| ^åWñÞ}@I,B„‘H‰±Ý¼n+§*°j„“ÂS3°‘$•›D…ÌÈ×olŽ—m3\t]ñ¸&usƒ£µ®÷$::(ˆGÐxàaEÖ¬PÎí“Dž°…½ êÿUÐݸÆŽd X»oI…t0XrZ‡ÜÎÙ™®#±mÕ¯Ù†¿a.Ì—?½¿þùïWÿ¸¸~»òÑ LPN,«fMpXù‚àJn•x•Ý$"Þá‡dy°m™[ ÊßÐÓ¨eJfÅ·g ÿPÕ5Ýc²€ÉJÓo»Š‡ÊAMŠaO ‚‹ÞÐ ›D:¥ >=«“t"æOÛèFÚn mv½3Bû orçè-O*j8ÎkaÝŒ‘ÛI`­OÅv¨WŽ+u¦‘â#4íÇHqÿö\9n*ÂD»ãN Žh)IžÙEå0EÍuÞYŹ•sP{’öšÆ^¦¡sãE:¦©‹îÖÞEœuAŠ/*¼ä8emà òÎ$= Yцù‡âî|Z{ìÝÔ/ßÞ‚¹­©³cÙêí*‰‰¸£ù´±-.¹8kcy‘“|JvèYJ=KLÊ™Db¾é¯6‹éja¸išÚç̶ú5Ú”¼ÙÕÀÓ™þ¡«†ÁðvÕ°§ÖÁ œÝX¯þþ~h”U¿Ѳ#EÐ0ʦ¼«¬ãƒþÂÓS,<ãœ`eW„#A:¢|ž‚ä3!Áõ¯Ý€¯‡•õc¢”ø¢å7*à~åÜ¢€ëÃhΪ’€+ÚxKXo/À"$x1»BèadÉ3è’¡ALn¨ã¹E‹¡†dá.˜üàœ`¤’·,ºº"é‘Ò‰0ÏæÍܦdzÖ0‚R’(»zMRd^O(Hí‰îçrýg(d˜¦é·à /.ß½AÜ÷T(t<ƒF :@ àëiô‡£hðYÐÃ#ðtQØbˆeëÑ3¾ºD-õÆ)ÞP¼-µƬ`±Ó@hì“,´ŒQà™ËƒÕ-¦ƒb›=5´\ÚÁ¶{zÞŒš-4'°?ãaE®Ã$v x,ºÞ|,v‡µˆB+«lŽ…ÍÍÝY”{Ëg|ØW6U·_¨1ébžœÉ37 Ø’cð$òdÁý` ÒiÆ> Eç½­G²ÚiòL(,ÒPë쌅cXœó°ß¾8é| À'Z㇡£Ì<;ŒéœòÙ¯z¹-lx”¢¡²6ŸÑ´ìÍ€Q¶ÀM þO}A‹¹y81l=~ƒ„ε.²#¹ËŽLŽì¶" Êßoâãš–«(›% ßÿòã/C‰o?Muýx4âótš¦J€ƒˆÏ³OÍ“æhOKví8@‡XëÑM1>—ÙDw½ÌIa+h^Õ€¨8Ó’õ¨=4N%E“VþV²R.…‰²'ÁÏ6ÉØ¶]uhìd{•§¸=>PÃã8øÙZW›gÁ_÷`fDâýÜ7¬ÀÈ6 ^£YÁ‡ñ¦kÇ¡jLoGDð*L? ¯e ¬mHâ……ÆoŸïŠc d°Æ •$ŒÐ61„CoÊgZb>­"Ö†w¤”€J4ߎ•.Ô€Q4«Ø™š{©ºÙÄ\Kâ y~ÞÝ[yß·Íö ¼},5ª“JWs½)þ”s½© Ú£•„šz[uÜS`ê¶$ ¬€€Làô…"™jZ*OÈÊ™×çœùÊuÌ™—˜ 1:Y/Ä@(ì½ï—XÖ×´(¦Ä´oEp™>Ak‡—õä•‘ª4»b¬GbhÔy—?ùµø+ˆ@zÊ@â8†[X?^o&h•QA-$…8™Ù4>&φ=Jˉ 3ÓŽ6C›â—RÍqš{ìÌ}ÕŽ½M… ÷°}rbš®œ6ÙuíÞ -¸œôÔ‘ö¢áÒ. Ð2Zq·ZŠ ¯G<R8Ê¢ï«[V [x.ËÎ&õ°ƒðÒÒƒ½rUR÷ä»´ÈçU¤èÛƒñnD2‚Z§“BéªQI“0…èðë7*÷‡˜¦X³)QåbAÍQ+Ø;Zzâ>[pŸ²IÆÆ}Õ #êpeŠ)R¬Oÿ6VÉ›ôZ¶˜ë̹}üÒÔÕʈ9¡k»ê¶Be#óBÇž ^WRî ‚ÄTÛ0¦¢ :t±ˆZ/ž†ÐÑ |ŒÁð Ðcæ¶Á¬ŽYáƒgAøO´ ôïVö1§g1·%ÕîiÝ¢±õè½9‚iÝV”òO€®¡TS5ð³§çÏãˆs˜1ÎÖP ÐföqP°Ð*> ì];ªeRp´#}MšöZ°áü1”z[þNõÌÔX7Ê¿ AB¤”‘ŽÕ©ÓÚÜÜÕóT9ý~Q*×Ê®$ç¹±1 ¢ÀøÚ-%&¶±5Ëo÷áVyp‰Z o²Ø_ªiµ~(:v·hƒ QlÁ;OW!¦Š$âéѧ_GH¾Å! ÿKÊ~ŠY55³™òŸ‘K² 6'›0ýtDx˜Ðg–_„‘` þ-Ïì''ÖÛxÿsi«¼É·‚c?€à½1Ç~­ø«yçx@.¨P¹’º‚˜Æ¦®²˜=48a•iŸ°š¿µ2­Ð›ŒÆÕæˆÂÕR5Cª˜·ÐS‚Ü.äâDgz€ËçŸß‡?  朔æú+å/›¾ê]ZÝ nMc:ÖcìÖǽKQÔ£û•Rëê Eyä ñ#àØ{ö“6qAY">ÅQoÌéݪLËôç…»ÃQ|wwæZ?Ð}.îÉÝ'ˆÝé’°T®Ÿ—ç×Z/S‚ûU4U¾~GW€õÿô%¿Ñ§~A5éͱmrE˜£×~ÿ‘‹P'.CW¶ãMm^ªnǾø[LuþÝ#Ç&¹û™C´¨Í¹£¡´çš~Gí<¹p…ÉŽm@¶D´t‘ó´†5iåJªz+Ô¬¤ Î×`¯¡²ª"¢{Óh¥Ã#ÅðõìHéV­¹àëò~Øš@ œÎb­Ø~'¾GÍkO‚).…ô78«8`ç²>ŒÝ’¼5y [Ñ"ÑM?KNá˜/óõÛ¢v\ݎ󨢜Raêbø—Õ_(j_Qq ðøÙ\IôbªDJ*‘ÌTdUÕsqº<%ågTð¿Ò*&…endstream endobj 1662 0 obj 3495 endobj 1660 0 obj << /Type /Page /Contents 1661 0 R /Resources 1659 0 R /MediaBox [0 0 595.273 841.887] /Parent 1664 0 R /Annots [ 1663 0 R ] >> endobj 1663 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [482.362 133.989 496.302 144.898] /Subtype /Link /A << /S /GoTo /D (subsection.7.3) >> >> endobj 1658 0 obj << /D [1660 0 R /XYZ 72 786.278 null] >> endobj 1659 0 obj << /Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1668 0 obj << /Length 1669 0 R /Filter /FlateDecode >> stream xÚÕZKä¶¾;‡ü…/ÖÛ²HêÅ\;ökÇv’C‰3-¬ZjKjÏŽ‘ŸzQnÍά“Ëb°Û|É"YõÕƒRWü©«L_eyê,¿*Ÿ¨+þ{{åKßBSƉ “kÏî<åÎ$až&ÏÑ«44©áy¿¼ùäóׯ\©(´‘½º¹#š›ê_Á¯ÿ}óÍ'_ßLÃ’0N’ç¹A²x1¹Î6&ݵãM_´Ã]×p¡Ï_«dA—Å2 ÿézÇ&øâzgŒÅØ×ï°ã¾±¤‚‡ºi¸t{½Óyà¸RvmYŒ®…¨Ç=÷{!z}› k¯µ Æï–³w<äØCAgAu*Ý<˜¾Ú Ÿ;…`‰ÛŸ"·2“ÄÁè÷XŒ5¬@mÝþ&²>Êk`x_ôE9º~¯w‰RÁ›‘;ëÁSûÒtÔZœÑ:ÚU#´iX²–% þ¹“Íb-Wèø× n0ZmmhŠy•ÄCëù×½ƒ3®\žË ˆºµaªâ@2qã†Dê¦UHŒd[bÄ·K 7 à ‹Ÿ¤Ö#jôM ¹÷z‘Ø>õEã¾÷ÏÈÁÇ0ÇýãP—°«KIˆÁ|«|–„´ö†t?NøcqüÀ’•¨ß{îf¸ÀÒ¡èßÊ¡ïkL ë™@Àž´ë?)÷HÌ\~ÊCº~înº{êÊ£@$@x_JÀr¼Ãd ¸6”¹§rd7k1“€#,1l³ÌÊfQ­ç9ö5›O® ñ žË㑬¶ã&µ5 ®Ù¸¥„âz0ËÝ·¾›d K/,eB;_Hylƒ¿"Ã!7\EN’ÖN¢¡þÍíjÐ#_”˜=èTL]cÁ¥Z¦;ön˜qh&GÎ83õ}ˆÍy„ §A=·àO´L\ÊôÅ0¾Â!Fè÷ã Sò=ï6œ¾ÍXåÓY~ÊÕÞÝûÂeùXe$PÆþT‚.;nEˆ¨Hü5‘>¬TFY(’L>ãßßüíïoþñÅÍ׺“fpøÞ>?ì»ÁñxR`AûÇùS&ÆëÛñæñèÔWxܳ«0×ÖSÃ]Í90×àƒ¯¡p)&gQÌýÍ>ü-ÚŽ5Ó˜”nõHrÄ$"a²‚ƒ˜B\nN«,ŒµyÙáéÐZ¿½Ýâ¶p9VŒ<({çÝè|¡»àÒ€;€rÉuLèÕiܨŸÿÒ1À=Ò¾6"€<Ìg‰ö8Ò,«q¤‚º`—Dükì¡æÓÿ¿eÑêy,‰üBèÞÕû-غF«82KÔÄQƒüö÷§ƒ×?˜ÕuÀ*yfG4ˆQ”¹ µ%§[±ïí•/}˶cuÞv€J'çs*?mœžžÑáÜ ¦9ì"«åPéG`PwÊî´é´ŸTØT“"ž$œé¹á-i©;b!FÀ¿å^2L)à}‡Üx@t9M&ZÄ-Pœå¸¶¸W$×4ÜãÞ‰"—£ä:þ%ç›è/œgìV<Üg5^_çqÐ-“ß¹±o˜Êr¼P:Ï_@KU> áÆ&¿D„Š}6Ìñ¹nËxcæ%H°‚ÿ-HIý/I¦©¼² ·:8s^°‰(ÌZg‹»]\­‰ […Øçä’­‰L˜Fñ2Ô¨[š9¹ÁOÆG+˜»t^`·+¬æYð딾 6æ,€ŸÇˆÒä&˜¯1#£‰t ô“9¸^¹¡ìë[b³8mâYø·.Ieq˜Çù ®;Mæ)$qÎV¼É:qÖ¡‘ÃNVE þÚE’VÃ&q%ö{㼓{@:ske7`h£ýbiÞ²'²žˆIÌJÓµ–ÑâD> @”+Nu4 -š¡c’Ö¹Š6­'pÞÀãN5ýPáßùa«´pÍV ¡sï‘q-Y"ÛpG©Ê|ÎW-Í L¸òѰŸìâ*ÁÕ#3pݵմÜÚŸš¬€×¥5øì ŸŸê|nbÊ ìBìsHò}Yn•¥ öcHs‹Òý|ìθlÀ\ª\Í®s–iŸ‹²™äGúšó#ØBZE½r™Ø÷èŸ#(̲à3µ•{ǽÙl&Ǭ1öé”/ÞDx$“ò gæ}ïÕNQÛ"™Æ6xswFÒrì.1„ÏKBoÅÜ;q± <çöâ(æ±Ð²–òyF>“¹VG³{gO/ÏÞ¦ôüb¸¡a¨ï[¨í(¤ö_côk›¦C®ˆ^<Š ßMO6ïe¬¨÷²"8')+Îm™çliöL‘C¾¦+ä²TòÑçL´L–ñûÜyxì®>8.Ü¿êL¼yèìÝ|7¨ìàp&Á?M˜ÂSÖ2Rrjbhk·œ•¬N–MV'yÇ>I$ÉAR“yt)ÞÆX/­X<“VÌɰ+Ïägê‡}Ì#>ü6–*~i@âc߉P÷cÍ2V2SùK9(zOæÆË¬hq,ú‘s“âMÄùœ|ô©/h[Í<|Æ—üÁ ÒHìå¸KS´»œßH$ÇÉ13tÖò[ñë.M™Dó”«gßËKáw/’à¸kºžÅÖï\3p™½~(ˆyÎf±,.|–‹,åÁ¡ ÷›+Ã|·"³­Lž•›2ÿ4´ÝŠË­ åµpTM}ûÔ«f2‡ä1 îĺe%Á­µƒï’Mr’(%ŒUqz‰RÆÛõ£ö:I1N‰ÄUrt¤>ITÔ°j/¯ŠœHÆÖóç0ìDz@Éy÷6š‰9…‘Í9zBZ¦7²é+ÚÜG­eñ?äl”Ì|ÍÌ'>‘…_N3XO9_ŠÆ®µ»»Û¸ ¬yšù[”×~ËùÛž99ž¨ >Ê«ï¤å‰|d%a”d°÷|gk~OFò2!iÂÿ1y…õÐÚl7–È}<_‚²®aD$ƒÞPð·!Ôsh–s@IÏ<ò6ÞËûÓ˜MoL‰÷ehêÁ0™Á0Û/1Xâýc?ôRÜ.pL(~YY©–ýq4#g°e¨m+û¥O§°˜&^ÇÙ™1Fþ”…¨àon2yüØðŒòëj•‡ã{B‹U°òs£¿rÐ×ÙÀö{WT‚A 0*·«xxð/~@WWþ…™¾ƒ1Úß  $lê9tî„fºÜdz¼&Îî?øì°WZ\önŽ´ µâHZ®wJ阒R0#½ÿdI ð‘ßÚàG|ý{ïFÉë~w„dqðúÚÒgIÈ/|âq*ÂÄ@˜X>€—oŠ™SäØ?ÑþÕ)Q³¥ÁÊüÕT‚[oÈ8B»1çÀƒ9`K1òÌ_Nüm04Ú; GkæÌ_Fîðž–¯q瀲 !ôN°ñu±ø@?¢X¡±zÉf_"™S0×»ÖI¡1ý›UÂ-².·’ÎCc×W®Gµ2™¨t®(9^XÎxéú§øÐyIåÙ,~ÏGŠò%‰ÿÞÓçG‹O,9=`-w¢‰v2ÕZ4ñ2)4 nž„:ÑÏ¥m´Vb.}âfSc¬¾xT6:Ôú=‰¡ÿÃo,> endobj 1670 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [121.151 544.648 140.545 555.557] /Subtype /Link /A << /S /GoTo /D (subsection.5.15) >> >> endobj 1671 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [504.329 237.7 518.269 248.609] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 1672 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [450.459 147.851 455.913 157.548] /Subtype /Link /A << /S /GoTo /D (figure.7) >> >> endobj 1673 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [451.036 134.302 464.975 143.999] /Subtype /Link /A << /S /GoTo /D (subsection.5.7) >> >> endobj 1665 0 obj << /D [1667 0 R /XYZ 72 786.278 null] >> endobj 345 0 obj << /D [1667 0 R /XYZ 72 182.393 null] >> endobj 1666 0 obj << /Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F37 380 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1677 0 obj << /Length 1678 0 R /Filter /FlateDecode >> stream xÚ•UÉnÛ0½ç+t¤€Šw±·©n§úÖ-1•Ù2$9Aúõ!iÇvÜ…³ðqö¡XVÂÇ2Ã3SiÊM•Õë+–Åï>ÛsŸ@‘R ª$J¯ )4Õ¥Ê ¡h¥âß-¯®Le¬¤¶´Ùò.`—Í7²l}^H©I·ÉyEf?n\E–¨xÚæ7$X$›]ÄLó¸«çÝè§xÒ}O\ŸÌÑVE|Ý}/™ôÍÁq¼ÅùÜ«!wÄfá$ðnïi^˜Š‘) !ÚØ sþcù1+˜¦Vh X42}DÃ.f™¢2 5¤ñS=v«\TÍ­ŸkSü¨”â¡dÕ‹|B·ÐyèV˜GÁ UÖœô*N¯ô¥ú¢úðkï6mBKQÊŽL܈ i2H³Òì8Í›Å:µn¼ªIàǶ«Ñ}]tÉ·‹âÔú¾/ܪÑv¸ž>!6Ø… šµ©û]ãÒ¥ø*C¥Þ»œYKø2®Br ¼:)^·9›½i{ÐÀTÔó0>]ðg%Õú¿»N#@€%F-3ÄÄ$¼Ú ^[nŠ4Täc\’Ïþ!‡åó¸êFþÅZòµûí‹[ˇ‡›æX°°pZä6l%Í-¾<Ñwyòt¼„i’Á)˜fZGb€þêýòùo°ßCm!PÉ_û{pΨ›ñÏ߆玸à”sõ÷ÿÓƒ³vendstream endobj 1678 0 obj 745 endobj 1676 0 obj << /Type /Page /Contents 1677 0 R /Resources 1675 0 R /MediaBox [0 0 595.273 841.887] /Parent 1664 0 R >> endobj 1674 0 obj << /D [1676 0 R /XYZ 72 786.278 null] >> endobj 349 0 obj << /D [1676 0 R /XYZ 72 664.978 null] >> endobj 1675 0 obj << /Font << /F15 393 0 R /F27 394 0 R /F37 380 0 R /F30 512 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1685 0 obj << /Length 1686 0 R /Filter /FlateDecode >> stream xÚ½]oã¸ñ=¿ÂèË)ÀZ'~H¢î¥Ø½vÑí¡(® pÝ>(‘%Ÿ$_6‡þøÎeÙq6¸¶(Xäp8œï2j•ÁŸZ•zUº"Õ¥[mö7jÅ«8ú`Œis“ægo ®#æZÛ´ÊŠ×ðmž™]­•«Òzu…úڤƕ+ù¼ä/žtò¢bͬ~Œœâ ?ϸøöã^g«?ô7?Þ¬~¼Ah‹¬Zkð <Ógñú«ŒÎŒT:-tÉG¼®€³²´TÅoPÀ%_'(•ÿf¨Yk]ØÔñ5_Y'Þvõ°®5©Î‹¯Ëú1<»¶¥KÜwQð\ƒ(ùBá–•õ7žç©«ô[úþß;\‘–_?öû]=Ô›É,ýge¬ûŽ«d;ô{†nûîVWÉijïûýá;þÒß®u™4~èxáoý¾îÒÛµsYr·}ÖÃÐßj—0Æ&£Ÿx@Þ«'Û£“§]`x:!Ø]Ã3vØÓá!tuË`C…Ž×ëø=†ôAÙÁÎÞõÃìsn? µ¿|«Õß4YêÜÉtŽæß^ÄÝ®•üt ‡“ Êü”!Gdä…9±1àlT SírЛ¤.œ0tØ¡Žq„a†z›xºíÊp6hü Û9ùúÁd^ã§:´rhÍ©¨?NgÔ`¡}L»=NMr#™©gL¶ù•¤uæqF«äš #‡> µ” £3<œ `"Û‹}×ðÞŒNÃdÓQþ‚I̘˜÷l–|š¼!§€ÁηÅíà`ÀÀD9ÅPÒR’tÂŒ}bhÝ4Wó1#{B+t²'¬ƒ'ŠKLϯÒͳÛ,Í*ÁzÇÎË¡à8 ¸.ÚWBjôUd0 Іij%:îÃ$XÓPw>å(5ç0ä8_¤ •%÷õgÑ04¾æjÇfURs@Ï–âÅóÄ¡–¦Â=O¸¥„໯¼:í–T8›¸?páêX¤LȆ°ÇÄÆYc¶¸¨ˆ‹ô¤˜ [SRC‹ñÌ@¢º÷â_ cœòžd5„Ì~õEÖ¥2ÉO»Z|bl¶;Q? .½Ä¦'To•ì~Å¡~Â’íÛ¢ŒnY E¦#%?ƒ#ÊfÊŒ£MO:0´)=¯ÍÁ w%ˆù‰?[ß   bfD<#ç¹MþÚ ”Á‹È`°ø™ñîA±ãÙ(U+¥!ØDÿ_&LÇ¡£H4JA„ßóâ)äU, D;I17íÛòBÃ@Áaʇýà <“£ÒU›1Và¶lÍ U4ŠcS-ãZ‰¬ˆñB’«FèR‡ÛRÉ@¿ .h®Zß^É ¦„‘‹ „%KâØ™&±Äá”oõŽå@g銇:à0Ó8ºoëî1å|Çq6ð‚¯ãkÎð2‘ Ù‡‹¯‰²E9¿ˆ¼“+)VÌ+†BT¹SA›È•> …sQª\ œ{‘rÙµ”É"_9|/í4FR°dÙ¢»†É¦…» ]§!EÈËöÅ Šr*Í3|g30¨ ¾ŒÄg÷Çùþ‡¯<_¹K’yjsûúÿ}LªËâõ§t^~ó%½H jÖÿÏé6uöͽq7¿$£µ¸¿Fs\äAÅGvËëI–v\{_§¢¨3—Ú‹{ ½¹ãCGίôÔˆáŒ.ø•Uÿ¥Æk3=³h¹«â »%åIj[ïyÃ⥟Åcñʈãøf¬åU[çñ™7.žñÍ¢[_¼êÍÒÙ2U&ëYOk•U¼e–Ê^¤NµÎ_÷Õ‹VUendstream endobj 1686 0 obj 2672 endobj 1684 0 obj << /Type /Page /Contents 1685 0 R /Resources 1683 0 R /MediaBox [0 0 595.273 841.887] /Parent 1664 0 R /Annots [ 1687 0 R ] >> endobj 1680 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 280.999 400.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1688 0 R /Length 1689 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kd à’ÏÈOí·endstream endobj 1689 0 obj 30 endobj 1690 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 280 400] /Resources << /ProcSet [ /PDF ] >> /Length 1691 0 R /Filter /FlateDecode >> stream xÚÝVMnõ6 Ü¿Sø‚Hê‡í°áX:’«^lÖ'OIÙBÖÅ"ö,P9%á¸ÎµÇsÅÞ'^Z%HÌÎ6ÛaSA¡½Zž*áj6޹†œîË¹Ž¨AÒÏ{¢ÈÙ¦ h¸#JŸ6룧}_%EáÒdþÁ [(³ôAE|ÒósÁžw·¢ìw›8£†ž²¬ÖÉÔu4ñV÷ŽåÊ?¸.©o[²–ÆÀs+tHÀ¤8Ï+Õ‚÷{HC9ÓÙyfùÆø»SÔ"t0 ¤¤EÎ!z;ÖÐÆcýQÐ '‚ÔœídØdùÃf}ò4Œ+!,Rªž[Qœ€6'”h.;ß? ÷@êš2—x²Ø¦Eµ];Ö»—ŠÉHå@¤T0JAuÄÚš¢¯pq z(WìýâŒl‡æ´#F›õÉÓ܇‚e´ ª 6\“§41z1¤éÀÞ¯¬)”„†(y :Î%œYk &VŒQÀN ':¤éì© §V'‰“€À8¦ÄŽ.•rSö–ðp®Øûeê±³Ï-è«nœè 5eŠ8Gv¦Z çî©(ªb ÂòtL>Ê]éæ:VèJÙ‰ü‰:0>#Û´1§C®mÒÕ‹Íúài ˜aEù ù A ‰Ú:Ög娡ÜĹ!‡r›C¹ )ìÈúäÉ : ó@8A´Ì–ŒL*Ó\A9©öü\0ÜÊçÐ Ù0c DŸ6룧´ ŽT<]Š× ÄA φ½ÿµ7ú‚ò¹ãÄœ<ÐAdªÐ×xF~÷âÜ˲´ Ue©Nþñ«f~ÿ ÎÿO§º`ë!M£˜ ŽbMÁs›°-LúéÕôà™yôè+7×_WÈm0ÛÕoêUhçSJÁ³­K#¡ïÐü¸=û$½M›S.âSÛ žIšËÊ`–Ó²€x>Šq±ÒŸLWÌø B@ïÒÚ†›r'º]/&UÔƒ€âìäÁ‘!µÐ!‚<´QL°HÞA†£ÌµÕvÍΫÈy•ò ئ…š,=[¬O^:ñRmùè¡2|”dc’åi’ è˜d˜8ÌI6,æ$ó7vÖ»u&iHÂÀp (H0^šs}–ÆŽ-£îgd;lC®#¥\lÖOí“«O’I˜O†}?3ùÆö?^ÿâ1Òendstream endobj 1691 0 obj 1151 endobj 1688 0 obj << /XObject << /Im20 1690 0 R >> /ProcSet [ /PDF ] >> endobj 1681 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 280.999 400.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1692 0 R /Length 1693 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kd¨à’ÏÈOô¸endstream endobj 1693 0 obj 30 endobj 1694 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 280 400] /Resources << /ProcSet [ /PDF ] >> /Length 1695 0 R /Filter /FlateDecode >> stream xÚíXK®$'Ü÷)ꈄäw‚YÛ^޼zVK–^-¼òõUPÝofkË3Oj•$ä‡Èkd³üü~쿲ýùTŒ ²¹MŒiÛ/${ã|Ø$“¥l®4 Ñãû1þxˆw&fIÈ¢Aæ50ãD‚5¶ä­kð˾Ï8wqJ¤ECZ×xþ§mû¾9Ë¿ßÌ?É¿]o·Ö(ˆXÐ&ãÓöùø ÓÚÅ„ås—w"X¿ÖŠñTXÔp[ž–ôáÔ-ÐÞ$™ÀçC\´ƒÄç5%Ù<ïZ¢:#š¯•-LKp¡-ÞDßÇçÖëVlïH,D·˜Å䉘 ÊÀ$ôq3hÆö Q­-(e”ù¼dŠ;ç+MÖøkýÃÝÉf n[ÂÁÝð¤Êöë··¡Ck·o/²â>Séx}ŸË÷kF ÎhX •’6§°Cºáèźœè’#À´a¸\èœ6ày×’\€§´/œ¿%&KÎçpʉÚOÀÙàMrÈ k4ÀõQÔ$¹2¼ § oЕásSݹZ$† ÷¹ÏZ vCGN;K³yŽÂœ oCôùpŸpÜ£›æ®X7Ûã ¹{ÒÌ_!- RårÁ¹¼iŽ ¨€L*F¡#KÄÐ}Z÷Ç›Mû,k¨)>"xÙ¨+u/+¶×y±„:ORnR ©lM€Éƒñ<.5³6~I‰ÚÂÈÍ'w®Æ³ùöÚá¬5´UüY°+/&’p‚êc%Á»jþŠí£á,¸ú¥ød ÈH:áwýÚ‰³( G‘Šù'°ÓîY°½Î³,]·z8qÆ • =#‡E“©Ãш‚Ã?.Gzã™îò‡«Ò\¸VIr*¬À›«¬ÓÆ3í4 yHùš•"‹±ÏŒäŒ`”Û²œ1Bä Ø—YC2¹Ò}a(h ¨;6D# ×¹^ÕVEÎ: Gþt&ñ¬»lP(ÿqi±bû…AÉÂF£ª”ç+LâV€'äZt_eÅ"¹7À– @£½@§ŒTÀ"'R9²8 §•3š%_P€á.‰ÍƒÑ„T¹çç–wàX‘-ÀƒP- Öƒ^fö™¨òFL7{M“ïæÕŽHßò_ý\7éÛ ‘ o8Ù­ZID Tˆdª¤‘¦QÔ·âa™mÉäQ˜±½Í‹ mã«c:!‡ÑÑ …œÅ:(§ ™ŒêTƒÅMƒ$‘xDwÖM)[/t%Â+<´<(È4«›®qÍêVhgÌ5- ‰8ÄhR$¥Åú!SÛ8œ¼Úp⣱,Z)Ÿ@Æ!Hµø¸<á| gjdI _%Å*Šr;3Nj5¢4F_±&ìaªº.5b‚íêIàh ¥"ƒÂ»€`ϵ& ëc *-þ–w­µM•ÿ”Ù<[ßP»ü>øoÅö qH.ìˆZÇ£ ¾­ {:Ðü†R ¥åK'.¢{E*ÊuQkÃé¢Ö ž?ôë׌ÓJ Ö|7]lç5uB>/BÛ–‘IæùJÓ°ÉNüµØ†ð*Š·ÿ^+ŽñT?ŒÕ ý³ 9ýÄû‹Ê5­:¹ä½—ç§€û »»àxøgè’©ýŽ»‚®I§ªj^¥Æ]¯ØÚKžHŽ(`Pe>Ô‹`èÁ~9 Ãå0Ô6öñ…•ç#Ü™—Œ>+Ñ‚!ÁÐâÈç%pñiHL‹Ì󅦎ÄÀTe3·µ‹™ö‹ÙG¿¬épYc‡˜ФUÞ˜„/VÈ Þ‡ ;Æs‡Ò°á¥&ˆo ÂùÜuÊ o5휺ù±æÒį¼Áë'˜ÅK(K—Ð:ØR È•£cZ0ö§0{(«/€mq… ©§ÓQƒê|v ¢z¸cº)F/´4àÈcÈVÔåmn¾×.HÜ‚AfÊׄU ]g*/¹>žÝ·Çk8‚¿<þ•5ž0endstream endobj 1695 0 obj 1709 endobj 1692 0 obj << /XObject << /Im21 1694 0 R >> /ProcSet [ /PDF ] >> endobj 1687 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [253.501 94.919 258.955 109.148] /Subtype /Link /A << /S /GoTo /D (figure.8) >> >> endobj 1682 0 obj << /D [1684 0 R /XYZ 72 786.278 null] >> endobj 1679 0 obj << /D [1684 0 R /XYZ 124.505 518.117 null] >> endobj 353 0 obj << /D [1684 0 R /XYZ 72 440.858 null] >> endobj 357 0 obj << /D [1684 0 R /XYZ 72 184.923 null] >> endobj 1683 0 obj << /Font << /F15 393 0 R /F25 380 0 R /F27 394 0 R /F39 496 0 R /F37 380 0 R >> /XObject << /Fm20 1680 0 R /Fm21 1681 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1702 0 obj << /Length 1703 0 R /Filter /FlateDecode >> stream xÚ½YÝã¶ß¿ÂÈKµÀY'RE(Š\šÒ´E’.‡¦Z›»VÖ–ö$ù6Wäï|Q’¿Ö½¢)ü ЇÃùøÍX-2ø©E©¥³©.Ýbµ»Q þ=-âè[˜cJSäiaðí á2R.µI}f/Ñ›"µ™Y,•óiQØ…jxdiîÝ¢ ‹‡‘Bg:õÎÉ'•§&×L1 çRïaGå= Ü”`rùLáÇ–Ç߯*¼€ýÌ5uÿïí­H³«—üÕ¦êªÕ:<»J~R¹¾`=öÌ@gQ ü—XÙ¨ùhª ý~;ð˜”=²‘‹!]à,è%Ä᪠Õ@Û¸1àÓjà%$mOŽçÔÈw 4€§k¯éÌ¡bÈ&)´w"qvn²qwq„Á¦Â}>²üøáù¹kŸ»ºÂëÓÞ'kˆ")zL#àFwb9Y>ž2›Ÿ.âQ+4í ÐåCè(@á[ÕãÓ’à§å\j 1 Ì)¨9= ÏtêW€mW²„N‹ÛœgŸÜ´’I^ç^ëGî¨С`¦£ø¦Á›Êr…-ÓÒµ"ž{‘Ý·¯D2w̱HMQ\.(r•ùePÌŸ¯B4›¿ ~5±™T_‡áõv»‡˜ ÆÖÇ;­e._ñè¡í¦ §ÁA¸—<æTꕺ‚˜#Þk¿€ -FÌfí܉¬‰N#Š$ð½ Ï0‚ç‘Øa“#Øã•Áxµï>R|—Å/›®#/b|@ÆþCCöUÌÑÔ ÞqX˜aIDZ=gç¾ÝÖ’'a#rfDn¡—äÎÿQ‚,®žâpídE ñg%1òëx~¢éX’þb¢ý¼áøõBÁQ;/ñÂgñ&=$ÔðÜó\7‚íBœ]1 —õB9©gùqŠÍÏ¿yAü‘ <kÖVsÌ%‚Øå™“Íåš37qAF[~J5'“h4âñq?©¡q9;…K„ºVìLNY…¶zYŽPô$Êqâl‚ð•¨c@©‹ƒ†Ç˜ƒW@„=B”àÄßÈ\ÝG¦}Ë£öžKÏvß¿‘¸RBÕ¦ÌQÁNu2(”$ V-)‡ýãœ+’°~ G=‚åÏ‎=\Ï€BP&Žêø ËœJÁ G{¯ªi÷ãÍ˵»sX|è¦>-CÃoÒpàðÜmÍýˆWm´(êéá¨×ÕËb~DW.f GœÁà´Æ±cµi»!4ç,è,¦ÇÖsö¤V@½°™;ðu­ŽÌ|ê-Ýï¿j©Y,qy•Ln“¿Yµïù¹Ô#”6’t«ÚýÃ|Vüq¬UEbe¦Åu3ë{BìyS#|rj–‚Ä’dÉ_•ôáNý•[}=3ñ¯ŸrÖ„ÕS;UÇ ë”™”ÚMu”nåAéVÎer\+IU2ñtÇ<¹Ê)ìDvŽ×‹ü=´9sD‚F>Ÿ*z|E€9lÚG„/½üÛâã=ùÙUüäáªæ1Œû™‰7Ó’s1‚(¨¾sX߉R Á§Ÿ9@Îw~ÅSwÅSÜä)Ô @P~úßÄ”¦=ÖöÚŸZ+¨§í5øà‹“.a®S­_)®þ YDEendstream endobj 1703 0 obj 2719 endobj 1701 0 obj << /Type /Page /Contents 1702 0 R /Resources 1700 0 R /MediaBox [0 0 595.273 841.887] /Parent 1664 0 R /Annots [ 1704 0 R 1705 0 R ] >> endobj 1697 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 280.999 400.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1706 0 R /Length 1707 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kd¤à’ÏÈOû¹endstream endobj 1707 0 obj 30 endobj 1708 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 280 400] /Resources << /ProcSet [ /PDF ] >> /Length 1709 0 R /Filter /FlateDecode >> stream xÚíX9Î=Íû>å}91"¢FHHD\Ÿ*¯åêe†ôÃ'üæ½ry©Å£¤ ÿ·ÏýØ~nZüØ´MÒ‡(Lò2j'ŽXe¤IFh㥶^X]ZµïÛxß²–9';ˆb¡ûû6¥vAt Ưsôñ¾u/£ûÝ,ðuìÛ÷zm_„Qø÷óÛæÄ¯mØ«Í «ÁnÔÒ:ñßöÎühµÂ¿ªU åLª5IºT´ªh猜û›”—Á-ªë9µÌ­Ò"œ¹ î£LM„]ZˆD GhíâQƒÈŠ éìÒÊ!»KM?ŸÌ…v.ˆcà—²ÀÏ ëäãL•9Ëž6‹1‰69°j6½§¬»{5UÉÁ¦Õô¥[…é„IY¸nÑr YF&a”’öúºsαÅkú€2XL¬ç´Ô]TIãþÚ²GûÃn®Ìc Ī IÂ7èPÅâÀމðD]çÕ˼À™T;ÔcGËEá1{pαùì¤ o$F$ʹ ÇkéÔsòàœ©ÊhÎ׈àµíeV±5– / ò¥R˜Ñ1â—›À0صtD•á6d×JKƒx×ycµÂ°c Újø|ŒaƤÚw½Ã0çáM ëœóV®Îƒ‹zµ}íc¢VÃ^­3rŒ²æÊO~1Q)U’Ìb»a“屜㺼 2xáÚ-Ö6–ÓìãzÂ+VrdÆ]ª–S`5ŽqN˜jrµÂ0’Û_Æ/g^÷Øjñ鮸?K?°VäBWr2„bЮ§²›bǘDû´œ3U}ËJ‰da)ˆºhE†¬ª”ÖÃÏ#ícz¤óxA'™Ý@48J­ŒÉq¿JÅ ÃŽ‰¼ZƤE´ #,¡hÝÄÆB驿®uZˆDI}J'ÏÓÙós"9­¤!=åUÛ+6YÁz™`Ò}J€H(ÅÊŒÜÇ4#w Œ@u—> $XXžÆã‡xCš9v är˘DKb‡c½ü™…u*mŒsÌÃ˸äL¢¥kb°°,óܯ3Q‘¦æÆ/Ƥk"Z†á±BÇ Ç ›rÓ´3t{*Kçð2À¢6A&‰p#­…6$ã3Ÿ©-1´ê÷ígΗôÝ "ÝÎÓïI£ÝéÏï‹“j:±™9)ë.+ŸU¯_bœIµ˜1Í’Ñ;FŸF“uûhªù<›ªÖ -YÃ0÷¼*Ï1Æ!ª×ež1éCœhFXyƒsÈ.¿®çŒyÝ \·÷­ÀÉÙ¥ý8ëš´øÿW¯¿tmïýÆe.û×?Œ‰Çˆ~ïG˜÷²é]îôו„°€Å{XqèvE‚—¸ýºì-Ú^m;š ½°86YË»˜aÄVÆBà]lpa”f9Ï.¬—.¬a˜mi‡ª5’ê®÷qŒû¼;i6§/o¶¤ÖL/oÆ›,™KûÒ1[ºÉù¾¨ÃåyQ!rƒ*Ї)áI¬¹­>.¹ü¿Ž“Ûotw¯ôendstream endobj 1709 0 obj 1155 endobj 1706 0 obj << /XObject << /Im22 1708 0 R >> /ProcSet [ /PDF ] >> endobj 1698 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 280.999 400.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1710 0 R /Length 1711 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kd¬à’ÏÈPºendstream endobj 1711 0 obj 30 endobj 1712 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 280 400] /Resources << /ProcSet [ /PDF ] >> /Length 1713 0 R /Filter /FlateDecode >> stream xÚíX¹Ž1 íç+òQîã ¨Q BBb *~{rÙžìj·Á"­òüÆqâ3k´Uúïó:~Vý8¬/:¦¬\‰:Û ®‰xã´+NYµõQyÛÖty_ŸGµºÖâ'’‘@4ŒõØã<&’ª¶!©¡ÁE¾ÇXŸÇ°b2†Ý]ƒ<Çy|ÿ·Ï¦>_”3øÿ+8ôÛ1õÎÓÖˆ· 7[íƒúy|>Ìý]û"¨ßýÊÊýîf»ÉàF‹‰:ÆÆ=P·”!;€®šC„³ŒÛ Ñâfø²Øœ‰â=Û»Cä4”47ç2rS„=¶—2Ê^ÆJ ,0ø•±¦B¶Ø>תKâ d„]‚ƒiº¶ìd,áÿÅ..¥0ò0àeªº~ Œ-1d9]¤X1F{€Rv¹æ–ÂðO'¯’ËÍKÉj n’.ïÌß·p²â²ëH˜:æFŠ nݰ<±k! ö6> /ProcSet [ /PDF ] >> endobj 1704 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [327.734 373.331 333.189 387.56] /Subtype /Link /A << /S /GoTo /D (figure.8) >> >> endobj 1705 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [290.029 292.036 295.484 306.265] /Subtype /Link /A << /S /GoTo /D (figure.9) >> >> endobj 1699 0 obj << /D [1701 0 R /XYZ 72 786.278 null] >> endobj 1696 0 obj << /D [1701 0 R /XYZ 119.553 518.117 null] >> endobj 361 0 obj << /D [1701 0 R /XYZ 72 169.644 null] >> endobj 1700 0 obj << /Font << /F15 393 0 R /F39 496 0 R /F37 380 0 R /F30 512 0 R >> /XObject << /Fm22 1697 0 R /Fm23 1698 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1719 0 obj << /Length 1720 0 R /Filter /FlateDecode >> stream xÚÕXK³£¶ÞŸMþ»‹«Æ=Pvs’LU’UªÎ.¹ °­ ñLùíéV 6cŸ;¹›”«ŒZ-uë믱 † 4tª"®Ó ?>±€~‚±õ ô‘¤LD”H|{ ¸%·\F&V䙌”ÁV$2bF£xð1ˆ#íÆÇ'ô~¼Lñß¾;rüÐ<ýúüú´Å‘0©ß/è­-ƒÝ´ÃQ’«HJÔôüÊX°vl‚—“|)~ ßÙýЖ›-OuÈâï6[ÉYø}Sw};ä½mjjvôýø2‹'@a¤•y«*2BAà˜(MÔýÈALÃ:ß¾f6ÊY”ˆÔ‹œ6 '¸p{‡>t„ŽŸ¿Ð®’Håç<ÜásÐá-NæbãÔÚ:·§Ê½ÆaöžŽ]t‰,„DÞpöŸIOÝгjê½ _PäbžÙ¸€m ’jÚ‚„؈|<Ò-‹El6?ØK0ÀÁ*mÂç!ÃXhwøŒQ¹d<Ü•gjdEa‘cÐ926aîx'›„MU $EZ¯/Ïjj¹%½d§SÛàÌOö¸,húÇÁö^€cæ`»rŒ¨ƒW´Zw6/T fTðÝ5ü¶#¬d ž¾„B J~B¬Àï›ëU8ÀÓŠÉ™ò/b{+b‚é&QaÖ»,]¾C…®ˆ9 ©§ÎòS^ºÐ!êkêËêýPe蘅-¼y˜Kðibzå¾-K—*À/ê¸vSq`<›’òH×Ò¼ó É11îÇûQï<•ªt‚™ÒS˜ã@AÙ«|¥M81wô8õ˜¹«QŽö`À>Ç5!Y”µK2ŽÓŒŒtjæé×åR\FŒ›Æ×c®8º‘ñD(¡ LãÈœ¯uÝHË0}”Y ¥F¦B¡z¶®wKž [˜…@ž9¦‹ÛÁGèð …@NÕt5Cõ…ƒ­òU¶Îvlù©dQû™:ç5 úhªéÍmSÿ§'ÙªÌ  °Ñ¤R…ûƧ+ü/¨¯-Oö°ˆñ̇?ô;Öp ¯ÕDßÞ®ˆNsŒ0HÉ\8©ŸPÔ·tþ2QSU.eœÁko°Oàæ)ŠaÜWj0¥(»¼µSˆsLL‡ôâ,9ÜÐ{‰ŒSá%x<å .˜Á¢Äƒ¯\ArÆr¢"“>¼éçð¥!˜zD[FÝ,°1çw¾ÔÿŸ=!endstream endobj 1720 0 obj 2049 endobj 1718 0 obj << /Type /Page /Contents 1719 0 R /Resources 1717 0 R /MediaBox [0 0 595.273 841.887] /Parent 1664 0 R /Annots [ 1721 0 R ] >> endobj 1715 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 606.998 506.998] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1722 0 R /Length 1723 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kd¢à’ÏÈP »endstream endobj 1723 0 obj 30 endobj 1724 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 606 506] /Resources << /ProcSet [ /PDF /Text ] /Font << /R6 1725 0 R >> >> /Length 1726 0 R /Filter /FlateDecode >> stream xÚ­X=¯eµí÷¯H÷ ¸!‰óY2€¨f˜+½bDuР9HTü}–'Ù‰„ÞOÌÕÁ޽l'Žílg½qüŸþ>ž×_×üý÷"g(™'ÿ&GÙ|¾²#¿ý?Ö?_¿]^Î6ç[öæÇË›ß/ïœ3_©:›Z4‘’­ž±| f™à„eÈu:*’Ò± ý¸>^ Ÿ Áÿ~‹¿þÿžÃ‰29© ¨l² 6×dbéÓ®Ò+¥j±+K"©18žl Ñ j»A?®áÅàL/áŒãq½a?ʶχ]óƇX¦Åu³v°èùààÚðm˜4 …ÉÏŒøÖ6 ƒf ݇%Q€r˜xCJ–ídŸ7NwŒ\GêøÊ…9ql0BkÀ¢‡ÙÅéŽ)©ßÃÍȆK¢å0ñ†\*[Ž>'9q,%,…=«•æ|ì‘ Øv€AÏk°8Y1÷&N êÔ(@9L¼] Ar†"4²ÅUÓB°>ó‰g‘hn¬gE©µYòäÔ²#,zìèâøfC2 Á6œj,/T‚v„3Ž-øÜÏ~æãâtÏ‚° »çÁk¶¸[ð>Z®SÂn³ÁƒÓ=[î°á¦ÆðbHä!6Þ®H¾ŸeÀšÄ¶8¥°g14AůHÄPu½Ó ºâÙ’HBÚl°ÆàÄÈž-:lÐÔ^¨ÄôRŽ8¤B&ªÖ5Þ©Q!''f[‘')4ë#èÔ«SòºžFýâkåÒ’ˆmG˜ô,‘“¢-Å,ØðÓÆðbHÐ@‡ ÔÈ’œeŽÕ’ÔÈÉIÍ¢‰ŽÛft™œE‚‚ÓõN£‚ùmJKÂ×aÒqj ŠYá°†ÆôbH„ሃcû¤ƒ@@)µûR[°è´ÏÅi¸ Ȇ@•lcšD"PÖõNãN5[ÒM"a³Áƒ“›mÅL„švJ³†z1$¦ßŠpÄñÀPõñ …K ¤ng!Žnr"äƒ Å›™N"rÓõNÃr.dc¹I¤aÒ~j('â>á\&B,» ¥¡1¼ÃËpÄ¡Ñ9ä”Gä›9¸É¨ÙF™1œ  É±@p¡/wfËRî:÷º©/:wùňiꇰáw’ñÕþXχzÞñ9¨Oœàò×4aP]×y+óô”þ MÜ/W» …ÆÊR i%=¬UHy_£%>LôgVC-Ð*!0ÿå$HŸîS²w‘l%>›ßŸá?NÅd1ß;xÃîQÂéÕfRÆ)ùÂS‹ôrž’=I)EØq&VÄ”"v…"2ÁäŠnlÞ ´F\0È™9â×}†O_4Âs<çØÎÃÞ>ØïQÿ¯€ó˜Ç6|þ¢°눕¯é¶Ý½êøŸ:y„ùo!¡Ë_×Z³Êš2hë׬uòЯg¯ìOBsõܦÁAI*¾ÏsHC…¨]bn¬Ò¸P.H|KÂn³ÁÊá’ŽÇãDp‡ ·4Ô‹)Q„zØ@WÏu;ðç|T Ÿqgù·d‘X)ÒiØ•UºI¸Ám6XC9¹5䈙¹î6”f õbJÔ¡6ÐÕ)oiú\œŒ‚2A;Ø}â‡ÄLl¥¹ã¶Û2'Ç]}Ðj€Å/#`)®Mwp¥!=ÌO‰¼iþË›‡§‰í2Úb_d\(œ.nG_èõ4¿HÐk\]ŒGPzUµÅA Íd^Ø›ACC½XiG8âèæYB&ã¡kÈìžj†“%fÑQ/’«&‡gæÌ_&aÒahLŸ)zÔ@Hu·1hä¢z1%†—ŠpÆÁ±Õ´ÃçSŸrèJ$S˜H¬òÙixÚЬMN);¢ãИœ€rk€;L8UXN¨DÚÎ(ä=Wê½€?'#ù^m¸I{~RS¯_Zð•”‘ïLp»¾»ã³¼2P:ÑÆ§:îøJ²¼:0ê®_w|\²X.58‰?Ö¥ˆäòüuÏëG‚¨‹^8FìÝ$Ü]Ýý~qøY1U6ƒfîÂ’¨B=l¼É—Ê¿ÐäÛ¥þ<žæÝëõÍÏüÈ7¯¸‚}‘G4Œ×çWß~ýúÇ…®úšyýõ«oÿÃ4Œ‰ÉwLùÊ͹2ýÓ!sñaò{Y†2Z&EùÉŽùÎñÅ›_Eè]gÿÓï½ `¸ôÈf±Ð4I̼§Ž €<„E  <÷„‘DçýRÅõ÷™?¼šçSù&+ã Dæ'¶Ý_$<õöº¤œ(×CBBUkò‘G±ii,P +úÁžP•¾é|éñð‚øxþþ¦o†ŒÌ=ò¬» o^|£~jÂËüiQ7Y|ŠxŠ÷“Æ4­~XOKàè&æÎ”]ûpýù/{öendstream endobj 1726 0 obj 1821 endobj 1725 0 obj << /Type /Font /Name /R6 /Subtype /Type1 /BaseFont /Helvetica >> endobj 1722 0 obj << /XObject << /Im24 1724 0 R >> /ProcSet [ /PDF ] >> endobj 1721 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [123.724 106.036 134.633 115.733] /Subtype /Link /A << /S /GoTo /D (figure.10) >> >> endobj 1716 0 obj << /D [1718 0 R /XYZ 72 786.278 null] >> endobj 1714 0 obj << /D [1718 0 R /XYZ 124.464 380.735 null] >> endobj 1717 0 obj << /Font << /F15 393 0 R /F39 496 0 R /F33 497 0 R /F30 512 0 R /F34 583 0 R >> /XObject << /Fm24 1715 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1743 0 obj << /Length 1744 0 R /Filter /FlateDecode >> stream xÚÝ\I“ÛÆöY? g9eî}qJÛ±*N.9(§8hˆ™AD##iR.ÿö¼×ÝXÙÁeœ8¥ª!Ðxèå­ß{Ý]øGš-´Q Ófq»}Eþ߇E}õWhó”BòD ¼;B¸ª)W\&FI¤ÿþÝ«oÞR¹ $±Ä.ÞÝ9Úwë,ªnVÜÐå&Ïöþê!ÝÜÁ•¶Ëê!óMûª,>Ü0³Ì>çëêáæŸïþòÍ[N:ÝQÎÂEèô³§è HY¤ )vöù†iõŒÃå]Yl#}K•PÎ,ÑR»·E¢ÅŠ%Dàߺù»ø¨œËzÔÝÚF–ë¼Ìn«¼ØùÛ<°`UY¹ÍwY ß™dÔMq³‚æÛ´}¿¸ 3£4ÑT/V%aÝà@­—E¾Ã¾ªÈ29I7‡Ë„®doßGÖiÃXXfr³B,ßÞ¾,J˜çaÖxÑp¾ð ·~E¹Îwiå”ZýJ„lfæKôA'VûùQx‘'VGA"kP‰1¯Z¢ÏNåpBbù3¡Äw8©U 1†7‰"vr|‘H˜hg|N ²Xé„ꉲ˜Y kWÖ/òMŒC4‘´V·ïÆð³‰*®GÇщ2vÑÒ|‡%”H å¦5¸W?¾{ŘY7@TŠã€°`’pke¶¸kœmãÊ‚³:ð“>‚Ef`Ðo*ÀÁð®RöË´ì.ö9ðÞb¹Å~[¬¿šÍÔçš~Ž$!”.€šÙ+€Àpåì ~jFôfY3â_‘Ù‰D1ßj{ý‚º0¡Cç_Åål…‰·1‹ã=…¥†vgŽ>UÄY>¦eºÙd¸“3ƒ4¿ðÜqÏ7›Ã³ì~›ãÔ²Ú&•ŒûlˆÊl›æ(¼Áù"}o˜ §ë`án œË" ÝÔû×1#%<1’E…SGgÓ3ÓnØ@D=-(ßv…SàkÑÕDf¡Ðµí?Df!µ>]E\÷BK´'Ê3K!ír?ŽÁ)²úÙ7 :áUçX²Ú?m*gYØþ}öï<ìÂBîðT~BÑÊôÑË$KË}h ¿¥±Aàn°Ì_e~ÙGxì{5u¯~Ê í³Ý>sK$½µ­3—$¸¤ÃØï½WÀ®|‰{ òëð^ûæO8—˜¹¥qoDø»M?ÃA‚F_H! vŽ_ð|и§ 2`þ‚ÉÅNò”ÞVOÀóç0»VÍâšåXxÍGÛY[d ´±çåãÝèôÚO¢ÍòèÚÇ'HÉci·ä±Ú´e×±æ^ä” =;ІfðFÚr»xsTŠSÅ²î œ ´iÖe:²Ô:8îÁ,€éÐüÞžHͦà wo.Fƒ¬çíK,ý¸¥V® £M«@ã86¶1Ûß×íuÀLñn ®²/àÀö¾¸U; ¿û<¼aµí9÷~,Ø'TĹÊ/&ÚÚ–È×äÎì‹möù!óa›/ ‡fX SX†±´äZ|¤véØV>y<„meñôîæ8ƱX¡d/¥ôëvu:œÙCº,´-ØÅ\„€Ü£qôÅŸË/Rü׾Ȗ'Yƒ-TˆqEÜÓEÓ‹¾¦ÑÃt·7H—DÀ–èMÜÊ¥”çÇ«cSÀô¢3…¯e€8Èø)î`”±£•QíŠë- &(±"sb¡Ó Ê8WÌçFõ¦Î«rQ&j’?ó.•@‚€ž`ŇŸ—Òñë¤tR:-Ž×z€»=Èí6ÏQ\%aUÜ\€­'öqs‘3Ì…Åà]'Ôy 8n/ìÚæòCÔ\PÏ0££å…%üC†Ì…6m.Šªù¬ì-À3³o/q{ðáþ,s¿9¸š·öx‚ÑO³xšÉާ™æÔ4à›rùg€%±(†w«/sÞ *JˆŽ:Ž$Øü+»Lña(¡xw(¶HË `ÚçUE­õ²öleª—ŸŠ}xž}AÌé.?ÝHµL7Oß‘z,ÜiÍ7›0l­Æþ¬*09È{ëÝÊÉ´®Np…d¾{)šªK̈Ě Ã/nû2~\‚,‘tz(qªëB Þ¤~±»}XÀ±‚?q”kÏ”Á&­çÙ®&ËüESŸ0D,ÿ¾÷eǶG_kÛlVAh$2(Ä|Õ9èœa=fs_”yõ°õ·³ãU²MžYèñ]¡¥,°åK¾õ{¶®ÕÿÔÖ/Ðà£Oy é—í°Åç 8b]¶Ó®¨¶â ‚uí 1ëÔ^¤[M–îsWj²UGë3.Ç{ì ·Ñ ­Åÿ dò@þaZýâê@-¥¯ilq0ÿb“F\‘Æ-:*ÜEïvg$ä!Ê⤊tQ{ÿ&ð¸YÕëKýmŽS càþûjÑèÖ/ôƒŽ‚†Ú. \ņ– ±J äͱ€* .E³ÿø;äKí¨GC'BÖìcŒqµ^œª¯½ÃT}=. ­Á]éºLÚÓ0¼íåCÀ(cBÿÛ| ïHºt¥kŽF 7 0±*‘4¥ …ãáCp¦‚É„ 2ÿnñQ©®1`µBP_+Trù6¿ò•ª€.5…hk¨;.¡›ñá‡E}5….(9è²Fu'#´^ÍëŠ ¬fé»¶úÙÔ(ºÉJ05ŠW¯IVüÍ¿ÍLã¶Á#! !‰Šˆ$Ä]€45Ÿ+Ïg_ù ¶50¸ Qkíišó9Hïžør5Übå$$[¦*Ô°Ž^üU¶ÎÓ*œ‘é#­ý·1®Xš‹ªÓB`³EtÙB£ÑL«.[ÞøØýÒv¸Á  nT2w×ìñp׳¦ã@§fìþ‚cT¸á tÊ7ªæ\9¦0^+Eêìyä°‹Rl~Ùíà`H`GÃlXâYÉ€¼(` &€U2ÓíF4‰Œv¨bú¸Šéî^þˆŠé*Æ|η"è&4¬&ƒa˜¸ž†XŸBû¶>3¢ar$›• †„)+`úS*sÀøT c':1>¢a,îÄFUL:ãG4L £×T1£Åüôy¨bmMãëéšÆ¬c5 yDÇ,îÓê˜æÕ:¦^LÇÄÿŽ ÇR× Tê/Æœ½žc3ð\\ay«‹Ö\QaOvŠ³Ã®œTX}¢Â»òân­°úe H­°zŽÂê3äÁ»sà“ «_Raí•NÅ1Ôy;(î<Œ;Û¯ îh<ƒ9Õ1«Ë3–6©Á”JŽkyC„ò ÿ›ŽYŒè¹šã˜Ùu³œë˜!§6µdlbˆJFái]ZŸ¨•M #ÓB1WI+ʼnY%˜ «XÚ¢ÔÌ?)3•XŒr²rþÀChIÿkÐ㉾(}¡$êù¬ûô㺞/”â™ R¼Ø§[w¥–÷Y±Íª2¿Å“nÌU‘|²>* ¨À"ñ–›ñþÇûä€)ÔßÕO¯ï ûBsšÁ–{Ô¶ÂÞJÿ4w"”>g¦,6Syf’iÓî"ÔU=¼Û ¡µ>ŒH}ÛÓ.¯¼$|]ö¶*ÊØv㊱´rùסùrwà/x{:§0Ù_¯Ûê ¬£ôUÂl·ÎoŸ6ié#nUô¾·½#²£'*%ÿ ^®ÄjÜ·^-MŠ÷UšÇÏR3ת÷U]Œ ÞÙ¹fÕ/ã_Õ @Â0 D‹Îg/3b°œœÈô—hjÞ)ó‘ÀÔ,ÐÀVTVZµGM ¥HŒmIF1Öúðä¿ÉiÍîcû=ŒUè¬(‡~ã±Û“¬ðè§ÒÓNfÆöØüÄhZS.ûdhÆ,ÄÉú*pJ‘d¡7Ž?ÅóÑ#™Ïª% øa„½T:Â+ñ÷*Ÿb^Ìßç¨Óµú,ööã3w5W„Nœž‰ZèE¨…°„(vŠöz¤"6éYõ ÏÿhqPbˆónö¼c–€ùØL¯û;3j)øZ«ùKèlÂå:’H.Oî–‡r–d~«x8ínÕÀæ¸[vUwû;ÃcîöTööÜ­0y;wËÎt·ì:I"ر Gÿ3ÜõåT˧¬>X*ÇólYІô×òendstream endobj 1744 0 obj 3422 endobj 1742 0 obj << /Type /Page /Contents 1743 0 R /Resources 1741 0 R /MediaBox [0 0 595.273 841.887] /Parent 1748 0 R /Annots [ 1745 0 R 1746 0 R 1747 0 R ] >> endobj 1745 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [197.712 386.324 208.621 398.997] /Subtype /Link /A << /S /GoTo /D (figure.10) >> >> endobj 1746 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [322.372 176.102 327.826 185.799] /Subtype /Link /A << /S /GoTo /D (equation.1) >> >> endobj 1747 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [351.184 176.102 356.639 185.799] /Subtype /Link /A << /S /GoTo /D (equation.2) >> >> endobj 1740 0 obj << /D [1742 0 R /XYZ 72 786.278 null] >> endobj 1727 0 obj << /D [1742 0 R /XYZ 245.077 721.804 null] >> endobj 1728 0 obj << /D [1742 0 R /XYZ 243.414 674.798 null] >> endobj 1729 0 obj << /D [1742 0 R /XYZ 244.773 536.586 null] >> endobj 1730 0 obj << /D [1742 0 R /XYZ 244.865 503.163 null] >> endobj 1731 0 obj << /D [1742 0 R /XYZ 262.296 370.917 null] >> endobj 1732 0 obj << /D [1742 0 R /XYZ 262.098 341.703 null] >> endobj 1733 0 obj << /D [1742 0 R /XYZ 261.842 312.489 null] >> endobj 1734 0 obj << /D [1742 0 R /XYZ 259.062 283.274 null] >> endobj 1735 0 obj << /D [1742 0 R /XYZ 259.062 254.06 null] >> endobj 1736 0 obj << /D [1742 0 R /XYZ 200.712 214.152 null] >> endobj 1737 0 obj << /D [1742 0 R /XYZ 211.37 149.614 null] >> endobj 1738 0 obj << /D [1742 0 R /XYZ 207.275 106.128 null] >> endobj 1741 0 obj << /Font << /F15 393 0 R /F30 512 0 R /F34 583 0 R /F31 881 0 R /F33 497 0 R /F39 496 0 R /F28 523 0 R /F1 882 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1758 0 obj << /Length 1759 0 R /Filter /FlateDecode >> stream xÚí\Íã¶_ô˜Ssi¯î̓¬Yñ›Ü"‡lš h¶‡zhzÐz4ca=öFöìdÓ¿½ï‘”õEY²¬Ù h°ÀŽ,QÔ#ùÞï}’t‘À?ºÐl¡"L›Åúá3ºðÿÞ-Ê«?Á=ßRHN¤À_ WBRb¹]¬8'4q¿~óÙo¿åð4!6±‹7w®í›Û¿/ÿsó7\¬(Q [¬ÑR»ûÅûðŽXhb5¾aˆ¤vÁ‰•ÖµH| fN- IÕb¥ˆæÔµQ¾ •µ/•]À—`ìØfîn€T¾Üío˜Y>á±|{³bz™ùëýÃûÇcvëÛ¥‡@[}å·ÐGw|ÒbTLÒfšˆðœÀŒ ½üê«L‰Æwû"ƒµàZA~:ñé&Åjwpðo‘}ÿ˜î¦úaÞáJûuÁç‡íþý èá7ºÑÀ/œ]Æd!ÁŸI±û:ŒÁ`Òm˜‘@¡^îwá"ÊTðÄæ.ª—Fë\3Bçž-^S¹/½" ¢…—žñªÈ¸$N¾¼öu‹ O¾Íï=ÖñV[¢4Œ¤¹ïâ³w‹òê’Ó¤ƒà¾Í ‚s'HÉp—\ ù.¡bwS‡@:JxB UŸÀt¡ÞQÛ•éð"F'`9¥ãþr2UL1Ê!Ç!LX_‡^–X0ŽÜP-|RPIÒ5ùe¤M¤„1!Ò™ Â-êÂÝ7ߪ&ܽóÍâóÍ/¤At¦!(<ƺËÏcBt &ÆŠ¢¦|ŒbºÜh—5a=6¥rBûmÊj²ÌóSÉKÔ=E‡GÂ:Æå`k$2fé¬8|¾°MÈè€ÁÇ",Ã`Å„š„áý<ÖP¢ñíeÜç^³Z4¾Zìyx W WG g Ñsk%ÑjµCàîº]€/¦@mY¦C`_ ø»D$±nÀ 7Ë)—cæ-ns¨³’V·çX»s†êIŽfÀ:\Ãážµ0é‘×Ï¥68ýi¦·»Ä—2>9½5þeèpJ?ÇþË¿‰)Æ@lÑZ |•m®éû|mºÖhƒD Њ¡§S£žVTÅô*®~†ßwh%‚×¢Áé–pÀ‚ ”17Ç<®¨ÑÎi^qh L:‰—Õ 3CçBxfnEYQ«Q~™i #™i¦UÔEÒ²AÃë †±ØLãÄ ^3Ó=¬L9Ã)1 Õz†³ ×TÄ1œÓˆ4 `pˆ¸ž¹ô2COJÃÃ^à$­&a/ÅE—];ªD ÌÊxFtl&H¢+Ä„ùàQ6ÊC&µàõ1™²™÷W S£1ß¡Á8Hw.Í–›l·®;—évû1:x°„\ æRòØ5ga·ãºÅÀ j4À™¦‡3ÍYØíÐÐ`² =.•60-™ÌœÅÄyH(YÑô°¢9‹‰CKa˜¬Ó…2˜¶ÊØPÃyȺÆÌ,06ŽYx³w-mè}6à}X3Ç×&Þ/pmâ?ïQ €B«Z³W ¸ë’ ºTË´ ‡˜'ÃÖ¡áö<@þíÆ ”1M[]¼sÜàÇþJ–Ùï‹ìpÀ„èZ Åû!œ{zk½ßÝæÇ|¿ƒŸÊö…Ýa9¹œÇ›‰çÃh½ªM¾óijâáàéݳ»µ) ÇÑnÒ"]C«üpÌ×þ¾Vï¡ x~l½ú?¯³ó¬ìÌ9zU+Š áÍíZ*,ö J˜À·ñ÷]Ši—‘‰²ày Ú‚ ÙHÆ$¦ŒßcX—©%P¾ÝúŽ]—ùÄêéë·ÎB¾ËÈtë;â~óý´yIÒ¬~D‡{y»GI„c‚½R úE©î6¦„ÒH¸ŒRq!¥gE™Âœ A—Ùù‰öé˜ä§`('nÓ}9û¤çÄX5e0T\eïï+ð–£<Œâ!½ ¹)‘H—o¬³üã!ØH.½Ãy=¦œ$l·«w!ùJî³ýCv,ò5fôðÍ"Û¦$ÿ<Æš+ª½Ã1™7elÅåL‰ˆ¶;Gó“NYK{!™ý=‘€Rl~ÔUµ5{zx—ÉÒÁ·,ÑQØå!}À+éþßfE¹6øÔ§ùðj[ö€<7"<½5i®X³ËÓGg›©Š±‘rWœ‚¤?ù1kÍÃz_œ²e¨év÷þ>æ Öó³+ á¦9»w˜¹nHBS³ÄRí Wú‚\ÄåYD9"‹ÈjYÄW±Êàj´À)ð$£Ï“£U…ÃÚ)*´ 5ź‰Y<ÙU+šÀÈ„`³QkKyŠŽÊ–ScŠ4âD¨`c¹yb„xμžÊë•9ƒrξ˜!6O–4ʃ%™Î>É1å"ƒ%oDd‘š§Kï ‡fXn.XZå‚’‘J«q1À‹Ý~0ö™·²ºÑ3JÍ¡ÀIѧJ=&× †è™ƒ!ÓbÐçi€÷m# óäÀ¤Qe`nš‹(grx‘ðo~x¿Ýƒ?‡zŽsSçš“„O2Pù³–œ"v‡ýöCwj8W‘U&Σ3$vˆ3ªF/O¶p(xåeM,Ú½ûâ>Ýå?f¥áÛuÉ’ôÝ4¯@Îg<½Š/R†â¤ˆHø˜(ÕŲ‹¶u”½éAg ȆbÜç¨ß¬ŠLÔlu—Æ?Úu•%^´¢j Í”ž1bKfÙ¡ÀmÕèÅsį[4xãq—BUŽ&F˜¶QóOÃ\2îbzX–{qxl”ôƒyŒ^²xô’OO7±Âèû}£fÒ7 b ç[ Iû€>‹®R~ðW¥À)]•øY±L]±)´IßnÃU¶Íò]zŒ–&€1ŠÍ—íÈ‚éªÑÛ2҄ߎùñ1(ÔPáëÇZ¤»h§˜³¬YÅUdÕ !C¼cq³æZÚ¨k)|vê't-Û{BÓ"ªÎ»k‚3FÁNA=¡s^jîýÛcšï¢•À E?‘â¬^ê‘¡« Aä¿Hδ'¤Gê1•7úÚšÏóªPϤ '×u̧ §WдT!H(ÓŽA™9«1àö—AK;F vßÝt¼µ–SÛÄw¹e®Z]Ÿ<5cŒünò”ÍVrEòtÿMMžŽÒˆc’§¼ õº¹‚}•ׂNöÁôpS&p…ˆ‰á £°ÂDåoih„„ZÉ ø¡ °N[nË£Õ/Ü8 CËÕý÷mƒV‰ˆú0s8y3ª¶Ÿ½¼ÿK/O"œ} MŒ=§Ü—¸J«õɰé‘as™ _ƒdSft$+íìëvÖSïÄæ©wÒÏZït \®³/\Zðá·}¡ÉgÇU›E!^Ž‚xyâÅÏ߀x—c‰RcãBÿ¼HÞ. ®„žE%šö°í8\Dz³p[hAzüqhßš•dNÕ»RãQï_šÉÊgB‘Ä"ëPŸV6ÙmÖíNT_9•ŽüXö f–Sßý‚o–¨F¡T·¿ÇD\‚i +Q¢©‡&̱¯Ñ~®·38aÒ‹éG` PÌ |§?\kœ´ÓJU¸€$ó·Â Y¹dUdM©rç ´¦t\A8ð=…?a JÈLSBìç¢Û~¤*“œ£@@ôAmSÊð÷ †´àx–ÆÄd1Ìœ½@ÄpœgúäD$z‚ˆ –ˆØ 7 ×Eì¶#b2H'ˆ‡m¨ÙFtD;…ÏÀ"墯.ÙW@ÀK‚MÍèÞ¿$ ¬«¨<+¦ÈÜ‘‚ÊжåÙ pqHß•ISk}u!Ü}[dò#»?b`Ö½-ªô*´ ¡ðbï"ã·kf·®zØî]¬}í«¸Ü­êÈ‘Xm.Oá¨Qʬ “†NÛ‹º<8Äœ2Æ8!>©mµ'Û.oó( $ë’1ïÅÜéMš/ÒiÌ8@´/•‰ òÖSO›ÜW\‡¢¸ý}k\´¦¨ŠåÒ"}ÀÒåhm ³r¦LÚbE¶|›¹];Ù¥µxL‚Ú+êWÎgj¦Q§)±º¢YIøu¨Àô9$i£¥±4)QÅÎT =ª2Ö21­j[N*hÐó–9תA¹Jj{¼`ª Ò£“@‰\âŽ.ÃBPß4ßÝfáh¸ œä¨^Ê ?ã5(¸qÀ0~EDmBJuFеÍwYZøílxtØê ÿë¬W /]wÀÃøi2ô2ì9øþ1õˆ›óìð²g‡œâ¥Øþªƒ8 ÆÄ‡,L´Q8]TÒ]»p§t"jçeLLx¢\ù8 ø‹2q¿wÓ`¹9@þ˜³ZÁ%¥;1‹•-á¾€7x¾Xy¼S˜'¶åŽ€Vž˜±r÷€XùýÆguÝÏMØM—ˆ ‡°*wÕÞŽîvE8X.žžg‡…óÙÔ°Ư( ð\)qÅq±!@;îb+Ó³ÂzÞ¬ðËúÞ†°ñÁg…]ZP3$ †¬ÞÓ© -¶w—ò²Â ?ð‹a?Ûõtøx8fX9ÁåiÛ…i]ÖP^u[Ì ëÆc”Ösq-EªŒrâbjiûxu³¾$9Àûâvs7[C@/>iGÌýK‡³šIµ¬'ø^ÐYWÕÒ0ˆw€þàójsv+»pǤàáb"xÌqìC®x´î\ÍWJ”›WÛn,z¿½«àW¬(å½ûªñ kG®|ÙíÉ׎ Ä…%ÀµÁˆÆá]Wß Ä}œ´fǾø4ÅÄÍD¬%ê> ‚j­eÉɧišyœ:f\,¸°k_<8S .Ò3Ë´Ü«Xy.N‡ƒó>˜i0t¡‘ÃSÜØèëÂ@ižöÝø•® n¯÷ÛLJ¿®õì4/CÍöJB³êm¯5U©jU ¨Ž³š:Ëók«•ˆþE~“®ç™MÕ5£ÄüB×4Ðëkd}$/"g¹JSZ#´óxZߨ1€×:Ž×æ“ൎ/¤y¼î„¹eàçÞN„v-žoF§¢ºձ♩¡ö üvN7cXÓñCpŒìŒçð_²ÈÏendstream endobj 1759 0 obj 4215 endobj 1757 0 obj << /Type /Page /Contents 1758 0 R /Resources 1756 0 R /MediaBox [0 0 595.273 841.887] /Parent 1748 0 R /Annots [ 1760 0 R 1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R 1772 0 R 1773 0 R ] >> endobj 1760 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [220.978 686.632 231.887 699.955] /Subtype /Link /A << /S /GoTo /D (figure.10) >> >> endobj 1761 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [327.153 520.715 332.607 531.624] /Subtype /Link /A << /S /GoTo /D (equation.3) >> >> endobj 1762 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [357.269 520.715 362.723 531.624] /Subtype /Link /A << /S /GoTo /D (equation.4) >> >> endobj 1763 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [466.619 520.715 477.528 531.624] /Subtype /Link /A << /S /GoTo /D (equation.14) >> >> endobj 1764 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [305.423 507.772 310.878 517.347] /Subtype /Link /A << /S /GoTo /D (equation.5) >> >> endobj 1765 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [323.605 507.772 329.06 517.347] /Subtype /Link /A << /S /GoTo /D (equation.9) >> >> endobj 1766 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [319.475 494.222 330.384 503.919] /Subtype /Link /A << /S /GoTo /D (equation.10) >> >> endobj 1767 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [145.03 438.412 155.939 451.085] /Subtype /Link /A << /S /GoTo /D (equation.13) >> >> endobj 1768 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [360.341 438.412 371.25 451.085] /Subtype /Link /A << /S /GoTo /D (equation.15) >> >> endobj 1769 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [156.645 367.91 167.554 381.233] /Subtype /Link /A << /S /GoTo /D (equation.14) >> >> endobj 1770 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [173.754 203.397 179.209 216.07] /Subtype /Link /A << /S /GoTo /D (equation.4) >> >> endobj 1771 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [204.633 203.397 215.542 216.07] /Subtype /Link /A << /S /GoTo /D (equation.17) >> >> endobj 1772 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [494.735 188.207 500.19 200.151] /Subtype /Link /A << /S /GoTo /D (equation.4) >> >> endobj 1773 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [76.242 175.693 87.151 186.602] /Subtype /Link /A << /S /GoTo /D (equation.17) >> >> endobj 1755 0 obj << /D [1757 0 R /XYZ 72 786.278 null] >> endobj 1739 0 obj << /D [1757 0 R /XYZ 263.922 750.413 null] >> endobj 1749 0 obj << /D [1757 0 R /XYZ 197.152 573.379 null] >> endobj 1750 0 obj << /D [1757 0 R /XYZ 195.122 478.166 null] >> endobj 1751 0 obj << /D [1757 0 R /XYZ 221.002 424.922 null] >> endobj 1752 0 obj << /D [1757 0 R /XYZ 133.303 340.871 null] >> endobj 1753 0 obj << /D [1757 0 R /XYZ 202.629 162.463 null] >> endobj 1754 0 obj << /D [1757 0 R /XYZ 194.546 101.346 null] >> endobj 1756 0 obj << /Font << /F30 512 0 R /F34 583 0 R /F28 523 0 R /F15 393 0 R /F31 881 0 R /F33 497 0 R /F1 882 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1781 0 obj << /Length 1782 0 R /Filter /FlateDecode >> stream xÚÕZIãÆrœòtdÓ4káv´'`âC ¤’8Ru‹iŠ”IʳÀÈoÏÛŠ,JìV19 hÖòj{õÞ÷–’Ú$ð§6¹ÞäEë¼Øl¯Ô†ÿ7¾ô´1¥MMœZ¬]!¼õ”·&‹,Eúî^}÷V¥•ÄeRnîî‰ön÷ÏèïíÖÝüûîoß½5IЭË8UçiNdÿEšÍ­Š3£7·sûk7y\æ8²ˆS8Œ‰Ë´$Š„)‹g±5¸¿‰h_ 7·Æ˜èýÍ­."çZ®n»Ãñ4ºÝk®Ö£|‰ÚF®>qiìÖN”صY;6gúaåL…VWÎãË,<Ók"8Ð'.ªÇº}àòip¼õî¿:úñ×§}õãÝt•&ƒèœï°ùqãK?=s¯*;Ÿ ižŸ§§Š™O&SÐצP¼øŒßóYîÝ>KïUÿ(·SáeæQw’[÷Ž ÕñØwÕöF—Ñž[vnØöµ\þN¨¸Ú!ÿ~盛9öu5º ÎÝš.Íä¸í8a%xNiT›Ì0wˆƬpâ/çˤ±MÓë*‰d6˜|•Íï΄»j†ŽKGæã0Ôï·”÷%ÊöøþÛÓèºE~kš¡l\(KšQœk†eÍ(žÑ ýmסfTíŽEöØžiÚ€À%¹úzZ4W¯ÌÒe×®ì:ê¤e¬“bµÏiþÐICÖ®(B ·[°–Hÿá%×jµ¨õ§ƒëëmÕpÓ0Vïëìƒ*6U#G?¬wÑ‘d;Ö9¬N#‡rgµ!È] Ùžú™Ð®?Ô­xàDwìݽëÚLªÃDxÉ?ìë-N†ØfU¨E4r ŽMµÚër SgA+P,Â^ê®å÷]/3zCË“°ïŒIHE 2S€®C×ÈÒ ð5ÍpN.»¾ã^’Ê€Ã·Õ ¤$2ÔDºWF¾½¯ÚÄü0ð¢7×*3Uý°–´5^QFoZpm²­Yt ¥ñvSŽ!–µwàPˆâ>ÂB]¿&ôuóé¦ÈÖî8ÿ]Cžð„|¨$g ü4Áÿ•ž;HÓ“4º?õps=WÜÇ­;ŽN„<Ð@,FÇWï⇘Š*ªïy’3(\ ;àIúr{¹„pPU*‡t¿žÀƒZYÃØØP¬y;I.ñו%@›M:iû­5)r³åã1 Bah:>ª×Ùæàa¥ Á¬&¯¸–ØÇµ"u¨˜'Q? íF?fë…6Œ8®sØ‘Úu†«k gåIì õÂ~z&ð:zè$ðÀÿ;n#c ‚­Ón¯O›JP fn ¤†˜XÀÓoR°»=ý}I“¨q Þ¢ vk®³Ž3?œÖ)¢uÓ𞺶ùÄ›çÔŒB€Ê†Ý °¸w‡{' “žjNÒÛvõ°= ß}wQêÐ Çç·º; ÉUí»f7 €ßðŽÄµðâê·#‘n¶”^à(3–¡¸ðB\`8õý +uªW<ËÉKöP;òâgg}Ú&hE_?Ô ]P›ÌÅíÌ>VÞäXe å=V}ÕÐías¦žÛª4ó½ÀGt°âëÃlcBu­&Lè%DãCh ­?¸Ï5—Á>N•ôáUÝÏj§!ôPš¶[ÄææV)pXßtm‹n1ù“¹f¨ÉÓèçX«ÑeÍmô÷pP3à/ÜÂ!ö]ÓµMqÉq0¾:‰Ó’¥æ®¢’éIÉ·ßj;>“8!Áû±"'/A·£©µˆPa[Ùû…Â=\Âv¤‰qŠÓˆ,ñÖ‡oÚƒ«ZN¶¯™ ¥½Á×û—ÞÄ–ÙGW—ÊøVü^‚YµO .ÜŽ‹¢®”F¼+cËvGRï•#eßAˆ` ºøâ±¸û?äÀšKG¿°á ٳ̢¯ìùpC vyˆÖ‰ë$ù™žÇåYÈ+¸ê£ÈØ3–PΑø[Ðì,×y~ÎIh!ÆÀ€wuª‡=Ï)ú0oS}8$Ø35 ý®Ç C8“DŽD…¦ü3F`“=;;ÜPƒ\´=m”MÀ"•W-’co® u±NÛâk™¤7,RÌÛ¬ûoº¾uýÊÙY ,bhÝ*V*TX,“ ¾ºŽûÖe{fYÀ, X:“›¥r‘Ø ¢wê[YK–àà »™ˆÐiªu[Ù*0!|d*³ÈÑN Ê@g¬¢8}«òÉÅ…§ýÁè£Ç/7 áN@ %ž)dž­Â(U~€·Ëcˆ¤ƒ…i…§Š§6ʳD3á´;.{'˜È=:€aK#i ˜Fبæ4T-7ŠÏçúÁ>ö ¶Í‚€ x¹{á¤Ñfæ ­&€;&À*ÎÙ uhû5ìÖµŒ¸ZŒÖ^Ö] úü<-{=~ð8‹‹"YÒÚ'}ž€2‰u¦¾Žþëÿ·þo«ó ø0¥š+¦L–€}Oè ŒA™xc¥s€xÇ+8´V'-$0c?K2m‹| ,¬£À–R þà€ÆÃ€Î¬ÉŸfÀV‘[eè"_ûC+ƒSÊùK‘+9¿ÎLp~ÈçÇÒR8qŽ…¦] ¦wð4Ø¿¶þà^¼OE…ÉÂïîÔHçÒ¸j°Æ” ž)m}}8¸T:ùî]Ý3ñ%àTË·˜³w7è1LǬ€ÁÝÇ/Q‘ùRЧ¢3eÅâÐq¨§$ôއDõµÓÓvÒæaȽs2xZ)¬†™#œµåY™†¶Sõ²#Ì)Uk.Üa2ié}1ˆbª3¯Ÿ]|IAÆ~A¾¸‰ªw0£Tùù‚¢@îî9ëõè©)Ú‡I‡@¦Ú2D{&bgõJ„ql–» .!Ÿ/OÒ»pã3P˜c‡|rSv¹s™$à°ÎDoI ºÃÙLõÎU2NÙeŠÛHÂ(¥ä1<¸~de¯øsf/,‰Õ,LØ#|=¹ÊLÀÙùb~#~Í‘"Î)†:°S…+ûg€SФBÍ֞ʋ &¶œ™Á¤ §g’{¾¥Xþ¸‘£³4uÕ‹¨•çÅ~ÈrïìòË@WŒ€Yœœ<Ki°×Ó³ªÞID˾´÷ "3Mª%¯¥A®I 9l×a$î„ÈíÙjîã8áò‹ Ê“i+¡'ï1\h‘ fb8ÿn^Ö¿H<ʳøns‚ŸÌðMai›yÇÔvl{¡‚™ÓcïR€Ð|ó³­ôÊkwq´<ÜàÈê i4ìyÒ–«<¡ÞÖhe.ÞQ“8ËsàJZÄI’ÿ·õ5ßJnm^ˆãh#êÈ"0ô£O¡q‘Kà–Pš{Ñ¡Þí)÷^ËpÁ¢ô aúÇr€ó;±³vÎóŠk€¶ «»jØ“DX|ˆ çÆýÆâ8ïÇ[Ì»BY¢{¡Zý¤MÅ8¹éf½ç <ôž€‚~1“{|Í=çé”Ó©¸=°’g±üZ:X(Îy6¢ÐÅô( NkQrv˜,£V’@6ÎÞÌ4h?s}ïhÞu V¹i˜éSb»ÈQ¥gFù‡t>öd;n1•­t¹L€•kH×Á¦¢o:H±“ï^,wÈ^4ÔÚÙtWü¹pLÙv³cJ±cê­øn6冊èäÄè ¢øéËà}%̓Äâž^èÊ5Zë¾ä3ys}î³Yaç Öd ¬·5!Ä žÚ0 ö¾;µ;Ö%*F&º?;NOÙüÆ–kõœ(…r×Ê„áµA•ù-$)àr²|zñÆÈN™9€š·Ú]¿ÂÌ ºD½œ™êÌ|ÍëO8Ad—vg?Þ gìd+ «?æ”}Çl§ÏÞ‹Ò…¬,~™µccçeÃÔ¸ ¹ôNà8/âLëWé7|` Ãßðé|þ w2Ñå/¾°ø\{^O¯\X¢”§ïKY¬²ç1¬øRé§@Òú­-äŽvÊáaꀕÈ\ẌUf±)–FmyYàn6ÌA8ËigÍŽQ"¨2ü!w`Úµ¢©`·(`Óqì»öXÆêe ÿepa1·ª<Ë<@ÃzäÛ…~ò·±cz_üÐiö’8-ôµü‹Ö*6êêo¼Êòâ''ÐU?“áù{õýendstream endobj 1782 0 obj 3336 endobj 1780 0 obj << /Type /Page /Contents 1781 0 R /Resources 1779 0 R /MediaBox [0 0 595.273 841.887] /Parent 1748 0 R /Annots [ 1783 0 R 1784 0 R 1785 0 R 1786 0 R ] >> endobj 1783 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [439.927 748.292 450.837 760.964] /Subtype /Link /A << /S /GoTo /D (equation.16) >> >> endobj 1784 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [412.343 712.227 423.252 724.9] /Subtype /Link /A << /S /GoTo /D (equation.16) >> >> endobj 1785 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [300.393 662.613 311.302 672.31] /Subtype /Link /A << /S /GoTo /D (equation.18) >> >> endobj 1786 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [409.949 179.632 420.858 189.329] /Subtype /Link /A << /S /GoTo /D (figure.11) >> >> endobj 1778 0 obj << /D [1780 0 R /XYZ 72 786.278 null] >> endobj 365 0 obj << /D [1780 0 R /XYZ 72 525.605 null] >> endobj 1774 0 obj << /D [1780 0 R /XYZ 72 448.053 null] >> endobj 1775 0 obj << /D [1780 0 R /XYZ 72 355.671 null] >> endobj 1779 0 obj << /Font << /F15 393 0 R /F30 512 0 R /F34 583 0 R /F33 497 0 R /F39 496 0 R /F37 380 0 R /F28 523 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1790 0 obj << /Length 1791 0 R /Filter /FlateDecode >> stream xÚµYKoÜȾ;‚Èe)`ÕÛ/’M# '16ÉɺÅ9PdKØCŽù­K~{ªºŠÎ %yí†ÍbuuUõWn©HŸŠ2e.:sQ¹¥"ú{Í£¿8mbDbñíÆë™óZ[‘Ëô%þTd0Tˆ>DJð'~õÃÂÍ„Þîuý±{õó«èçW×,ÃÁz†5Õ‘&wQ£nób ™MPЛ¥’HI˜›G7wó¦úWü¶¾Ÿzumu+õúê:5:þ=¾»xØMƒÃ,öŸJßF¢#ǧÁ¾®ª†Ç}}¿»Òy̶LngAu°ï=½VŰ#aI<Œøá±ñbÃŽŸüxÌ8-ò;µö¤q&>€%ô!( OR¦œ¨ùÝ@Ä£(Ëz?øGðF×½èYÄÚx­ù¹÷U=홥kꊇϙò¾kºö~^Å(ò™± µ‚}ƒCf·AŽMÜý½§aðϦmÑÆ‹‹[? AWºY… Gdé‹¡.1…söù Ò9°þÓ_hGr û²˜†ÀCØÅ/agpPvmY Óêg>ù‚6gjƺ½Çצõ­ïÖÜô£oKÿ=Ø.“¸Ÿž¡éAñ…£â6ÄIØÆüaŠÃ¡©ÑŸÈTŸÄP,ìú*€[a=AíÖ—#!€`¤e< AC£ 7Œ}ðébf;œn»Êb„߀Šk £¥ž á—üà#q!’‰²€Ô Z±¾(Ú†õA¸{ŽtñÛ+gãà/üJšhûpšÁ„uà™ŒPÁ˜4þÈî _g³YZpáZü! äˆüøqç{Æ×Á²u YêÒ¨Áßï9vüüÃ[#WPµPÚŒa¼ˆA»(y†Ÿa]òDjÒÀ¢ˆåîN(•EGÌB—+i¥êÙ•Üz%ýÄJnµúUYN}2gT%Ñ=}¿J`¿iðOdTêtÒ1„å 4SXxðmKèù„ É;Í–óNCP<ºÎ­°PÛ×{r¬\·ƒï!•… ͸ö½ª{ˆŽ¹b?¦>¿¤>…9¸ïA8ýû-¾>ÔÝ44ˆY¶ß? |{bài@—ÀQ€küâ'ª¢Sé‡ „”Z˦(;C €Ë(ŠGJ½sCØ`¼Æó¯­6gñ¶çY!U" 4ºmüž'à.S-Q©ÈÍ©ËÉ·ý*’r‰I Á:µÑ0ÂxÿåW0Xo¼v‡åÉ¡YìÅ”%à ¸VØ¿y¤m1NK™§•Sÿp•¤qøHÚ°&tOjî‡`Àú°úD›Ú“­ÂZÐ{Æ8’ZªÕÄŠ>·+ï˜ú?Â)’¹vX鲄²R…@!h5Χ’‚#õ=áoѬõ\Zzœ|Q?xWl<5|‡c»ä¬sVøJ½²-)³"Þ°6tauO¤²ÛïÖÙtÞXßËF¢”“¼Š{aÖÑWeª¦,–éÏ,à=Yc*îÜu°efi¾`¤èA© xI8`c‹ž×ò‰DóŒDë€ŸËø}MM!g.—s‡@_Qø è"lî_˜~€fÚÜf~£Ö2©Ò@8™åŸ_¶KMîÒ—KNçŸ_Ôô+%«•Ê¢%ÇpMÀ…PÃFEk2)²\Ÿ†,ä‚Çp„À|œÄxÞ€|ü“7wVÕô ‰ ³ÿË©@hôÍ‘~saT*àœð²ûR½6êhK¡k E{ïçŒb’ŒóB9v=½Lç·A0õ¢aIBÃºÕ h!MþµÇ©9O Ý–ýœªŸÐ"ý*§x8ŽCužïÃd’’¬E’lx;Ýö¶RpœO¾. ¬ÈŒ^™€ çýa˜ö‹FãnV™Ó$‡-u¤Ù´/Û;’}%Ì•ý,\X»­Eö µxʬµè e×Lû–vDA8í¤“0£'å¤j} AKí`×ÒS¸T lF±bu æbcâáÃDªàÙ¸ûú7XÐ,ŒýTòÛœœ±aöÜ}­T&B(Áðœ—÷g .õ‰hÝ#µ-þõ6r%LhÔ‰ÈÈÿÕ¦s3éпåïQ' C ²ƒósxðÈ8ïv1Û¤ºê™f¹HrpI¤ùrÐfkОž„Üo…Éí—Ã1;ãÑ#¹ÈŒF8›~±CÖw%ÐÒ eQ1©‚ O\™<};òN&RKøUç²UœðK.RXž½Œùófb„*N—Œ3˜Å¿Ù€›c—c²Ä^7{]+€[«¨‘šN¤Ðe[=_è¯XŽóÅ@œwT .jem…;ÕòwßPËÓ³@–ftýÑÍ“—”Âܦë†~i¡k<Y™…ÓÞ†Q©Zmº4FÒÚ%ÄA–$›4wå(|hº£’:|. xC@Ç™\ž–dJfˌ̆‰TL'8?óZC7‹,xŠÿ¶çt †¦n£Õ5;êöq¹øœ #ŒTß®ï,8á$6%E¼7+ú«†Ã‹wÞ:‚@¯ÒÒÓtïÌT¼©ÁS§ m& ?Œ».T"ŒÂ–H{~sãh‘‹n æ>LpŒªH‚©Ð„znÒæKèëë»ëà6R'/å!­œH\N ëé ¤¤<_BãÿYýtªû)¢Îendstream endobj 1791 0 obj 2173 endobj 1789 0 obj << /Type /Page /Contents 1790 0 R /Resources 1788 0 R /MediaBox [0 0 595.273 841.887] /Parent 1748 0 R >> endobj 1777 0 obj << /Type /XObject /Subtype /Form /BBox [-1 -1 400.999 280.999] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 1792 0 R /Length 1793 0 R /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï™kdªà’ÏÈP¼endstream endobj 1793 0 obj 30 endobj 1794 0 obj << /Type /XObject /Subtype /Form /FormType 1 /Matrix [1 0 0 1 0 0] /BBox [0 0 400 280] /Resources << /ProcSet [ /PDF ] >> /Length 1795 0 R /Filter /FlateDecode >> stream xÚíYË®$' Ý÷WÔ4âià ²Ž²¼Êª£‘FºµÈ*¿Ÿc((U=ì’hFjù”ÍËæ`ûje6ÍÿŽß×þøóa¶¯§ñÑ1ú46i½í“S~cÄ; u‘©i@~›HФF^ÆÈbžjÓSÏQ’ça¹Ú´•4 ·Œá†y¾ü'öh¶_›Õüÿw8øÇ0rÝutV+G›I.+o¶ÏÇo] 1k†´ýµª²µf( Öm²ù£Ô7sÑž ©ƒ­•6Ù*b Cã¶àý!¾xŒÂ^kEž Ì3BûÃÙàT6‡ìCÌÊ„-Güb¤&ÇðKešÛ;œ7*Ñf£3ʦÍìØa­&`/Ô岨 >hP=Eyþ‹Êâ¹áè-äÅawÞ^ÃDß#a3áÛ¡2©Ê©ÃU¨L÷~LR}ÆàD£#»¢!Á°CÜtÀ­ˆ]–nœ±½#9Ǥ¢Ù\Ô^yœ àÆ;±¯3 Npqx@ŸCpžzÑ¥¤4ôór&Y¾Ÿ(·¢Ì7BÒ2ƨ5Ú˨™Tn<6«uóÚ¹Ì ÚÖ˜¬,¬|ìËš1ÖÒF…ÄHP™ eq{9 –ª.•kíq)ùr¤WãÇjkRPº­bÄX+a‡±øcsZ¬"È¡l6à~Œl5ˆ+—5ôC^Æ#ãAÉv3™ŒrvË:$Þ'D¡É]–1ÖÚ™‰"©\!:uÈáÎÛ0•+¾ÏÞ肇ëlõûî'–ñ̵DOç6ð..´5|¿]1F~â^…¤FŒIÊa9AšBJ>”,*Zä=¹ ”K¢QÑ4%÷j\Þ¸ˆz|?fkr¿~=V[cÒœ¸ìøi¾Ï9fMÌ«³t2ÊÄÊå(ßAÁ…ÈgmåŒ4¶18ÇFÐ7ͺ£³ß…Êj[™Qüßåþwìñ;{Úx(oÚØ mé’:6g~1¬¯×òH{D›Ïž©Ú ÊÖ´Lºf,Åo¤í€OÜ¢ô[æ_O“eB2c{GS›-u‚í[ûp•®§nà¤ñc=äÅø*+èžYÓƒ€£†g­­Mï9¿Âæ#o'uYvÆflïÞ Œtíõ¶„²f‚\ ÀÙàϤ§ßJª{o/zIBµ‘ÀEÂÑMJNв›Ds¡Acò)ÕÆ²…ZÁÃgPºIuþƒ:eѱOØO”po NŽY§¥ ÙS‡8BJÓ«9µ šoi¹6W¥wZKï!åÖüŠR¥îç@ôkŒRÑ×MÿƒþAÿƒ–Ù;y'•MÅ_ ä¹O_áB^Ô}Ú®4çV©¦È âtPóˆ0²g{ªÊÝí驪À@X¦RWC3gª¾‹%;¼8c{GRÙKÚ\¡‚Üw[O-ÈžHoÒ¸vï¿°mendstream endobj 1795 0 obj 1815 endobj 1792 0 obj << /XObject << /Im25 1794 0 R >> /ProcSet [ /PDF ] >> endobj 1787 0 obj << /D [1789 0 R /XYZ 72 786.278 null] >> endobj 1776 0 obj << /D [1789 0 R /XYZ 128.284 418.427 null] >> endobj 369 0 obj << /D [1789 0 R /XYZ 263.359 156.415 null] >> endobj 1788 0 obj << /Font << /F15 393 0 R /F30 512 0 R /F28 523 0 R /F1 882 0 R >> /XObject << /Fm25 1777 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1799 0 obj << /Length 1800 0 R /Filter /FlateDecode >> stream xÚ•TMoÛ0 ½÷Wø¨‹j}ZºXÛeÀrÛvpc%ÑêÈí.Ø¿?œ¢]PC€˜¢ŸÈGJªªá§ªFWMðR7¡ÚïTÅ¿§êb}#­3ÒY\Ý®/ȵq2x‡ø›»ûå*UËXÇj³#ì¦û.æCZ­MP¢¤¼?¬t«µnÄ0æ²ÇZLiLeÎyB¹ðÎK0 ÷¹´=»Oí|`ë×Ë0£¾ðGâÿÉß§ÝÌV[:ÞºyõsóŠY+¬:RQKF‹sî1)cD7ðw¢¯óÀyHŠW^FãßlèpÅS¦3ˆ²c–Å郳Ï%aÞ.ˆ.MÛ1s©cl»è‰ÒþÆ¿…5O {¡­saŠvÂ|îL|Õ,í•ÔÚ,-;æ9+§É)Ñ- Al]’#š7=FÚ`ÉݼÙ€± †ê¡’k£I!¡¨PÕïkQîÆÚ* xÅz:‚æã‰…˜ Oë­hñ£!q¨‡Í¡ð—ÚŽÆ9wØHëI.*µÅÅvK'˜0uÖzáíÌA/DÉ{2¶s†S®+7pgT0·j7Ò7—Ú¡ >Ñà\<:O\¿;¼~3O¹[°y‹E¿Ì`#Δ1z¾"b˜æo0G'ò99È~DȆwi×>÷3 A€,“$Ó‹ç‰æÃ[ãÁ å|¢â¾$†¡Î¸Uó’®®Û%$—µ²ºÀì<Œ×WÚJ3v÷ióò6ÆÇ(µÕ·^1­‚t!òs÷þó¥jõïÚX~ÿ¡ü Fí[×endstream endobj 1800 0 obj 600 endobj 1798 0 obj << /Type /Page /Contents 1799 0 R /Resources 1797 0 R /MediaBox [0 0 595.273 841.887] /Parent 1748 0 R >> endobj 1796 0 obj << /D [1798 0 R /XYZ 72 786.278 null] >> endobj 1797 0 obj << /Font << /F15 393 0 R /F39 496 0 R /F27 394 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1805 0 obj << /Length 1806 0 R /Filter /FlateDecode >> stream xÚåœíoœ6Çß÷¯¸—´RüöË\’Ko½dÑrK+mÓDÁÉYá R%ûëgCNK×Îö–(ªD*|ðïñk0ó嘅pÒÀƒ!ÅÛ7`ÖüÜÎvGåÿ5gb‚<‚Õo='¾ÛùbùAßù¾<1ð°Õ‰óõ›÷ Hf{³õu}Ò:ùõíâ€á·÷Y\‰<;x‡Büv™%üáà÷õoNÖÏ®Æ<¡ÆM‘ïQŠÿ¾i8¾|^öü¦kðÇááB¤éO÷U*2þ›O|ù¨»¾_òìO€<Ÿ²§?üáŸÏ|æ…$h^_ó¾|²ÝÑÇæ!¾¹âî!‚àû‹Õçô€¾D¨!a°§¼š‹ª¼àÅ…xài0$c´ÁúÖ#€ Œ%hˆ‡ŸÑãU”Þó² Wš$Á¸‚Q´l<­|ǰ´´q¥åÀ´ãC¡uÞУ2,Ô¼D÷òÅàj ïùé+ã}eã{ùÚ¢³>ÚDE(õ=Њ)KŠÇ k8š’…u¦ ù¹‹RŽ¦ßŠÉ`ýZG`R<~0eÁƒ)Æù2R-у]ñ¯>jjP§xè˜Aý™ÇÕ‹÷PéÄC‰ÝÁ¼ÜFEµ[™fœäÓÀ·›OkÞ³<éîí¨GAÐJ Hýž-ÓÊwŒH["»é@eÀ i5cê!ìÏ[–3îÁÎ.•1°½]Çž™m‡•‰!ªd¾”yz_ñ‹¨Ú¸ "L<'ÕÔ$YäYW– ¨ÂV ‰ô•Q Ç'S™Û‡2GU4Jî¢@‚¡=-â[ÚÏ«Åq± 혴1ÆõÍ-#"]g¯ó…Hù%ŠxÓã¶‘©5ä£ oO²DDÙ´¤G…b8¡v–ujÐE^(›^;©%0ÛO-A´a—™¨\$ž)¤ÏQ*}UVù-_¤Ñ“®5°”Ò¼ä+ñ¥3Ä2*¡Övx`”«âñ®*{+eGÚŒyGÕiúx·)]/²W55¨OsWeoP M48ÄZƒs”ß=ö‰†Œ7`öŒ÷î±6Ý>½ì_pAû\ˆdÿ„«©¢aŠÅ,ŽyÊ+~˜¦—âOGþ‰5ÿlhO²8Oº5s´ˆY¦í‰G¦DÃU ­â˜Ê~]`úÖ0ï·w®âî„.f Ð­({ºRC”î§üëÏ-'ÏGnI¬Ùkƒùá,ª ñàdÕAÖV-5°W.a±5X½Õh/ 8ZœåÛ;55®T©³QÔr[ÚÌF…ƒx]¥˜ UàÀ£(ÿÿæÛŸgNyu¸8SboŸÌk®´]ì M Y‘ {½U°çÑ–O…•ZÑÔ‰TýirE›¦*,)ÚÉ YFi‚˜NÓáÚ¹¨¶‘, “>¹ Ë ¶&—6ë°æóüÁAlÂöRëh³¥ƒ°âÔY¼o*.Øf\R´½K<ê2ØDkUðë'‘ô/}0•0±•4Ë`cé& -¦›ç´óÇz—O4Á2LµC`ì’¥)Ð!T“} w²h/®¹V‡Zku¾åqw…@×Ê€h­ËZ&Ƭ6+ýD´¾Œ7¼»F6¶rûÖVî+àZ•™ÖÌŽ2d2¸™m¿ÖwÈ—?N"š $Èò¡A1tmEúØÛ*0¶Y诨2æYÚô,¥^»jR°Í&Eê¨ æÚlf±îÙÑöYñ–èºê?íÚð}š¾ Ðe¹<¹UìÈ|±Eg]VQ*âÃì&u£+`«ºÂG^dÝ¢‚Ɣ鸚5œ¸ýiPf]ñlyÕ7û÷>û=A8¸~L1Š/Ë„wΛ HÄ·¨ü­DÆ/òR¨†¸‰GÈb> endobj 1807 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [181.756 711.087 192.665 720.784] /Subtype /Link /A << /S /GoTo /D (page.66) >> >> endobj 1808 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [204.665 697.538 215.574 707.235] /Subtype /Link /A << /S /GoTo /D (page.58) >> >> endobj 1809 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [193.21 683.685 204.119 693.685] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 1810 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [198.937 670.136 209.846 680.136] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 1811 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [198.937 656.587 209.846 666.587] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 1812 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [198.937 643.038 209.846 653.038] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 1813 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [198.937 629.489 209.846 639.489] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 1814 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [204.665 616.243 215.574 625.94] /Subtype /Link /A << /S /GoTo /D (page.58) >> >> endobj 1815 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [158.847 602.694 169.756 612.391] /Subtype /Link /A << /S /GoTo /D (page.57) >> >> endobj 1816 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [164.574 589.144 175.483 598.841] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 1817 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [193.21 575.292 204.119 585.292] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 1818 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [164.574 562.046 175.483 571.743] /Subtype /Link /A << /S /GoTo /D (page.58) >> >> endobj 1819 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [158.847 548.497 169.756 558.194] /Subtype /Link /A << /S /GoTo /D (page.57) >> >> endobj 1820 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [164.574 534.948 175.483 544.645] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 1821 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [198.937 521.399 209.846 531.096] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 1822 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [187.483 507.85 198.392 517.546] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 1823 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [170.301 493.997 181.21 503.997] /Subtype /Link /A << /S /GoTo /D (page.57) >> >> endobj 1824 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 480.448 186.938 490.448] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 1825 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 467.202 186.938 476.899] /Subtype /Link /A << /S /GoTo /D (page.66) >> >> endobj 1826 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [147.393 453.653 158.302 463.35] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 1827 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [193.21 440.104 204.119 449.801] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 1828 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [216.119 426.555 227.028 436.252] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 1829 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [216.119 413.006 227.028 422.702] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 1830 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [170.301 399.456 181.21 409.153] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 1831 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [187.483 385.907 198.392 395.604] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 1832 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 372.358 186.938 382.055] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 1833 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [193.21 358.506 204.119 368.506] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 1834 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [153.12 345.26 164.029 354.957] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 1835 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 331.408 186.938 341.408] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 1836 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [187.483 318.161 198.392 327.858] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 1837 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [153.12 304.309 164.029 314.309] /Subtype /Link /A << /S /GoTo /D (page.69) >> >> endobj 1838 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [158.847 290.76 169.756 300.76] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 1839 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [170.301 277.211 181.21 287.211] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 1840 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [187.483 263.965 198.392 273.662] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 1841 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [187.483 250.113 198.392 260.113] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 1842 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [164.574 236.867 175.483 246.564] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 1843 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [164.574 223.317 175.483 233.014] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 1844 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [158.847 209.465 169.756 219.465] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 1845 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [153.12 195.916 164.029 205.916] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 1846 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [164.574 182.67 175.483 192.367] /Subtype /Link /A << /S /GoTo /D (page.50) >> >> endobj 1847 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [181.756 169.121 192.665 178.818] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 1848 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [181.756 155.572 192.665 165.269] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 1849 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [170.301 142.023 181.21 151.719] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 1850 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [198.937 128.17 209.846 138.17] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 1851 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [158.847 114.621 169.756 124.621] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 1852 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [170.301 101.375 181.21 111.072] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 1853 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [187.483 87.826 198.392 97.523] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 1854 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [431.688 711.087 442.597 720.784] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 1855 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [437.416 697.538 448.325 707.235] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 1856 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [420.234 683.685 431.143 693.685] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 1857 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [414.507 670.439 425.416 680.136] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 1858 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [414.507 656.89 425.416 666.587] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 1859 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [431.688 643.341 442.597 653.038] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 1860 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [425.961 629.489 436.87 639.489] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 1861 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [420.234 616.243 431.143 625.94] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 1862 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [437.416 602.391 448.325 612.391] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 1863 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [477.506 588.841 488.415 598.841] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 1864 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [443.143 575.292 454.052 585.292] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 1865 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [454.597 561.743 465.506 571.743] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 1866 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [448.87 548.194 459.779 558.194] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 1867 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [403.052 534.948 413.961 544.645] /Subtype /Link /A << /S /GoTo /D (page.51) >> >> endobj 1868 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [420.628 534.948 431.537 544.645] /Subtype /Link /A << /S /GoTo /D (page.52) >> >> endobj 1869 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [425.961 521.096 436.87 531.096] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 1870 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [448.87 507.85 459.779 517.546] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 1871 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [414.507 494.3 425.416 503.997] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 1872 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [437.416 480.751 448.325 490.448] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 1873 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [437.416 467.202 448.325 476.899] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 1874 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [414.507 453.653 425.416 463.35] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 1875 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [414.507 440.104 425.416 449.801] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 1876 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [437.416 426.555 448.325 436.252] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 1877 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [431.688 412.702 442.597 422.702] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 1878 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [408.78 399.153 419.689 409.153] /Subtype /Link /A << /S /GoTo /D (page.47) >> >> endobj 1879 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [397.325 385.907 408.234 395.604] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 1880 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [414.507 372.358 425.416 382.055] /Subtype /Link /A << /S /GoTo /D (page.50) >> >> endobj 1881 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [437.416 358.809 448.325 368.506] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 1882 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [443.143 345.26 454.052 354.957] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 1883 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [431.688 331.711 442.597 341.408] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 1884 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [431.688 318.161 442.597 327.858] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 1885 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [460.324 304.309 471.233 314.309] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 1886 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [408.78 291.063 419.689 300.76] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 1887 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [431.688 277.514 442.597 287.211] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 1888 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [403.052 263.965 413.961 273.662] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 1889 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [425.961 250.113 436.87 260.113] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 1890 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [443.143 236.564 454.052 246.564] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 1891 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [431.688 223.014 442.597 233.014] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 1892 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [425.961 209.768 436.87 219.465] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 1893 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [431.688 196.219 442.597 205.916] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 1894 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [420.234 182.67 431.143 192.367] /Subtype /Link /A << /S /GoTo /D (page.52) >> >> endobj 1895 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [466.051 169.121 476.961 178.818] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 1896 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [471.779 155.572 482.688 165.269] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 1897 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [408.78 142.023 419.689 151.719] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 1898 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [403.052 128.17 413.961 138.17] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 1899 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [391.598 114.924 402.507 124.621] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 1900 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [431.688 101.375 442.597 111.072] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 1901 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [420.234 87.523 431.143 97.523] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 1802 0 obj << /D [1804 0 R /XYZ 72 786.278 null] >> endobj 1801 0 obj << /D [1804 0 R /XYZ 72 724.167 null] >> endobj 1803 0 obj << /Font << /F25 380 0 R /F27 394 0 R /F15 393 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1905 0 obj << /Length 1906 0 R /Filter /FlateDecode >> stream xÚåš[oÛ6€ßó+ô¸ Ë«H=&µtuÏZÝ0°6c ÖÅä`ý÷#} ººÚ¢€†Û %}:â9„¨_ÈáØá˜ g_!çðÚ8§OŸôo‡‘”À¨ùV3ðú4òš0 \fÆßWï}Ì='xÞ –_ ÐßãT.ý4)þ„ ê7z÷Wðû{±Fs ôVùÕ ¸¯{ |80óÕü¸qNŸ>vþŸÍvNøÏ›:Ž©‡ô0€Øs®‘aõ0®Â…Œ&iašÌ+X†:¨ ax„wÁ´3."ê6æ}I¸ÝE²PY¬«h¡¹¥´ˆ*HZ·{pÍ9&>ÐÖ_Àa–¥Ùýƒ,²ðŸJV ðJY¡8s»°2r+®ž¥#»‡ýü6`G7ÓÑ,˜<}| *X=ˆ‹ËQé>Wt¹†Ï@ETç Ñu’…I¡ÓÔYÙÊÂìTöýCoMVÖ2«º€ ³Ò¨±Ï€¹Û=ªÔ¢vÄãp•W€ (­7ÚíTnèÕ•ï“C+Ê9B³Ýv›fU"af£´¼¸"€QX|ÆL% ä5­6S¥’EºT5ÊÔ[N"žµœ4UÚ Â—:‡è/ýr{¨i¡e©¶ªö†Ê¨5Ô™aõ´+¢0QƒD•ÙCUÅÍs쇑z”±ªÕ`Þƒx nF{±ÜNärˆÀbj3°5úà m¥ëÎô™íÏî…F—r¯jŽˆsûBxÆ:µ¥jÆ;õ,wQ1255LVƒ!…Ö„pOü.ÔTåi´3͈*7D”h9,EÖ;7]ËsÕ…ÚYd“gJf‹u];3àyåÀZÕÌú± ð.¡ƒÀ8m¬åðNòVæjæ—Ñáö´ó±W9‰yUÎB”îwn™1¶ZUŸ±–§S7qˆSkë#l°›Dåù¹­Sa—ïWÐm‚›®ÆêEEU…€KJk‘'ö•Þn3Æ´ô0jUЦ2/TæG²²AÑŸ lSާjQ aŒì"ÆØœñÿ®Œ3½H¯4ž:j„Ú꨽RVÅRhW‚¥®¤Ï«‘–‹5JAD§Ú¢´hÊt£Læ^³v/ãöK¸lpK®tË\›évŽÐDf2·èE‹½ˆµ^Ùܿ֡Aýü6P#™5=þ¾ê ƒÖêL‘ÌýäŒá2wYDSaj"Y_J™íúòc-mÊÝ·\qrj3xšÜ÷µô´>;牀–ë³ “IþœfqML{´#dÍŽ^aël髥ºk¯é¨4w£/YX¨ÿÁ—QôM.6¦;:D˜#k=àùÇX®”Ÿ¥ñoÑ÷ízˆð ÷ìðš‰Æ½ºñ ÀÄñ,–ÞÚÏ„‰vFÊé_»ñõwendstream endobj 1906 0 obj 1072 endobj 1904 0 obj << /Type /Page /Contents 1905 0 R /Resources 1903 0 R /MediaBox [0 0 595.273 841.887] /Parent 1952 0 R /Annots [ 1907 0 R 1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R 1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937 0 R 1938 0 R 1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R 1945 0 R 1946 0 R 1947 0 R 1948 0 R 1949 0 R 1950 0 R 1951 0 R ] >> endobj 1907 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [153.12 748.292 164.029 757.989] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 1908 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [198.937 734.439 209.846 744.439] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 1909 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [187.483 720.89 198.392 730.89] /Subtype /Link /A << /S /GoTo /D (page.67) >> >> endobj 1910 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [181.756 707.644 192.665 717.341] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 1911 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [181.756 694.095 192.665 703.792] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 1912 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 680.546 186.938 690.243] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 1913 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [153.12 666.694 164.029 676.694] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 1914 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [210.392 653.145 221.301 663.144] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 1915 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [158.847 639.595 169.756 649.595] /Subtype /Link /A << /S /GoTo /D (page.47) >> >> endobj 1916 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [193.21 626.046 204.119 636.046] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 1917 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 612.8 186.938 622.497] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 1918 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 599.251 186.938 608.948] /Subtype /Link /A << /S /GoTo /D (page.67) >> >> endobj 1919 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 585.702 186.938 595.399] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 1920 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 572.153 186.938 581.85] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 1921 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [187.483 558.604 198.392 568.3] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 1922 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 544.751 186.938 554.751] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 1923 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [147.393 531.505 158.302 541.202] /Subtype /Link /A << /S /GoTo /D (page.33) >> >> endobj 1924 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [153.12 517.956 164.029 527.653] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 1925 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [210.392 504.104 221.301 514.104] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 1926 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [221.846 490.858 232.755 500.555] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 1927 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [204.665 477.309 215.574 487.006] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 1928 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [193.21 463.76 204.119 473.456] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 1929 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [216.119 450.21 227.028 459.907] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 1930 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [193.21 436.661 204.119 446.358] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 1931 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [198.937 423.112 209.846 432.809] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 1932 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [170.301 409.26 181.21 419.26] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 1933 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [187.483 395.711 198.392 405.711] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 1934 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [147.393 382.465 158.302 392.162] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 1935 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [153.12 368.915 164.029 378.612] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 1936 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [158.847 355.063 169.756 365.063] /Subtype /Link /A << /S /GoTo /D (page.34) >> >> endobj 1937 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [164.574 341.514 175.483 351.514] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 1938 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [181.756 327.965 192.665 337.965] /Subtype /Link /A << /S /GoTo /D (page.55) >> >> endobj 1939 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [187.483 314.719 198.392 324.416] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 1940 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 301.17 186.938 310.867] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 1941 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 287.621 186.938 297.318] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 1942 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [176.029 274.071 186.938 283.768] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 1943 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [158.847 260.522 169.756 270.219] /Subtype /Link /A << /S /GoTo /D (page.50) >> >> endobj 1944 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [153.12 246.973 164.029 256.67] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 1945 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [164.574 233.424 175.483 243.121] /Subtype /Link /A << /S /GoTo /D (page.55) >> >> endobj 1946 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [164.574 219.875 175.483 229.572] /Subtype /Link /A << /S /GoTo /D (page.74) >> >> endobj 1947 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [170.301 206.326 181.21 216.023] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 1948 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [181.756 192.777 192.665 202.473] /Subtype /Link /A << /S /GoTo /D (page.51) >> >> endobj 1949 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [193.21 179.227 204.119 188.924] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 1950 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [221.846 165.678 232.755 175.375] /Subtype /Link /A << /S /GoTo /D (page.71) >> >> endobj 1951 0 obj << /Type /Annot /Border [0 0 0] /H /I /C [1 0 0] /Rect [193.21 151.826 204.119 161.826] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 1902 0 obj << /D [1904 0 R /XYZ 72 786.278 null] >> endobj 1903 0 obj << /Font << /F27 394 0 R /F15 393 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1273 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 1953 0 R /BaseFont 1959 0 R /FontDescriptor 1960 0 R >> endobj 1953 0 obj [ 529 816 762 593 653 686 707 762 707 762 707 571 523 523 795 795 230 258 490 490 490 490 490 647 435 469 707 762 490 840 949 762 230 311 490 816 490 816 741 272 381 381 490 762 272 326 272 490 490 490 490 490 490 490 490 490 490 490 272 272 311 762 462 462 653 647 650 626 704 583 556 653 686 266 459 674 529 850 686 722 623 722 630 544 668 667 647 919 647 647 598 283 490 283 490 272 272 469 502 435 502 435 299 490 502 230 258 475 230 774 502 490 502 502 333 375 354 502 448 666 448 448 425 490 979 490 490 490 ] endobj 1954 0 obj << /Length 1955 0 R /Length1 1956 0 R /Length2 1957 0 R /Length3 1958 0 R >> stream %!PS-AdobeFont-1.1: CMSS12 1.0 %%CreationDate: 1991 Aug 20 17:33:47 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSS12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /BUXHDC+CMSS12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 46 /period put dup 55 /seven put dup 66 /B put dup 67 /C put dup 73 /I put dup 84 /T put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def /FontBBox{-62 -251 978 758}readonly def /UniqueID 5000804 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ\ôéÒ@[I‚vù“btn—2}|Ú?Wsà­·3J “Ô ‚úBª±XŸ}`¨¬z–¿ŒZ¯æÔ'¦ýÞ¢þð¸«Ã|m¶,‹@tÍl8TÌf头Åùë½÷«RBÍÙØ¹ËR+Ž©rðèúöƒ u l‚†«4œ$ À,÷óáSÃI˜bÍtÀ¶4=WJ¹nº”´2ÐÊÃ"@ÝVžc›JÏ ïêÝð`eQÈì„§¦õ‰´Ú¹5þv3*VGÚ¹q‰uE1ue”ÕÝó©¢ââ$ÞÚx­ß–n瑇,‚Ý|;×e÷.|© ¬–˜£Žº%M™çÜ£IæP,˜ø”™N÷ ®íyÑñ.¡±‹ø¼;X‚²êuXQê -z%?m´Iÿ+%÷¸8[&¶»³,œ‚ðE¢âLXÙ¡3Y•2~×S½òå‡ý‰Âp°yÎ]£Ì U㫜@fÍ'?æíy.*&·$dž“)ÈôbSETo»gߎ—ÃöYCJ¨ÿfü ™áÝŒ?‘Ôoß²­Ûo&ÿûX¸Š%¶ïâk¶\ä¥9ëlÕqÉOís]a#áuŶßút1\vƒ÷'Ôj¹2‡ú’â¾&k¯ а:S|öµXÀ&Žƒ„§_éx%. žÐ)Îà~ab>Å(ºñ£{Á@ìð—nˆîS>·!f Òð%+2× \Ïí`í¤ÕèΘ,)¯ìxÖÔÒ ò< é³ÁM­ ~Q„Ïæ•˜šòæÝN´ZGp–¨Ðñç…tAÌèÚPo²„ó§˜6ühÒsàÖfy÷I¶§€;àâ̾¸©ô¼”d<&>?iÝÌKí…8œo¦`Ž%‹Nó{ª—…ŸÃV¶óŸ;õ¯öŸWhÀtO¼´’q®¯_¼qâŸÐ˜Eyz–>“7!µ-tÒ&/J¹Ž}ß09 4ø€8pþç&üåïDueXœ¬rý òÖÒF0íá#ºÃÏù•‰–V°’Rtbø«Lm¢•˜ƒd©·VÝó@2´z«Bé­š˜wÅþ~© ¥,ØÁ”O.µì~³ UbtãÞHi|îiê¼õi\óo‡†Sp¼:†QåI%}ˆÄvÛ‰Ð|Ö~ë,A)æýy¾4»Žæq¬Êçô0X×À‡L%ó±Ã•¹˜ä-x«µš…™ç0¦«-Û¶(§ƒßöwbÇ.5`FM)´)5ˆN&jç ¸9 ²LŸº2ä³­tm[z+*ÒÃ,³wÿuIOiâa’ÌÅæÉ-Ÿd¾fûÏ;¹'¢…4x”;ƒ‚#Z"+ %ä­ä]r»£OÃ!g÷Ýq,V|ÅÜ$2Áò† ï¤[…† D£lc#‡•¦ðKNÆàØtr¾›/I&TKÓP~w6¿Z!bfƒ: §àõŽåÚ¿Ôgà­¶»0,®ÞGÚ(k×#µ%o?)Awù¨‹•¥(„nYÚôj){÷ê]0S^Ä­Œ`ŒûkðŠâ—W=ijžYVtíZt†L¶ṫqiö‘Å®{¼ß”\žÅvç~z¸ÖR´_}>7åPd§¼]JÓA†= tÀ·éˆô‰±Â6ßZvžJ¿þ~ïƒQw¸¶5°ÿ¢=¸˜©B¬ÏIh?¶ç6GÛÀª ç©BÊ0t´#=ò!#Jd™„·Â·×aŒž´Âîî—ãG(Šþ¦T ö–‡ƒõµ¬ X60iÅÐ'ÃÄ¿F14 èZÄFé÷+áµÁ+/0—|¯ZеŸ²öj¸÷ƒVÍy:²ÎqÚt¶ðë®gÜzü?à¹8è°²SÓ¯s0¸6®t¤áäÓù=J’‘‡F–ak ŒÔŽJë7¼Û¨EdŸä¯¦Gë†ÃänQ’\L!U›,ü2']Éqøl;â>Kgõ0Ý>ñÕ­c „s-Œ=¨!ä¹âa4œ+¶œ´=CŽócR¿L.1AeØItÆêqÇcÓ>2Ÿõã~ý„Ü/™âÜúŽOZVgq˜eí) }vð:*#-x”†ûÉJjvò_È£úè‰8„_³6]×z"¨úõÞ¢Ká£zFR¢ôøbÕˆ6&®iÁuÒ¹ˆ½c-„$ÿ´\Îb”ε2‡­¬vÓ§%"GrÒ‚òSì×ÎütÃTÔC?®ÇþH׬.^xÚLí~ÏmúÛvÚã$…Ãnné{gâZ_\6 £òÊâJLú±?•qs …ñ¥±<”sSåê|RiÒwM—®¸ »¬ßŸ(#—òM½G¤é‘äW§ÍÖù;ó‡nšE3Ñc\kû—Ve†åÑʯyÊ!å{Ê¢/Z¿R )péç!="á#Ü{­µ–ºÝ]ˆÇÁò ‘«C˜+%a<‘ؤËrV[s€žàÁRâ'G³Wì9$1oµÉ~mÜ÷Õ‰?`FÉØ Æ£ #@¡”ÓþÏõ=(+†ÝFɯË(Æ]è.ºSK׳ð6·ÐF*¶ÙòâÏJEÖˆM&2âÍ Ô!E.­8¿ ² !/ó‡wš›àz!%Ná6Íí~ ¯ŸI¢°!Z"+ŽŠ†#Ù…LWIx̃âkÿéÖÓ1Ù(³Ê9UóÚü–¥Ñ#öÅc°B×̺ã|®Ìr Ö+ÝÁgÄ÷ïšéJÊU€’¯÷løÚOE µó[ÍYrQÉ)làêHèÅ;šß$Øaˆ¶¾ç=ÌÉhØO‘±u=ÇCˆsh@fHáANÚ“9N^ú IfÀ֯Ɠ¶Þ—š k¯T®^³uÊ[œDZ± CÖ»Ú‘þ9=ñ;vÊ.îÃl¸”À"²1 °™9Å5ÂÆã´mFûõcZªÐ/¹m'l¨x\$¹WÐdµŸTÞ(ÊZ{¶Â7 Äç«é!LÆ0îÞæR†ÈÎæ "nWäø4¸¤ê3´øØK¬¥—Ò~vö³ÅßlôGió¿8Ñ'“Ùx=M:‘3R/4z~rÓ¹¿T@PV8 ™KØ<´0½@%6›÷,°”iëÁwqµ7ñãm „¾ —¯Ò5‡NúÿÁeª…§´_7ÇÒƒYpŸ{6fµ©¢„’¯¨±8€.K·Z:=`G4B’‡Q©ã¡"À^šMW.¾Àf?*¦§«7…¯2Ú¿9ƒ!I»Ú‡`­!L‘eF…£V›û ¦c3–qó`Àƒjç½—[D&Ö4xÖ¾ñë:ôÄ%âb¸*œõ=Q˜gGäŽUåo-Wp?8™¤Ê/L}Ò öÂåÑ­Oÿ+›]«,!*®>·ä„ª pô{Ò$½Û¼ËWÆõ“æe›Òççèl&=&pkbQáàÖ Ò Ø}J‰t“ ÍSÉ̬ùÉ¢Ö‚½" 7€Ä^þáŠÉ(,MäQóª°KÈÄq6Öõ=%ƒì– µ>&މXÊÅ%Ù»·ª Ÿ&ô¹ È©£`YѨ¤;Åû¥ßÓi¶¯°äa›C¢i›2²Øóã°sÐôaàsÊÖŠ wü%ÓÑIÅçØ’?SluaØvHæÌ*r§ˆS8¾•ÊÒXuzŽ16%ò{Ñò+¶QûÛþ^à9ù³õà“D«! Âß$³õ÷Jùô­æ„Äé÷¿vW-†—-§¥ŸÙ-˜Ò7NÜñ3ö-x'r‹ür°¬ÕŒoÁæàí£”.‰©©ÏmåíĘFÛxL¸süÉÕ)PmåF]qŽ€¹ì¦ËØÚÕèɪšIëÓQ+Û@ä¼£ ·ÇOH;1¸x;CÊØ[¤»š^(/¼0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 1955 0 obj 5846 endobj 1956 0 obj 1196 endobj 1957 0 obj 4118 endobj 1958 0 obj 532 endobj 1959 0 obj /BUXHDC+CMSS12 endobj 1960 0 obj << /Ascent 694 /CapHeight 694 /Descent -194 /FontName 1959 0 R /ItalicAngle 0 /StemV 76 /XHeight 444 /FontBBox [ -62 -251 978 758 ] /Flags 4 /CharSet (/fi/period/seven/B/C/I/T/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 1954 0 R >> endobj 1272 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 1961 0 R /BaseFont 1967 0 R /FontDescriptor 1968 0 R >> endobj 1961 0 obj [ 581 917 856 672 733 794 794 856 794 856 794 642 586 586 892 892 256 286 550 550 550 550 550 733 489 565 794 856 550 947 1069 856 256 367 558 917 550 1029 831 306 428 428 550 856 306 367 306 550 550 550 550 550 550 550 550 550 550 550 306 306 367 856 519 519 733 733 733 703 794 642 611 733 794 331 519 764 581 978 794 794 703 794 703 611 733 764 733 1039 733 733 672 343 558 343 550 306 306 525 561 489 561 511 336 550 561 256 286 531 256 867 561 550 561 561 372 422 404 561 500 744 500 500 476 550 1100 550 550 550 ] endobj 1962 0 obj << /Length 1963 0 R /Length1 1964 0 R /Length2 1965 0 R /Length3 1966 0 R >> stream %!PS-AdobeFont-1.1: CMSSBX10 1.0 %%CreationDate: 1991 Aug 20 16:43:06 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSSBX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /TADAAA+CMSSBX10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 78 /N put dup 101 /e put dup 111 /o put dup 116 /t put readonly def /FontBBox{-71 -250 1099 780}readonly def /UniqueID 5000806 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å– ]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 1Üh©{]N À${ãéEV´žN¯n©Ÿ @Q”ôØÖDòáðè õÇÕ•…Á®FÐ%¦|Õ¥žËÞ*¯‡÷%©„5‰3…Ænm« 2tº\Ü™-—fÛ9bÔ†âh%P¯ÞËËv¢ŠAw[.ôv|¤(cn¦ž€³¡Ó0`¹ð%–ï$1ôS'Ë»Ëc] ÆF—gYå.°že· §¡n¶^½&-½¦–Mk‹Â ¹rÚX Éúg¡¢k›Éq*šZø#CÑkÌT/‰ÒŒ ¨‡\é Ѩúúeø“ÊF/Ú©n*q«È©¢ ç®°äZ:ÞWê#·R’B{(-œ!×e¨Æ‚z÷tºï¢MË-²$Ê<8î1£é™_°‚ºø?Îö:Se(ƒ”(­ŠhòT¶\ìjÛÛµ$Ôc“ˆ7J\tÄmòý0Ƕ•í2¿ûQNDK±ó¾öCÒ»ü²”©‡‰-¶1°›Ÿ$†ãúôO8éù@TH­;‹`8Å/ætÎ#ðŀ‘µZp¾R¸YJ”X52>ÇçŸV^– ^X™ u,àMòô¾‰bÍ!-ÀH 3ÿ•aX|Ÿ+ˆc‘SÏR£ aÈ‚JÖÞG¿Ë CqsD¦JúIˆñŠ%iÇà òK9^P(w˜Vx>Ô=Ž+(!çÌà·@´ Q+幨Dmöóò“E''EË#Úz¢æÿYSrJ:GQýÔå Óÿ¦öÉ]œ–.oEBm@!‹=‰D¢tzð•YvøÝ“Ê3“åt¥Ÿ 39!ñ‚.Øeå‡A*yR¥އH[”ÅÉód{èÎèÕlÿQíh¡lÏÙL[§ã¢Î¶ªc˜‡7‹W0™ýáý:•N6‚™í1È,][Ï3Á_†½#M脾E—){“3Æɼ“åHŒ Ø©ßÙ‹¿Èbà±@³PÌ’uö²¹SôEP"{Ê®m• oL£÷ÎÃÑ]“nà„ ÎƒÅøâMmÇÍÞ JÝW¶«¸Rc+RM«4]kÆPÁÙòMvÚ­K”á2Ÿ“KrQ}·à´u!¹-w¯|²0‚J¼ŠæŸF¹ìÇÆ­_¿*TàϨf­nÊó†;#u›JuÒ] }-8ÕðA¾…û{¾O=çâ÷N­ûí÷äsñnh1Pžo V©G$ÑÈ\ó ³Ðþ/þþůNúOƒÁH¢–üLb>[šñ+z©IØ@Ä·´ÛT£W«J-#öl»2O¹Ü€± ‹‹ešA.ͯ3Ag§ã³,é?ÙCeèqÙ~¾¼®„À7k†¾50000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 1963 0 obj 2970 endobj 1964 0 obj 829 endobj 1965 0 obj 1609 endobj 1966 0 obj 532 endobj 1967 0 obj /TADAAA+CMSSBX10 endobj 1968 0 obj << /Ascent 694 /CapHeight 694 /Descent -194 /FontName 1967 0 R /ItalicAngle 0 /StemV 136 /XHeight 458 /FontBBox [ -71 -250 1099 780 ] /Flags 4 /CharSet (/exclam/N/e/o/t) /FontFile 1962 0 R >> endobj 882 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 1969 0 R /BaseFont 1975 0 R /FontDescriptor 1976 0 R >> endobj 1969 0 obj [ 458 458 417 417 472 472 472 472 583 583 472 472 333 556 578 578 597 597 736 736 528 528 583 583 583 583 750 750 750 750 1044 1044 792 792 583 583 639 639 639 639 806 806 806 806 1278 1278 811 811 875 875 667 667 667 667 667 667 889 889 889 889 889 889 889 667 875 875 875 875 611 611 833 1111 472 556 1111 1511 1111 1511 1111 1511 1056 944 472 833 833 833 833 833 1444 1278 556 1111 1111 1111 1111 1111 944 1278 556 1000 1444 556 1000 1444 472 472 528 528 528 528 667 667 1000 1000 1000 1000 1056 1056 1056 778 667 667 450 450 450 450 778 778 ] endobj 1970 0 obj << /Length 1971 0 R /Length1 1972 0 R /Length2 1973 0 R /Length3 1974 0 R >> stream %!PS-AdobeFont-1.1: CMEX10 001.101 %%CreationDate: 1992 Jul 23 21:22:48 %%RevisionDate: 1997 Feb 16 10:50:33 % Copyright (C) 1992, 1997 Y&Y, Inc. All Rights Reserved. % Please note: This font is NOT in the public domain. 11 dict begin /FontInfo 9 dict dup begin /version (001.101) readonly def /Notice (Copyright (c) 1992, 1997 Y&Y, Inc. All Right Reserved. (978) 371-3286) readonly def /FullName (CMEX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /IVCHLA+CMEX10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /vextendsingle put dup 16 /parenleftBig put dup 17 /parenrightBig put dup 32 /parenleftBigg put dup 33 /parenrightBigg put dup 48 /parenlefttp put dup 49 /parenrighttp put dup 64 /parenleftbt put dup 65 /parenrightbt put dup 66 /parenleftex put dup 67 /parenrightex put dup 104 /bracketleftBig put dup 105 /bracketrightBig put dup 113 /radicalBig put dup 122 /bracehtipdownleft put dup 123 /bracehtipdownright put dup 124 /bracehtipupleft put dup 125 /bracehtipupright put readonly def /FontBBox{-24 -2960 1454 772}readonly def /UniqueID 5092766 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ\õ¸ÊƧ¾µÐ"våÿ¯*áÞo$1”Ð|¬Ã#ó`ˆ¡ݧ’ó2Y†ý°«ßÈŽK@瘉!ÕQìgëÊDÀVWðÜ‘>{0¥óá3{i‡þ¼Eù‰ÈÜmÀ­W~?ÐÕB ®(Ç4ñ0Á3´„"¾Ô†9¢·NLòçâJ™óGàô9LæN¬µIWn‰NRê¾Y[ÉdmŒ+«IfN•|=‰ÄÇcÕèßú¬G5‚ÊàyJ©i,dRhŠt§¦§­ ¸©x<#^Áê!V&OL IºrV0ºø^ÅEí²–7€½Ã“;k?ƒ‚­ú¨ 0\j,2dÜz=ýsÈ%áÛ†zêS'ØS3/å!:¸B>Í vÊFÍ R ù Ô¡Ô!ü) ¯Æ^ßÑõ•…gç½i³ýhßSš…KÒ'59›ïE·mo‘>=Ħàg›Y(„•‹M‘}’¿œö]ï»ãåg.ã·×ÇŸõJfùíѪK¡åR•¯yä†L´Ê­ÇÐÃÀR°JòI€_RÏ!µ™JèùKñìvçF…†Ñ 3µ‰ó W=ŸeBT&›º„¢Ã$¼Ê•X ;Ý7“> Ô''³Dä?^¼Tu«t~v2°a…§Â®'T›Ôšø-9sÆuµF‰Ñ(Í™ß8wbVÀé4ö G Ôëò÷¾_Í··Y f ·«©M½‚¡òâ²qm5B"ôò–LõvR5A•[,œÆe]³k7ÄHeµj¬²èþU™9«#œ(âýc’º²zðI Ω«n~#ÆOÚ)Ûˆ0/3úÛ™\Ì*–àhØ— üûÞÞ{€úóš£|ýGÛÏÅ#54%µZ™‘Dß‘‡¸¨\ªë?y£÷ÄÿÌúöáìÿÌ“"›Ø¹qÉW ê¶+ŽKð¤,Ûž‰®˜*ž„èO‡LÙeíF”dR¸VHJÄg|s[åìzˆƒ˜Õ½¾ôêA0P.Îc.m"ÿ‰ü"–Ëø™èîÐ4_PzäôDe¼1!gôhû¥œ!c½·Ê÷w·¢Q} ü‰opÇ{Õ‰í”r1£†È¥ʈ¸O¹RFŒÛn™hˆÖqB?IIÐTá “\« \›Wÿ×g°Nc*K•Ó’£àÌpùª&öBtt žd9+¹É¾þ3*:‰ÛgdͯáQœ˜HÆ3òMÞ2S/ü"ëU™Orì+^§¦W;:µ yh a\!ZþÍ B¹euJ+a·ö ªDa¼&kÎJq³ ,ÕÈ Cr(&¢z¾È^Î"_ZzŠÍ+†Z0¸%È¡7”Â#ßi©†e†ÖõXƒÒ¦›š°îÊôω‰´—TBèš‹!L¸§iK=¶8¿Î²Üì´îíÊÙšPõP—CòßÖ³[¯oÁ¥z£‹!ôæÑeØCûp]\柰IQ·$¤OƒÃ T°ÑÝÚåN²ýÊbå¦8üÝ´(N÷ƒC<Ћå2c †4”ÕíöyБzG'Д…¶bå;w$ÊlEÙ‰úãôášàV*NlYN!‘3¯ Lªß•o§h"›°’‰{ä¤ü²_¤(çúÀ—N`f"õ™µ„­%»¬ ï~)·S³´§¢ÁÐê…;a¤»äÜ›o¼™~6εÁW!›ˆ÷Œ3 $æEõ¦WLùE½:U'Õ±šaµUg²ÆˆùˆZ‘…‚Burk§ÚIf@ÿÉ™†žNƒa0Tíü!? þ˜÷9RGw7Ú¿­XgÏþß§Ryø›Ïõƒ?ÃàV¸^m¦ò høYoýæí‘V\b9þh$`‰èËê›-\~òÙ{o؆…deÝ’g_EÂêSO­€ Ý¡E£I«Î©bÖÓÖw`¶@Y]t“.?Uo¾oUÚÇ€“î\Òi1Iœ¨ÍÕQLÐϾ¬Æhà L®Hð™åñà^:B”lyÂ$ÃUãyy1·®Cãß‚·JJî’ònÌðóƒ8,Æü¥?–Ëz _¹­úâ­ƒA•ÛÖªd Ö‚ƒä ]œãÇîÿ¨Ž `nŸ²mo«x@ÍÏà ÜÁ®ù±4²@óz}§\ ÍßR¶æ#Ø;¾l~‡MºoóUÜA ãÚÏ*“ÿ.˜~û©z§Úð˜µ@h³—ÔhIêðÂÉ%ø½4›ûØ[9«TB´×"Eå ‡]û”¨) f# †š¨óªÃJözN­‹¶~CòH aR€5ˆ$— ÊámUšÁJœî­ ÄÏ)/ú‘êÞû 7«62Ðu Çù Ä©’ørfé±…ä—´Ûÿ!å@~Y,á\!øðTZãè=,xÙ]&×Óßµ¶u+CójÆœEÀRÀì?ÊŽ·½ÆýUç½~! ê¯A&}Y1ìxE“æáÁ¼7æáQ)^Aå¾lœÐ@J[žkâ}°ÝÍžÌõrÑ–zîÆÌåHô¨B‹ôájèEƒŽ,šÆ]ègã½,´v]~Ð’ÕãÓ¿}…K×^OÌ­‡›M?ˆP¦¾ã>iŽAl±ÆvR7†ÜÕá°ÐºŽ€Í ”›¡õ,,ÿÙŽ1;Âj‚Ű¡NZ·2³Á¯}ƒ¼kžÚ×`1 ŒJV=mŒÐcA œ˜C—øIŠÈ{9KJô{xét/p'L¾ôPΚŠ´“—õ·oz̰DÃÓ·¥èøh¸Eô7 Ëž¯st½ë;+×aÀÁ_<·ºS'*DÌñ4ýÊ«ÎUËÕ#QÓoJ\zƒ€ùþÕþyy½™Q€Ãïnm ,ÌêÜ«|añ‹SÉ¿7NÚDiH°QIëû·ËÊ_=a9Ø^ÌÔ+æ<¶×!wƒ kÄ+C´„>gkyøP‡b[AÉÝóuî´Àj­†"É?júÖ>€€e¯M `Ûâ0²–ì[sü—œ"Ýθ…ñVn!H;Ó£Ðm0wùWíX¹¾g²29ߨšÚÁJ>'#ét „ĬöPÌ3º $7ß+†i<9ïGzå¯L×I4 •È;UšJÕ<îÒÕÒ‘»ûÌ“­n¥ª«~¾bôaí6E­šOêª9ÍòàݺˆÂg[þ‰ö²»GqjÙ@Zí§øX«Ý ;¼OÙ•íØ SÙŒzÁ¯ÉÝÇt:ÇžlEœÊM˜AÎGˆRIÎíÕ3äµè›þ«ޝõŸÃ0#OÂt‰Ââ×n}¶‹q6ñt/Ôˆ›À™²ô¾X!Ϙ};¿K°0?õ઒íõ”e?hÉJÞ6%|ô`iqå•ó5ÐÃÔÊÖ¸÷Œ‡Å:ßF91ÿbßZîÆ!Bž5Þn­z ¿0ðÛhÜö½Ådùšø‹cmÉú”bGWÞiŸ+RA›Hˆˆkw½ð«þª0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 1971 0 obj 5014 endobj 1972 0 obj 1367 endobj 1973 0 obj 3115 endobj 1974 0 obj 532 endobj 1975 0 obj /IVCHLA+CMEX10 endobj 1976 0 obj << /Ascent 40 /CapHeight 0 /Descent -1760 /FontName 1975 0 R /ItalicAngle 0 /StemV 47 /XHeight 431 /FontBBox [ -24 -2960 1454 772 ] /Flags 4 /CharSet (/vextendsingle/parenleftBig/parenrightBig/parenleftBigg/parenrightBigg/parenlefttp/parenrighttp/parenleftbt/parenrightbt/parenleftex/parenrightex/bracketleftBig/bracketrightBig/radicalBig/bracehtipdownleft/bracehtipdownright/bracehtipupleft/bracehtipupright) /FontFile 1970 0 R >> endobj 881 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 1977 0 R /BaseFont 1983 0 R /FontDescriptor 1984 0 R >> endobj 1977 0 obj [ 643 885 806 737 783 873 823 620 708 655 817 682 596 547 470 430 467 533 496 376 612 620 639 522 467 610 544 607 472 576 632 660 694 661 491 632 882 544 389 692 1063 1063 1063 1063 295 295 531 531 531 531 531 531 531 531 531 531 531 531 295 295 826 531 826 531 560 796 801 757 872 779 672 828 873 461 580 896 723 1020 843 806 674 836 800 646 619 719 619 1002 874 616 720 413 413 413 1063 1063 434 564 455 460 547 493 510 506 612 362 430 553 317 940 645 514 535 474 479 491 384 615 517 762 598 525 494 350 400 673 531 295 ] endobj 1978 0 obj << /Length 1979 0 R /Length1 1980 0 R /Length2 1981 0 R /Length3 1982 0 R >> stream %!PS-AdobeFont-1.1: CMMI8 1.100 %%CreationDate: 1996 Jul 23 07:53:54 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.100) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /OEDBGB+CMMI8 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 23 /nu put dup 66 /B put dup 67 /C put dup 71 /G put dup 82 /R put dup 84 /T put dup 99 /c put dup 100 /d put dup 101 /e put dup 105 /i put dup 110 /n put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 119 /w put dup 120 /x put dup 121 /y put readonly def /FontBBox{-24 -250 1110 750}readonly def /UniqueID 5087383 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å– ]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÖ¨ð[G¯•ï(©ÅaÛܘÄ|õRPé6n¶ý=: ªbãÕÙ9s2m4{~ÜC‘ÉßD…¸ü˜Ô%Åx’Ý÷Sd,Õ&©jÎÚA x"±ÐŸ—”æmѬ,+;ÆþÅboB|Õ®œTÇ÷bÃoI³Âåæ*ûVÜî‡DZ©BÁJæÑþ©ÏŸª2a{YŒå‡ï0Qâ(÷/e@­™§AòGÆ€挄éÑп™ª]w}ˆ§ÓÎÒêgô®a輕çÚ8.‚ݲ° ÝcS,tã¾^ÅU ¼»j³‚†×q.’o†–ƒr¸!N›]@Ájß ýGÄ“75uÆÊ‘ämˆÞ$æ‚ÞÄKWêŠøNWÔVF2PØ,KPË» 6™2aƒóÔbw;S³ÉæÛBÖ³ö{‚ Õu&D“C½ùúÏhN¾ã›e^±½L2Ib^ÇžY6þ2Ùò"CSò¤l5Xï!ok²£º÷R¾ì6ÄD UjïìôTº|»§S{ËëÂG3:‰‰6A…|Ùõžº °£ÙºJ 3•3kLÚK¦EnMpúÙ½«·òq¼lHÙßZo®xV Þ#L’èöŸã³’jýë €:Fzâ3j`yînжÛ7 zº fÉ¡0€%é'›¸"„•¨#Õ4Þ„»ð…»Iôy½ˆxP&! ‡Fæ‚Òÿ̺µÌŸê€1õ}±0æØE–|N w*TKLÄ–^y;W¡ÑP÷cËÔ;Öâ™—Rfݧ{ð€Ñ80§æ 5p„;Û~x^ñÓžöR]ÔÜé£ ™ACŸ Ã{Œ,ÀS &$˃ÿqr.9>¤%²æH¢`丆ÓÿÄvÕ¼ë5ŸFà²F‰ÛÆIãÖMÿÑuª™Â~H´.‘ Påd8ZÚ15`è¶–::ã©Ù)Tòȉ Kð@ß,”0 ³°‚ ?Ø–ìgŒÀ„Bþ̓YÚëºI)ÄÔcçÉñ­\~n¹™’ÜÛ_º•Ú¹Sš³z„ÍcÐ9Ÿ°.~÷”Óòä_ vöϼ•…맯õz·Œ¹Ü¹þžý‡TV4Ƨό RË{¿Í·§ú•2ƒRe¡*1èýúNÓY\ÏDÔè¨#Ô‘ÑFp^•ÂV; ®ÆÙù}«ä¬<Ûêûqà$ç®KZ©9 'bDöSÔ9 4‹Qè본ìFÆ¿»wm1>}¡£µKã½nïhæ_Õ{ÆðöiŠ´þÞ”®Pý¡u>Ô"ø1Ö¿DRÏ!•/.ú mP-N Ö±Nq[ÝÀXZ…gáTšù¢U£we` 1ÉaY0@v‹„ê¡¥öž1%ARfdÒ„ÇDÃS…}$âáU[ôpŒŠš–^¢î]'xLƒy)É ÙüDE«”,þ‹™Î 检ӡOÙR¢² n¸Ï­Ä5º§¦Ú4O¶:L䵇ûlÎêÓßáhÌÆótžôüα/ bùcF¤ß¡ÃÎoÊp/.åe2-…RʦáŽY cP¶|uÐ,ÆMNŒýP¸¤áÊd–íN5–d dŽò!!&JÛXy»ì.läÀpÊA «™B"Αyøi4ÂZÅy0škð´Ÿòó5–Ó¦ÓÈi\ce©@e@Þœ˜ …í9¡6B8Áê?!¤Ôá³Ò"ìG89£§ð*Ѐa@Û#’Uà9˜§á 5½·‰³×zdæ+¥Wæ§ë¿ì‚Ê pÂO}LÆY2ôUT<°ñeÒH¯hq*sñ.ƒ úOoþR¯5ñ<_oÏ^ˆ{„a·1×ſȸ`_Ry—oAfÎ¥ìc­Äpö<µ{—>‹mÑÜY,ÑAºQÉ'M+øÝ®SÀZ³¨@=+V€éÎÅDºsòî˜Ü×MÜB|—²^¹CZ¾ÙüJòóœá]J^ÔøXìò¸ýìÖkSú$ˆÉ$n'¹‡xšÖ_ lÁßOæ†VÖ´ÖÊꉅZûº}LØ-r:é=ÐûVóŸŽ”0 E›Òãy¸\MŽM§Óc¬Þ½3¾¿¡B"Ìʽf>Hš„™åïi±ìï ÁCëÑ›YXŒËÉ¡J½&])ŠD(2néŸóåY¤W½ßû+/öYñZ?)4hœÉ†Œ¼ÍÒî½Á¯‚ˆBjÑE'`œ\qò'1­ú€ŠíwŽR5b›!Òî@}š:ûjvn ýqØŠwÁœšlpAJ3ö‹³áX»÷,7`æ&n-ǪΗâú‚)šj°ÓRšZã•RÄObàO²sÇÒif¤ÖìIJw}Í—Oú— wn_ä“üùkùW©vqþÆíç8‘°Ѿ\ž‡‘Ý‹Ü8[~­â‡ãÇ1”Z€¢6Te ÖÀ#z.ìóŠ£XáðèA³p\D¦O{ CêCr°NwdŽšä‹Öy=›ÿ7Bö—ÈLÑÚÝ7::‘t·ÛÔ'þS±k]qÂåOÞ\ݰre–|#Ù÷û öN rWwº1&¸•&]c˜¾ášùV£R?úyMY}ŸX{¢î¡øSÌ^3u ݯtÃCþ/fÂgrg`<=Ýg„.kþ}*Ï1@–ÌZaj /‡QˆŒÀкÌý(‡¿ËÈ?kô¶¯9x¬wl2\„sýèŽ þøÝµ©Ÿ—ù ãRyîÍz€¬aUMüðÇ}€‚)ßdÁ^@ar9Ø| ZnWúÕ •˜@ˆCB5µ´ß›2Ðë[£ ÿvhgû{ÇZÙ›ˆÿcÝ4_§n#Îúk=¬¶…±RÀyB*B?„ÝÇÁûäíÆ¿«³«=<<Ý¡-^ó:/z¹ñTø|æðr~öêš/ˆÉO+¬ì˜=(lš€ÔU,Jj\D|©*Öðo™}nºÂCe9Ê Eêo@팫Ù3`£ÿDu^¿ƒÌ¦ð:ÂáÿêN„#KDË&Ùãå9J±'o7CðÚ"ËRb#Èd©Ù袂þÀÊÙ㳇·Vá|TAY·wÍ\M0õv$†fË‚Âދݺ©Øú‚À’zŒ†*ph]´­–mn‰³9Ž÷/œ-Ñ䤉.]»Ñ?Ïõp $ÅÁsN€ÕªŠ#´ ~ˆÄ'ØÙ !ÇÕ4TUáAÖ£©¥­nϦ7Áx öÓ{N9©{(º‘r½·t²üê— +©ãÙJ üð¸CeÊÈMêZ›â) b7šRðNH Ýô¨³‘.XòH ËÖ4³ê̬®‡m¦Ì¨ÕNxŠËXTHzdD‹Ó³H3ù…ŠÃ“T?ÓO3_ \¥Èß1{Gh†RÝÓà¥2nËî•`GîÞºä©ÔuÁ eˆ=àq™A†²oÉ-Þ".,í¶“á|\;…š€\˜8‚!X/rAp¾NfI’ìæjƆð/qåÇNŒG—#…Ýâ¶$§ÿ6»ç2QÅ/MyÓ9ú ¯Xû¯Y4ȶ²—w® æ9^3+ã—mkX*Ô¼üdd82+¿õL9ZØr¶ÇŸÞþ—t" jo¯6XŽ>YvXú` Äü– T3F”·^¿/½ÙŸÄ¤ÍcYGðïG!Œ”£Ôëç+¬è›.yl»pQ¤úÿ•y97jk9–Ž- ûhÚ | )OeáWÚ‘üvL! þ§s†=kÚ)ö“[m«]¨ÑR ëH𣔯³Æ)#1†¬éS[¥'¸ñéãtèhà4½…¯Öï‘t{;ëØlH¬4k¤´†cd=À‡õ=^ ÆêïNz-­´¹âm®ÅÌ!ÄîQ¤GÉU& 6âÀt9ç×L}íeóA(|íF@×aHçzÄjYÜhˆ¤š3²Ù25ƒ#Ï)R7,Æ·¹€×î(´Ã>//`³³Û‘0†´Ýý£+mŠÛò\Ûµ,UïMŽ3ó謞¬¨ºÖ~»ÚM‘+Hé ¢”|%÷Ò.’J7F¶g¥áÎU’~Lú/|þl€²*e‹Fí’öU«¡8ñ¦Èâ v¶ä%Ñw‰~‚WbÑly¾À‘kO—Ú|dѱ@#uê+ج<&û“œ¡1Í0gQdÐCõ„ Òô°/‡h°a¹Qá'¦^+Íœ­~ÂM¢þ­2ýÉ£L/Þs‡Ünê Χ›qÿî².w£…r0Îp@{ ì U+fOÉBEáseÌúOÿÈJBzý¡52ž$:ÍÚn(7ÜßëA×ò»yz(•b_~R–0éñE¾÷–ë÷zRëJ3CkÌ7@ûéŒRççi‘¹âžöϹ/Ýöw»ˆz3žæâÉ­ã8”í¾| ”žXlÈOìØÉO›¥¡k[ÜyÚ<Ôf§\m3K.i†sOÍmö—`eòÙ°¤¥‘xhŠg/~P½¿Æ½ê¤°ÏæK[âg¢Ê/µ¾n°®Õ£¤~J:,¤˜nRàˆX½[wÚÜ‹h0’—Cˆ½l]ÊQ=a|'_u2+q~ê´¾îÊÕ'Œø[)G*< M<öMFE*ѵ4‘„¼ï¯OÓÝBý~uDž¢¡ÈH%‰©|À€ñºÙÎLè\ta\_tÃÐØNÿGP4h £¶©¤M„zîʤ=íµ¶éJ7L,39<«‡9ÉKweÿÇŽŠz±<ˆWÀÆD¹`à¢)¥½=Csiþbn£+6ýêR¹·¯ÐU!øêÎ1Ä.ÐàÉ Äô˜@5áFžB‘ [vØ,Ši×äq'cK+ž5ädE¼]µ Ye6Ù=¢;U€9„ƒ½µgÈ“|ǽWÛ§ˆóµ(WY÷ðç6[£>¢0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 1979 0 obj 6252 endobj 1980 0 obj 1017 endobj 1981 0 obj 4703 endobj 1982 0 obj 532 endobj 1983 0 obj /OEDBGB+CMMI8 endobj 1984 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName 1983 0 R /ItalicAngle -14 /StemV 78 /XHeight 431 /FontBBox [ -24 -250 1110 750 ] /Flags 4 /CharSet (/nu/B/C/G/R/T/c/d/e/i/n/r/s/t/u/w/x/y) /FontFile 1978 0 R >> endobj 713 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 1985 0 R /BaseFont 1991 0 R /FontDescriptor 1992 0 R >> endobj 1985 0 obj [ 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 ] endobj 1986 0 obj << /Length 1987 0 R /Length1 1988 0 R /Length2 1989 0 R /Length3 1990 0 R >> stream %!PS-AdobeFont-1.1: CMTT8 1.0 %%CreationDate: 1991 Aug 20 16:46:05 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTT8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def end readonly def /FontName /LMJFEL+CMTT8 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 61 /equal put dup 67 /C put dup 68 /D put dup 70 /F put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def /FontBBox{-5 -232 545 699}readonly def /UniqueID 5000830 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ_‡1oƒÝãâÒÍöÅÎO•¶î3½‘·’09Ý5þ£‡Õ϶ÆéÜ„ÁxóC)”ü¬nZíA¡âë£P¿ëE”Es¨'}ÚÂ8üi¥Hk™TwÄiâât“°·ߎ&}=V´P!hQGAÉG%€½õ1/mõC+*N¼Q¨,–‰¶ú”-„›)p–1a=¦M÷¶ðY¡“ô <5€Î;Q×B˜A”Ôñx€ ‰/¶çaÿCÆ?’Vµéô"{x"+ªÔÕ,wF-ð’"œlžE»Ÿí|ÕØ´×+àá)i¯êþñp`<Û‘Ë$1s±šVM);€£Ruô÷ŠMܘô¡ÿõ’F=”I`û1kåð9`ù±òËÌÔHeãˆñÔ+ü•qÌ`Ï#Ç%`˸ƒZ ¢þgk;H°“˲ÀÅ:ñ~ųr©w¿Õ/ûpb´þ *Ôï\Œv#ì“$¢Ë;@/ÌÎR¿Èf/Š9Õñ´—çÎ4ájŠ”zê}LQ“™ñ·©Hú}Ûgg$O Ÿ•Ý`f‚#ô[½¨±ÄRé0©óóAÅ5Yê‡F/û0'};$âMJ«‡;²±m¥²;î%¾,(ÄÏ/OCŠNR Ûo¼ñ§sÖŽîÌ3϶_ÅûH2ÀÔÅ=AÚü©‡…qã翚×üPG<’rff­0–Î}«AR,ܯ¤ßÄùÑ#Âx*¨apM-PW8ê†WaràGT± Ë#½–†xú zWR¶+ÃANŒfaBä²dê^¢hŸVÔûO=ÆÊéºûUÌ.Ô¨æ,~ê—YÓ7¬Žõ×Ã;4vÜÀº‰v ú ä¨U(®ªÕ]¶ iNB“•LšÇÓ¼x/Ç>c#`¤LkÚj\’Â¥„!Ø«8ÝìHö:$åÀQè÷jM —I‡€ðȾï A®ÖjT–Œ·›ßdEäßë<¹•O©ímÀuû„4¾\éõ™¯Ée©6hc•‰4•ÜmRìËÛW“$j# øoèØw„–NA£\˜¼+lè½S1Ð0N÷[ì­9Ÿä™÷R]ØW‚R(]w‡`™g½)2Ädøi½.M`P©„K´XDÞqÒžXˆÐ2ë? uðb¦±©Š÷Ž|ðuze²¤ß…”€Q°’¹¼¶¹†•P›+Õ µÑ]Ÿ¡Ö“jò[ϰé'Žk@ÆL‰î[<í?ûÝôÎFëٺô^RmÝ„=»!ÁË;â¡ttˆa¬pöÛ…¯„—¡Ë\ƒ;þ,Ü›(!fÞ›CBÝ_ç´Þ5^¨kz ,„&i=ªI…ö?4!miÇtÉ2ñýÝ×}î Q?·É¹i=Ы҇U¹ø3‘û©TШ7èdHh,^ÄÆ}€•ÜÊ[u×y ã§"‡!4í¹ÂÜ<Æ‚¢ì‹^_áÂ…àe,v ÌÉÁ©2 ª›ÊòmYõžþ´·çãD4¸w´]LéW«pë{'1h¼o=vRmvÆ`ÒC­¸%H”r«ADÕ)IFE£¯–WɼØ4 ÃàÁÒÆØÑèâ%•:QRè×ì]ÐfÇÇöm&Ι®1ö¼¹Ô–šf P9j,ÈlÉš~^QŸùí+5}ðÈ»=ú(ó6QHµÄIaß;Áðƒ)ZðÜ\_åýš¦&Jøóÿžü<¥XîD‹ØíkãÙÔ$9àú& /-pî3ª6{Z©k{Èß Ee´8§y4lάʱ§ÒCÐYÖDDž`ç`q3œcÈdáìןVY1æ Ù1 $;œ•&XöÊaqk¥Ksŵå$=MñöºÉk¡FJêº>Vp¡dž¨j„êÕØê¯™n"þHLõæp¸qºÓéT«£-_„/È-#Œ|Q|ª/ ÁD/™ÁjbßZÊrÚ‘|kŽk^]¡ÂèrµðÓgtÀ³ªÕNÍEHº¬n $åÚ¾/©Hó™f—µþßé]mÙpˆ·Þ¹ÕÇ4Ôï­T¿lV¹‚$Ü|ïøÅ"QÄœtíÙ]v,„ üÞ·FšNš[+ï‹̽¢f·ÞdCé~^D˜¾,7bH\Šñp¸c‘€Õ–ÇOÈ(±0PœA5ýÍNiæùC‘ô§- ›»†äÝ$àïãêö óÃczB©ÁôźÓÃ…2v)ïÙ% wmê­çüœÊœ_Ì\ÖX¢ý 6ü÷2y_n4®—¦¡IÙ™_C¥°Oa ìèŠ#2ÃËþg­Uß’õ«‚Ó’[¾Í/ 䲕YÐ.È>EÞŽÁ‹mà6wXä 0·–¶NKCHüÍah³‡€þd7ñ¡ Yª$óà—o#÷ûBzòIÝŠ¤šm ÉØ"Á‘i‚VÝÊ$!®“t5£âq3Eª 6óT.Ï­Éæ€:…ìD!`IÏ£„¼ê¼ô@&ˉ)H4“|“Øê5¯’÷C¸þ ǘaTéh&¡-žï_­wýÿ¿4.™c  î*²ÆŒøpÄ9ËÅkQ£7WÀ"±– 6X>Ú{SÏÍÜVvMÍC¦ýí_Íââ׿WÛœÖcxζЯ%ឨBðºfý©8½tøÞÄÙèC²íéK{«[?ÏaÛz«Ã~éŠõ;8%¢äNóÛ8¤¶AËÆdÈ,£&éI ÊøvZÆËwy6ÒJŒ®Ô™%P$ÅãáI…ùíÏzþX˜ÖÒðÁ×}÷]Y BÚ²²"óä˜y([&«kŒó®KœG5 ùèþœæ=Ï÷ÿçn/ír7Œà4!ŬkºÌv øÃ–v{¨#Q’dØ¥Vºû]Š¿QJ)M°RËÓ Âoæ„ßgœ.K úÊ3âvJãñ#¥‹ï^„§}~ìΩƒXÜÄáõ½Â(­ÔÉ ]Œù±ºÇ]­íµÓ%ì`œÆ)ÎMõ¡:¹7ŸTMžg#_ c‹O‘ΛôñZ”x>"4ýyZ8š¤%Gr>7ÌHÊÃ`ðûLù*Ÿš´~ÆE=þoc0^Us¥É¦b>vu·åmP—€yìù«Z`í¼Lâf@{Ô¬,¢ \Z Úv©‚!ûxÔZ¤mcWæ|KbÂ¥ª¼‹‡ûÇH¬ãŽi·"ü~{dše‚±r¥e¦×P]–6v`72ºvQ¨áwOúÚÇ«ºG"ó†ýZ†‚oô $ØîÍ Žïâô—yÚS¬“| ^LMšF/š ö;¸£c"î„ÜWX/Fv††s§´jÛ… ‘Ó0Ì«©A˜/ƒ¨’¢O^ˆT¤|Ú­ eïõ…i>l]´·3„ÆÍÕ¾àB”D¦ÚmòªL] Ã÷wT*§z=[PVj }L“ ï+½½ùêp@ð¦ËÂÔÛEy­QÑQ%¿,+0 Ü(>á…Ó¤¡ìK¤Eü˜wˆÍÐ:hRŒ4£ÔÅ£õ[ǬÒ@O­p-Ã( T”ÂRØÞiøVø^ó\jeÏÁ¶ dû®ÐX:ÐÖi5`¥r¡×«’–-ûH8¤Má+â‰D£ÄqÆÎ ø«óEîZ¨|fƒ‰xh®(oWyòVÚãB²1áíáñ6ý2Õô®FZŒ‹h¼ÛÇî÷¥ãæróÉ%ÿí‰BÎíÖê»0àÄâÁ“C4&ýZœpVd'8ähJn¤ú/ÌY7€×ü—Ë9+#wtQù›oCIOAuRç•äI•~øÏÃ9†ExùCíg,ae×…ôgVJu"àÂH•ÔÕáÔüEž¸z³^õËßQ9ñ­éÕyŒB›# ¶Á} ê\½F M Óów7ìi4æz›tÛÓµ±uùz¶ÂI#̬ycçÃä)r "cä~0`Dþ7؉0¤"QW½ÿuýØëÂ#4ÓÉ 1àÈÐ;"deíûsZ’]GåŽÄyŒJbMÁÒ¨sñÖ¾Œ{çlEÍDZÂh’¦‘´¡Ix=Õ„“íÙEÄòIõˆ [í•ÝÙ³!z­ŒtnCg½ õš¿oÅí‡ÊD^¼WEžA¿ú&±j]”€«ˆ:F Øh\†ôúridðX£Â?¨–á¢Æí þ{CÊúÿ Õ åzwLË1* …âH/U~NäDï¤Îħ€$ãd? €¤Ÿf‰,bW³­ó7x%ÜhHé{©‹K¶nr_ÀonÌ1ŸÁc_H"Û@Ã<•¾Ô0\„tpÜg—ÙØœ÷ž©LÑ B‘@bBB ÆüFdK¡¦÷w$«ÑƒØ(héýÌÏ[ô Öꦊó!9_¯¢j%™Mëå°jKñ S´UË1ówñ¿íB«hfŒ®l‡áÿ9šû€ú²XÅ¢ÝóÚ&ó¼'Gî("ðî›~¯U^ÐkøwŸœ¿a ¯&ƒë¤q[h ‘qÛ¬Þ/ ß³™)ù¢ ˆÖBßM{VÅ5ä'ñË>{¸KÀ«¬{aZD•$„-¿7[J¥o_‡;¸ãñ’+9n‰À“ ¤C½kFX/]¨S|dùhá¦mZ‹õ@5*‡&çe ä¤~Ånã¦"Ûî¬ÍFÏÇ•ìÝ£Êt0pÉä Èìc’l8º‰rü5$÷';´"XÇp²ÑÍ0Tç¡|ίÖë÷4ÏР&>Ý:³Ë44!"ŠWÓ)͸NÞK÷Óì]ð6e9Ìðl²-Ƙv¤äÙiµ)žçË—ú‹:Ç‘²1M/ô‘]óõBnͳU&Ly¢@þ ™ÔñºgÏ(kèSÀ‰€þMá?ÈP°SèËS,’ÿ¾G›ù:?ÁHh`ÿóÕ¾… ßö¥A’܈"4¤àÞiŸ˜t§ví®uùá}|&!ö[–A±’£Œn”¤çY¿wÊ•8èêûK¸<Ÿ€Ô¬(‹\l+ÿw2-/Ž@.€ÍÇCqµ aHK ‰ÀÑcl˜äÐÿG^: QÐNM®x‹Í'Pë@H1ÿÏ“&¨ô§“)Áy¬L.?†Á|Ÿl]×1Ü2(p³8/9{t$»¸æȪ!÷Y^­{S~³Âeʪ¢¢ ôëJrï…×(”~ó©ïó i†Ùà4ýj¶"ØhÄÞý±QUj—Š`6…†÷çÏ÷ ‹àÓÒïÂnŸKZüËUX|?ŽŽã/,ýBÐçKé ‘kùý´šÑjqÓÛšô§ð-ó|<ä*Ûsåħ/GYNð|ݬɾ”0Ä‚…§šõ U83¦—\p^°$’Ø“Õ(Ͱ¿Ìê£ilœA|èáòšQôEKc-Íf2ë•RNGOo­¥µƒŠ•Õ#ô²„ß Øp#ÒºPi-ò­Üµ)Wj÷x‹"º8oÿà1,5äuýWJã{ Rj÷|ú.Lð¢Ž`ýºº•<û3W*BÃbœ‹åTVVi]W;¢)š°õŠmŠˆ¤Â?Ñ@#ÃüÊÅé…JàL3†«ìv­ú·’=…\\P°2ÈÔ<¥oœÚ]µp+‰çcÚÒC°8¡‘·Á“*ËÏW¼ i2,á³+lnŠUë66QÕɲ‰¸¨¾„Ã(›H ”ùœQ[1É‘~éAKåˆ1}ó¸m›“ fû»¬¦Æªƒ±¯ ë:‹Ñ±0šV͹4÷Qm.ùj-…A`Q²üå¥ü64¢+°¤%ÃX<¶GÂò­]…õ+¥pqùÄáH9*®×IÖ¬ÝÌÜeÖ¸ã4ª9dòŒ¸žH@×y $×1ámJ¬$~†&þÌh„]øf•véÈ"×mÐJ'½ˆ…îq”+mHUtêDDXu¦E~p§RAaáLæžÎ05]|³®fSJ>D߬ÎáÑaýW{f'=ÇQS‘–lë°ê€çð pÅ|S§¥(~d-Ù÷,é¼gsIšŒºèq$¸¬ñÖö'ÓJLÞ®?) îÖÖÞàŠn U iŠð_TôŠùÙúeVìÓÛu,æBDZ1:!ž ñ3óvûc@š+ãI~,ãHb ¬8Fìcã› 7÷m’{¥UlúŒñ&£¢#O ×æÆ±Sº=O[çñ˨üš¶*ãAõš€äDg– ËÅrTútwý\ùa¶lDE+½&9çÒ†~›Ájà%Šÿ;Z¥y²>®à‚VI Á„±‡.|qíbæäß6©ìFQë#UoH¥ƒË³çœ9þ-î®$édÄ«Aè~;I~…\¶VGI²d0ªÆ˜é¡Bã›”´ì{D"ß'×f5ªg…cþÅÃVÇÚ²3ÊÑ’ •™› ”Òu*×`ë†[ùX“TÀDú…ã•ÊyR˜¦³üoŠÚ¼¢ ˜]íö ra sø6iâÍ›% Æóæ%ýØ#ÞáY0SXÉÙ?3“£Ít*Ð… Rîíé!ò™ÚÛß2ûdòÀ=œ›î²Ï~Ë·|™¡î°DC`̈5@ìC—݃ ¾wñj(èÛ”± 0áÒ¯7ÃF_KR21&;®HŽ!Z¢N”æ.üò52Ù©“t³—ö™i(ѳzªH6«h]ÿ¤þûÐ}û$”.9 ´‹ÿ³D@üÓÙNÝú»%u¥ÇŠFŠa”vWq7@¨!£æ&Aûâ—€)–gTâá¨n“•!Æw…Ý”ÆØ§øèá<^óm“I+¹(ºCÿ |Ét‰ÔKdÎÚg³îQûµØÐKš´E§›À–*n;¤Òwâa?~pƒF³uŠR`4>:'ÆO9ÑÜö{FaÄ´H†ÈXÂÚ|@5`-’þ•ð°ç²Éñ•ÊwÙ¢š;eÊ$¬KŽë~eÎUˆ$Èpƒ>%sôuâ½bÖ’Dè`A(못µUAÒvGÃSj·ûx·8Cí žۥã‰ûóÐ,*W–,€‹)%qó¸Âú¹¥ø}Mn:*‘‰N¡ÜÿšÁÁ£Ža*\›¯¼[îÑG Ñûê¿p@¢ìPŠ" ™þ®‚(°,gE0¸ÜäXèÓ’Ì8ª÷’d¿ŽÏ­ÏoµÛœå4Ç1íy­Ÿ”wÈëìO©èäK¯¬oQq îˆy‘¾Ê[p>™èÉMbý¢2'ŠÿŒYcÆ LaP5ÝãŒS<_ r”SÄ®X›¬/†ËË‚dzz}ÁX ÔoTÚôÿY£„ ŽÙ®mIxk Ÿ¤¿þC_=þ9"‘•5 Pý¢ÂCƒ¤rß5;6c£`Ò´?œU[IÓõ:GÅo(UÜ>Á³ß ¥€ª”:y"«—¿XÍ)ÆŠ©•~×3´”ÀÙ–8ž3^zæ¸ïø÷ø)-Àln.EN‘$ÖuFMM˜«x!íшõ$ í¥ô€`[?ðõíÀ»¶§ðO$G^±!×U¤ÿÕèÜyœIXÔoî¡Ô=Ÿ]Ùw25rÆzŸ)Às@g8Å^wÍe ¤ ©Ò£—Ÿ¬Ý¾ôAÐ?’{Oæ=Çl–w*GF¸ˆk{CñeJÕEQ‚¬ æ#ˆðGMHÎÍÀq(°<íAW®2Y½%óXv·/‘›Œ¦é ™~©äV¡Ò]ç¬Iz΄Ìû}Fº¬R`óÔÓ‚î5«}:™9 ‰þVpAñ½Š]݃ ­¢ëÕ˜ÑyϦ”æ iÓ\DÌÁ Lj•]ÒÖ/NR8±“xì2Ë—š]ÝÅ&Zp›ŽçyN Xâ!‡YŸ„Êù¤)MµÇHë{ß=6· ¿æ,=èeèû'±Ïddczt¡^rGº>oŽø™£âì`I<ãb%u¹•N‡-aB¢ž×Tm‚J1¤ª™ü‚ÀÀu+âö§zÂŽ$À'/Òñ <ÿ#VTVÐÂN‚•d/ÌzR×¢];<^0•Âhö&ÈÆ™ƒ±˜°Ô-K‘E$´¾¢§jŸC<2WBùx_F¦ ÚL•ÿ ”‘‹Ù"xçg[tûÖÞ‹ZLIfÆÊ¡x-®Ô’¨1òéˆBMV7Òzó¦Ç$¦B!Ìv¬‹¦“D&!Ýî|3Æ•8|¯¼Éõ: +u¿îÙ*Up->€ºaìÄ£@‘þ_ó$U”|ËF”ÞwFXÌŸq2ºŸ@¾s|Iäî´—2ÙªâÚËTô†@WÉ…”êµ5—=|÷†ÙV@… lSÂ5¦Ó^Eû‡PÑäËë×m ¿¹‡š.gO¶åj€l¬³ée 98óŒà‘b¯ÔÊiƒ·Ñ}’›°2k¦îÅ–~V)ßdxâª]{ÒÐCZ¥ÍØøðÇš|µ¸Y רn©¶þìW2ÀWÊÀ·ß²ž^¬¥åP{¾k£‚¢Ô`Lÿ+¸Ï_޲ÛÙÛëÙovõÌ> _‘‚.Ùè­Êièëñt³\;Æ-SÞ+’ê+˜ˆ¿WñýcµJ×NÕÖs—uèé[–°Ïh øÄpÐ[Ä>¤¶c×ãºx£¢FPf¥t`â $r:§é·.bëÞÝG Ý·œO¼ÚÈ²å¼ ~2‚mþîéܪ’K 6ã)«Ø4Oæ""¦4|+³6}G¯e=¼¦¤ OLK-B3ˆl%%ZÚ1™ÿà¾EÃÎêŒ()º·êfa0·PÆiÔ¹™–zuNe!Äd;R˜­`j»WKóà&åË^m ,[1Þv` Ò"ÚCÅã½õG–‰žz.öÏm:e€Ë¿ÔZæ3÷¥,u6f Ñ‹%Ûfp™mUQ} úY?”( å{K‰º›­.ä—çévèáïës@\‡eØgŒ¢Š•h}XvÍã 8z¬ÔúÝöÔ+³¯Ô£™\„õõéåÙ+Ž®¸ßºQš‘? °p¸7‹övrê^cøÊ.¤PFd­ P*ÆUâ†ÿE^o½Ïß_Ïå†~¾Ö0ø#¡{)uß'åâN t5Ô-»lÃ%Ñ£¼ô¿…ê(NýsfÝ«Žà5ê•ìgyõ¶úž4  À s—{¬Æ‘0áLêëîA&¿*ºÝIjh 3 áh®>ºÀÙ÷tñ˜ÄY$*… øu­ó®¸Ñ6„í<8E¬8ÞÉB‚Î<%†Ï{)*ˆ‹¦)ÀåZb×Ì!x%©&/^tÏ5í= èfaçÐ2ˆJ–sxì–Úí^Kº£:˾¹<4¬—öX^¡,šÁH´¿êv]˳úþ¯ŠN~éMzg§6sªŸCòe _ 7Úà¿.?âüæ - ³ÚAº?/°ÿyÓ[â{Céyãh¥õiªQßÝ.@úär×ÞÎëŸÖQ£ÕÜ^XÍ0gbÁ¯õ%1s†]ý3[Ø»àä–'Òéï$ô¥Z$㕼%--3øØJ̯J熕cwˆ]ö¦Òhá!ÍšiÚ‹ÿS'Àߥçè ô榕T¤1>)!H¶ã{Ù‘™%éÉ)Ä(eHZ÷„zE%LªSæ9 eþ9&î#ÙRžÎ t› ½›ü0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 1987 0 obj 11016 endobj 1988 0 obj 1612 endobj 1989 0 obj 8872 endobj 1990 0 obj 532 endobj 1991 0 obj /LMJFEL+CMTT8 endobj 1992 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName 1991 0 R /ItalicAngle 0 /StemV 76 /XHeight 431 /FontBBox [ -5 -232 545 699 ] /Flags 4 /CharSet (/exclam/parenleft/parenright/comma/hyphen/period/zero/one/two/three/four/five/seven/eight/nine/colon/equal/C/D/F/I/J/L/M/N/S/T/U/V/W/X/underscore/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/w/x/y/z) /FontFile 1986 0 R >> endobj 706 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 1993 0 R /BaseFont 1999 0 R /FontDescriptor 2000 0 R >> endobj 1993 0 obj [ 625 833 778 694 667 750 722 778 722 778 722 583 556 556 833 833 278 306 500 500 500 500 500 809 444 500 722 778 500 903 1014 778 278 278 500 833 500 833 778 278 389 389 500 778 278 333 278 500 500 500 500 500 500 500 500 500 500 500 278 278 278 778 472 472 778 750 708 722 764 681 653 785 750 361 514 778 625 917 750 778 681 778 736 556 722 750 750 1028 750 750 611 278 500 278 500 278 278 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 500 1000 500 500 500 ] endobj 1994 0 obj << /Length 1995 0 R /Length1 1996 0 R /Length2 1997 0 R /Length3 1998 0 R >> stream %!PS-AdobeFont-1.1: CMSL10 1.0 %%CreationDate: 1991 Aug 20 16:40:20 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def end readonly def /FontName /FYAFTR+CMSL10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 47 /slash put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 58 /colon put dup 68 /D put dup 69 /E put dup 73 /I put dup 76 /L put dup 87 /W put dup 97 /a put dup 98 /b put dup 101 /e put dup 102 /f put dup 103 /g put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 114 /r put dup 115 /s put dup 117 /u put dup 118 /v put readonly def /FontBBox{-62 -250 1123 750}readonly def /UniqueID 5000798 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å– ]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 0)xfáÍ 1›kÙX”)¹Ô $Ü“%ÙÔÌDóù—©žlÀgg5ëÍhZ¬‘BÚþÇ‹´ü/!™½ôby(Nö¶—vʼŠ44|0x5>*ãTχµXwj"ÇvÇ µ«\áùAïÂÙÊÃr”¿@zgät;øB?O}þæCº;½‹¹ãòJ¼Ï ß‹¥b >®ŒNòÁÞñ:Åuñ³»¶o =;xT¸+gÿ ‡¯W+"0ùòq€ÊX§Ù²È"ÿ¾lÐC²ÊpXǹSöÙµÖé˪\ÞY°åœƒÛ­–ÖÈȺ±7NöRÑ >çDrÉÓW*¯-E§ ÷Gâãÿ#ß9Âѳ[BÍR—¾¾kÉO|ÆæÆ~OgrVþÙKÓäµq±Ò|¤åªž€€æÚµ1îø|@…Ÿ©5±•$®ƒc±cúƒ—½ÿD2'þß}²}Ã]‰û^C] aš\ˆ¯Ç;‰¢ß^v|[SkÇz„ 2½W¡Mæš} šÃoó/ŠPpó)ƒ»t7ãP™ß^ Óq Lð [éŸ.¹ÁÂÄDý•RÐÜ ˜©K;ñvõÎá=·ïúí|Gµ­ÏGõy‘¢š10žÂo×YNÜ0 ø?yY4”xl #ÈùcQŸXñ\’¦û÷¾ùýî;Ö;3þíU(ø9%ƒÂ–fUAƦßÓØþzTFU¢%¤óGÙu{7Ï íè·%ìÆQtè»Ì‹k«« 0sàÑu0.Å»þÐêݺVK2™|¬)º(…–ÑŸÀä%ø@xéx½”›€ž®{îMYÒtj óhèÉîêÅ8ëehöàÏ5 ‡®dÀ¦ÑVGgÿè¶›WåAƒë«SˆÒðÏŸ=¶HxU‹‰ÿÖå½]×G^%\c3˜…Œü}4Oƒ7`n$=‚¶kL¿±‘™Ö[“¨œýv³a\ç°¨jEï~'»U×8‡ŽnsÐJcãkiNë¾÷8 5‡SbçB•Aïó]Õƒ tv17kª.²á†>Ôåzüä¿Ó„²/Z÷ÐË@ ¬§y°P''ƇD–FšÍdcž:[ªôþ¥¼¤6½!œ˜`”\O¾®¡LµõäÖnñQZã:À 1¢;|œ)ö¢ÙbêµÒ²½ý[]VV¨‚X¶ì0®†<Áæh±² \àjhànF¹ù ˆ0Ì3ðüá²úGüü¡ý… 9Vb½—ãà¨z¿Ï ës…¶æ”!zŒñˆ0Cø®³SæfmcÑ?¯{‚«ö­ÝXýü[Ÿa¿éH÷H™d1س„žbëù¥«Ck 55Ó9Åu³d¦œµCàs§ÍWsA «Û­ÇJ úå»óÒ²ì|f|ƒ×¹18=DOe4¦§»ÕQY÷{ÏÂ$H̶@ª›Ã˜2}yä^£ÀkkßÛ©Í(©šªÔfF²Ö0Ë šÉ¹C>½þp8`§ãlú\YôiÓùÏuvÞí‹+!–R"…÷×߀‹}u/ÇI‹Îª„dè4ôOï5×Òª(É[ÛŒ/}ÃÉ=ÎñÆ?Gi‰ùRqç_¡†»‡BðuW®1dêϺ“™^œÄÉ–p•yÁ¯jfãy§Õ¾dT ( Þ¢½7๴´Œ‘†áa*çý»¹–r¬“òÏJØO8Ù{'¯ÌÆNÕ´ÔPì¯Ö‹à°äèì°ê.Àh—å "ÍB¤‚16-ƒ_4hZ[² xÓLì¬F'I¼(è®Îé0,¸¥· ¥ ™}lgÓà,Ö ´iCõ<~ü¦‹£·>ö“öäP¾å‹ÙëÓzÌÄ41ZÒ(v" 2ºø) D$Ñ/ ÿÐqüqB;p~# ¼úRL©ªÙbq§MwšQÅŒ”›P³TÎ ,"xP+ñè¶AC2¥d…¹!£ª¢@?YPb¨4òén¤ qK·úõ5›Û“hwGÅ¢—maAUxËU€,N{ÔŽž†·¾eÓÓ‹NôÂMÏxso–۪ĥóíŽp4Kpê?ò1ð'Aj¤%/¼ <~HjÈ|r¿H**æuMУðj{:EÁøø,à%¾°ãÕQÿøç½ì C=ÄØÒµ¾9ï>qX7“Û쥆àj§B™P÷u—ƒz±”8HÆùqôŸ Œgg•)âè¿Û=… oÜì ÿžÍ »²‚¹)ÃH“¯U¥ìV}×΋'ÔÅ:ðBñbrX„8g«ÕƒP_2ÌôbßaÓZª•)3֬䆣åÏH5½•¨‰îxw6ɽlÑç¦7X‹ËÜZNQ6Nqú#8ðÚN’€ÁæÜÆœ˜@.耮9² JË•ÉA°•ð¨@h2AM¾0 ‰LÆ7Q8.%Ò‡ݹZ |B²Ò¬$ÀÒ.Þ¤°0ó¹³)N¿‹’q„ÌÝô¬Þ ¸ åŽF¬Ùd}!“ Áš!‹Ž7£ü”:ƒèÙ–?¶|whDⳫSípØ#ÿGŸê®Ní¸œ¾Swx£lýFëzípž%éÅxXoŸ˜ ä^ëZbJ‚º„¾…ÀÝ‹^ºÉÌÀp‘¬;ØuQIyèJ‡‘—Ù‚ F@R-¸äÈO·‰»Q3›ðórï¢~8oðnœßä"_ ,¤ÕSŒ|°ý‹$Iþ—ISênKt»–eS߯¾¢UI[7½èp€ÔNDØ(Ûx¢®Q] 64õ-CÀ~e¬õ¥ -b$ÿ>ÃdÎtRåBoß»T0ÝÔë2–iÝ1ø¬égø_¨Ýª}.ú§­Ïà× $,€¬¡Xl»Ó²¬û±ÇÚ1›MWí=*ö½¼ð󳢠ޤmÜu£¦¦J«xs~[)|ƒ ­„ M]½zCR‡ÝeËgJÓWêÒ¶qµÕÕNiöyã­âu3þðAö¼Ç1xœ—aԹǜW/6àY'>»‰Kˆ¨–¼2‡°’šøð£,úç3¡GûAœ„6fÕH“ãõ8¶ÄhL¶¸ñ›é»îm©ý¡§k-Ò^¥&W:ÓÏiÞœjyŒñ6-“D%ôá^Žö¾îý©ì:áqHT*#þöÞpaÑVƘ€š‰ƒçž# ø-d^ÕaŒf Q3øòr ÷Ù·¢îCщ¢D.QÞ-;[õmS5§aÜJJà‹Ë ;-¯~·d 2œò²à)Mý£aƶq hÖ@’ç¯Dé,S_º(í€e'Þ€ÍM&Ìþ£ú—Ô«¶ËÊ]©;?‹LZÄ9Vêç–åhÀ-—†@"F 'ŠlÛqµ['¡ƒÈ[FY"ÍÍŠ”ßDlýÈ_zÏ‚mi«GÙkUÇÝÇ–xÄn~ðxì1¢èx³ÅTÐP%#ÿY+jy”tÙîªûÕ§pa‹.^1RIËÞ5±cHgÉTÎÖåTаä'T& 7öTF;ÒÀ[#`k‚jÅ•¯7ž6ûØ‹>#P.ç’>I5l›?Ãüúý¡7xB2ª§uEÖ†²œÏË!Ea‰ì—ÜðŽ³§~JüKQëŸj kRòÇC%ìº KÇ ¡Ü¹åt 1ó¿6úúÒð R¶7‚$ï+°“‰¦Šúf.9¹­˜Öƒ‹]‡è‚¥¸¼ÑšD•1NJTŠžíµð©J ²FçSœ=ôéƒÔ‘ÿRj4‰>Uïr!˜ü¥­À±§|Ö†¡s/I;•«ãÓä´Sí<é #ëvZbaÒ¹ãëØ†ÞX³ˆ…¹´2,ZÞÅÎMsÞ•Ö}ð:wGï¦!¶87Ï©0TÈÞ;ø‡?˜[C¾Óoݬ$zõwÁËK»žïiÒ‘¹mò*6”^®Ì®•ü~ J"f \·¼ak=½é ÑЧ4mO ¶Üß»$ßç¬À?Ã?úŒ§º™Hšì’ü}ý!¯¥ï&ø”=[N)¿äöïÁ™ôR¥e†ËkÇ0&/áÆV•>¨OÙDß*Ÿé¾òaŒ˜ Ö&§RjcY°_D#s ˜týnf•‰S~O‡@¨RRâ<yÊyüzuÈ`õ'$°Êÿ\-–µ:ÒaWõ]§ûÃèÌ×[ñlwOâ£ú×ôóýE&ò9»Ó^¬u=ö6¨“äx‹Ä G¿½=tÔo_r(IøúÿE*6ž´ö§¤'ßîž\´ZÆÒŒ™ºÕ-Ú#Ž Ú¢‹+6Ö“Oa*E%ªqUf;jÒÒ3ÔÎDoó?Iý7!®ã­ßÒU*¤F‚–êl bïË)1ŸR·GF÷Hå­¢m`ðÒ8:êÊ#ECð‡FJ”>;-¾Ü÷ñíî¨×eq—ÅéCýƒLâÃóìJ¾ÏÜÖ*ÃÿËpëØ¦ÇOe)±\ZX«W=Ô`»‰W}bݕƌWnÌÔlafa}Ìr%¿Aƒ¼^Þ5¬Ä8‚]ËÒ©9èôOúI¦—¼{²*9…r1DGrÌ´m!W?zö!£u$¾åõÈ—1±E¹T ™¬·0FTn±Æ‰bí°_Ñæå÷É]Ž÷ܳ“ÑÛXˆ®µ> endobj 583 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2001 0 R /BaseFont 2007 0 R /FontDescriptor 2008 0 R >> endobj 2001 0 obj [ 826 295 826 531 826 531 826 826 826 826 826 826 826 1063 531 531 826 826 826 826 826 826 826 826 826 826 826 826 1063 1063 826 826 1063 1063 531 531 1063 1063 1063 826 1063 1063 649 649 1063 1063 1063 826 288 1063 708 708 944 944 0 0 590 590 708 531 767 767 826 826 649 849 695 563 822 561 758 631 904 585 720 807 731 1265 869 842 743 868 907 643 586 663 656 1055 756 706 764 708 708 708 708 708 649 649 472 472 472 472 531 531 413 413 295 531 531 649 531 295 885 796 885 444 708 708 826 826 472 472 472 649 826 826 826 826 ] endobj 2002 0 obj << /Length 2003 0 R /Length1 2004 0 R /Length2 2005 0 R /Length3 2006 0 R >> stream %!PS-AdobeFont-1.1: CMSY8 001.100 %%CreationDate: 1997 Aug 23 16:21:32 % Copyright (C) 1997 Y&Y, Inc. All Rights Reserved. % Notice: This font is not in the public domain % Notice: Computer Modern fonts were designed by Donald E. Knuth 11 dict begin /FontInfo 9 dict dup begin /version (001.100) readonly def /Notice (Copyright (c) 1996 Y&Y, Inc. All Right Reserved. http://www.YandY.com) readonly def /FullName (CMSY8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.035 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /BDAAAA+CMSY8 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 14 /openbullet put dup 48 /prime put readonly def /FontBBox{-30 -955 1185 779}readonly def /UniqueID 5096649 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ\ñ~ûþliþºƒ‹C–c²Ž_Ã5µÐ[|*ÌHk ès%1ü`çÛ6 L^¯}b­ÿÙšiŠ5»>ø´ÜÚ !–7+z,߉ñ1¼O5$´HGc"Ì^·8@ùòÁÕmu<¹ÿÆJ>Gê¶Ü8ö¢¬õ‚lŒ<ày|ŸŠÏÈn'Q°sLŸ2Ž>c©øÖÆY+6)?;;² Ü«&Þ ­Û2†Ñ…ƒ­*¶ŠÁõqä:÷hfˆ.Ü[bXZ‘‹¥ðgÌÜ-A­!((Æ5ªœé2ÓL÷ÿu|¿ Ø®p P]L¯ȨÞèq^ hˆ¥*"Q¦pL¦³ÈÀwªÉ~àJž£6H1TÊð¢tl*é¹®’ÌK"T‰´ KÍøK¹în$þ}ßâ‹ ¨eÄhnÜ>¾w§kö±J'Kh,©î^í¹ƒCÂØgC˜o@Ïì ¤ÑË%»MÒLV×ìĪᤂª`0að÷j—†¤Õ…P<ÑÑY˜Âýzò»õT%W!5[P…#ÇÈk^6ȼgKê¥1$G2^uwæýWÜÉøKàpÛÔRÍíM¸Ðœ.Á®ªaltQ58ñøÌa‚ª'¡T‰'†ïeœÊÆi6D,Xg]4O<ì¯3ê‹>â¢Zs?z”ᔊ‡öå¼ô½å¾mþìéàb༵¿|“Ñã?È9Ø"šQɲ-›rè:¼ziÎf762çës7båKßÜó¼Ë¨Š\Ís÷vò Ãâd† n1TÈy^cÌÀCÉÜç5X·ÎÝuC'ìd·c&ÒSãí$å†Yø†i_ͤãàÍçê¤&d'&Yåñ½¯3t¤w±àd`¹µÿt]Ç€<ªqª ^P]k‰6çÂ(À® —GAXHÑÀà0–à„*)Ôî7%„D΢³~LÆüÃlÿŒˆA^£,©ª?äVöÌP$‹j™Ðšà ²¶ç‡$†`†®B¯¹>ë#ÕÛ{iã™¶H¥óI._zùR„­BhÓ µü}ü±ÎGöê¶ăcØþôE(ŸÐ2™ZŸÐxmeË'À¹q ÿޝÆkñÔøŠ@ Ämqd{¯aÆó+™”‰Šž‰g°)i&xŸ2m@SÈÒK\H*Ç3ÿq}C‡ÊýÀQâÑCá½sM®Pn>“`¾Ic¥Ôÿn´Çˆû ¾ã³ÚÆêÿ“_Ba/©û`0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2003 0 obj 2730 endobj 2004 0 obj 963 endobj 2005 0 obj 1235 endobj 2006 0 obj 532 endobj 2007 0 obj /BDAAAA+CMSY8 endobj 2008 0 obj << /Ascent 750 /CapHeight 683 /Descent 0 /FontName 2007 0 R /ItalicAngle -14 /StemV 46 /XHeight 431 /FontBBox [ -30 -955 1185 779 ] /Flags 4 /CharSet (/minus/openbullet/prime) /FontFile 2002 0 R >> endobj 549 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2009 0 R /BaseFont 2015 0 R /FontDescriptor 2016 0 R >> endobj 2009 0 obj [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] endobj 2010 0 obj << /Length 2011 0 R /Length1 2012 0 R /Length2 2013 0 R /Length3 2014 0 R >> stream %!PS-AdobeFont-1.1: CMTT9 1.0 %%CreationDate: 1991 Aug 20 16:46:24 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTT9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def end readonly def /FontName /LPMCRJ+CMTT9 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 34 /quotedbl put dup 35 /numbersign put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 52 /four put dup 53 /five put dup 56 /eight put dup 57 /nine put dup 68 /D put dup 73 /I put dup 76 /L put dup 83 /S put dup 88 /X put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 121 /y put readonly def /FontBBox{-6 -233 542 698}readonly def /UniqueID 5000831 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ_ùc‹‚2BžØ·Ïj=‡š-)1Î_]ÆX` Yð{ænnü’9׫/¸¤ËÔu¸ìòye )å;¬9*fHHÁ„Kì»-\ûrБkg\šš5ñ&–¦ö(G<`J•7dhàn)ZÖ÷lë“”52 ZÒôžû”$Ù†a#¸žþœŠq13@²Hö…;Ûð+žôG"á1×ÕLûŠ¡(ºêsæeºËERÌ í¶;Ô±Jšè¬o "BÛèÚF¶Kküv/„òü‹‘ ÖˆÑpZC‹õåÞ¯*˜@‹;db ãs*M®mÕÙ~4Ç]®꽺–\Q¼¿±ß)¦:ƒÛÛž3#Ë‚Ð3u˜¸?O+©|õmMìÛ‰fåHÀÙÁ”É21–ûCê†2/æA«Hwñ;Ôu§&~#ˆV=@Å…²*˜†F‡¾ßtÙ¾Žä@º*¿(ê¶s9››—)ÝUdÆ•F!;„»ÊøšÅ­²“$rß)­¢½½´Ð_eò_LR–ÖXàJ*…'¦*|–o+…µ è_Ò|fýÖlWU6y€ŸMæ€`M¤FøÒ„PÂz£›Xkt¹w²_ÓÀK¡ëúý¾Å1êBov7Œ}âEžö(>à[)AËbцêú>ÃUÃu èsº,íH6ëWa7]_ΑAXφ©N“Þp콕½¡€ñ°TÄ©Âé>2oשW¹,¹1±e±“~OøÓÐØô ¤6YôÌ®X~Óï¬À¥š¡ÁÕ)L«òÁ˜îÌLÃ3—Ó^NA}êY »$Žpï0Fí¥¥&7¾Äá¢fá’ xQKñÐ [òbíry½nó,–žs1j@©:Þ٨뾌øV†Â‰7ô‚ð øp—«¶ÿãú¦Oú]íoáUºÔÁ×Å_©¤áuÐþmJ4 i Ät¡ƒ'8‚Ž_ %èÿDœ™zÁÑQè¢T^oD †Lªâ¢2J[&>œTbßt6§Ÿ-Û=ðaÍY?å˜dƒOÂo¬Ä5*°ñˆ›¹Ì_âŧJ· Ó‚ž4Éz O¹´$ôKƯ'ì¦ïËo»³cIÉÿYN•+™Ähó÷œÇ‰Ñ¤^¡ƒg¦½SËm­{Ânµdr³m2¨e|ÚllÕ“(qÒêb™™7'ST_bMO*¢à€/©L”=’gOºý3,ÿ—S¿Ò– Gèm3yŒ€÷; e•âdH¨*ó÷dûYBž¨Õ²º¡¸§†Àñ`R=)å§Ž¬Ó&M¦ËóïÖvZ–7¡r¸J~‹Ô5›ì ëÖv#ß–?.?®¸rbŽ9ü±ˆœ6ƒé·žÞU©«µ:f!S6Š èI!˜5êÇ ž¾3!¥’ô%´‹›:>ðK¶lå‘¥¸¤"ô ŒžÉZýĉxc^?-4jÒª{sêXÊÍ¿îòÑFR­ÇgéD DjönpZL“ #ò)¶ÐËf«8\g”™>螀œÑ± OÆ^›qU¬t£Çp¨>LÇDÑÕ/”•`•Ïít¬¢Ù+7˜Š ‚´ú¨}²D0.®<ž£ê8QmÇ‹¿¢_Íßt•ÙnþËC7SQE)³ã´##Ë:«0#…Ó´M·ÉÒêƒÞ¾8|“(Ýg™9¢ª. §q]f„Œ eþX3˜ÿ›ªùbOÉã&”Ö„ÙÜ?n"v£´’$¡+—óg¦B¤¶^‰îQ­®u£CòõÓsYtACÑ(®¥=} µ«æÚ2“vFsOý*F»>X©Š+hªW\g×—¶‚~#£:\ZlnžA|E-h‰Ôç.§8ç¶é„#á[€{Á×KÞÓ–H/YwE‡iË—¥ž; N­]!OàH¾¥_n fMÜçJr±Ë·õíÛ½ÞÐŽá¼dÉçÎu×Eíóîpq½)õêeËì<„Ò8›Áv£¶h(ðêi¥°}Íå˜jb:³D)iFÒ¼ë |]Tÿ™íòá÷^‘a³6o®Å¦rR‡u'`Çýè&~èÎ:cÀ½ŠÚb͉SßÔ5 Å"øš?¯a¯¬:sttY‘±XHÓêȳÙÉ•Ý?ð#0M˜x`ÿ5M‚o·—çöAîÜ ’>&G7«nm?t˜m²z¡a4œ+¶°f“í–}õƒ$ËwÅð1·î”Ujµ8Ís/Œ)¶ªZT“ËÌs™†’giºæyÅZ¤:ŸTÕª#ˆŠ lj[κ A±v¸È·¦y9! ùLØÈ°E€ûú%’Ò’øè/Og^í¦»m U^’ÁÅòCG'*Ï+åÒí?0ÙîPn˜>‚@k‡‡Æ ‡ ¾©g4­u–gƒä¼œÚìN!å¿Àg¼PyZUÌžï˜ïfª†ýï˜aŸëÿLñïCh-Ü­²\D#­µÔ<®€˜)a–-Ï « [_‹KàOÞßo´´_ËðsQÄW¦ðIÏÛ?Ùdà 5ÙŸ0“¾Iù1ºÊ*ÍöŸËmüÕP¨üÂ]ms²a²Ç¥,ì{-WA—Ì_ Eq”ZØæŒ£„z§,ߌøÏ£xÚòÂ!¼b>d˜(6á´Cêšž¯,7Qjû—eh-­(v½*kÛî¿v—”kI‡¦ø­¦D ˜R ØqãR³ÆÀ[o8÷†Ó(a9á)›ú>n¤gåÕX±Å5¾UGFoc²Î¿8DÅÔgoM7FÛûм®ޤŽàbÃ`þ¥(ÎæFÆ´'R”•Qû0xþ¤AEö7‰ºC)V&{¿áZj‡ x6Ü\¼Ötþ7Í[%8´;÷è0(RËJä«W_mš@Ö”A«€oo²ÌTüî–ëi§S¦£Àv1 |ja{îOþü7c§ç·¹ûáçOU–ãÒ3n÷ª~CSaGïu`~ª}¾Â4a̘«¾]¿DH‚RnÅv¥ ÇöRD)¢‡VÔï%U­@éq'àHݸ >zÜ‹e“+"ÊÉ­‡öì¾… ž1ä|c.… Ë¿IŽõ/‰Öu‚Yn9%] è¶šu¥×5⃀V'¸és^Z N †®ïù[&ع å²Ä3ä‹Þðí‡s½«åÐ=Ó{±tCÙ¼ÐK»í½8?~Ù4æ|eþƒ&e\I :U…a‡`>ãtì?§sî0ºj#ëb8ÜðËwÂY_±=öŒ?öÞò-ÁØN“câYá/´ìˆà±&,cÉËÊòF;š¾AÛ%ÿÁCL†Âäas³*oxö‡j.IÜ$Å€©¥œur.¨ñþóÒÊy'û0ɧ\pôa±Kë Ëá2aUýä@YkGåLÕ¨¯ÆQò¹ZŠ æ&h¬æÕ/_ƒ´É bÔ«íj[¤ˆÑfØqE´—îœ|$˜AϾ‰½AhÂûíOÎvëz˾ðóGB’cáþôuŒëÀSŒçÝp.tŸãìL–姇€8™Ð¼Õ"‡]šF­sFVìøâd8|8ë;ÀMW½A*pû›Éó,ZŠ„žw5šyaïÿE—]Q‚ø#NÍ-Û(IA½}Ï%ìɃq&Î!>ì5†æ]3¿»¼ý(–3Vî§ +›ù(uš­§Ã,,¥¤ VÒ6Ú•ª‚Fà qÚìzFœà2)´»%tËØ(þéòÃ*÷ëâ$Å[¯gGZH;¬MËŒa<'¿ÑqW¡@ßçy˜ÜrÕÈJ&O±{£:&m¦· ;Ê€ü[$¸µ¼4Óz9üŽÊÄ1ü½üw™¥ú:,ÝMù³¨Aÿü¿Aä¿U[2s“p‡º´)A@ÕVMGñÔ*¡–2D%p¥7±$‹h½ZDö©Å$1±j?KåíOæÒ)TxÈH ¤~Nè¡þtâv@8c7íA¶ˆƒófd/{|\Wxó Î iƒ¿vM¥’" (l®òš¼›&•pá³ÃºiÖÆ+kT ¨Ï׿*ƒ“‘2½d®À°»˜˜êö-ä®}À·ýMcç:‡!CX&̶nÈïZ”ë&Àdòtb‹ 5¥Wÿ'œŽ“å´Hs"Ð ‚÷ÆÞÆM ËÊyAP×|ðŸ›Ù,ÛÖÉðh±™FG”`ôŸö ŒcpkÚ<%gÀ¢LØîŸÓöÌ¥'™d¯»—•׃¸jðÅãüéF»ž>./nJì+ =pL¨ê§&T 4XÊ/e°^¬»}+IÌß>eò à}ôK°““¸iæM%ñ~3ÅŸmüÄ%âçþÝ|Ýl¤øY|l×~®ꛤ1›Ýãj *œô«Ù)=pîÕ¯˜f©hy–ËÕçÃÁS°SÊþ×6 r]Ö{ d|²‚¾÷yɬáEÓíÕÖUgнsÔ¿BÇjqZa"f­xDóIÍÄZÃ07]=Wh1«: %hŠ>£÷¡w‘;JIPëI‹pUÆg–¤rÖ¹ U ’ +a{¬ˆWu(nò–ý·¢›£`$\ '®zc +J.R%ë~µË/öƪ þ×Ç@Åáê/ddêkÚSèd.b:/k7È‹ÊÃùæcRL1úý6;”Eà+ÿF|dýVåï X<5÷ÿG–*óÏÑ0%;©¶‚€°ÔoþÖÞg“qÆk^OXFŠý¯šHžB‰O å90œ¢BºhZ·g ,ÀÖ2¢YàNÆÁŒ]-wX*¾ÙÇæS4 -.„œ“DôÕœ”Iç;„»H&ú8¨gÓ–ec>ÏþÍ¿Îry¨‰ƒËGâg?/µ#nX-rçé„ϤÝ{8L)ónëT‡tø·Íð†ìQ …Í,ÆjÃŽ³Çl½5ˆäOŽ<ݹ†¥3œ"Ô—6C 1d¦ÇPÛŒ9†ÍI#¤bFEqÛ©Á5$…‹ðŠn*€õUÖì®JF&u+êéF¦! #Êø¥zˆsä´6Ïa"Í ^Òfiþ½ˆ m;•<™ûû3>¢™n1*ìhs}Qq„ûlRkžµç°[ôâ^B`ÓmýѼÛÚ}<ÙYìb nžÒìšÂb E ¶Àùüp~Œð{¾ß{ÕÀø´¾ØžVÖÓNUáÜZ$EUÙºöaKlÞÅòF&â¾ÜŒ+ø¿Ž#%yܳI=xñeæ×±úÃ1Ÿ¿fòé«$ç)r©ÖElÐKÝ>ãŠÇØ&û[i»»d¸MÈíupÌõ&ž¸u:hvŒd«ž(!a›=C*.ôA(1±…Öõšos[Ë(.ž‹&¾:¶°4—K(íUÔÛvSûY¼õ°NJéW<øÓgK[ÉMðusb‘’ÜÏp±~DÆ{â2Ó.s’ôHËCÂ_°Õy©SžÁÅC‘’C@±'hëæs¸8üCÊ'ÁÑ8óÄÁL¿Ë:œæžÐX‡¸¹n|4Ì´…BR¹é>êevÙÖUyDIˆÝS™»K o¹ Á-£žV¥d'r§:÷*¾7‹_μ×b×uŸ N:Û÷K+Æ" Y ]â90õýBžu2žãúâBz"쬺x-ZùÞß×qwS”Éë/¤.ߘ f¾m×ûÖ‹‹fõIÏä-h‘БÄîýµló噜úÓµœ«{NŸp¡`7ŸeN4Jp,ÎÚ‰µ¢°µ™õ‡_µû0õ¥˜×®LýñYêhX_ ºñë.ëË€ÄÅ@N€æ´Ñò윰·§ÛAKT°A Y<‡Ñá'2Ö`7îg©šnHd4%}µ˜L åΣ*I{‡'FñLrý¬Wý̦¯i¾óIQó ¹ÓGRËc.j}'%œ°çÈþ¢þ¶F•Û‘D¹d›ªç…«Ö̺Vºd%LÙXißE,ëßm ¿Ù1ÏeC)tH€Iô'6jYÔ¶¼øµxjÄx_ÏGõ‡ß^îÒ,´²˜Ñ¡¿»{¤ºþp (8‚w«1Ÿæù8ÂÅÑcwœbRÇPÝ\í’Ð2aÂþ®Nçöf‰•±5=((a×ú°“.Ó&íÃP£I…€=5ÓŒbE™Ë@{t°v6°èbȬL¡³9 Wÿ~-ä*ÇùkºD.lÔevŒQQ×ÑÔhL@Ĭ¦õtБ¾êéa­=EOÀï#SžûRý»v¼Åš>DãéGôૺÙ5LÍÄÎôô~Ù±zqÚbÚ{WÓGãï|_z!» ÿLK‚²¾ZFzUgzs@ð3µé _’Á†êýr•šø-GOZ T»= wÉJ^h¸;aZ{-víH(„^ƒùup€ü¤è*ó’ë¶Á¨ß”µ‡Æ2ˆµQQÇG¶Üìê¥ ƒ'¾ DDÑŽh¯”·(å–ÒU/%ßý1FTÛéÑK?¥——ÎÇ£¯¿LÒ r ô™0ŠÐ=W!YL~¬®þw¶+Æt΄¤ ìNï;Á¨` «IåôÖ¸ã8¦yxttenёīÀ¨D¦­IóḺ:M!¾\ølÖDò=C ¦òp`î^ÛáV¦Ÿ;¾Y÷ƒ%*ÉH/Ýè¸TšïÃBüb¨–—öÅ·šç-,ŽfyŽÔü´ ÐÅTÞ…¡ÛýÕ_Cߢ)xü@ÏeñdŘÕBCqêbD.øTÔÝLd&®,‘TiÃH¦Øxó]þc%“°¯‰B ‘&ØS@c2YýÚâñ\määò °´uê{Ê¢‡Ñ¾Ü¨:œ&È(Ý{¯gfàTØ0(sCù¾Ìf‹ Ƈî+Ål*Χþň̅—¢ ˆòô–O¤–íûmÒ=…NSâT[‰^f ˆÝGWó'£qçc{ꀇB•ŸPe2ýip”PîÊTPXÇeÿ}GD_££«<ÇþÖ?¿“BéÌâþTX~•ðÑmI³9S0æý¡sC„bV­&ŽQë Co9d!étäR¦ÒÌó¯u½?}ñàØÿL œX+\±¶h«Aß‘ýW¤òhºm¡aº+¯6.¥ýáxIj}•¹Ëµ¾þ ô!.ÃüÚ]÷šþ]UW×[Ë’’]tÒ'ä’áy'¨Ë¯Swð0¡œÑæ‰@ZüºˆŽt,ŒH¿~ªkÿdö|ñ~,T¶ù~ƒ2CzäÄt„»ï,è!µ¤ÖÐkƪoq`Ôâ(磃ìáh}Ú™4µ?è_F`ܽgLJëê3;̯¶Åk;:Åþ n®¢¢‡šž#]õÞ÷­¿.‘d’ sçcË9}ÂÍ]½üÅc6Ÿo[EÑq•ά™)V¹¥]2ɹ ÉéÙ?SóL(ø»³T€9ÓÔ ¤XBDÉZ0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2011 0 obj 8356 endobj 2012 0 obj 1376 endobj 2013 0 obj 6448 endobj 2014 0 obj 532 endobj 2015 0 obj /LPMCRJ+CMTT9 endobj 2016 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName 2015 0 R /ItalicAngle 0 /StemV 74 /XHeight 431 /FontBBox [ -6 -233 542 698 ] /Flags 4 /CharSet (/quotedbl/numbersign/parenleft/parenright/asterisk/hyphen/period/slash/zero/one/four/five/eight/nine/D/I/L/S/X/a/b/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/y) /FontFile 2010 0 R >> endobj 548 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2017 0 R /BaseFont 2023 0 R /FontDescriptor 2024 0 R >> endobj 2017 0 obj [ 642 857 799 714 685 771 742 799 742 799 742 600 571 571 857 857 286 314 514 514 514 514 514 771 457 514 742 799 514 928 1042 799 286 286 514 857 514 857 799 286 400 400 514 799 286 343 286 514 514 514 514 514 514 514 514 514 514 514 286 286 286 799 485 485 799 771 728 742 785 699 671 807 771 371 528 799 642 942 771 799 699 799 757 571 742 771 771 1056 771 771 628 286 514 286 514 286 286 514 571 457 571 457 314 514 571 286 314 542 286 857 571 514 571 542 402 405 400 571 542 742 542 542 457 514 1028 514 514 514 ] endobj 2018 0 obj << /Length 2019 0 R /Length1 2020 0 R /Length2 2021 0 R /Length3 2022 0 R >> stream %!PS-AdobeFont-1.1: CMR9 1.0 %%CreationDate: 1991 Aug 20 16:39:59 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /VXPPDG+CMR9 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 14 /ffi put dup 34 /quotedblright put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 49 /one put dup 50 /two put dup 51 /three put dup 53 /five put dup 54 /six put dup 55 /seven put dup 65 /A put dup 66 /B put dup 68 /D put dup 70 /F put dup 73 /I put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 88 /X put dup 92 /quotedblleft put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 124 /emdash put readonly def /FontBBox{-39 -250 1036 750}readonly def /UniqueID 5000792 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ\÷c¼3Râ*Rç?쨤‡±ÿÄȯ@› gSr æÚRÊIƒž†¯zE_ÑðÎEˆMvï,¹¼X!ý%6]Þ¦ä_3+_h¤JØ¥0ð’£o­¶yÏXºýÓåýÓ¹`U×)î Ä%ýN5<6[À¼mÓRð"ŠŒ-%QÍgÍ !ÞÕ2o¯ù±‘g’Ø,YdùÝßàÒhhu½_È1©AòÅÍ .UŸm;›·3YZàê`“ù†7z– ñ*¡µ%ÍŸ§AþÕJ2¾ÍU¨hÝcšCpø2,Ë숛§#Ë@üJ© èsêÞ8,©Ï ûeð«íýšd»?Ms.š‰"ôA# pÃ9É–v*³\œXšé K ˆ Q­F7Áq “èÝ{N{G„“¹¦0oÛ?¦×8ª±Iû²¬*™œ!D]ã!ضª³8iÈ‚a>¦µìVGkV4Ëð;þÛWðyêÎ;3Oo8Kßp®½Y,ŽÏ!7‹T¨µÛ÷Ë’‚áj¥áHC“9µçÅ[‹ó»I?;ˆJÂ_ž¹Ëâ1™­,>W7'p£RlfÃa{•Öñ“ —ÁxÈ[ý›—:3Ì;9¯ñ˜ÉÄÔ«£VõŒ¬4z^‡ìEÅÑùŸÔõ­Ð©öª!6A_ÞxcL8i¢¸<š÷äU#öã#6›|i%5Ÿ®œë([Õªwÿí•ÃÒˆ—–…°SI_è0˜øŸóº8 9T)Oò9&½M…žäL¦'ó@ýí÷&,yh1*ÛT§ÀË(T5¦¥@ƒU€|`2wÝ™Àè ×&±òøÜv÷ê"BtÚxPà2UCLCñ`dƒ«I3‚«/dÍùj2@F˜2NÁЮ'—býÕ×xKù´aíê]´°Çš5=‘ ¨mnYýD²FoH´­Ÿý1Z#Kú+DˆÝ£LƒïûHpÒý‡WahèÇÀæ}ô»$†~Šÿ\ ÔAç{•ÚÆ;޶ÿÎL/²ìôáQ#+Smuc݉E…ˆeåÎîö-çN#ÿýûÑ1ó '¢ç+QVngbÏáä¹½{ýüÒü`ïÖ"¼˜nÆ1úð- `¹û'!N‚œ…äü×dÅ-`Æk[oE 7aÆáÕ£LÀH¾{ÏH]½5JÖ¬ñàìþVNhm…ŒbWz[ƒ MRÉF~‡ƒ GCžD›“¹,ƒæVùyE Ç€¦.†T·iXz(Æuþ;Ôå'“ÖȹŠòßö7‘˜5^ßZWÊGÔÞ—¼-ÓÒõGBÅx!mkµïVì‘ä·c ÚÀ"…J棜ƒÌWí ì´)=S©Þæ"¡åA@ñÏ•8 ¬Ú9»”£i6)^]Ê(ÅlG¡0 /Uãñµ¸®ægðqXQŽŽ†²@'SZ=«ÔÏ-:ž^ZëÓkqj~Δ¨â¾ã¨ô þ¨4¹‰&v™öCÝU á!(ŠËÜõý;{)špú¡¥úƒ¶EÃjÏ,õ0—1°"×=“ãùjZV MÓ^ŒÙ½¡#5Ê‹øyÝÁ·Éù¬õa4Fزâ/]¹/õ×'"uÞR9é)‘9Qœù«‹l/½¿Ø©l¯áÿji±¼›š_Þáùc^÷ˆò¿{·W‰W¼ŸÎMÏ!X£ª)­XõKXBlKsw•îÞQ×*c DçmÎòã±Öî¸ðšLÄ›útÌ}p—Kx„ÅD]¶Xžh·á¥šH̤.m[C(‚­Ù&Xˆ™ÙM0 fá¤5cŽ™o–YªÃR%Û“ÿåO¼UÖ<\:—=³±€–å²àÖGaa=蓼•}úãׂbö4]i;çÍ9kÇYæË]•1žçåÝoÕóRÙ+\5ü)±£((Ô|„ãou‚ˆ1*X`wðØ·‡B¸WJ‚ÙWôS‘ºñÃ÷@ÿ„¨¨HS f’rƒ*Ùž~Þ­­;!C(;Ût“f¿¿±[°1ü_B½7+6IUd’a®[/P™~ÎËÕTÂ7wìÚ‰hŒ”w{_„AøcÇÑ—¸à ¬S¾)$2FWE•¿~ÌaÖ_A6VóeY+äqÍž¥-²dv#=‹‹óí;A}U^êdoxFaÏÙ––ÁÙˆ†²Éâ1d½‡k ,E ’WKK*Hbþ9^‡ à{'*ä× Œ!)ýnŸÆÉt~æF?+á:»?43*rö™ñUây)Ž®&ðq©U2˵ Á w!®§bÀOz5‹ß¦ÃÞYYŽåÙCÅoHdçï£.BºNƒŸÓì6¸p,Ù[œé"‘x4`D í Ð_ëÒÌÛ.™œª^íú»lÔÔ)~ZƒjúïÀZáÎÐÔW^S}YÕ6ß\ îꓦúV] †¸„ƒ9 ¼^™ úH[ ‰C>5Å6ò…gV1 |B¯jëÝ®s‰¸H$’fsg&÷gnÀd­2ŠÚ\m|E*ÝKÉ w £Wê€ÔžC ±t8y4pʸ•h°c‘ÖŒ’‘kd#à‡~ÕÖëxí —H·ËÆ´»/Û&Tì¶ÃË æîGãn „²ÆAÐÚ£||æ¶, š5l’™VòÛ˜à„=SlÆôk€d¯„ï{ô*w͉ÞÔÜûíxº>“ââjmà¤Õ…h¼«—oè"3óæï~iÜ×¾ºþ¸?Î#á L¯ŒÌò}“ÒP]½m— f§Y;Ö0m”+ÜÉ‹žQÎÁëKÒwìfõE@ÓÖ–oaþ+ž‡E?o̼mÔ¥˜©S†žXBÜÕeGÌ]Ì­xv2¡g©)¦ø}|Ö|÷DÓ|[§Hž#3»K}Ãò>CãUOÙ²’mŽ8¹ñ¼ùƒü»ë¡ÛÇâ7º¼š4‚â¨ÅµžE²…ÇëÓcã\¢ß¥ %@ÛT¨g—Z+ÃÉlúÂ…îlT{Ç.ã|ý3Ù´+EïŽÞYÓ<+wêõ±P ÇaÇ8æL0?.ƒÄÏý%tÝ—ÓG?Ñ \O¢˜UQÇJ´“|£pŸ\×á42 ȦûTí.ôIÔ¶¹ìÔ#Ý¿J÷AîŒâ‚8ˇ6^j›2°Ã6Ëy›¦elû¦ åUÒÑ…7Þx¢ó¦Ý 7YOï…ln„ô±¹måC?*©À¶Ë%×7øÄ¢VVmU9-uÊàeÄ­³kiÂC‰©¢¸wôÕûûô¸;бŸˆà}³vàr›‘J üBãr3L’}ð§Þð±DmS64§„9LvéŽä­7˪ê+|í8‚ÒëÏ|©T1ðk[Åúµ–k]P»›ìib(yˆQh]SEº‹¥Ð~êQ Ó½ò#kXë ZØûîªô[$o7G«™D¼Œˆ® Â15"h€2ê¡ó¿› «³–ß!¤ª`ÃBݰ_‚èÈ¥Åî_™Úb•JA3›yN¬ÅS_L·Æ7 wP'6‹`¯ÇtSi”6;!w˜ÙÃ×a)Û•²Õ|³Nc“ºb1ñ1ÎnO¿5ã4äHK)3yÉHôÉá+T¿Éüu¾î³ øüQìÖSí¢}¶Ѭ9¯m  (Ƈwß)±ki“À»@ÖÕƒžÄ#•S†Yf˜S¼me]Arª"2Pg›oåS˜¨mF¨w³®gw†…ѵ*a£m†}n8ÿÄýÕøÏ“ô—İ2í ,z|娬LªN¬¸ sàåˆàÅ7w=eê–‡7Ÿ-d¡Cô´u/-‚AÍ ~g3Pæbì>~P$Ë–â¯ÂÑz˜¦0ªc~¢±x™Æ•Ó&YÃöyΟZ8°ÃÌIœX á‚i”+oÅd}lHQÎCF§õyyèŸz´p7bå9B|å…ψÐÈä ïÅ ÞǰˆCºÜÇsZ(ìðßk½Y\ôqèäï ,)°´[C ylïV9òyHU²Ò„N†/Vta#@ùçNKGé!„y€K'_µãGWp>ÆÑñ ˆøvt+/£íAZaQAgÞE…mT‚+@ó í_€bR÷œ`_Å¢l ¯–Õ-aãcôÊ% íñ$ Œ9LUd4k!±× ~råŽt¯jjü·îÁÑùQïOÑc1¥·Gw"qÒëájÀÛ£LeÔ>ërG`È×öí/{òlu(jñÀ%l”ÜÇê÷Ä ËÓ[¬µg>dyPÓm÷ c ŽHYÄkÊC †‰üo­zBP¶Ý_#˜½PLr©ÅL›ÎRL`3‘‘R»B8xÒžO“ŒÅÞÂîÞæÐªUQë…áÙ‰l³)«PÜú @¦±7Ðè½€¬l®º²Ä¤ï+T¿$}ÒO;brÃbœäk+ò( ýœEìåIUE#†0æÎ÷¾eºV~ÐJûéÜ,캠5»$ÒŸªüIv„·ú Dí8d•äÂÊòÏÅK«Ê¸¥½ëÏßSîI¨K-êƒ|m úödÎ/ýÁ8’ä6kDÙöú–0<ÕC¿O×à\6°Ñç›BÆ*~iùÜ+[Õî+’)\­3®W=öëA­ï9Sôáˆ8FÆN}I&šŸÏºR”6Gúµ6A‰U5›`×9 û*Y ù%çÊ+Ø(…3›€RÎ\+†¤^3ʘϡ!ÿ”@Þ™Ú —òIÓ©Sˆ ¹t‘¤¿.áÇ´ų±™ø‚ñ,öÁÇzÅSXÝt!iíÆ ”>¹ËXq'C#Ëã¦bÑÄjèèð[ÌÓºˆJƒ ¸.±½Ík‘Z»3^îë$‰8|ÀñîÀ©¨Váns?É;)æ¢àpg£þ)ñ@n+ù˜Û­‰ÇýÐw þq×ð *ïM[8ORýÙ‡Ž¤@gÏ.CzÇdÊÓ‹YP/þ#`Õ:lAG5ìÒu#¨ƒMxe¾kÛ­¦õlu¹OÍi%»DîŸÆöÜ=oj—ÿ:í³–Ä?—ä¤2Œñœ¡e@m÷ÔV¨CØ|{oh¤y^«1ÓYîjuüÅ -+‰FKVåu›)ÅD5B®ˆâ€p[ÿ¼au ¨±.Ê;Áxv{.¦÷ŽGtÂßÐC§smjÑœÈÛÌŸ¥IÕ]ocP÷óåÍ]ʰ½Ž©2ÄupI~|ùœ÷¼:ZJTIÍÖš×Þ˜‰±`HïufRÔ«(ÑdkÌ<‚Lj§ýhÔ ÆLf!2ŒšÍ^ÜôZ©c¢Xe¾¬ç3¯ìz覵XB$ÍEB{†C‡6çz;ë¬f ³þ‚Æ’"“´õ Ÿá?ýÆž7=MR–+ûPÜE7åýãÂN â¥_›‰>h8®un6ê%ÑÐÈ­÷>¡ö Â”—å9%„  ©4ï1Ô§z#ȾGÚ gÞ)x“#B¼Š0ù‹¸&ça»¢“–æPô9φ’‡É±D7àC€=JOÒè´džMOC‰ô‘F¨£›øKû4Ê6è9àC@ UÕ XU^<„&Í{‹~XµK^È»'¢ù„@¡–Žî ÞRnâP)ØnÜjÏ-üg5h™"„îh6ÞÐÈF}Qb¹2Ä™&ŸF?âw‹’'ÿ0Z˜Áû#ä-Ò\Þs`Öyu¢øÎ1/Àþ{ 5$u‡µÊ–Ä«E¹‹™¯‹ÆU æO5}Sª¤ÚÇ··¶š ƒ_…ŽÅ0ýá %YïôÉN¸ì¸›F³È=¢¨GxÇ®íÞ!ܧYök£ÊÓû þϽÍâíg ÚœU  (‰ÜuÅÇg½÷ŸŸ´€ßž8Ëâqòµ³¼ ‚X¹Ètr0Ï<!uÂU• †n¥Mæö—“‡]„õã„gUðgÚ·2žØO“ "ïa:ÊÕT÷Ìh`bÎW‚¼Gé×)ŒXŽ7÷õÌ)Ö_yPpÞ@Nà²b<¸Ôh>ý*þÙüFÀö‘T \͹dè[«PFŸ±}cÐG.•mO곘‘/÷Á¸öŽD¦ó‡L–q G¡ÿ©"œIqf°>¼å;bFoÄØF,˜¤± !Ä›˜uçÁ°~ü­†N-qœÀÎ¾Ì ÁJ=‚(Dð1]‹«^ãyaœY¼)Iý¦<7‰õ¦Ç Ë/f9ØiÉ‹±-ó°ÒNÉê¯&Œ¡(ö¹®‡Ve‹ò¬Ó:Þ1åšÝåÍ»‘dtv®Ýž(Bz3ç¶,v¢ì‘=ÉÛРW4ÐýÎú]ìaÀ’í‡Úo¨1 aÿ ?6<ÄçeÅ”JbÞqîÓ‘‘Í|/uf¨AÉ´ƒ §•ÜKúYéz̯Dìäck0tÈg)Í-33»Š–ˆ_aŸsO{ ª™j0x›æ¼ÑôÐÜì¿¿@Ç–Š’aœÆ°ƒ„hß2 ¯;÷[†7aò[‘“¶@FÝlµ½ƒ†„QÞ¶_]3š>ãÉ-k&;KE-º?ä¢ôNwxµ«æ/'IU:Mu`âÔ©mói{¬ya™ÞwÔ6µë0jz¼Eû<ÁN]×7÷ï ›ÄÚË™jèç~Ã~¿W5óB|@‚²™Íùkó #Âêˆ ¬ )gù#A‹¹~µ‰n¢–Ѐ°Z…ðT-ñ@üͳdÔ¢±—É®wW6þ©{u‡äAf—~wc%)ˆ´vÑM¹–›¥ä°>CÈ>„2˜>¶*Xƒ¡>'qDÛ…sÕı´ ÜŒÞáø°¯N§3pà®Ó›#–ã’›þß¡8.T¿Q¨ñÛ›‡Y~,KQå9JñK݉„‚Þó+ä·îZÆ]ÄÛ›wN×P\Q´G÷Áñ}d@;ÌMr2„H‰èn\¯ÜSQ8aJåÊN.´ÆÄ¬¤‚1×ðn§+ ’6’"õ7ôt‡Iº{J^ ,àqWjÉYËJ䦑ýˆ9/[ÜÑàå2‚©DvñªÀÉï¾È‘{Q´öê›ø$GOS¯‰¸EŸ£ìîOj³ê~KS+!‘ï$  eÞßx€"PrÏ£’ì¾÷Ÿ; qœ“ökX¼=ňaKžôoú‚ʞ7ì/ÁüÆpá_N¹ Ä–Ëúü‰¨‚ñì¯È3ñ·ƒIïX k² eâ ás#Ú¡@±“›@ &.–'PB°³:QV±ÔcBOü'×ÖoñP"O’níÔ…æ –T°v¾ŸļÜ.eSL @á—%®C¥ Ç@$*j,¯éÓ܌ݩ€J¨Ï‹žüО©Õ—¶ŽÜ9ÎîG0‡òObÁ“¼©âŸÝçÑ¿>åe„Càw[gíËz)ÒºÌt¸õ/ûÎe8м²°ÃÁ*t2‡—x…˜H“‰çþüCf⊆õ"‰„•ŽÝкþ%üdÀxLù¦B>IA«ÖÕ70lV^ÆöG ë#0ÛÜËSÂW--)¢æôœW‡?®³£èƒºh{!6›jÝÎaŸÐQ+I=lúYVz}iì(ƒ;òÛ#Ej3•­‡í%Ãk- uƳÕEÓÃ_‡3oí àÎæt›ö—«_Ý/^,¯×„ÿ†Å°LÛ·×ÅrtT²TŸç¬§9ÁSÙäUjÌhÐÐçÞ'šht݇ds*bf?dnÀÖ|>­hC-Ö¤Ïl6¤‡z™)ïüÊ×ëÅ—}ˆ€JFpgG§3Ôá «ßÖÖO9GO”oëÒPN<¢:>‡Ùî;-Ñ*¹hŽÛϾ™H<¶Ï*ÉúçŽDÿ±[ƒÞœTwÙ®„8ï/9¬ÉÀØ ZFÿtñÈîn£9ÌбZ,Á=Ž*Mo@ÏOKJ m Ãc¾)>ýéºËÿŸuoÌR§o:ÚljÇb!x¬ƒçÏ‘¹‚ÿ‡ãÑY ÑS’PΈ’b¸÷Ï-,°‘Œ/E¹±4+Ï-6¡¯'*36²É„8œÃ¥Ðí´ÑŒÉO‹éežëí˜ð]æ׫0ÿ7¡–Uõ†99Þ|BE8ty(<ÍŒeëB7ïþ=Ÿ¿ÛI’&w>ä¬6z×Q ðÔRÖ=ðNJ]àUôüt,9Á&]áN€_0HQ/ý÷ûÏ;du7Iáø­Âýr‹$¹§/¥¥òzûnßµ}Z^«ˆpö†±âÙtÒu·g!ÿUÌZuʵ<ó¥R'!‰T­Ñ¼Ÿ ®ŽX…Â_Àƒ‡amŽÿÆ]å«yjaËæß@Í´9xZ ¯“¿þ¡Í[@3¸;/ò¿ï]aOuÉ#ôƹv¨oÛùÉÏêuα ¹Ó\ˆCp7X BÓ™! .eµ‹úŸ© ê§ kèæ ÷ZBZ›CXgÑ@ܲt,ä~e¾Î` ô(¼¹hÁÌw¿HdÍ8Eµ‹ÿ;·ÜiÔâ’ýÂH ¦&|Ù^6g1€pNض(Â:£»'+\½îɱÿœö%^Þ¹Àíâ’˜”zbQyèÇL l|'@ÇãtˆL×î㥕–¸)O“^«üª©œŽïƒûô$Ø)¿²|p mtôýÚÇw¸Öoø«­vÊHÚ³Ëyd£CmÁ>¢Ï ³"tËÿ)+k ¾ÓæíÄýØê¾>å²3 Z¤°…h@Tv’Oœš¢~6SÒØ+¾€R•u‰±Ø(eE}µÍƒ ®˜ý–ÍMW¼þ_˜%a.E†UšòàŠµ–¢+\Ж›ô2„Vz ¦Çž•{¥þÏU.䌺/Nünó|hJ|6h €…‚½þÍÖ¶1JÊ3•6xs½Ñ«tr Ýño·M^{í~+E¢ùo¤*\<å&7[N'ÀM@Ϧ’¦ÎlŽzòÂ2)]‘+]ëx{…ÝUÚ%CÑ&nJ³BkhR ´–r’Je"È~7Z(Еé ôÛ~Ö,),5—+ú>¢!eêÚÏÃuOÃbÚ@bpŸÌPξ†Õõ¬°Ë£,öÙ{»GAض‚wG ýñ²C1zCuG‘†V28:\BDô‹×^?q=Ëó·}´Þÿ(Îä¨é±®ÐÂLC¯«‰.DŒaXÉ4¢Ù»Ã:+ãÕ0É:ÉíjôˆñÿïÓk4&O€Z`®7ÌùÎRµb%èÁX¾d†„ªÐ~gÄ"ºþp§ iæoŸ®ŸüÌíZ¤¤f#ÃÂ^tÞ‹U‰TûÖvjïà»ÆÎúÁû[Ø*³U®£HÅ^W62Ù&6€snW¬æZ½<•>Ò?2;‡èªQqÃA{+¯¥žü¬»¼=³Ú¹ªà1}ÞøíÌ •Õf¾ËÞ4ýØÕÛ½æÔq|Í_Žû†:“x‘À4­z+ú¡£Ê˜ [%¥ùäøƒ]C ?³]“«‘Ó¿'5ù?\.äuz% Çg8÷Ib¾Yx΢¢É+-øÿD]Ì `C¢ «…€¬ÚÁ†P•â_Û^"=ày3+üþû;·ER>ðOä‹Íª¯ õÜÛÀq¾Zmz«\ñÛïb^ÐíÖ ulWøÇb±~àÑ£åMºIs¿Ü]çœ%a{b±"«dœŸPCK/^w{4·'Là¤éO5Nðànƒ"ÌÂøG(ŸÖ™ ÕÓË1ÆTã›G4XÅW^½¸Wÿ–¾Ã­z°~²`»‚Ï;ö¹)×Q©wƒP®U?³yéXý!ëà‘Â%>¹2óºöî fò»æè6œ`H”ó…ÇqDsD_BDj ÀÌqžŸ<Ç]í>#]`:$µ'üX¶i¿Z¢Wh«ÇÃdÍ ±ÔV¢_ï5 ˆ¼ªŸƒbbUµX†;ÓþCNÕ'ìûy0âÝåòÀwþŒ?®J˜1c2;ãql¢i“[r4Ç]àÛ<yæ¡’ì"âÇ'$œÇ™³Œ8¦:è¬äm?F=æÝÅ €¡C-¶Ÿ³É*&ߥK˜7oVïxŒ`ÇØ3‘·Àˆ¸HŒ¹w†œšÏ> ãZÅþÙR:¢l6åöKhó}çf,›Ø‡¦T&)%"\”„Â!6ªXFj7H2Œ½ì‚ì77^ûƒ'×€€¹‘“‘¥8jÌû‘ÔÿÐIH¾jÇ:òkíwHbbgB?â9’fL‰sû“úç-ý™%ævUòëâxêqƒ+9“ëoÔ0%õã¯[×:c&fFMZ3ßã˸ Ã×ëRiT ,àÔK·gJ^˜c,yI°}ŒoþÎk§ËìOÝc—Ów’|´Ï†F;Àânw°ÔjÐÏÝ1µ=~Êl^M‡Œ^äÃ}/b¦?K*#v·<$ë}j¼Ç+àhì{w¾îlìh“©@ àoÖq–°-'`0ÈAÆÃèölÂ÷ r±­\½¿-Ýtc¼šŒ'ÃÏp å£ÙÈð.Xêl]Ð}Èóá-\š6gúµŸóÝ5¼­WW51t0]31 Ëv]ÝNtä)Y[r‘ƒñ”–lw伯ìöuåQ¶Í¡èÿ> 5Ž¥ZÄ·•ñcøÅŠ;æÒ›²vˆî*fQ†ÑCÓ qïBðµºö¨¬}žH⿉5èXôòǸÂÄæ”?á]4åùH{ôáGØ'8ÎÚð¯1ö|]Ú/ÙÂyÿ 1Îý¸6Âè0ã÷ŽÂr¤úØ£_1^hÞ:‘}OUÈ 6.Ö¸K^Ðå?ædmUŒº.¤V©Þ–È}P8“°8×FYÖEµ…)'aòBÿ“.Ýî÷S õaêÓñT߀¸ɆçÐXˆ†³yÔ8C$¥U©ìÊ«]L};#ׯ¥‘Ê”.p¼30+VÌZ”™de÷ã“ÍëÇЋîŽZª¦Ž)¢äaâËÆ-×*.=ò¨’† á ìgMÚc€ã º"¶àÕ-ðËOO| ‚ wô.Ʊ.:Œ; ½0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2019 0 obj 12493 endobj 2020 0 obj 1673 endobj 2021 0 obj 10288 endobj 2022 0 obj 532 endobj 2023 0 obj /VXPPDG+CMR9 endobj 2024 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName 2023 0 R /ItalicAngle 0 /StemV 74 /XHeight 431 /FontBBox [ -39 -250 1036 750 ] /Flags 4 /CharSet (/ff/fi/ffi/quotedblright/quoteright/parenleft/parenright/comma/hyphen/period/one/two/three/five/six/seven/A/B/D/F/I/M/N/O/P/S/T/U/W/X/quotedblleft/quoteleft/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/emdash) /FontFile 2018 0 R >> endobj 547 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2025 0 R /BaseFont 2031 0 R /FontDescriptor 2032 0 R >> endobj 2025 0 obj [ 754 1000 935 831 805 896 870 935 870 935 870 736 704 704 1055 1055 352 384 611 611 611 611 611 896 546 611 870 935 611 1078 1207 935 352 352 611 1000 611 1000 935 352 481 481 611 935 352 417 352 611 611 611 611 611 611 611 611 611 611 611 352 352 352 935 579 579 935 896 851 870 916 818 786 942 896 443 624 929 754 1091 896 935 818 935 883 676 870 896 896 1220 896 896 741 352 611 352 611 352 352 611 676 546 676 546 384 611 676 352 384 643 352 1000 676 611 676 643 481 488 481 676 643 870 643 643 546 611 1222 611 611 611 ] endobj 2026 0 obj << /Length 2027 0 R /Length1 2028 0 R /Length2 2029 0 R /Length3 2030 0 R >> stream %!PS-AdobeFont-1.1: CMR6 1.0 %%CreationDate: 1991 Aug 20 16:39:02 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /REFDAA+CMR6 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put readonly def /FontBBox{-20 -250 1193 750}readonly def /UniqueID 5000789 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ\ôéÒ@[œÕ6]nÎÕ×hÖmlha‹ŒH+4Œ£Ž›¹ºüú­œ/?Ð3¶&˜nÔ=œ“a6E¸#’ÕÊá|´~.‚ÜÔ…Ë¡}ÿù_B$Ï~Îä\¿·ÈÇ|" 4PxÒ>ËøÍÂþP%ú ÌÅïÀÄø~ËíÝß4äôqÆÝ.C3s蛼q翈Ÿb“y?ïZÉÝ7’ð2ãz6Lp‘HC÷ª1DÐ"®28s B ~ õÐâOPQùÍìá ÷áOñ\Oóü¤}ÙÍÔlë4x<ŸƒÿKUûžh§ÉX@øµK˜îyðÖ°öQJ@lRJ›>áæ… Î^Ã;åëCý÷’ÿT—Që§Ìò”Ê[I/¨=ØG6n»õ0æX9ƒqŸåç(Cïîkéí .FŸsH/Â&V©|ï7¡*¬MÐq5½£Ö'Á¤KpÞî<úèNe—ºõ+Ô¸O¦‚©ª3‹cVu)'F¤jµµ³³Ð W´Þï‡l-¡ÌÚCB£tN!B¯)ÄSë¶]îaÚÿ(ƒ:·ß÷º­‹,ËR;I5Æ#°Ã´{K ÿ3K¨nœ?¦µØÜt¨½¥sÞ/^:Žæ„IEä蕚”(Aˆh”'QèE=ö±ŸÙ·ÈÕ®]ÈZÜH+]Ž·/AÈv´ ¹+ˆéõWDmù-r™ö_ú˜ „ ùÑ_hI]ÇÂw¨­º¡¶¶þUU‚Ãv3È%kêìBCø{€ó–·Á´³@|ndâ#ÕEýžd[f=¿E²X¸§\L2‚_ÒG‘µ¾Räûã|Åì‰äýrœ@»#×þ6û*.«œ¤u^Ÿõ×T´ã!(˜Í˜ä¼*ä]{K n‰õ¦€êCÿ¸Â•n ÌX>O´¦"øCt\H'tÍg7ªªödÌ¿/~8 h9¨O÷-¢§ LVÿÉP5GÅáŽîó궈´²=lh¡8¨´÷ɨâÀÏa¥ñªˆ>#4þín,#½®™ÇÏ1Gÿ‡pýmæ!ÏÀ’^À‘ïŒ.˨qsU0ˆ2Äuw.ì†\ö\½náéŸÅN^C:8¼ïç‡qnW‚xxÁÂíפƉ«ƒ&ÿÆùSµÕ‚Ï(Y$*&†€õ.ü¶¡Ùkzb]¸`†ã%#GíÉй­Åà¶ij檣aÚ¹ÄÌ*„­ƒÂk-ºYa…ç$6Н•ø8Kð mv„| ®% Rè¿…DÍÉE&KýÎcAú ò'ÏÝÊÖ¦jdIì¤?Ys)¨'*ù  ‘mâ¨L"ALËläi’”¾~PeÊW•el‡¹¨-OÐÏêŠýzdâ ÞynÕç¶LUÐjîc’¾£½ˆÁ#GÇùõÅ™àŽå²ÏÙÚýhmPÖ¼‘Û¥Ï"îã‹°_}a¸kÁ… žÃ¼þDàÄ%mʸšÅnÚé—s ûnÍIs>"¸zq®ꜯåÕðš?Gî¦lrl}ƒh3ø–*Ó ºb:=E LÄae-·ËeÍ$á“•QR C§ëvÕ¼¦í¬×YeQ3±&´£}ì'‘Ò‹ p<%xÖ»½3賟d]ÊS†8Þ•ub˜>‚ ,ùò§>%¶ÖÙƒ7Vh-¸ãEH²wu€Qþë:&Ú«pƒ³v¡Œ²(6Ç®z‘)•½¼¾œ³'nýæ®æZø=lø —K3Ñý‰‘©¯÷…¾\Ii“äº|ÂÐ7ð\ƒŒX”/Ìs9&Y7;ódü_Óè±Dav÷+ƒ¿{<=ó— ÿz§Ù¯‘¡pË(ÚP5f´&4´œ ¥/qŠPÿö‡áY•I§3oê© T }x¶•`©þnÈVËû)"›Ø·Œß`Dʼ—[sÛ7¯Ðï-\õš±Ó×™ÞÍuÞ½ÄÛ%!¶ðµÔÙ#ÓÜÆÎÆÂÈá~-¦uß±_•Yj¸®>¼ß1 `¦)_5|³ ‰—EíÿŒ–rmM¯3eJçÏåoÊ¿c’„ÚÒGâ:C1œ«B¨¶pºøŸêƒ/$ø³‰ ©S¥ÜÏÜá/dÚ†ëœáО§7õ»ó}¿óªöÆ,ÚÙüÎTÃw-¦ 0Ž¿÷¢J}¬èUªPrÑ7ö…·ÄbÍm†›)¼Ê{1 K€st:é´…Âxá¡ìG³pàD£mãzC¤K4yQ#×rÎ|¡üƒÙ “‹Y(ÒìÝ^nª„su,bøHD®#ci^w³§ÎatW¶å´š…ÒJxy½{`w®…Ùxtt‰Ã>à·Í§¨¶» ή©„QgÈkG𦤄ΚÌþ )Ûë#¯/äÄ-×ìÐqf`yqlø%}*ï«–ÓP¨æëÿ‰5~6SkÆ{:ƒYn—ì–6Õ‹ÜËí3à ŒKuh AÍŠª–œ]IÚ‘46ÎX=?'ˆ²¹¿£%¬$®{ï?m0ýQ ˜¿BÆVL{ÂkÕ:¼zøÍX†’MXH)zª¥Z¯^ALì6EB˜ASLoÃ$%-Ö¾šÞ¢BUi˜À0â¢è£Õa‰-$5tüûFª…q-m·¦FÈÚ¹JÛÇLûXJá}Ú2ÓTƒ}s› i)¼Röcÿ‘@Ix®©¼S “=½Z¦á êcŸU¿€Ft4yG4y‘PSé­’«’¢ dG&¿'7ó·°îuyûw1¬)çàCRwï"›ìÖ¾—›óÉ\Q„=†ð0‘xëâ;Óìbcª)þ­¤ék%†|úæD6³ÅÇî2¾IÔ‹#Ð 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2027 0 obj 4133 endobj 2028 0 obj 911 endobj 2029 0 obj 2690 endobj 2030 0 obj 532 endobj 2031 0 obj /REFDAA+CMR6 endobj 2032 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName 2031 0 R /ItalicAngle 0 /StemV 83 /XHeight 431 /FontBBox [ -20 -250 1193 750 ] /Flags 4 /CharSet (/zero/one/two/three/four/five/six/seven/eight/nine) /FontFile 2026 0 R >> endobj 523 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2033 0 R /BaseFont 2039 0 R /FontDescriptor 2040 0 R >> endobj 2033 0 obj [ 664 885 826 737 708 796 767 826 767 826 767 620 590 590 885 885 295 325 531 531 531 531 531 796 472 531 767 826 531 959 1077 826 295 295 531 885 531 885 826 295 413 413 531 826 295 354 295 531 531 531 531 531 531 531 531 531 531 531 295 295 295 826 502 502 826 796 752 767 811 723 693 834 796 383 545 825 664 973 796 826 723 826 782 590 767 796 796 1091 796 796 649 295 531 295 531 295 295 531 590 472 590 472 325 531 590 295 325 561 295 885 590 531 590 561 414 419 413 590 561 767 561 561 472 531 1063 531 531 531 ] endobj 2034 0 obj << /Length 2035 0 R /Length1 2036 0 R /Length2 2037 0 R /Length3 2038 0 R >> stream %!PS-AdobeFont-1.1: CMR8 1.0 %%CreationDate: 1991 Aug 20 16:39:40 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /YLKGAA+CMR8 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put readonly def /FontBBox{-36 -250 1070 750}readonly def /UniqueID 5000791 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ\ôéÒ@[œÕ6]nÎÕ×hÖmlha‹ŒH+4Œ£Ž›¹ºüú­œ/?Ð3¶&˜nÔ=œ“a6E¸#’ÕÊá|´~.‚ÜÔ…Ë¡w,ä"»rƒ­g[eH§êi¨ƒìª>žÎu†ÖÏ ŒÕWÇåת>©~ºÓ–Ñ¿ÏJmdv‡Aíê [û¿4|ܾ.×V–z¶ÛÄ_¢£1. F¥ýf« |Xÿîĸ9^Rw] ü×ÛŠ³31S\D¤ËKZÍW`– äP”Š^êÝ3ê ’eÛŽÈ Í8`2?Òl;ˆÈŠ!eXxh Dfú@=$»—*I¸BÁ€äÒXÉÔ!ÐWx-b1ƒ £™³ÅòòÝC; p™À}½âhÐÿíQi¼Ð=H²ðX­bØgŒbmÇ£óR,™º–>ù_ŠÑ¸°ÓQ! äÂÅZØž¶Ar“]< £˜óîîÃQ–jt8ï?îB,mN3v լǵ+í˜Kú­6ï t‹Ð{äAJc—Q%ÒrúØ?væÿø60¾RmXsŤ+pú‘Ǹiñ:þUësõ‚ƒ‡“¸Ì)káÜÏPýWË\~Ú;’í” 7 T“.ÅN ¹„ü¤«}.¡‚¼ñ&:¢D°~Àê’ù¯4³LD¸V­Áð5bæŒgä¨AN”ÓªÚÑ&×é¶ûš+‹Â“§Ä»•É‚¶£¤á?ÌéÀ êì\SeÐké¬öáÏdäŒVóPzjmSƒȬߤj;-è0@€3q!Ì,ayÈ ,Ê–`yÛªi¨k·9kmosrAû~}wâ‡Ú‡$Ĥtºó¯Îâ¦t—®â&px: ÌßJ,‹ìM†e°òî'–×EA"NóL’Ëþ?ˆdFµ¯GÛ©½S§íúCý;Xön•Qð‘TÛË<–¹z*‡ Íg ‚:£9!òâ/cÍiíŒ424?j(s0×go&­ÑÞêµ&1/€Gy¼´®—;ˆø$©ä¥üÁS¥²,­‡¨›Æˆ;`ž·ô¯úÕL~YîÓ™ ù÷<Ñ.g戤N·#¶„k6”uùŽä„Ë®³°»DQ\z Mq9FŽz?}ËÕ¦KóÀ“)ñƒÚÍ¡#(šh¾äT¥F}¢> ÎŒ„‰êÀÃ4jM¸Ä³Nxôš\_7‹¡MÏøjYÌYò{O3÷v=Aï²¶àÏÂååÍ[æ6DPφwH4L”Fïhc ó"ëßÖÒÌÐfl"®øîd~åé•ESáËñçŠÛH“füN.ì;ãAðåßO°¯ÄÀ¥ž <· \r¯l˜5_ÐÂc™©m@vÆw.¾âIâKGAæPCŠ6žr¢´|ê:’Ó±méëõE£åÚÀÕ7¾9Ìx¥fùÜbä§#O€Ó@G>ŽšÑ7sˆæ,š‘+Ë úé{È Ë'%)äWÁ¦c&Üj`W©rÅuxN¨eMÞÿ+ÔMa¯x0ÜѡҕË=u®óÜ«“wÛ{ö¾p¡A¤ÀÕ8Ð)ÂÔ¤lJIÌ >¡Š˜¥7]‡i ©-éS‘¼JºG`§©Ý»µœ½›GCÏH¨bÍBôòÙø¢ìÖ^8Y‚;⣠?=³@48°ž¹8“(2¤d‹ì(ô«æIÞ¸¾|ÿ…8ßÒܵP¼\F‰ GmÊãmP…çE…89 ãé5Ý0Ðèl’$Mµp¦³}ª·wgùíKŸ¸m‡¹}Âá öÅaá“8H ç?¿äˆ’ÆŽrë£t¨?Eˆà%"óß7Zþ³kÿúürºš¶w^-ÏÐ[5³2„mýO*§M$#ßÛÎ&ôù*@ó³FãõÔ‚ÕÒkŸ" FÖ½¾·9¤å 5µÊþ‘lk4q@ýÑÿí×}7Oˆ\íS3X:A¢Ð¸¼÷z26Û[‡º-6íÕ÷P_ßú÷|0H½àƒè¼²v‡`úQp•ãc—4¡q¶z5Å&…«ÅVĽ_ßÝ+Á”4¼3E´S„œ}Í5]ô(bV%UcÛ$œ—n¯AYøÝ< }‘¨Ïd+Ÿk“þ&r%µ<¨3§fã58ÛÎÍ\ &C4Oë+›9§Vyà|N[ù8§_©À†]%ùb“°5NUŸÖ/µDŒT$ õærÝ7DéNl»GÄ´f¨Zuâ#ZÕ1ü÷ñæõ(ø;¹k¸‰eÝ¢KŒç)Çù±(¹ÒÝRšåé\ Ìr=Çj@òÂ^ŽR¤[î`À4)Á¨N.ÔZ?ª_½ø.[VîOgË’u5/ÄÀIáJ¶ô­ A3Vh>WZê2¡ Ñ"KÀµ“ ¡Å>ñŠ ÁŽÁ” «³¼¯e2h‚,gµ:W/Xà®ND,ŒázÂÆð]KLˆ·Í×PæH£žªâöeHÍdÿsó/Ÿ\ŸmÁ&ì>‹¬Ê“S [ƒ#îÍ'‡ðÓÎÁG®“„ùK®åwîöÄEØè¡Dk@¾“‡¶dnÆÏz†®ÒµôïÖ5TRèwë»Lœï»~~!^þ²×–ê3±ÿ³+Œ<-`úÌK–qJêÂ9•ÅZÚrû×7jJ¼Wƒ  ñZ2¥HÖl—Œ J±„2"€WrIä;}¯‹þ‚5ýh«& '—["WjÙ.Y¸q‰½yÅZ”œ_«ÍŪ…¨kˆ ƒÖy ¦ßŸ²âwE¾wß@2—Ý»*LЦ™ï¬;`ºŠt.i1@'ódÊz•,O"=ÔÉ­PéPÿ¦+ ˜X^‘Èwuüßбï€ÚÌ„)Òš ¬}ÉY;hd«CMn'òü+N„̪ž®@0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2035 0 obj 4323 endobj 2036 0 obj 925 endobj 2037 0 obj 2866 endobj 2038 0 obj 532 endobj 2039 0 obj /YLKGAA+CMR8 endobj 2040 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName 2039 0 R /ItalicAngle 0 /StemV 76 /XHeight 431 /FontBBox [ -36 -250 1070 750 ] /Flags 4 /CharSet (/zero/one/two/three/four/five/six/seven/eight/nine/A) /FontFile 2034 0 R >> endobj 512 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2041 0 R /BaseFont 2047 0 R /FontDescriptor 2048 0 R >> endobj 2041 0 obj [ 615 833 763 694 742 831 780 583 667 612 772 640 566 518 444 406 438 497 469 354 576 583 603 494 438 570 517 571 437 540 596 626 651 622 466 591 828 517 363 654 1000 1000 1000 1000 278 278 500 500 500 500 500 500 500 500 500 500 500 500 278 278 778 500 778 500 531 750 759 715 828 738 643 786 831 440 555 849 681 970 803 763 642 791 759 613 584 683 583 944 828 581 683 389 389 389 1000 1000 417 529 429 433 520 466 490 477 576 345 412 521 298 878 600 485 503 446 451 469 361 572 485 716 572 490 465 322 384 636 500 278 ] endobj 2042 0 obj << /Length 2043 0 R /Length1 2044 0 R /Length2 2045 0 R /Length3 2046 0 R >> stream %!PS-AdobeFont-1.1: CMMI10 1.100 %%CreationDate: 1996 Jul 23 07:53:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.100) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /SGMUNA+CMMI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /alpha put dup 12 /beta put dup 22 /mu put dup 23 /nu put dup 34 /epsilon put dup 58 /period put dup 59 /comma put dup 60 /less put dup 61 /slash put dup 62 /greater put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 78 /N put dup 80 /P put dup 84 /T put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 102 /f put dup 104 /h put dup 105 /i put dup 108 /l put dup 110 /n put dup 112 /p put dup 115 /s put dup 116 /t put dup 117 /u put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 126 /vector put readonly def /FontBBox{-32 -250 1048 750}readonly def /UniqueID 5087385 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å– ]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 0)xfáÍ 1›kÙXž9JS:6ÔV ™ =!™X>¹¸KMîãÑ)9ã!™ ÒI‚}–HWIUöª¡c©l=G¥e°ÂZ¿m>nÁ‡ä°Q‚k°Ð2=”1p·•%R`ùý%ò$ô]ûûÞ÷ÿ‹¿ïc{!®W+8›?v(+ë)Ì0ÓˆÇ!Yah“çtA?HÞ @‹ÆmÎ?á|¹øM X9Õ€Ö¨ˆ#Ù2 é:ùm— ,MZ+²¸Ç’\Ex9YÄn<á¢ðêÄ¿‹›2^FC[Þ`¼T×+ȬµÀ£D¬‡]ǸFF£$¸oØãB!>;A\äT hŽÙÁÒxìh½|5úù«:6Òü;åÏ–UÇ·í§6~åƒkŽ.ìT*{8î¾K¬`yÐ8¬³ÇÉ'—dT|-Q—k«©K©†myñ9 •ª9°ð1 |½ôA¸ÅfŸr ¯(Kõ*)Æ%_ʬñtPû¢`.rY?¼¿Ânrnä®ù{v2¼O_5;\gþÒ>§R¤¥{ïñ×4‰_ : áØã9pEz–~ÿ„öØGu E¸Ì[Ùn窙ÝÉài9ヽ¤u#=X­&>¿¯Â~J~П°ƒUöêtå0°t1Cò¨qs-bØ5±ŸÒÇýð„Õ 4AšÆG˧÷OE1Ü»Ú"®ê?»»@~ ÌR½Æ ¢”ÌO“ë‹öÔ>›¨XÕO8‘ŠÈ' IVÕ‘ðTnPü¯¦ÛÐ ‘#õìÔ«3³ÛL®3z‰ŽÙ›oH9@ÉuDøˆêðËë JÀsÐf*¨+ ­5èx/…Jöl ÀþñÍÑdc!¹=2~SØŒ è%ú•ªW½qºWå†c…Óú÷ð¬¾ç–È+ÃúžT¡bUìÖp©Uã±b“f†±%ñÝ™i²eµ÷["–?”íêè™PkH¥&õ›j÷OëoÄ;ã§uB‡ÈL·]rÚAÈqÉÚ¶‰’9¯È‹6ciéµSD•Þׯ#<ñƒ,1šVÍ ¬‡åµfÛƒ–Óx#û8—zWº¯º×ú1eôÊÃLTˆ¶V‘Ë[IËqr«¶i™È}×ï/¡Ã¦]É÷1¨Ç•èÍ&W5«=Å7¦Ï}þÜCÑŠoo¼/ ÓóÅ–ÆÒˆ„¸6{Ú·T–ÚÚñOò{…Ç‚3ÿ ·Ì½üHqh¼8ňÛî/Nh–p »gyçöáÌ_+8&5´…ãN˰Gd3W­L™ #äjqâï%B´íaè?4;QÃît}˜ gïýA/Î{͇kPÅ/ášÂ ÷‹=8QÇ5WPI^‡rö|•9ð/$#ˆd±4å/í“DÀ@Hg‚#E>‡í0ѺìQ€‹KO‡uPîñn{Ó¬ëÂâ–Q— ‚õJ×_ޏ£(¶N< dÔ¤"g G;Û´ ¶|L‰øô0~‘jÖD ˆ¬³ˆ=¹·¿sÁ}³¼´$~+è/­ÁI}ù^$ˆò^0×OÕ#]:bÍÑäJˆ+Ûæ‰¼ËñW¿È&÷rˆÇËüV»»¹:Ç–¤ý@ gµ¾¾¡‡àáŠU7¢+6Lw• ß¶xf¥­[‡øïñ}äÝÄý¸û¢+O¸b#OºÆšõp$+:ñg6‹sãe¬§;ºÐ@+fíóŒõç9OÐànw4ˆü<´6h!/3%šdþwë¯s‰ŸŽlL‚݃û,«)õ ¤»x¾ÝõuoØÔg$|<ƒÄ ‰.—+áö{›OÐÚVÌš n{?Iÿ ž` …Î*fõÙ%¥hü6hQNºÁfD]Õ~%Þ©ù~Ì=j_2«IŽÉ(Mj¸'ßhªÛØÁqÔ£›ä.ö éý¯iðw2QY¡µ+ËZ1ùœþø~Öèu,W/Ð ©LáM/W¶rFTˆÌEzȧ(Rj¸ˆûô ýÁJ¢ùu IëðøSzö6·±³Ê1¡§xR²÷ ¢×‹d‘cN?U¯cŒç*rܸÛ4¼Ñ˹Ӡ3Mœªb÷2×I\Pô&¤íL£{WÑ÷{σ¨òpcÍž1(Íåh•±_\G1ü¿²5j¹wª ²qŽ·.CžŒñ6ð½W¹ÊÃq³ß9³*€„´40ëZ Œ"cˆé¥fžËsÿS>î-Ôñ]÷ÿ£ònOÚ:žÑ¾Ù¶Ýýú›:qkƒ”ÑY£Ç÷JDä¬Ý–ÖMø pÈ'ÆÃÒÓ¨›®55Rt%´÷ìù´eëJ5W‚Ø8s®÷ß·\çâpMj--0ÃSyÊ›øºô¨û)«uµûŶ°yjõ Š>ަ?çËm4"£h…<Ë"–wVã—¯—DÆ’‹>ø:éW°•Afsƒa¦”‘HŸRj¾ojÿ}ý%µ¡ñ܇¸#Í 2›N:|¡W…¹ÑZRÉbL«£+Ùö†9Œ{çS4SàŽ†A¢¹|SÖΑPòi6-Îè&¹ÊNèåhùr`ðÒ%¢Žù5lšI¦¾‚в¾ŒÆÒà‰¼4­÷ÁNÚ{#&ŒieR lŠ{Õruiû,o fGlê=!ЇØ.®¦=¼ W¿x;ðW(e˜óÄ(¶Û÷kO¹Å%chæ”dœä3@â,K s’¡D«2Xfhµ¼ 5M…6þ:Óæf#Ç&<Éâ²ìvö÷?,tÐË5>ämPØô÷Ä7=åD°‘¶ i•”ÛN·gb Þü‘öe}‰ÜÝ ²9epŸÇE¹ÿ±ð™sSp.îköµ&y™2Òlg±[4DPûkl ¼ulÔ¬|DëY–<ö‡Í“o…™ãŠL®ºÕF÷°8!\õÝ/¬­ ¶W vëF•_0ÄÑ OÂpRs¿5ÐY)™YA&dL«q>IŒk¹<þñËÈ,ò~‰ºÒ{Ú+ò b«±ø9nà!«\Jx ?äÙÄ={ÎÆßO5 úÍâc& Bô¿ÉüòÒÙÀœ£Í x·Ó 𔕦f)™anðH•]û ±²xŸ€8æÁÌt,œfÛ8ñÅ"èæ.MD‰{ßzT&ܬ¢£~ƒMñ}¬ dê=>ŽÍ(¬v/Âz¥­üQáÜ÷R¸z3‘ðÞù¸0Ø”÷&ø„ú†}°+úéà'ošÓ—]²“Ö¢;Þ(ƒ&q§PŒ»ˆÌ‘Ù!)ù+­Üü”ü–·%Ÿ=¿~+’‰×Šã‘tÊá[ûÁ$}J‹ãDÎ肌õ oþnŒÛ¤Ãavý*XA?xˆçGWl¾pPáv¸,D°ÀÞtü¢„"‹vu'gh»¿šŠ6 |÷õ9öÅ”lØ‹‰+9’ÕÐà¯þRA[ã¯ôqW=a͹DD¹¿¾šÏìF™Vø 7V­Ï>5{Oõt×W°oI7‡ ôÃðøÀ·ÈõЭ?Zó›+¾«.;0óÉZŠ'4ñ©†ÙOÔd‘§ôsXP P—’ ‚žñaÈ0½û¸”z¥MªêþZä•uö» ±O»gS¦ÊݖɧçKvñÎÞ©mòêûH†¡Ì4–œØ2XáV Ð5y[ÏHO”îÍ=Fˆ šE§Ü©'¾ˆ„&DÂ^±Y¥/åÂ’HüfcÒ”/jƒÙxP׋ì·ÇÀ¨ü!üεãqÆv’}SÏï!¹†p$¡Ds®Ç:T4Îë¯9œiûÖb…»Ä¿aèDê±)6Ùšf|!Z%tK'ë·`Ÿ#@}§ÐÖÖ¹‚^™ž´b$!Í4‹t¬)ìª"Ï1båìÂOþ4ëØ8ýO×6"°Yãâ&95íFRÁO‚~[0´ ±ÁV!î¬ýW°ŽÎ((æ&šïfaüWV¦|šúÌŠ~0'Å“>$0ÈçOújû5âŽx1”°%<¹ºU¾Ñ0k Ñm3­8­Ïá˜:½µj‘Œ¦éõaTù1ñúÀAÕÙ‚`î³aÿ¢xðm‰éGÛ3`ÇjLi>;ËÌ÷åt–ñÃVL³õN8Cü)qñ<¾å2zógìÑ;N8ǹäÐ\<4øYŠ_úBçãTº»Hâ)ϰï®g¢[Zi=» Dòåa,RP¥yr÷"¿Ž¢–Õ´åHD®ím›Û•}ðò>./ öeÐêÓ½FkEö%Ûl›í¹¥¶).uu¥ÙžÄõ¹f}š°"N‘¿Èè,°ÁîÐn%wÙ¤½n*T,®˜±–YMq®˜°u?ˆO=Ý”–4f¦ô›Œ±û‘ ¸ãyRuÿÔÞ6z¬è ÉND<õDþDÅš3XªW.þ–¿ðµ­Í¶&£s´ŠúõŸu…F󟜇$ª.ÿ´~\Oˆb[p–-… Ð>R©îïÖâýÇÉ´ ¤(L25Os‚šýÚGýtªÓ"èÂÙ Æéî‘Κ ÞY)d›:t=<¿ãÌÑ£±åN­=„ÿÉ¿5&cgv9pFËÿmU¯Qn8É»£÷ËHJyž¨tœh¹èyy“ÚUwi‰páþ³Þ³Âü«¸šïœ†vÔÆ†3ºpÍSÄ*ójú{¢üŒ€âÊ…é’– fýk nÎs| Ûò¼Š¯Ë™ 9ùzÛKÁJ©a1Ë…œ¡Ê$þž…©‘ 8»³§=("±/â-õßBJñv:Ëç©ñôü/ºeœÖ³+ý„Ôƒ÷Yù®Ö‹p_(¶\e»‰è•Rê Á;½Êøë“—K},Ûï«7 ;þ<¾6zk8ïHÇF|kÍ6‚×Â+åDH«~úƒ‹Œs8£§Û˘š{9KG¾”¾>zÀÓ­¨Ÿd¢ÇërÈ’fTdÿåQø}„(–+ùVCW›ö@«ô̬Àn&]Ùvl{1ˆ¸|dö»\#”q6øô=Cƒ¸ûÏŠéÇ ¼’Ù|©WWW-ÅÂß0ëz“hµ—–Œ3e3ÝJ#< ,ÉÐì׿3-^Dº¿Ø—t$™~Ø)™ì=ycìóÑ’k¨"¾6Œ¶EÃjÊ’]mÛv¢>öqè\¶$IMd‡N5ÑJ˜°Þ0ƒ1Q綨‰ù’U‡ æTH—÷}õTÏúÚÀ,ÎýU°ÒèDk§~·3ø€.íY¢4„À:§˜ïGÌ"´é…onÎ(,:éÖ¦²ñ8>›Ò©~N!BI…Mòài/¡Õ¡ëzž™îç:–•óughwïº0g×MWoyfHp´De÷3Ì…(Z7‡Ò£ÀÌÆhK’¸äðšw¤f·&p^>d8e4RîFCNªFŒóÐ’I7¹3žP ð;îËnh v™¿^ƒš1Ü*áN ¸ub’8@Ù›¸j˜Æ!}ä¸ü$Ššt´ìÏݘˆÒ—f7¡nT!FÆŽ£§wþ2v)q“IëÓ^fM´_zIJ¨U§uì°¾ün:§˜~+YN[_Mã±GáÔúDbÏJGësåJcêÐÓ½c¦r³Œí<ËF{ímÃ1ËÏ2 êräkÕ@ß÷;–óå ž ùñw¼—4ÔuxUÊ2!ÒÕÇî!$Fç~!›ÀÑ0D@ûÁ¬N€¶ÌèzO° 3Âz¤ºæ_°°ÎY^x|Ç6ž«½Dé*í7.•o‡IijAÅøü·ó6I·ø«ïB€…ìÿ€ àõÖ "éÔ„A%•!äk±œ°®Q'ûjØ3V`›u„cbõº@ÒIu¬Á¡àšdJ²ÀL¾rÅXcD«fF. ãë„Îe6Ó“?óéA¡à…Åij—]›IÖ·°ÕÜ׎¬E’em\¢WÄù¼…B|Ö¿oØàÑ+¨XÌŽ»Ó šº²ŠIÃ&PÒukÆŠ•û¶™ƒä])mP J/‚ ò‘2‘Ʊ$gHö±¦ûºÝ$õ’ ,“†å> "ƒr?‚mªFÑlOÝLg‘oI˜~qMD#`¡Â¹nøñ4PýhÔ&ûÚNè¡«qFˆi™‹¤íE á•c èFD*¶r~‡ã=U.£4—ØÉ“ AY¶ãÏ'0»ú®õ)n>ºV+—zxûÅO"©iÏmHeJÒ»l€AÚñzx„®vRPªµ¼H §ÙÉ/T`½œÞÒTÑc:Û^æv[;¢Öè!J›e¹áš"*Oäè&K¹¶Þúa×w§¤rzƒMÄäÛùîÇýpÏ'"û >:b(°hf’cX€›Ãž!>kˆGG’&´ò(ì*F)I“k*ô·/æDļ³Uyg§I#Sn¢bïR6ßc2d#’‚ÛrÁ‰¯WxÏÀ¤…œÂ1%€ªO@nÿ^âébÏÏõT9Ñï£}(âæÚx«…ÃZ¯¹5½£šmZ 7âPÚÔƒ}¹ÑÅÐ.E¥2úìŸÆóºA«o[nƒP¯Çò• –…ÓÀ¯B;0ˆ‰‡12ëê k5Uùø]*« ƒJvÎn×jVh®¤¬ñÆ¥Cv‹…†k‚`êìŽö`Œ»jóiÒ†ªÐ@9tœ‹1X´‘µ¥=«ö¶d8Ó‚ÿ}¸xª{â‡1Éß3…Z (^ÕIå·\lÀà ÖlG¸[õG”÷šNÔѸñL¾–Ü Àa‡ °~OéïƒSêåÉü…¢ÃañÑ,sm!ì6Õ´Áœ9´Ê¸ZêÅħ Îbr 0y2›Åý‰^Y%"øßà«…õЯ…c½&55O.~Bu h‚ºçÁ Y™ÿÑÏË1\k‘–‘J… 4|]ùP«T~SBu"…X‹•›ÉærøÉ'«fz?e*;ì}‰á/¡3AÀMå2C½5‰B ~È]‡«¨Zh®<ý³¾LV$Ð'ÏÕ24õ‹ÏVØ•¶zdW‰ô.`cÓZUõà hH¦i 7¡¯ÉfÛb;÷Y¤ü¤±}˜ì@¦UGÂ&)¦MÆr¾±ÔŽE¦vk¶‰>*¹M"¦×榕jü]Ìô´`¯äYOm¢\çýVpb]cæìâ¢ÒC—ƒMé߃o ~n¡ö÷‘Э+ŒMÙâ#`ÂþomÊžÓLtÚMœ"‰N!¦OgЧŴµEm˜O‚&Üï±ð+{ï´áLçGÞ?jáÝNôT­Xà ôl/ƒ½§…À)ÊšÖÛS11Md"ôh7XåÙMµõñ­–$Jt3ÄHäÑɸP×UEA³qæëæyˆ8NçlçŒÀH£àêÐ_­†Jº0IÆê``§9Šs:Î/G ¨l4¤Qj ¬‡Iò'ˆt(sA¨Fµ¾—ÍÓ5ºYì>ƒ€ÖŸ¢ 2z«¥lµ)˜ÔŠ–N­ìä9—ì=Z”†‚Ž m©þANÍ– vÒŒ«i»¸FÑ'Ä %°K°FïÌ¢ÂF×~óáïóªÐ Äç'€­¨D8Òe {cÑ–˜Çt'  Ϩ!ßnKÆe‡idFIç’”°w)]Ö*±æ^jȨ‘»]ähTv·N¹DªCþ˜Ñ;‰ò`[PTN›*J`Á^—ÆGÆ?]“ù¹¶ï…v™6Ïo:Þµ;?0ùÇø™è!Å[þ„œDÁuç9XSªä© é ©ÿþµ±]P[b²Øë³äìæW±Ê„’ê *Ÿ¾·ÈB{øb^V´ï‹¢jv\”Ó(®`Z*Üê~·¨ª@S‚‰nŠ«½nˆ?_Æ~Ú—çì‘ý&% \â@wL%é0÷Û{€_RÈ ´ÇãV³Í;¸Ú)Itþò#!¥øD!\QK„÷º#ˆ~Žsغ ߿ٞi©u|Š3æd†Nõ¦b‹¸r6Õò3ÏÅ»ŸLp‚väëÀ}aMÅ^tA²_Ø3Å{ª ð }/Ö¶û]*'…ãIò{WQéÁ nWšÎLhdòWÝXºÞ*·áÇg]kVÂÞòƒˆÚɇ¡ºx|PH!-fi\ZêèwÊèeåŠn"Ï,ØZÛ–-·ÔÒÚ —¤Úšf˘‰Ø,z¤YƒxÚ@9Íý…Ä®Êö]˾½´IbœØÍòŠí A˜†;Jðq[mê|$@:>|]ƒU“[¶6_‰ø­1'o/|‚ÔóÓ~[Ôóü~,å^I“ìI;å9Ôï?CÝØL1ç´@ü¿‰®{Œ# H•Èk]Q^ß«1üìú¸Á*œ&pøk ȼäB!±Ž¦tÆÙñFm,ªv<¶¨¢„ýr:?낾ñ´ ±Âh‘6šÐõN7I”À:¬_ð„B@m¨°Ws©¬IÄï`ûWÙ!2â¯bu–o²pJµðóÉ“è OOQ3Å:? 0gqåRt$§V±9§`ÑÆÿmÓÈgcï˜kÚ¹¦¾³™²5M‘7¶«¸wäZKÕ“ ²¦>•×'£Ä\Yq÷±?%o2½ ‘H`M½ Gja1çd2rxÏì6[Á.­_bç®ï½‰óJ‰ý¢Jòš´pq–A-ý.hký ×D[Ê.W£Æ¨>/ÉßRåRäX’ËZho÷Ñ%b¢þrkOcO=?Æ”ãg“5üO;Î]1gs7ôØ¿ÎrövþBJG¯A ¢.MÙÀ u˜ŠÙ½„vð]›g€Â÷ ðLcZ‰ W€Ç_tóöÙ$Y 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2043 0 obj 9390 endobj 2044 0 obj 1303 endobj 2045 0 obj 7555 endobj 2046 0 obj 532 endobj 2047 0 obj /SGMUNA+CMMI10 endobj 2048 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName 2047 0 R /ItalicAngle -14 /StemV 72 /XHeight 431 /FontBBox [ -32 -250 1048 750 ] /Flags 4 /CharSet (/alpha/beta/mu/nu/epsilon/period/comma/less/slash/greater/A/B/C/D/N/P/T/a/b/c/d/f/h/i/l/n/p/s/t/u/w/x/y/z/vector) /FontFile 2042 0 R >> endobj 510 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2049 0 R /BaseFont 2055 0 R /FontDescriptor 2056 0 R >> endobj 2049 0 obj [ 612 816 762 680 653 734 707 762 707 762 707 571 544 544 816 816 272 299 490 490 490 490 490 734 435 490 707 762 490 884 993 762 272 272 490 816 490 816 762 272 381 381 490 762 272 326 272 490 490 490 490 490 490 490 490 490 490 490 272 272 272 762 462 462 762 734 693 707 748 666 639 768 734 353 503 761 612 897 734 762 666 762 721 544 707 734 734 1006 734 734 598 272 490 272 490 272 272 490 544 435 544 435 299 490 544 272 299 517 272 816 544 490 544 517 381 386 381 544 517 707 517 517 435 490 979 490 490 490 ] endobj 2050 0 obj << /Length 2051 0 R /Length1 2052 0 R /Length2 2053 0 R /Length3 2054 0 R >> stream %!PS-AdobeFont-1.1: CMR12 1.0 %%CreationDate: 1991 Aug 20 16:38:05 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /TXXFID+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 84 /T put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put readonly def /FontBBox{-34 -251 988 750}readonly def /UniqueID 5000794 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ\ôéÒ@[œÕ6]nÎÕ×hÖmlha‹ŒH+4Œ£Ž›¹ºüú­œ/?Ð3¶&˜nÔ=œ“a6E¸#’ÕÊá|´~.‚ÜÔ…Ë Lw2.²æ§sÜNYÁ ¢Ú»›÷.,òVÝnµNìºX«Ù3µ|裠Ñk(Q×IOs mõ;Üf»ø–µ‡ß–C1}_a Ù˜Io#Ýà0÷²wÝ™\‹œ®œ™ŠÄáPÍü,fí’ë´Ì *ªŒábG¡3ZÓ2Ú©PÒ•§8L3ÿrê£[‰vnc_EÄÀh­~èg9°|¹M)ÿ }Yÿ™aÑ•©HãØ|1‚’•¥m!‡[A˜z¡XpPÃÇNCU»7òUÖ²7ΖòTg÷¡ž…x_ôh”œÌyòø®WÕ÷›¹ÅÏ^í]˜W¹–}›–ÍÏsÕÖ_÷Zú»fs@ºâdYr ÈŸÑsy&vJ“Ðx´ë)Œ‡Öî¢Ý±®ˆÅ~ÏïKqä 4•Ü5h¨LÉ#q§‰:4pPý¦ì÷?gÒ |GJS†nœˆæ^i2º‡§6†ê°“‰øM˜ Ęz0í”.²° ¿õ¼Ç ôâvÃ3›1¶ê»°xCj »7}0a¢ ¹‡–¸`~ì¼i”Eê¨fÃŽB wS:Ûü;9l[ v¯qo·ý Â(Ï>áDlqY°?¼kÚ‘ºòŠÓâoˆ^â8‡KþèLG¯7èq«Z…°Cè`¶D/g\Þw´kEñƒ¸çó)gcš¨¡Ë‹5üeË=ÅE »I¾=Tègl {Ë Î³òÞ±Ž´è!÷+ýN7œ7_©¯À+—šk·‚S”ǺíJ"à•ª#§ä#NQÑênYmh3^^™µÄ¡Qp-:ÈëQ‹¿}?†oešæ"D…Uˆe¢`£KQ! »®*dø5¿w™²âd±‘pz®WI,qø`AT‘|‰3mÍ ÁÙèK¤€¨6»#¾ø'ˆà(Ú—7HËlÛÈñM£ÂÍÊÚ9†+î‚BKû[sgÌÉbM¢Ñ@cØ—>Í3·øÍ8½'CFß×3Êi|„ߟ¯+ÓmIðèj9Õ\ç¸4‘9W‚ =‹θ JÞ®;UŒTsC×1,‘2çÈÛ€xVV\­è,÷7±ŒeÇgÏ.át ECi#ŒÚ¥¤%¤K¯lä"omõx-òéi*Ln—²[?$h'`°ð†‰ëŒ«RϽ/džN°M<¦Ècj´.°fšÎ ¿`±²U&Z­ áDHu7YÒä‡ïK|/9~1²SÁ²|O(¡BÇW^q%KÃK˜g=æ“kÁ5|z1NjjÔÒ‰7>WücÙ‚.XkÍ/šv[6Ûj¤EŸjÔøëÖ æ€Ý¿;.¹;{€YãÆt2 )œzòèÓ…®Œ tdÑíØŸp5ªŠzo>Â…ùqù»þÅ›VW· i˜\?Ú†½L:˜Ÿü˜éÉúf4¡ÓÀŒ‹ #=•&zG•Ÿ°2iu‡Ï—ÚtUÊZwsq úKÂ+z—¯õlêO9¾S•ŽVS™_ŽÛ¤©óe)­”jÝG–UÓùFm;30—õ¾íÒ³¦_5ùšÜ¤œ²LyŒåzkίøû’ïõ<7c.¾Åu ?íTyòÜ•jJ€ýŠòåY\×KZX£jâîv .¦2”÷¢Ãÿ4ñ{Žøb"±Ek½L ;rpI¬™üT6—Ó*È.ýï9·‰ñº)¸È_×~Â^µX7J‡戫Þkõ㦯S5)™sê¤\QòØ(ÆÍã~óUá#ºô¤<º+L×Þöç#ºÅPÂêÞdݨR=רã0až;)Îè˜[Z‡E¿pÀ{5;«ñÃ|s}a€÷PÌY{"JÊ|cfØÈZ>¸ˆêþò³>ÿh#NäˆV±v-V4ø !7„eJêT ѧ8 c‰X ,aóÜž%øˆçb 7g[¥ôã7®JÛŒVprJ!jÑb‚¬ôîŒtUNŸ(¢ÉÄø¸•ϱf?ö×ô±!9]]ÃÊúÇC}§ªZ=ù¬+¢ŽåEyÙåë×½î'½‘—ØÀ¸µwA $­®>Tï{#¦ZëŽæß墄Ùc⸷E6Z÷^åýá¡¿é¤Õîsu»;馵 Y°c[ü ¤uÀ³Q,ƒuîB¤ñý‘vðPúÄÊhäùlü8âÖKr@uº!&¸ë+ò¤€?T¬;¢žï§ÖOÑiܬœó—$4ñ݄ߌsY 6bÿ‡ŸÇ£}?­~8'‹·H ·S® ÂL^©ÐD6áUX áã¤M]9å9Ýɤ4Òñ‹b45ÄÆ~j-ˆxiQÆ€§25+jaÝW|œ ë2¨—™Úç1£hþK¥ ÞE¥aeYŸMì™êФ")·ŸtÐÔ$XWXcÄ|þkA•¹“eÉ”L"¼§µ$/mü~(áu¸ëSaô~hf©t"]¸g44:ü³Ç h eV:jå7´±®°ey`X—¾*µõB2bE¥+̘cÇvb½‚¾³úUwìQ4¼nã ƒ¯]Šëfý¼@ÿ¥<Ó—ÙP”šÞeÿc7•á‰&\§¥B•Æ|³Ü*ôŠš, §nïÛopjD½ýá|bvžÜ&²Ó±[ÀŒ^¡€ô¾ñz¿$jÇò@»i¿Ú’]/[D\?kÖ ÞZNõ%~ÕáXg;>©è£Fh”û¨®KËßyheñÏþz„ ŒÆÝס¦AJoP(kEŠ\ˆÚ‹Í”Ìùº'}jpñMoÆò­Ó[kÖ± Vyîëê²2 *‘RÆÕªZkµó?$ú›º€6å#ꋹ? 8¢A‰ÍfÅÃxClœ &Ì&ˆÚN ‹¹ÎÕ3hë½µ«´ïã׊cè]t,lM;¾!¯žvIÉŸfð†,<7‘ð?z‘´§N«†‰!dV †m5Ó‹ö@ZQN«å“Ào³ë*: »ºfAVÕK®Á\É|›¸ŽÚñ¾ui”dùÞŽ$ŽÄ@ù‹ÒõqT ¶7r«dá›ß E6`ƒÊ!ÍÂÄ YÇðüNƒäM`öÇ6JÙdï»ý‚n+Iõ™ß`Ó÷dÏ~Í‹ßÍ’íÈ"Û" ýUì¹²®Ì§«Ò˜(3?¥F}ÖD#œ> endobj 497 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2057 0 R /BaseFont 2063 0 R /FontDescriptor 2064 0 R >> endobj 2057 0 obj [ 778 278 778 500 778 500 778 778 778 778 778 778 778 1000 500 500 778 778 778 778 778 778 778 778 778 778 778 778 1000 1000 778 778 1000 1000 500 500 1000 1000 1000 778 1000 1000 611 611 1000 1000 1000 778 275 1000 667 667 889 889 0 0 556 556 667 500 722 722 778 778 611 798 657 527 771 528 719 595 845 545 678 762 690 1201 820 796 696 817 848 606 545 626 613 988 713 668 725 667 667 667 667 667 611 611 444 444 444 444 500 500 389 389 278 500 500 611 500 278 833 750 833 417 667 667 778 778 444 444 444 611 778 778 778 778 ] endobj 2058 0 obj << /Length 2059 0 R /Length1 2060 0 R /Length2 2061 0 R /Length3 2062 0 R >> stream %!PS-AdobeFont-1.1: CMSY10 001.100 %%CreationDate: 1997 Aug 23 16:21:30 % Copyright (C) 1997 Y&Y, Inc. All Rights Reserved. % Notice: This font is not in the public domain % Notice: Computer Modern fonts were designed by Donald E. Knuth 11 dict begin /FontInfo 9 dict dup begin /version (001.100) readonly def /Notice (Copyright (c) 1996 Y&Y, Inc. All Right Reserved. http://www.YandY.com) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.035 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /FVYAAA+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 2 /multiply put dup 6 /plusminus put dup 15 /bullet put dup 21 /greaterequal put dup 25 /approxequal put dup 32 /arrowleft put dup 33 /arrowright put dup 40 /arrowdblleft put dup 41 /arrowdblright put dup 70 /F put dup 106 /bar put readonly def /FontBBox{-29 -960 1116 775}readonly def /UniqueID 5096651 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ\ñ~ûþliþºƒŠ ±*»Ñngœôv_ußGiÚüµæy¾"Æ”ESìøwÑ¥$L*àeIzÞÔÉÄq‡pæ ^öªQiù«X»¼:b(ï&Ælb0Õj³¢}÷‚Îá‹%@½$WNY6Ϧ¯vTÝRØ´R…p?#›'ܺõ¬ºq /U£ŸæB3Yk½M™xý²‚Â2qúö)%òýµÜTÂch!yg<ÆZeÖ›®M`Xãéà²0« '‰mé9O/¦Z7é!¢ƒ‘¾‰ZV9Úz2¥Žõ~·<¶^^™kuhÎ#䨹+§ašÛ8µ8Uýõ|°Dg1’ÞÐÏwSž‰O"ÍiýœiÅÀa 5S-œGXɆC„€¯óa¯¼ÃXTÔxÜ´íFo32| NèØï5;û¦>ÔRyEÂ-Ÿ.ÄhKÂo»|¤Óî7ðÓ¾à&À‘ÝKÔºy#ò¶Ïb™1¥ÿSþ{`öý  ^|'ÊAë[ÓÈB?ÇÊós+¼¤:%gñ§ÒÌ¡ÅwåþbD![Æ,¨}±”Jê¥Ü?së¹À]¢ØÆ£«›û‘œ„VÿüŠCGÀßÜps…¿åȰjÁ›9ëôQpGž}dî³è>• ”çΕÐðYx‚OÈ-0PËzҀ𙗹DŒrël«PÂh;ùŽˆÝª]äÆàÙÄ mDÏĤüÜc¿>jçÍn¦”ˆa  «ÈOá¦<ª«B¼Ïáó³p¥BœBü20„ÉH¬î˜‘¡ôf¶Yù_%íû­É ›¤ô“Q¡ŠÑ’w>7—‚¦F#¸bµ©T÷Äñ½¢«@¿ÓBÒ#ÉüLJM¿›¦9D>IÝÄ2e:lbz^Pê6ÞþMs…·"n¨ê-–™ýûJªÑš*×ÅOIV®æ²É˜cÙ‘—`Q¿I­ƒ¿˜Ë?]$Zdò“˜€¦¹4n·*»¦‹­bhÙ§¨öÞT´<ÅN°ÄÈ\‡ëŸtkÚ"iû‘Á`Œ²&BŸEɘ”ç¥í@¯{`.þQÑþPzÉ# ßJÃÚ{=ã–ýœ%Öû7µ®þPJ÷aŸ ](@¨¿Ú"¾®1¹­òòr,Éæý’ƘŸRp­–T¡Û{4šüèaPÖWç gû8:k’ª2î(m,A‹­ gR,}ÍAVÞ·BºÓl ¯z•&Pöh€cÅj†¯Bú/Ù3%ð‰¶»WÁ7]—<ÿX½…%¶ ò˜lõ«†{L+î §nzIhÝcÓž= ÍãSûà“ ÙvñѵDó½5FŒ¿Cò’ÃŒ$§FöpíÀ\€`y£<õyÝ&pDv‘ƒm);lÿ®>³)Óxƒ)Ýc­gÖbzøYX2÷ØEHÎføÕvæžR0QB 뽎wÊ¡+(ZÞT£…-Ü 'ĆòÛÍP,ôÙÊì6v…”a a®” htÇ;rr²²Nñy'ÃQç1cDôUýR5mj¶ç…úïïŽo¼bÁÕ6çìóÜÆIØSÂá*Ö5›lðAHª2ÑÕU›^¶¾F5q’޳x¬Ä‡šÏ¶²½"VE=‹ùQÿ4Åòe{Ôàc¶±Ñç.h³ž[½ÃGî—gãë@b!Ùå kÿÊ¡1' 38sCÒÒéËsL€qéJÍ*ÜÁÑPà+&ÀúaŠ0Ü\ µpù6Æf5¸‘æó \ &5ñW±-xíJÛ¡P"uËÛ¦& zrj[Á#P¦¼3–ª©MüÀ2rk^ÎE#Ä‚¸j±D,,ݾªÓÌɶÝh“¡·=îX¹IõlÜ2Zê©NZáX'=(ªö%‰|¹ÓD”7)}zÑ.a+p²¯YRØG^ÒXbsn˜ÍÒ RPõ“¥ÆŠˆÆ·±˜Ì¬d†Y`‡‚×ìòBƒ"]ÄÄIVP¾ž©Hîh=$as\Œ˜ý°&ã…tïü«3˜[;Dƒ@ž;hÞU×@ž•³ŽCëe%æ¤u_´m§_WÒæý'tO!vjj”ä¾ ó gèÛ8ꪣ¾*¦”m«§¹§n—?O(Á× ®ÏãÅd y„ÌÂïI» ¿à‹’ÿÚJëÍ’ÂÅ[»ÞªBÁz,$ÉÁ°wŠJØ nQ–dcÒVŸÃ>D¼*ñ˜*T9©ºþNnòr(Q˜œf®¹#›²ÃwÄÃs,"û-±>:åb÷3ÎS™+ß? #•÷Ù2}j‹ò³¬çˆ½‘Jß?Öîð…¡- âæµG‰yŒÍŸÌ(r\ÊöLæwd޵¨ߘ*TŒ'Ðï;Á„†ÊF™uc›‰9OÌMÎV:ÀŸÈ;¬™D:dÛJU9þG‘êƒ2@êƒMú^3°^„ïä«. 3"è¼´Ð`©C\èn)Mà‘ƒ4ë‰íiºÉ¥Š…X)·ï^6}[ª]ФoíuÎïR ˆ³a ܱeœ)éˆs`¯·3™‘qNŠ!§—€OCó—ÚÙ¦@“öEMu¯&”‚XVÆ:˜ºê‹’{Â7ž7¤ge'°ió§Å<ä/ËQ¶K™Åp0Äw àB4Aê­‰æ‡èðë,¯…l%£%kƒ†4àW[0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2059 0 obj 4385 endobj 2060 0 obj 1161 endobj 2061 0 obj 2692 endobj 2062 0 obj 532 endobj 2063 0 obj /FVYAAA+CMSY10 endobj 2064 0 obj << /Ascent 750 /CapHeight 683 /Descent 0 /FontName 2063 0 R /ItalicAngle -14 /StemV 40 /XHeight 431 /FontBBox [ -29 -960 1116 775 ] /Flags 4 /CharSet (/minus/multiply/plusminus/bullet/greaterequal/approxequal/arrowleft/arrowright/arrowdblleft/arrowdblright/F/bar) /FontFile 2058 0 R >> endobj 496 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2065 0 R /BaseFont 2071 0 R /FontDescriptor 2072 0 R >> endobj 2065 0 obj [ 627 818 767 692 664 743 716 767 716 767 716 613 562 588 882 894 307 332 511 511 511 511 511 831 460 537 716 716 511 883 985 767 256 307 514 818 769 818 767 307 409 409 511 767 307 358 307 511 511 511 511 511 511 511 511 511 511 511 307 307 307 767 511 511 767 743 704 716 755 678 653 774 743 386 525 769 627 897 743 767 678 767 729 562 716 743 743 999 743 743 613 307 514 307 511 307 307 511 460 460 511 460 307 460 511 307 307 460 256 818 562 511 511 460 422 409 332 537 460 664 464 486 409 511 1022 511 511 511 ] endobj 2066 0 obj << /Length 2067 0 R /Length1 2068 0 R /Length2 2069 0 R /Length3 2070 0 R >> stream %!PS-AdobeFont-1.1: CMTI10 1.00B %%CreationDate: 1992 Feb 19 19:56:16 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /SLLRHK+CMTI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 39 /quoteright put dup 45 /hyphen put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 78 /N put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def /FontBBox{-163 -250 1146 969}readonly def /UniqueID 5000828 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å– ]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 0)xfáÍ 1›kÙXž9Hÿ°´ç!.ÉvÖP™ØN 7§§qÃjÒj7!ì6CžìàÉ«T´w.]Ê‚ÐÔ¬Çô/´“ª£¿JÖìá†1]¾œýËèÓè0'Í:ú Ôf¨èÊqdÏU³2úÔ4‚tÔ¡Ë?@Ë^g+‚ Øþ0ùð[ðõµÌ K–îT•B/ºU¾é¿ÙFM˜zÄÒ7Âú† .UÎ{7‚£KÂ.=ãUÙ¯ñžI ŽC¸^ì訹…ƒ$ÒO7Ûù—-tæìG„rzÀ œJ:ÓÚ"½ia~ ÚõT"ò*Ê^MÍMùüч¥f·ûf0EM ÖÆÅ z8uÆËøìwió*?ÁÀrºÞÉw”Ôé5(*5nZœÙ«Ø Ä4*RƒäX§&’RôT»dR³žÕM3m ’ŽœÑ«&­ƒë ž.ÇP¢d8;]»F |H!µòÉ%Té ã[-¿Í˜€šŽÉü‘Þž †E|p¬°Vëù$MÀ¥»ÔUá]n1€1RÏP°¿} dó¡‚ í¼.{®µIþQŒ7™Æà‰µÕÖ^N-+C ßú#̲]•\MØ…1 pk2 ²\t,o)•2TúTÚ®æÔw‡}¼ÒŽšµv°êqý `×;líSãgs3c-ðh®ðþ}ûW9;Ú¤9¦¤Ã–ø`2©€ êá${}è;;ämò‰…˜ÿ^l¦•1'C.Öá]~/»Ù?ƒƒa„‚ü!iñc7øŒA°þî›<.ÝÐʤpIÂDmŒ1t}„ÅJþ]×àÐj_ÃΆiŸ† U­ÇµÌe4q8}áÅ’ —±lð¹Î~°Ù$‡Z0ÏÒ¯#+2Òa}îo‹«]Ø!È3ÌZ¿ÊÍaI¢‡’|øqxi·çÜ•‹#NÉÕ9 ¬¨5.+¦lRé[qĹöÛßòr[İ©œÙU߬Ý{(WoŒÇϔѢÓÕµ‡´#>i0‰ Ó1.EWNTQ0ªØÓT“4c]¼©[+ }ï–Ò}=mã¦î-”‡óáaû±~úž:¯@òu5“WáîÅ¡ýƒT,¹ô¢R,Τì ×±®»ÚP[šÉ*N³¡Y5žL´5<âq;’ƒvÂ[74v¦åýî(Ô¡äÎà8šìÎÇUôŸ~rb2°óT5g®á|ˆµ$¶-iÖ˜î·g±[_Tæý;ë›K*6ö­ ±+ò¡/*KÇv½š=†Là¼6®?€•š¡ï(ÉZ›Ï9¿oëæ½RRº1صÀ1ÜFÚt>},=Qº„”êà¾qGÝÞôÎý\‚]f0ßýk.¾ ?à ŽÌub`üõœdÇûÂüæ‰b×绺÷ñu}ÚnÝûüª÷>‚õuq>·k 2®¸‡-É%‚ËÏN¥¥…’˜‡Þ‰¢i&?ÈùÚ›‡ÕúŠÁO±h}© ÔåûL´‚ç©Øs. aºÚ6r¬È½h+¹HõbÙUµøpÌÇÝK’O°Éúé1ÈTsèö`èïmr«*™Á›Ä"&ÐÁèä\ЄóÀWqÆo®:ÚRìZѨúÞ~%5l(éØãE`U‰+Ül‚{¬Ýé^ÇM?÷Mš·à F×Îu-Ó{ màö1b‘Æ'j›»üŸ >å’}J920 zo‰LŸÍ­9Q|wåÞw‘Âéâ6 W7U®P¾ft*=¿Í¶³ ‚Ñm€åLÛ„Hú§bzEÀXåŽE˜cúë3ßO7]ðìÜ7tv©¤»l‘»Ð9ûdÂM Ú‰ “§Üó)qA?_U‡I kªHC‰7u<Ö“ÇŠ‚ôÛ bzÿÕÜæ^&šG™ –S%³r;¤ÝÏšøY€° ³Ææèî†iá½ÊšÎ†rÓtB{‡üuafL„6pQôeNïÖ“@²Uî°úA×(€qn@HòÃ[¯“ú¤+ƒÇæZ3O+Éö?…¡¿ÙÆÿ³ÞXæÏ.kœ/½Uáx{Dmç¿ãoÉàer-°b»›¨rG0sZwöÆ}Áám*Az; ˜øqõ»yÊÕÁ¢ý³7I/…_ËXÖÁÅÄǵ§õ|œ¯È”ÈX’´Ã¨d'šœÞ9÷ÑýÚ¤Ü%ÊÔÛàÄžõBX”,<+ö'¸.“^7tcÍ{®Ò‘OÔaD]¾!¾Ä'“96Þ`Ê÷C&8v˜îò-rÏ R-WÞq½a°¥"±™±«AVõyÜSï ¼Zÿˆï‘aj€ª6&ŒêŸìÂò[ÚDQÝ}Ôá-ƒ‡>Zô¿¶ÁÞÆ» ²«÷îqvu·¹†}'ï«@7D_‰Dz:‡2ŸÕR0ËUûô¡ÏÚr!ì9±s…v-&ûçx _zgÐ1é»mDV>´ñðÏnºmÙgºp?ûÝôúI|T'áÓÙh×b;þWV2w„eþ_Ñ—#–¶—°[¢XÌÿY@FHúIE#ÝÏN p¶ùÖIŒŽhÞÛÑæ§õp[F«S63Æy')Òp‡Îä쥥 #©ÍMxŸ>mÊHÿ¯=Y½±­÷Å0 +N AR-áö‰oú¼wT”{xüjÚ{”“éUõBÂÈyÃ4€§ (!Äy k¾Û2x™CC¯üw™°›Û=ì ‰ìi{Íôj€RmÇìÏ`ŒBòsßDúBX¾ÿ¨ý4è_>5Èåªìu6½ùgZe°hÆæ6㋹wƒ[Ìmæsbõ<­áí‹ èD-­ôx×Ä¢Ÿ•ÑÉ Á0,ªùÑû|Ë6ÜàÁ½¹•5ô2e EÖ²uLº Ͱµ/&¦ÐøQ•/æã—ÎC)ÿ+‹ÊÛû”¨Ž­½‡.)?b¿È±«÷ÑŒ‡Æ(ø`< ÿî¾—ÑàÎ}“,»YòÛ´®4\4@Ó é+ˆk’Ÿ] ö² Ü¥!_º~”9~ȯx…ÁiÉ)–r1ùÏ ycä*+Ì»¥.2¬0×ÀË]Õ§N×ô@ƒö14a…Ï™s¥nìîYrÏ_ûMCÙTY±f¸ãP]fî.]Ìäƒe}5ïi ~Õ"¹»\>k€“~ú .¯&Àw©j˜r·UB¶­Ô@zO+@'Æd¹cö¬X¢hñ–&: ߟ̞‰Ùs˜ÎèeŸ­ªh &EòaN8RðÇ,ÚI;Цþ«¯Ý¿\ôÓ¹KE±òE+—˜y„8§pa·àRÊ ~Ä"§ö•:ùÿðÎ+fól×Jp¦/iúy¤Þu¶€µÇ·ã“e¬ÕÆ”y÷†ÁÉ|Á¤Ó•æÎ`.Qÿ¾ŠÑd뮽ք'´ïÝ´óýð·yJ)둌M"™Ï£²3âkm§>{1¿ÓKÐ%œƒ¼FÅ™q NÛÐÜýWj%*—¥ý'ûˆ$.¬¾™(°EÒkâ,ÎÆVže}•m›Ì*@š;›·Æ6ÍnÛÌÉ5à0¼É#KŒdë‘Qkÿ5 Vpw—êå÷&O…h‰*±~5˜ñ<%‡€Ÿ³ð¨ ŠXÓ0mL QE ¨Övƒ;N8½¡Ñ"L$[°9çH`c©òöîŸéB”sÓ•Ó¬Šú·ÏØLó\3ý‘åÚZªEÔxÇ5îk,îÜÉgÞ=öýßf.‡°“_¿áS]yMÖ]Ò* úF>CˆCg<¦’Q2W¥¥ânãûsÃ{Ïçèû!îxᄾòÒÀt*±¹°dðy¥›þ®5YÉ„F£Ño¬JÅaïR,bCÔ…ñdÚ‰À—~´§Uà H;«ßà'‰ÖÊøëVËðÚ‘W9mAg÷—¯É'€65oæx(¶cWO›:ʽ‰gWˆ:Ÿ˜©Q%V¹h„ºä+‡ì^£ƒ¸H†Üí^QIö÷éW Tk)«Äѯ°eQ ’4°‘™¢ÚßXÚ®ÎY˜¥½Õ|â´ˆ€¦Ú2º^'êvâk½}‡$1èØÙ¯¿¢Xm™/œmÝË€ :Ó‘âfné¬M¿f—:É'Q á g Óz|eG©²8'‡u°2¡Uý4ךכÐ'SRµ_»“ú¤Ùõ.›™øDp\Ä-M#Ð^ Qíýš:»Å§êDâXMUâ* µðuUwò›î_ëÛ¸ûƒÝîÒáÝü-Æß0çN/­Tgf ¹ÊM­9î7¸9Ÿ´‰4OJMÁ/v<Œr”Ÿ5pèáè m´µ9×1_+p5y,­K³@ïB&3«ÌgK9r±ËÎ_cdœ°ÄÓ—fÏz`¿›!¬L£^<»ÑÆš*ÓøOo©œ#V-òõLäYC¼) ÀDƒCwcîsØðÕÕ®£¶jÈyW µêhóå-e6hñ­jTƒQÞ åo|äÕKÜôa‡Ý‰ m¥ÚɨÝþUlV‚jÛŠ3^NÐX/( E‚§ÆSñHxùR±æðDvÄ,rÜb6Ì8œY{<ŸJ0¾‰Š¬Í4Dg74¶îE¼¤"Ï­3±iÓgÝì$,Pw ™Pâ lPð²ÁEY‰WÎ<„¼äÎéd|=íg˜IUÊlŠiàtqUžñÈ¡ÀÊ…€„DÂöK'k™dÜšÜáG¯ˆ˜©$È„“T”$f%)Ž1Ç35c\|Dõ‘QÝ“Dùà…À©öny½Dìá:¾IzWà]Õæ I¥ý‹ؙvìk[Ig˜·Ç¾*áag‡9¸üçDª»rá7'Ùפ^üÅý„•ò@ƒ…¦[Aå!s'ðñ/(÷¢$.šŠR—KG$4¨Ýržçú\(kaYíÀˆÿ܉®šòwU¸aºìPÁÍ®Rg9~¬€P¸/ëÆö¼ ãÎW©³{–WÁŽâ\Å=Ñø;vÞ;1€^øÐ\âù^ 3V¿«X3Ë_Œ—¤¶ŸÍL¡çÆÝª@%u]é —rÃ4p“M/¬å¸Tš­X)“ðCÍ ª´5Èž4?]6pÃû9½YZ²8Ï—ë+u5n@ÆEúÀ!±-À´nêôrâI•0Â3~ä©ay1F´hð»µsä8!„Æ ¤Ö ?É»}”zqóº&´ÔÂ*aZBCYU±52?Oxš‰D¹¹Þa«Å‘ÆÌŽ \òã1cW"òÐúUÞ 0ü ã`ì$+@ÂOŸK†£ÞÉ­2ÈŸ1ø |Øî+Ïà¢bu·Ýau’wÑ{s~‘ÙàYÔHÐ.ýËÒŽÄ~ª}•ñ^>•ü¥ÕXLÇÕ ö´[NIÓS÷Ø\]¦Œ"Õ½Ã<‡y ½ÂIŠ% /ŒÿšÉ€cgOŠ÷pqƒS…þ-yñJÓCeüîp¹IÎÚPÎeqhÊM¢  \=ZvÓÓ,t'ä÷wÀÀ/ÐH½Äw›LtÝQ\>£‹¦ò)mΆ62ÉRÎÆ^ôìo÷̲~¯ø%(Îl3vrÊF‚c±«ªÇòŒ Ë+øøq]äÌCÔWû1xÐɾ5Nc"‰ÖGà3nöÊFëOïÞ<¨½V<>8‘û,œÎüˆgIþß™ qîZ`Og°&1ŽA3k¾Èõ<„™ÅŽÃ$…5ž\øá‹¦Ì5Wì®°=í¶¦zŒVòNNtÀˆÛ¬ÜI곎?Ms_U9eª~J˜€PÒð³šøû ǯÜÕ𾨾%féGÔO\VÛî?¥ˆýDZ}×ëOÛµnÀܵSÓ¦:ã›öD¸ÁØw„a;¿—w¬nªÕ/Êw¿ßº&l{ö SÑîÃG÷³‰]Y·Ÿâ)mÜS{þÄ뮾¦îß›Eÿ²Éë¾D¼E9wÜûõµmÒwÛ}×ê:ZDO]an©³û q”ºçÇåIØ–(ÅŸ”–w At^Áš<Ÿ}ûsé°;À•̉®²ÅÑKv`H"ý2FöÏÓ¿Ñ2òë}ºÔuŒOfT±% Ó|S©HÇK÷D@uÉæêP´¿ó\›íærô¨†#”ÍÏ'%ÏHÖx×Ö&J¾[tÎ œœ5³š]© ª_JyÝú4§Ò\/¬CACXðú{`cÛ…¨k®”µƒØä…ú o3>ºúÃwSÒ´FµÎŒ&S×m=n`doòid³‡¬59®‹ ð#þûçþ•ùêÜ¥’¡QzæÁÚ Qó×ï*×¢5ûr¾œþù²ö^›þ"Ÿ’ ãåËEìÄÝX8%±]j/•6B˜†GË„%Iµ1u@É7ôŠü ›‰#95¦D½{› Ó¶%ø•žjÿëðANü™Í¨shv”)¶²Ø«Aæê†@ЉÛ0å€-‡õ›­­ÙcÐm2Ì,ã&ÒŒ397ý÷äІ1Ü;ˆ¥ªC1ý@^¹5÷ –,ô¾ïS¡Ëº5y¿ÂFÙ¥ Æ»‹^xÜÒÈ¡¦íñ*‹™úx¿±}Õѯ¬¥`rM7¡uN,]t‰%]#î ýÔ'¥â›Â¨4MYè^·t,Æ3¬-ªÑþmã»EØ­p‚!®õ‰'$-¥tðl³MCZ§£a¤¾Š*ÊÖ2œf«ªÍʤš² 4LH8¬ä•|\c L0^‰íï‚çŽÊ® ÜìzäÅ–Ø–í[໾ÒüQËê3VËôï|›_p¥þ¢UhÈ´tÜů=‰ùzv¸ÑªyÓÙÒ«eє݊ºY˜8>.c´…éD×y¸ÅýE`.É‚·ãìí{„úê¦w6QQë¨R`Ê_vÏ\z ¾Hr2É$ž|^¨kVÕmÇ_çʬö{¾u’UZ«È¡—ÃͺšëÿËd_ëõ˘ƒÖh1Êj=06ZØ û®§3Ñ(N‡NßCgÀZq‘}íÓŽ+Ùþ¡çj-2Ô¾£ŒÜæ+f ÏŽÇ?×fÖ—xñðàÿ¼m,ŒÃ¬ž:¾£Ap*»ë#®\¹ú^Uv‡:vÚ•Ÿ¯QÛH´Œ%‡¯„ý7ѽ(õv2 ô¾ãS±VþUZÃçÎC•µyi†û¬òQEìŸÂßoYÿÃJÖ›Æ.7Š1ó‘ö‘;1Ù˜$p†»ÃBÿÖ‰ozg*e%Ql?i¢i~­‹ÂÓBÉŒ¤ +7lí†+îõ‚Ý6¨[ps‡ódf(žör5¾É³ß£ G׳›@bÃ8MÝ–i>}m(ã]ò¨–Ø"æÆzÚˆ«*áΣækg4£LedÅA{”í«ÐÛkÚÎÿ¬›¥¼µÓk5Ì\ûu] Bɉ5ÍÛȘÇKŒm®©kßk‹õ2öâRnâ"±ÃÛXÖ™d› X©]9¾™Ðî¯-ˆL›‚VîÂØñœvPåfH®À¹`õc/‘P5ù'g îÈ‘¾*+P HoO|Y›Ç[ÊŽ®8³^àݳ<Šß¦’ÉÄw¹,„Ú(ìöÐ{/µKymW„ëKsý‹vMW `]YÁŸ€&Å*†n×Ã̦ ¼IøWµ¥ûÿ/Î×cÀñé,÷0:MçOÅ}t÷ ×%¾»›x7ñ2w›)¬›áþ¸[Åx;ßPï‡c>y`¦M ˜‰-þ-®ÇRs ÇD-Vl_דY+ïe[(¥½7½Ã‹“–Zšó±§®ÜÄok…üàÝ÷TõwÉ&´rÿ?ÛJLŒ¼‹3éÝãr|jboZ²F®'1nv)h^ü5™·ˆ\º¼Ù}ý ‚GÏõ½7o -/Dw>fɲLl9ý2â×@®Å³ RõƒàZ ø9_²´­ç˼¡æ#¶P:£k@þ š>\bNúå[o«¤{wY«½à÷yH±Í«š1ÕÊ‚Ë,J{JUqC³Ó]åÏVÍ΂ÊôºcÝUrãwwš†®I*•¥s÷k|>< Œ‹}•ÑBŠ˜à:}D¨Ê9¬(yÀ,¢ê:¦.À!±Õa¢ÃÅþ¨?L‡!ÄÝËu{ˆ³`œ¡Ò |ñOP<¹¤œøè+4;­/9à+ÇöTËK¨2ïmC ¶$Ï—­áSR8ßZkin¿ˆ047ÉÕÓ¼ Ä_ñ¥Ûñ5AZ=øššPw§êà tHÄj&\¿[Û9è+`.d6ZP Œ ¯úÚȆ>Bšªn„ˆtÔÉŃÜ.ÝÓˆˆºÀÿ×\οt† jŽæü©Nèüìœ6tG—ƒÍ±ˆî½WØ@¯yËÛæ—×|Ü‚ÅUZ._¬V¨r(gåRí;@–ñˆ—QÕ™"®­,d,²UðŸ¨ü± ±…Þ8Z¦G~#ÉãÿôÄþ ”_\µ«†÷ÁnúP«×pϵ»wðžñZ8Ì0Íϯ*®7†)Z~‹²Úl„¾–2r<”ËÀ×z45@p+ì&Í^·HWŽ{ÛªøW—ˆ´¾G铎&Ë¥*¶ãKäÙx&íŠc2œáV_YŽ >™PCW<`r]m´¯øÐÊîœFÚar>”äûÔEþ —U›&ÎÃÜÑ;ù…qt~j½Ðd)Þ=#kPtý±ü‘Œ\8 oèyþ÷À*²k‚|4 ®Ôc+s2oY߀çG°¾Ó½Ø;ئ%+éò¸èÙ^Ž˜hÍ¡‰ñ5í†!‡(U„ÌÔ! ZC„6YæÖ¾$š9hr§¥â0IðKºáŒM‹¬ÇŸ*åGÖ¸<Öu÷IJ Ô°e¬ék-ÖØ2£)ìç ø‚â"”©µï’ íYê.©(ú•.³À£®¡gY2â¾7M È–“Èâ`–¾†|Ð=¡ì&»÷E ÐÜJЭ{«N>‘N3Z4‡³{5‚÷µYéKC‚º7O‘¢Át5Ž5Q‘Úx¼ 2{IÊ–»3>B¶{®Á…Ϭ¸Ó|î2ï’ðp-eCº¢ÑÄQ8 -]ü;é‰c¹­ÛР{JèÇÃøöÉí¹D:»p²HÄ}sÔ¦ŠBF:Ÿši…ø°Cbó0\¤_ÖØ£7þv'¹«"¿—˜j§ÏGú?ÉÝNZúN"„Üý°Â öòBÏy ¾4Àæ2$DÑÙ“6“d"‰5XMñy\ݢݺ'ìíûÞ„I§®€BúQp ‘sLÛÏ„ «˜|¹Ç[>†/Êm*‹M©p]Zšû ´r1‹O›!WWÖ$™&‘ù&pØLºmKz°o¯ûûpŸ§Î×—½©KãoÐ<‰ÒÿÅdüÂ]áX鞦 ¹~¥P”CA†%#ÒŠE–ϵûbŸå¢þ޶q ~Vô·‰EÊ«†as¡uõͨk>áêd0uvŠ%úvŸ¬“z ¹ô}7CUTNÞ5[ +ûû—ª­ãä†îazŸâ`Ê+‡.ñ‹?+ŽùŒhKš˜üôø¯’ÄUY1®´šR:Ö¾¹{â3¶ÓÛ<œëbÐ-h$â F»Ã ÕÐdþ"Óoeü›'Uáu0;ÇH/ u]¢1†Ãvþ$PÔ;ÒÊÌÚ3ËÏÉèfÊV<òÁ«Ï¥hϬ?å’‡B1–c™ÀE3bLj‘.8ÌM; ÀCY2X.~<ïv"éAÑ{zÖÛÁÿ?bm6‘ Á7‡†­("8îȯlBDþ1¦šI" kÎnWÀM¾Ê‹#¢á`Ýë8huÿ"¬ÏXŽ`IgÄl³%¬q刂LÜÎÃѸ<;r½q9%pŠ÷´?õGÙ,£µœ´ÝÃ4¿"_~Š[•b% >/d$VÁ6)•ÔóѶC.ÞÛe1;>Ur,MKΗŸ×R!£Ç—æV$ͳmÐûÅ8[²§¾­Miè4·Áš1{sΑÑôwßt;MsoЖ>øÁ¸)å_"” k5³TñÖ£TEñm:ר—[ggLÍVý·C‰98gº‚(ªP«Ôiwóñê‰ð£Ný„¸ÇU¤”¥gÉ.-U°Lº¯?9L™ sSë^±ãÔûïêÚz[B_¿)¹²ë¸¬J§?¦·“Ñ…‘…+áÉ¡/ß]ÁÁZž{¿nœ_0•HaÔÆH)ø)¸V{lÀ/‰×Õåuß‹ÖL’×Ù—„Iíл'!V¾0wä»`EþÉ¿+´¿©)Ös0} «’8…Ÿ=Û(Ü ²“'–=ºÇOGC“*0X“%“òyRm½•g7>ÚÁU|‘AÇOqôq–½ŒC>TI×ÓIj`.Üe­Îð ®´|—f»çñ È3ë”W͵óø±ä:ICÞ¬O]¡"d@¡£t’æwÊQG³ÜRÏwÑŠ<«ô¡ûŠ”apçEm*UŠ'Î(2²4{µ`ƒÆå¡Qæ^|«(òà’íX$´Zñ¬Înßç·0›Ð¸¢cD}»ù×ëÑŒÝÖffò!Ö›„ö®D}ÐYu‰M0Ù¡þª®é´ ÂyýUl¨)i°NÏÚiè(Qr“Ó ýP2«V¬NE=(µŒ‡¬Ø£lÈÇñ5mp?C#}†ëHÑù*Yt˜ÆòSYå–ÕnP½Á_ Ó·#Ò¶rmWÂÓ˜fXòôh7¼6woËñOcŠcF=ó…LL9¸èáŒSL0aC:bøË¿©”ùÆä¢õ×$ìZtûàÅ:ë‹¿¡” eSš„f[C¢q«° +_ȈÐð;çÏOŽ7WVÛÅBô9û0ïîôzˆ5ºáPPŸ¶¹x8TÐ%mØ;¬,&?¯PF*QQ¦çþ?i¦ð¥õ[u)ý@ü—nõË&´fn•“9…`é¯a-Ì"º^VçôC‚éy¢.Üõs6ݽ?Cõ#a Ñ¨·×QÆýÈPêNˆÃêþf8oue’â§6Qp€Å+Kä‹(ÊŠnÆ€kKXd„ÿðÔQìvE(ú·\LiH­ÿÚøÐöƒñ* üÌC¶`AP "÷Ýü£_ÓÎ|SÁÇ6jðP¿†ÕÎ7”vA/޼ÐÖ¾ÏRÞ1+ÆÌ£ ×ÖO„…½)Aæ”ÿÄŸ¤Tóí—LiqÔ®ôí\Ú4¯Äx¹Ha­B;’a& åš4f0HÝp¯vosöÖoiP­Gà†$Î Ñ=b©É8íg>Üí× ]åÿSuñHÍ«Öü°üV)C›[_œb¢íp(“l]‚˜yæ1›Å‹ªüŽ2“U¼öÊø(7GwW\X”ÕËòMû TtL-‘N뢊ƒ—ú1{ý¾:”°Ä­†fíü\‡/ý)tmn¯Z!”˘nÃo*nõÞe2Þœß|R¯`k‹Äg ÷S.o'yê-öø“âcÁ×l;…(DÿL‰²T<ÌPá{ÇY€ñJ6޼À¥çl–iÍÖœ[a‚¦á»2ϧ’¼„ßO,©IwÛ:Ù¶®'¯:DZvTÂfHCö˲Où±$Ç¿˜D«Ï޲AêýøÏY EÀ Ȧ»%ŽíðWÌNMã(ùÂä¡éJ7)aPøÎÜã2¢´ݤM½¾Œ«‰iÜH‰ù>ö¥à(¬ &.V6(TûWëNàÆC Ëcïþžäï=QÎÎäðø£L<Ú\»¹Þ]L^ñÕ¸•Ì<1áÅ­ÏZdQ‘¥Øì¬‰0É ägEïÙžÒ‡>.#ÁXÄãœ#XØ]ðÐK¾O/Sèî^mÀúŒâî8H<5L€ñ9|xbá?CDV଀›ï+ Ú? 0䯱<4î–•U„u\ä˜W;ùG(8{±C5––à=¯È°sóp:7Ž®½º+jq¸Íþøeqó¡§7ÓPÎ+0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2067 0 obj 12906 endobj 2068 0 obj 1442 endobj 2069 0 obj 10932 endobj 2070 0 obj 532 endobj 2071 0 obj /SLLRHK+CMTI10 endobj 2072 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName 2071 0 R /ItalicAngle -14 /StemV 68 /XHeight 431 /FontBBox [ -163 -250 1146 969 ] /Flags 4 /CharSet (/fi/quoteright/hyphen/colon/A/B/C/D/E/F/G/H/I/K/L/N/P/R/S/T/W/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) /FontFile 2066 0 R >> endobj 495 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2073 0 R /BaseFont 2079 0 R /FontDescriptor 2080 0 R >> endobj 2073 0 obj [ 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 ] endobj 2074 0 obj << /Length 2075 0 R /Length1 2076 0 R /Length2 2077 0 R /Length3 2078 0 R >> stream %!PS-AdobeFont-1.1: CMTT12 1.0 %%CreationDate: 1991 Aug 20 16:45:46 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTT12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def end readonly def /FontName /QXQEGA+CMTT12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 97 /a put dup 98 /b put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 111 /o put dup 112 /p put dup 116 /t put dup 120 /x put dup 121 /y put readonly def /FontBBox{-1 -234 524 695}readonly def /UniqueID 5000833 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ_dÍV`þÿ¼ œH ÍÈ[üfðI“Ýsð¾ ±?S±ºyþ_aŠOg+Àkã%;ËY›ú`AûÕXGSpÖ“©Y%š&™ºn—Ï@C[ŽŠKBcCáEßå(Ôà”µ7ã@$æÍàêšøŠ2` 5Õ±ÛSX/ «zÞ)Ϻ ’Õ©Frßùsó›ýWáaå-¡´3È"aäy™}ö“]*z•÷¢]³Â¶ª2k˜,2ƲXg‡׳Ž1£ÞVŒ71§yê¯ ¬\æÅ¡)Ä~Vˆ+€hß7É|v”ñ1jù>3ÿ~ /%'5Î Ÿ{Îkî–z¾ òMË¿™‡Gí%+g@|³–xÌ…Ýü/EÅRº–~AX^ÑoìÄã*ÄÓ³ë€FÜÝ7É/ßñóq ¸ï\£X«¬£<~ZÊÖ¿]Å‹ßÃÏ º*8)E¤Á_ñ‘oâìGýÈ ëœaõÓU¾ßÉÛX…Gv:Åð±ÌÒÿ³.Ó~2ÚœãlT3eU&¬û:0Vú°ð{]‹GhsHÞ¹o?œSÎVÝÓ¹=9Í’¯Sû”a†M¸8‘ pÅHsÄ,Þoˆm±ΠK>»CàРkç%t¹Ûh‡1¦Ëehù‰@DŸ¹/·ø!0eÑΨ‡È4¼êtþÞÎ`Ý] ËP´´¾(þóhËúk¾Ðñ«Åê4øâ>r\«÷>+áŽÂr¯þå¸Y]Q:ØüN"F5H«Fxñš&Ù¾÷Öë’u©õ¹b9‚ž¤Tc_RHb㤕 ùïÕR»ÿˬãÿ§¹ì ™œz¿4¬‘&ô‚ÛäÐ)o¨H•fÜ ¬]C¿cuFÚÕ,P=Âp9Qgòùt• ýõ}Ì$¢™$Dëž0CÙÌ•ªâ>öm¢¼èÿ©ê ½„ô×§79m(¾#º=ápÄëkñgû:Å úrRÙ¬ï(2g˜(ÜBÍʹB˜ ¶M×í‚E!ÌO\œrŒ´lR• R‘ó%ºS“659/Q;ïãþ¨¤èàî<`î%7^ÌûRB´ÛßõÍвÑd¼Â÷ÀŸÉÅ M·¦ï™ë‹¡½ŸÖœûù°Û¯r)q¿»Ã#;®W]½6L^ ×oO"ü} ¬4F¥òÈßÚ5ÙrÎ ZùûÃçù”¿îè Ô>w¼Û¡°‚dJäÐm©™£­% ±yÐ7uÇq(š=ÞùÇ>|)O;.’”# ¡³ÑQÊ™@¶¢‡½W”ÍîŸÕ®ZJ!שØÏ+³ä 6õS‹[ªß'UC4Š¥ûd4™oÌÕO × 6z':éæAðýwÜ–KÆ×XÑšßBUu‹ÚH(Ë÷¾¬FŠˆ°¯ªû:1%ŒíTßö]PÙª”?÷œþZ Sù°ý ‡¶qL€i0Ǔ̇ÐÒ'4€È˜Û‡‡q¶xŸ=(7~t†›&Xó¢ûÇ ç\ìž¾á6ÉÔÙòSÈÀÃRDmF1Y À䳯jði/ðZ¥pX”ÑN‰¿†ŒÊhÊÞC–ñß)ĦÈ2sgQÂ×<–ž"HéAÂá–mIÂmaÞ~IfŽ5 zz¸D*CÇ °º%ÔÆsÖS2,±²iŠÁf‡Gc-*QŸ[©¿-ÈL¼¥«€ÒïJÓ:Øvâ©Ù°|m¯÷†9õ¸ÍCÆ×Ê ®$ŸD»4EÖõ^*;>œß@/†ky.ö=Ì=X÷¡EM àT/‚ÙTDÈš¿"ŽŒW9ÕÍ ã{1x_‹'ÆK_±Ý?É]=Ôw÷>.zù†Aä¿I¦¹—{à )dŒ§ w„i˜ÎMñG¶µ™´yH‰°i­0Kÿõ^þ¨c¢GŽûÁ¢g¥DkÕm”¼é‡¿à´2oè-±Ç㵯ª@Õ(­ç³P±1æá@Gç8ï8¾hVdž¬Á{Ê“•ý<+ÔÇ‹%‡µVù '£÷]{’¹7C¢õ`64–¹8J&‘Â(‡˜„æHQÁ‘¹idÐýZO{vuQ‰/ 5•ßê»ʫ)jûì£ÄÚü Üf/—>Ë·ÓÅK¥¦&¹+§eÑ™¨p›·, ?tÁÔ]yºûü%&+‰™;„=‚]—¯|kÑ“zµÃí#£˜µ—D!¬€ß˜RolÖ6H"íègøúµ@ˆdãcæÆ²}¶®þ»ç9Ó™¢÷²NÆê=ú TId{i± γ•-CæÐÔ¿«‹r°]Ï‹ÞÜÂ6˜p–µï¶/?WÞ°qÁýÑÞzo>ÄöڥȲ6F¨Ê¤™ëÛÇJ« #a†zjFuY{ɤïåã-Ù“°i #6•ð½müœ°)½qšoƒT¡ÉŠ9Ï+ó=„ßò Äò­hûìÙý‘>oOM: Ej¡§Æ×T}‘óùu;R!!l'nó¯Ó˜ .ßTŽÄ¥«)î5\Ö‰^#_׿H¸ƒp=]Réx‰wå]ÉÎX]3pt¤Î®†&šˆèÔ<‡w, >jÅ…ÐõÈ GXõ7qV·”ævúŽ-7ŠC$ä°€8iqî.Aÿ|n›€f™•xC~MÄÔYUð,ΨzÛ÷¾&{Ñ À?÷õd ÿÌ눦ók’íUN8ꉽ%Îî£eâ‹_ÉgБkc”кMæÊ€R•ñìàÖdW˜îãè ûwVœ%*ûÑDÎöÒûÑ÷°¬— ½è’–NI6Îȯõ¾i§Ái)^ÝóäÊz ̺À…Õ©ç½`ú ­aåíÇÕÀ&Óå7üM\'˜€Ò¶Ç 7w7øS$½Ê{¼ºO¢”Æ€{h?0‰˜qÚÌˤ…b÷ 0¸%-È%ë“JÏ(ŸãÂO± (Ø©5qôvœ,-V>Æiˆcw‡Så9ç–Cg§7úЙ‚ •¡ š[Ô©GðA %ßô6ÐRi*I¢Ý·¢•±ðþÂSLÇaýjm;Ö ˜ûÄ¢)¢–1§£Ä€uÞògP‘¿è• ŽX< ¿x ä®ç¹Æ+)Ð"aQ$ô”ôöÌÌìl´¾ä9qeÚ”åAän«‹ç• KÍ|Y4öQûzŠœÆQcÛƒ^k(…ßûÊ£á³HF¨¹`$TÿìNuxÞ£>ÜùßÖæøJFEº$˜ÂÖ1Â¥ð3z%;‰áß2§µ"&Òo –‰kR¤ïáäÒA_ig‹L®l̨ CQ–‡½ª×0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2075 0 obj 4782 endobj 2076 0 obj 968 endobj 2077 0 obj 3282 endobj 2078 0 obj 532 endobj 2079 0 obj /QXQEGA+CMTT12 endobj 2080 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName 2079 0 R /ItalicAngle 0 /StemV 65 /XHeight 431 /FontBBox [ -1 -234 524 695 ] /Flags 4 /CharSet (/one/a/b/e/f/g/h/i/l/m/o/p/t/x/y) /FontFile 2074 0 R >> endobj 394 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2081 0 R /BaseFont 2087 0 R /FontDescriptor 2088 0 R >> endobj 2081 0 obj [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] endobj 2082 0 obj << /Length 2083 0 R /Length1 2084 0 R /Length2 2085 0 R /Length3 2086 0 R >> stream %!PS-AdobeFont-1.1: CMTT10 1.00B %%CreationDate: 1992 Apr 26 10:42:42 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def end readonly def /FontName /JWHVAP+CMTT10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put readonly def /FontBBox{-4 -235 731 800}readonly def /UniqueID 5000832 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ_ùc‹‚2BžØ·Ïj=‡š-8Ý\DgùÝŒ] ³¦¿/%b›®Á™®‹ÔºnÙ»÷Ú¿ÐáSº±ÁyÔüâ b*ÍçÇL(Ð9sWí«F Rë:E·¬Mks­ƒH…02§Eô”?›Oíe+ƒZ¤—'¨´zÿK΃µ¶…–оi‚·f Ë<àÂ,¬ÝE“òDÁNìZ|JÄ#’ø¼BWþ¯3ô¿ê‘ÿÏ—MÖìp¢ÄÁäó(¡ë%ä5%ûÀ~(Ì5öBk}Aêj „Ýc'S•¥ªéáÈ-8ŸÑ*!èi™yž$©”G.¡®w g ¾ ªÒJ0Ùn¥r û;Òà¬Á¡ Kèr^×ã©o™x¼7p4Ù= C‘åyÃOùü#yËŸ[¾©â4éê¨9'nÀÙ*¹xÁxÛ/J}û¥oÖ¯†pë6OÞÊû¯e}hà1‘W6Ϋª‹¥À¬%(ƒi]I½‰«ïèiš ãí…´ŠË""žb3™É=çÙ5sJÚÚzbÁÔJÕ>£[Wåеü H ä2"ÛŽüÕÓùº0O¨y9.à¼Àá¦t³¡ü:=×$E€Çª Æ]t¥þoŒ¿`% Ì'EK¿—ÊKœƒ¥fr•‡RíK^yá†`vO^†ðžúŸv…òõ~ÈZwR‡³ iÞNMWçÐ3HS¢p+§T,q!s0Ï(عÆ;U–©´+3çÙ"”J8q3ƒÓdŠJñ`£°Èó7›¤7+åkX©Ö»øvšuGga懨ÀOü|?Ja \´âL‚p¢©|–äj¸ ž5ú Õ¬õÎÐò–hE·…ÎRý5’ÙÊ} Ëd˜߀˜Ø?eu6°¾æ¬sÔjDh*ï/Ó"„qJêrƨý«Wxíë #‹˜1™]¾Õ.²kKy;‰¥ö"%oÚ×ÓÜó(UÛY’Oâý![xµÔéíá;å–oÜÿ_*íAˆ*O˵c¬¨TtEîQ ã®&…Ä+KÔŒ PJ>è–»—¦CÔç¬êy–_Ùò–¥¿5žÔXKåÓà" ÉðÛÙè¨0¾Šá,pö–r0Æáý ÇBZo•¼3ë ¿ijŽ>žrÌ:ÅÔ«vÃÔÊö0…ùð¨ÓààIÄ7vç qŸtÀ@©'*ST‡g¶‚“8Eô.ÞZÚQpì׊Pæ%²äxž^òaé&(-X–%¯O¨ÀfµCmT¹sŸCJzª´Zø×¤…4¥k^H… J=o¸áì9vM¹ÓLg'ªÏ!ï¬Txå}á’¥©ô–M ì©F Ä{è'óãçtV ¾2‰A´NX§ªèã8 ÁFÓ]E­˜Ï ’{³æb&‘bfo—_ø%p–T1†Ž}ãÄ*‡ÏêÚ¢ÍUªëO˜4WÍ^êtÔ6U¶:05:aµ³¼ƒ"ª™¢0~Õr¼±n:ï%g@€†A—É e®`Š„OÚ€j’|Y¥€}#xH®ÎŠÍR~@äpaAY¸<î ßZŽ.#0ìȼ. ¿ Dk¸Q6Mç¶ßgDÈ›ƒH¿hr§øtàm”¼l)!|=îÎ~ÜtWPAß¾­âXx›ÔÉ®'é[ÒöY"£fý6S2P)õQ1åÑþÝùDõ¯¬Àl¸œ;†ž;æS¨z úý®$Ì¢!Áª)Q\·Ðdí’ ¤–D}N\½ip, ¼ª×ëÌâ‘:2Ô2N”÷ì^x"¹À6¶§õÏ?à_Oki³¦Ö§@’Ó2|•[¢Î(±ˆ_cô6ºw¨Lé*Üð^ÈÍû,&l»ýì¢!üàÉ+ŽÓÆU+¢.¯>êAZÄœ‚¸öÐXÈËYêÂVχ®ª% ðCšNí+´7an;H#¤áe2{f3zúU§IÝÁ9ØãxaÆ]X¥7ôW^¤^Ú.Øüø=Å…SÏ¡ p†Ý¬@ºÀAýäØÎµr$4í±ƒäq^š®§Ò‚’òfÞŒö¸‘]¾ÌøòZ^¨óX˹}ðù‹ãh¹©rÐÔl%ŽHb–÷% ð¢½ehõ-–×2= ‰“. ;§$CL÷½oî5où$ü7×§Q¹0²˜ñ¢>¶n›ã¡ìb€2&`Ú%ûhù‰HÎòÛí5èBã«gsd]û¬´[ÒTÄÌüYÞÔ Ø•ÇW”yÅ(¾ylÔÑìˆî®F\0$ûŒ²€]nUìôd‡@qWcõI¥K³¾#ïvHâ™ñt3Áƒtõ¬‚”]Ç~ŠÉáÑ!Î[£R{»*Â4AC,ÆcŒ·’Ü$ºfœ:"ñ´ÉX èH…HÛÃñ\ù<ÒrjŸz77𸇩ÊkÃÓQ@šïâ©,ÏMUÒÓN é†^•§NjTíÓMK3‰“%±ŒÁ©¶5¶„¨ô7zÎ^i½sœ‚› ›êN–èÏMsUéàâŽxw€4SRÆ+.t$’¾ÁÓ«×ëœÝ ¿]>—g?Ò&¥)” ¸RÖ¿¿L#<;ž ‡,Þm‚bÁ6ÀÒ °9Âo¤Q²}|Œ±±&s%,E·< úOä½H 9¶À‡^>\sðgÍÄîÜì=YA¶®‹«Ëp-q–ÎÅ–yÕAÖ¿†F·0‡ƒë±šIüjÞ0®ßÜ(N¶ü6'¬qÁòg±OË:\$ØÄïâïô=ÉÁdù‡@*´4ÄÄ!{ýDùIZ’!4N¨Dð$í4¥B|1Ú3}óÀId@46úIšñ÷[ã:µW±Sôp9S+è!©EG-^â<¢LËú:ÙJåßSz‘f  ^Sºpö@¾ÊÏþ*c+Çïçæy`•°Ê+äÌТ»HIc²aŸ§ÆítÇQÍ(ʰ݂۟ˆß¥äWaxò«“nN÷cåÞàlÃóYÔë¯æî#x¯DßQp•öO”9c±“z´ºn¼&üzw`/èo†êÈלQXó¡ÄIÕ {ª¤`cÓo:#:²A%LJ‚ñÒïîÃañ¤9B—ËÐ «\ê˜ÿmwRì=Ĉúž LJ†TIXHYj"H-Çê/í°™OJñ¹5’ýÅuÃÏ]),9 A )„¦!y予ÛÕ,ÿ¬Ó7=õ†~.Çjdrj•¾§†SFŒ&{ûæäm›æZ÷öŸ©ïv·Û9‘ žïG©Yܮ͢njy¹P*õˆx"q§ùLîxG»í™M÷}ãÀDt8yÖ8NïBš‹çýÚÒ8ñ[Ão ð%2Ü‹¤ÐfãÒã´àª5²ÈG¦“X¡“@Æâ ¼žÁ¶ ©š¨¸nÌë~’Jã>_í†Î,Ɇã1å½x òfXa;žlÌ\û˜xè“j: WùeÄ<,g:F60¬ìµêô &”AsQfÛÊÔ¯' »‘jBŠð ˜wéé3‘Å1ݬv±Qpà¤Þ©8¸6‚^¾ä2m5æ ¬ç´Àû?\…¤^ç¢! †bPö¬1>Mp{’Z”…ÖÌaOüžÞ¢†pâ}ÖXìr–ˆæl`ò£öí•Hy?eJr’®ä!ÊûÞ¼ ËùYqó#n9’Ñ>ÑÇ!Üw«èaµÌy´Fã(md-^u_Ò®/Å_!ÖàÐ"¥*ëÅÚþÑz×çä†}]x³ªÇ¸ì‰ç#¹d>mnzA^³ HŠÝJÊøþxGÕ¨ÝZ’O4Èì–~øûçwŒ³ƒÂû#Ê!ë4ufÇСŠüéçÁxӒλì×ÖÅ™`™I6­ú×ÍË¢¢Pµ XÿñÝ¿b³ÙjzQ S P ©Râ"[b@2¥ rgÝžð™þ¼§Ø¾¨Ë ôƒky,ŸW/,ëè ¼¾Ú÷|ÁÑ;öFaÿUšå#õó4Dµx£à¨eî>%CCÉÙBUG´Hiª P×¢vuðÔƒ+€\êciÉPô-}pË4øû6à°º>ü!¦cÅÞü@ÂBó';-ê´×ÒKb‘Z´ì«<®—ÕïÁ&–ñPqhKÃf'þ/~å²IîøgE –TÌô²-rœœ)âýw G&#ÏW¤ P[Ô¿ƒë• òé>(û€?Z6„µ¡&ÐG!²Ö,=ìÚ sùy˜Á·£œ»—ùÕÞáz±*´Àßì\[Þ 5â9¦ xìp\¼'²ÈpÜ„­%Çÿéü2lûxSůì‘CÎL6—;âƒc8ìÝê•%a4\ax\BÒç)Ÿ¨>£ ¯Q‡ ?׿‰qŠ<4å×Nó~´êüÛÓ$ư籮 pœSZQnëMÌn¶å¥}xcµÝ¬Þ¨%Л¬´+Oü M±–Á°.T‚ÂQã+ïA{¹~",Ž…mTô1Œ?feI<ü‰ —Uêw`XPIeÎ>öíÄD»6y™g ¶1̲©€|›Väb“åuÒ‰½>Ž>ЯE½S…Õ­"õÓ ‰Ý+ØÀ »ó;É)D…s÷K& ’A†+”Ÿƒ·:œñ]Þj> ãLŒÐ+ 5óOÇ8”öz<Ç%¸ýz·§¡âØaªþ1hø¼)T: “ŠóZ’w²X¼<Çð6¯b:¥Œ@ðe*ZUzí½Pµ>WÊï™qLu=‚ï êŸÏ-ûÌÐñÏtëxUÜB|ã'Åã1k¯¼6áØÒŸÆ&eø{ÿ?4é ®$R±Øf«òÉ~[G|ŸÌÈ@Qy†Çöpv‹÷¹~P«‹d¸Äé·œs#mªÿ\~Àk2Ç-ÆþÑú¨Ôye©¥¿Ì&VÄg¸ðš³ ;¬uOʵ9åžÕñ˜ÛãîstŒqŒïÅŽÒ5¯ËüNEª"DŠÐ¾Ú}Í¢ñßÌj 6ŒžPpŒL A3nrqþ°×rwy7øim¡DZå–NÚÙ¢ ¶E}ÍäÕ°:›â×WnÄóÃõ§ºk/TT»Q®É$˜Xׯq‚Ô9é€` Þu5oÉ}l!;ëÙv¡Ô=&ûà>$îŽs¹et¹ÃþHqúãª[5A°Ë툖øuŽŽñÀKš¬1]¾Ò½ ñS~~”1wÕ1Q1†ê^0ÅV]YÿþºcŒÓs?ÉÛ2oÁÿ “q£&ˆ µe5l+yxÛY­Èá(•ÉÑÔ;Wý…t#^ˆ­_•vG£1Ð9¸Ìøy±2Né%p­ÛÉ” 'Š3™íUW-Ì–²Ñ³ôò;øÕ°Ñ­:W½LŒý@ÊžìÞçE.ìнÕ狯½éQ¼áhí(¥hëðEÀŠ’“'Þ{±°'oi‰Î¡hƒÿUTÂŽEç ô?¨·©ã-f[S2³¹ÍÔjÞtR£¢/~ËÒ5ù¥çPöj~!sk‚ 눋H>ØÓciôP¦ mð£ŠãþµYãq=B Yã;{ÐMÚI¾28eà°,±.’:KL¹iïr!¾$„»9Ý×°ð©áhà\ªû eH×`ð1ƒ81½—s(ý4½1æwÓRK=§,ù9¸J—d^éÈ M[½ñåfÖ!J •JÀÖ²ˆégŠö#‚Þu‹ìVí·‘€‚}«\€žF|;È­]ˆM]ñ¬Ž±üuº(•GáQY¥X#K—w4³µ —ðç1(xÞëD­Ñ¸ßx¨ä0¤å!u4¥•sPBÇŽbŸÌŽ.Õ$Q£³´ ÁoŽ\¨6ÝN:‘Ö˜5„-Œ!\z‰9°~kîÈytc|J@­ï¾âÖ“÷Ž‘á>¨Á#‰ sJ/H+fz>uü0¢±¯_mVNÿÔÀ†Q÷í ;Ì9£¿ ý »í4ÇíTv’B<¥ÒZ®×üb Z{"Ñe=˜ 85ûÜ_LÞ5j0¹¬Ú–ö0·¾ ©Ü“§Œ3ÌõŸ6g]‰°³ ²/»-âË o?˜`c¨QLúÛ¥â®t¬–µöÅP<¾ÈN‹¾§à[*@=pû´ÙÌ; 0;¤W‘Ž™À‹È7\tVÌ!´GÌš6Àh-+íËiÈž;D%œÎKO¶§1xðÓ‡1ïg²#`wé­¾°(|¥e£íãã.ÌHB%yèÖ8bgÉû¾A©%t7¤ã,lqÆY ²z®ÁŸbÌ Ðná°³°ë÷ ø-ű3ÐðÕdÒù÷¾Ä~­v/«j„ù úÆ<ûq㥟ŸôøkÛJŒ‘Ã2Ô€gOûEZØb¨ ~­å…>ý‘´|1c,ÜÇ"ƒ´–– ¨¢\ä'¨1[Ë7Œ•Õ¦›3Š#Ée/ÖƒãbcÚñOîóЬñ¿!Ò»Âʨô|5ÅF!žŸiùt]«îZ^”"t@dÈY'_ sÒî¾½^a·g ×7››dúC îÑ<úaU­0K Ê¯_)Óžþä)ý ;÷iÎû¶)5±O,%ð?"ÇÚ®Æ-¡|ÙÀ›wF|@£ÇCY«DzTVõHâÍK}‘aåphM(Rb­A°‚@¹Ÿi¸™ØÄý™yw£&xmì³ý5•üw°©šËÙ¥$æíÒkt“žœÚ*ïœY©ç?Ë¢ “e£]+@R¿²¬#‡'eDL)U=) ÝÈýjØ=û£¿»&`/²ý`àí—x[Éflb׿i‹OÁÓPü3°¡e¸an,tØ íqqT]¯ ;=QÚæÉú¢~FD¶ör!þ0“wW:­Sd̆ŠÞW˜·¶?ùýæW¬à°Ð…Êø&æ‘çCZJ flˆ¼±nOø©ļD^PDw¼ðà9†â¡yåÛ´"!h”œ¼"ï-iÝà\VÛÉ ìÉ(â8ÃQ¢ÎYüÒ}µŪæ|ò¢Û‹K‹ÂʦûÈ~.|˜E%PÒäË…˜ ïçŠÁ¾#M/e㘀]G›G‘N&‡”[Y^ŒQg öKbÉ»Yºm0ŽŠwtXN«ú°ŠA£]føXü–©8ÞB÷)·‡<ÂM•ŽîY?«Õß £ÿ]vcuÚh=øÊßV'µ}ò‡½ö•ɨAÑŠß<¢1P‚m\öÉBY}~ýŽ_qÉKÚS@hoYïDÜæú@=N "Ô«üLyFš„ öÞÅw‡wéä—ëMUêJÏÕ‰.Q¥¡Ï³†· ¢+“x6ÖCƒg´ÊÛÐF¤´ Ú]ô¡»æ:Âí-dYã|Æy”ÏïÝóåA6Õò–×ý6í½îK‚Ñïr`}Í´\KaÛ®®5§Óì)Üš Ü’‰6ÿ26‚û.®ù߯‚Í´Ñ£ÿtŠ‚Ê³&åtòy0sâó»‘u*É}± 8£9¢R1v÷(b>¾€>éEb¿YÍåüóÅ6D‰ÇZ2‰Šìþ·`©%!æÍuB2¡¹o?ÙÐÎóc)My4Ï ]ßס£noðZks†SB„¾cœ\´Ô§6¢ ?õÓ=2©ÂÇBY,kŒ6cþŸµ"Cn‚ªŒxlæØ¹Hµ…K2Žš¶]éýlÁ5´5uëØ…EØL6.1°9Þ;O¿¹×@ý‡ÕmàpÂÙ †‘cÃ$MN¿a:g4–,i;V#kx¾Ø™éÔW(G ŸAœKÃÚ£` 0ŽHæêÖb\a6ï%#K@åÃQ/ Ö™ñб✃<û­¦ã¿|4·U|8 ¬ïWo95úÛŸ]í-ðÛ£1‰”ݳ äuc¥Ùcø0­'Ê]¿ªà°B° ÙÌÈþÓ Š Jýÿ¸#-. þõaÉÖ!i“Ér<ùN@G±dÁó=¢‡Íi qddžŽ Pžjz1ãQ~äéžXG Âuãóƒ^ ö)g{ŠLkÌÈ«8Õ7?nËÕ×Ù¾ý§ú*Luæöÿ¥ÞùtDÍø4ö…ÚV^¾D7t€†àÙ \V(·V¤·Æ,þ@~´ëšÐ§í¦‡-8ÙF/B+i2É_>ÕýôµN-OIÈ q¿(T¤W ÷rØÄÙ .¯&+2×E›³þrŸCÍëeâE3Ùà*ãiÍ$#î›ØêkÐçü)·/6€š ¿Ät1Åûðî^ô5kA!ô€}I…¬´l»7F¹Ê=jõÕl­?ÿæ“lã¦D7CJ“ê IöŒ,‚ƒ†˜ØÍAÑ J,çºÖjJBÔC¬l6Ô¾£TÝ:Oˆ ²$ÉÐu14`|qå\þ§XÑ.ëK¿­iØfÒ§<&ã(¨‘tNǬŸ¡fÂEó <ßaY¨ð){“ûù?9Ûú; …‚ ð\üwjÄIÂDùEîóê úÂpÝFH±!1?tОµe?÷µŸ_°‰mQ/äÒã÷Ïá{Å}ÅýÄ$ Ú ã|û"k°2ó³b ®~êÖ´ýµ&l§% .§1à¥OË{ðº8ꨞ0ððtª‡I¨,ß›á }¤ü£u{y•a”J¶Ë/§n¶‚³¿ÜIëÆ¤RI1}k>UZB4ØI!ç-¶†àÉq÷𻤷ŸOše¿üNdæ,Kì–À®Æâï2)«~⎕QJãxÇÑZŽÅV}_œ‰wÕ4ˆdí¤’yúä+p…È­êø~S¶`vú}t~)V¾¢)ËWŒðÃt¯Èýؘէ#Ûç|[Uí¿{¤” ’„ÁÒA´º!@\^¦TüÉþ¦³<¥ß£±nËO­°›ã„igÍ½ì½ Òc…b {M˜ÉãB¹îÞtd»ž ?Úðǯ~IÚßvíî§x^ÐGy £ `6·Šo£CBVCà´"ŸP * ²ÿè ’þR‹˜y{Æ–›g}OëxMÈMJTSÃÄ}Ÿh* ¾.bÛ9 ÿZ¤5B©¨4™ž´ÿ\£…ÔŸ0ü|{¦08¬/âwÿ˜‡ãddÖO‡pݤ r8Óîp’C¾³ÜAj«˜_bv½rèÛØ¥Z9:z—óyKþZ©ÄÂò•UvÈÅÞÁÁ+èaúùçoITÒHÂ,Åíe§j ÏodB­";Ññ~ ULj[뤇4µr—TÏOøQtN:ÕXoX¼ÓÙ¨4#±<Ç ÍÀ^!#òß$ƒgèö«¹‹º <}ªì i´7C£¥_Nˆ&©tο!N°ópí¥ÉXŸç À~ZÀ>1àuøP˜çêw8dà;=ƪ&8Kž‚ê…–t‹ØåËDâ*¬Â™¨n‰bx›Ÿ‘ü³T³ Ì¢š^I(Ü;Š‘ùäýÈ;Å]¦¿»Âñ§TªÔ\ð üX”JôuûA0†’ ‡—(WB/ ×Fñ Ì¯%Í`ä*qð)ç®K¦y™5 '¾ÛÉXÎS³Y¼¥H?´UöÓÕ²Þyç™îßA¤4|¾ƒOª3Ùˆ‰û ¨–‰–Ì‘Æ<-ýÀc¯ö‰Kp@K¨ô†T–0tµgzšâ{¬±Ø_Fæ;/*vÊŸ¬C˜ !’éÏGÏ´?b4ý4S ¾ ¿«-Rlv¤ËǸ۶Y1è'6×+ZÆí>î¬er ¸Æ©“ãWþµ¶‘&¢äd—6KíüÎÕ÷o$ËP`æB™n°F¸‹^ØxdGU¬¾fTa¸d É&²½í̱ éHí…þXÝ™b޵ˆ`±fmÕ·«Êlæ1ìP¶6XÒµ5î=&—%`^¾Ã`¢_+“Wí@ªfF6ñD$bf"PîŠjîr”æW6#µßõG¬€ÈÕœÞɸöð½ž?KË4´øP0;I]•×Ú¼žØJ;H¤6 ž?§+¿Ý5{òÌ,8v¶^\ìG&ΜZ[ååm *Íހؓù]ér`ÐÙT]wPšÅÄñDëžÒ&$Z‚’<=¿åäà£7¹üÄ‘õ›^³#Â{BÖ˜Áà«Zwt .œ¸02|?ºér쌷?I½Ìš<…r„ôb¦–àÆÜÕ“x«±Æ~û=ï¾P±TÍP¹·ÃÌí$×â#K#kïŒiŠè×,PB·õêªEJÑjJ»íd"§[wW¥1 ;H÷o÷ •Vü[÷Òq¶b±Vø? ‚¡…ÉO:à5cQÄÍÄÃfÑ[œ+ü"LÅrð $¡’ˆŽˆ‰ÖÐ… ÄМ¿WÑ$Ù&$’ºäÙË“ÇÌ'vÉôÑËÆ…¡‚Æa1èçL.iv¡ðÔÁ¸Hy•;è»2[»FÛ‘—voÅ®Õ4g°N‡LTñš¯4&Æëè'nèŒ•è‡ Ný˦õ"½ýgÚp]tæsx¬Ía–æ©C h®w¡7:åšüX$Ë3/âG’ýg¿áýhñ¤^l@ŽN–+(áIþþ•nv­Ì6´CÅD4 !0å}øË£E_P*•-ÛÍ‚·øácU˜6Ð`Oß›X¤æj:”ÿŽiéĺÍ=©‚x¯?Ä·©Ë¡+h‡k9»³.öy±‘îÉ{XtšýÙ]ïŽóBšçEšRžqNTEÞWŽ6ƒöçØÓ6|3MW+uÔgœ)ÓÚª¿ÝÊ& dLÖ{çßÖªMÆc^^r"oª\ë«HY³vð¡H°5Ro¤9 ‚ míT?}±^È[ø>hîÒ9ÀòõëžÆ”t<¦Î·a#L)é¨8Gƒ±–3V¨™ Ù¡Ó‚e¿3¨^Ä8¯Žç`?MX|k=Òª:DUÊXü‰¾Ñ.1Ç 2?ƒÂþëCªüR6\çÌÉO¾ç2CŬل@N§Ååù¹ý¢Î¼sÊóµÏ(uX„IaÃÿ³½Ó¼:fïFïÒï8¤„¸…«ŠJ/å#À¡8ä¦÷Ò Œ«ŽOÏ 0E­®÷!аô}< ;Õ®°×6Æ9M~fjáy$VJ·jdZ¡m6hŸ,OÉq}?œ € à¶éu~À ëË Œ©H䇳:n”œ’ryùëÙhxÍÒËJÊׯ U!-õnäÀOBk|É¢Œ…PjÓÏ6¶´Tv^wS‘¡ªÐ=˜òÙ OK:P³éËÙãÀÛÛÖŽ|a‚Ó=Ð'õ›ÕDM/Ç«¤ßQ¿?‡ZpYGžjïW½*DQÿ¦J—å£q <ìAôM`;Îl5Û¸WÎÆ zõç\rkÄ1­µùP²ŠInêÌð$ÏÊXf€‹ ¹`|>±Àå1TçA“Ÿq8øæ¿îtk0=.ˆ]©Ý“-É¿õ¯•Ê÷ªÁ­­5l:²Ê3°°,‰©ǰ®LëFÜt佞×A]hÔ´¢Ÿ”gvv8±nÕ‘µ€>zÒ®É&™5]˰iÃúöã  =¹ÎN[%¦Vh¯ïé&ÔÝ/ `©¾ÐÞÓÍ™…5å^¾AÙjW]Ý/©ä%ÿؤ»ç¢ „Káæ?H¿Ù¥Ç)<—ª”r^Zö̺ûù®ÖùÏÔ”ˆ_ÓÛ1u?iKº0U³†Pö.g‹CàzÌYaIÐPDílR÷àË5ñááH"„ ím9Ï äºPGV ùÎ’ç$0·¦Ø‚©ƒƒß¨¼>‰ ÒRa•XÎÁ°à‘Û|øų®>i›Q нI)hº\)áIž rÄÁñ’—-[ѰñvrlŒ­Ð5T3P~Tƒ0üñ ,r6;$×Òlpç´åFZÂh3ÈÔ{G:_ãS’güGš³ùªÇRS-,j-Nôá\õe‹áò«Ia eÕʦÊxHâøÊ1Y¿…öÜWçÅ"…u7âþø±|ÁkY-ç´ÅüÿÊOS±%¾¥¡’¹­Ÿ\gTLMm˹k¦7¾B-y÷x¬¡ZA'D©ïD¦ÿ5›_2Úç™çjRçMª´@w].ý*¬9ãa,í!ƒ—Èõyê±ßÈ5í÷Á£N!1ËLRl•1;¹t#Ø…J4Ä ÖÄ\OóP²#`YçsW.Ö0kÔ4T[hˆ 0 ‚Ö7'€¿Ó÷’… Ò—áXËÊMMÖÿøà„¿Äí–ZÐâ_•\s6cg¢—çT\wÔXÿæKìÀ§}«X‘”Öò¹ÒNü_Ë\xª•sç¯Ì!P Í/ &öI‚d%P’D|uNµº@ê²µîd—„áz¼ ,ѯ«N?Ñ’©™ŽV:žÓC|ßLÎXôiù…¬ÍÒÜŸMÎY |¬ûß}mÍì ³»¹!`.Vžì1Þ/SÉ ÏKzeý¼íX˜¤£<ÌõÞÀßÀ.{•BïdeÁòxAÐûnæ/D6|Ü^fCHÊï»-nÔ®ƒØ§ìPþ—3ü d[£Ò›v8!ie<dÈ+ƒ —§·0®'½êÊ®çüÐÖâF•ãm¯lí†`Lô.Û¬Sã}—µ°9q]xѬó³0¨™ÎHÉ,Ó{!$(uXáVb%ÜzFZ)Y¬ÕõICPIaAèÛ‚UYýdvÛ$ªi¦¿©ü&DÀÐæ‰ôe[ØO…'ÇH¸ŸgîCt6ÎïÀº©åµå¹ÝxeµhCÃ4r½ äw……ÂÚ´Ö4—QŒ#™ ¡=§zwæØ„§³)ï/ò—•^4ÚÕÆØe@Üä\¶5±tsvº ŠêÒˆÄÏ»ÕÃ˰eHžŽû;H@<œèa=¾R$̶ LÄ‚½ìÄššÌ">ÓÖ=ÂÎ(nG#B…¨˜í8qóV-Ü ®ûZr#¾²Ë“iÊ&9À ü¡u¬Ö•RÏ3ñ"ú¦×+½|ˆïí€Ý_æß ìvçöèÃÃV Ê¡‹„B%üiåBP‚;©Rûڴᮢå8òG,‡·éžÅ9:ˆçj–ÈÊa`Rë {%€ùgôÛB–Já»ÈÁt=…Êf[ý|_O¸M«,hµ¾•šÎ#}–ÂOï6P ËÊO–xö'u— gmø{0ñ”hNÏÙÆõµRÂ7c'ÈÄuõ—sÑ«ùI D¼/¶‚>Ò.\gþÞõæˆ`Æ~§zcû¾IŠž^£ünÔÝøt™Ëq1òsQ³–²`……™u¥BЗnZ‚šþñ>R Ú55Kfœnæ·¦b¢oˆËv×Äb™aóê® kñgÆ¢¾ñ7'H"Jš°ŒVÑa9MØM§Ç¹ÓN7ßâêà1 tõòžM|}Ž?°äÝWuˆˆ³ÆËµ:Í’ƒÎÙ¨Û]%55ìC÷ì÷wy9c÷EÚ5»|ÌϦ&ZvAžÏ¤ Áóö04u)¿FHm±°W"”×·˜Þáõ¢MêÞµêÕc7ÉL¥(ç¾'v;}(¦âB _ÍÛ(ÒRLÎÉ¿8Õ]NYò'©à\Ó´ŠË ‘ìyûVl*a`Hâu2×LgáþÂÔ_»unhöVóçvDfLÒéå CJ·{÷ªîOõ½Ç±`7¶ây÷ŽJ¶e龎h§yH@·ÂSso?&œm¸\:¹gyêo€Ö®ïåÓÓœQ+•­VíJ%ˆÝîÆz EƒBzòÅ$<÷{q®¾–!ÙG©%>üeX&âvŒ”4Ù¬ü;'­Ãíw×dV`HX¾‰8h(¨Ã¯c©é†¿VR.ñ/힎HÈЬ-<3À¤ :ëJy  ®Ï•hV”&Ç+O®¬Æåq«\hžpüš×ëõãFu²×¡ø¢•‘,]Š–÷5êv3à9&ÎÔçaOª(ƒ|Ÿ‚Ž)ar’± 3ï:P yÆÐ”R%2õ*Óú•´Æ„²ûtpÑA \jþ’´±4Ÿ*кbë=¸ýÇzÉs!ÝŠj<—tH·Ñ§·î"Å!'í õ†ÍW¤,Þƒž$û“k†3ŒJ²eÏ5í ÉZƒ_ç£S‹Ëi/"x<,«v¥ÏÐ}Q›W‡¾Îž%3æYøP8Äñœr†ð­Þ¼Ê×B¿×U?lYQ%”‚…‰n—‡Yí@m8b1°†?°ßgÈΟ¥ÇLHäsy‹Ž cÀ³q°5+¬MŸÒrÎJ"’cî€}¢þÐh^[æU éÞ(e‡°*‡Ú÷?vÕ¼ ¡Ng‹Sä ÔS¡tzp¾õLxAwu,¯•×+`pµLfVdã2ñ>oïÁûˆvº¹Ú¸Ó)î\œá·\Ñ~ô-û´šô˜!öËÔ[¸×dž4™Gú^Ä:¥›¼e»ª°ºví=«·…ÂÙ„môsÊ ]"†¶’”"ñdCôÈôØ,÷’ˆüìu63@ŽÙZ6ÂÿÁ$»c|­7ôi2_DJkKn›¶™)“¸j['Ù<‚´3{»M\ÈÎìIaÆÉPÚ«n yY>µúû™–îöí ýS¿YwítZ [B\Ê6ÂMÊ~ª–u©ÇŠ)Âéq:\R-;RÍBïlm¿Ùçu&¯ùðÏUsä mk’: ƒõX]u&òh§'·ÍÕ4høøâÈI ðÅnõŽ'Q­”lWs 5¸Ùj;}“<Ì‚•©û²JÎýZ Çß*òðQ¡±C`´«e«ŒŒ=ç2ó¤ë "&æLôõˆ0ºZJÀëB‘™…)"H!x¦8v‚•PÚáÃ跙ԭ9úñ¥R&Æíw%0qµæE¡WS¸kRXo Âv!ÒŒžðTß:¬ÇNÀdkô­N‘ŠIxé¿…:ÑøôZm½ùgâ®vÍÏ_Ð~f£Oo$ñ©0&}¶>[ñúéAë“7=ëøëáÓ £~Æ— ¤˜+CN¢ÛЧŠ#/TönچDŽª¥{ư¯c;•1ÚKÓù¦ÓnÜ÷àÆwFm`ðedr9˜(ùj}jýQ!r(Ì/)!Ï•C>ÃD_ ïXÛfYÀŽ”êSc£Ò#ÒbíÞuR1mkÁf&k¬9+žØ‚“÷Óý²¨¯ñÏŘÓiBõ9v;•é…Ó)ðÍVY¾‘¼;$ô±÷òÒùP¨@èÇæ.ôÁ~xbøæWÚ£.³{cÀófI&f\®BÔ>+IÆb4wu0ٲܜM{fZ-iïwK(,™þa­þô‡ñ²ä‘©,Ñ¢[ åÂ/0/Æ:8Ñÿ&Ìßq4ÝN¾c¾L"LJ1ì…«8ú²Ù~ª¶bÁÞ¬N9ZoTb‹HÙûôÿ(g©»/°Žž/40£©G’È<²« ¯¡g?^(©wØn£¡H¹ÊGs:$BÀ´KèK¨hÖ h¯E~< ÁˆŸùãò€–èõ»Ê•sÖê “aŸŒi|‡ÞßÎwrAl^[G H”;r8+üQ˦Iž­û~ücRƒö¿`”Å} ö½·5«»G:ÉB× ]V³åÈåÈÚ‹Rñh w/ÔÛ!¦I2ñ¬lQcxæ\• ‰% "GŒ¥s†‹We.ðZΓÑs]‹æ˜,­tîUí¡©ÛÑ˗ijGÒË´?cÝgZ2(½¸ŽÁ+CítFÔf•€×²‰jŒ¿ð%­ø†F­}‘ªMà0„]Oô1„‡•Ü\Aõ#÷­«W%îap¤¤ní‰Ç>¼zŽÄùÙ ÄíÐ þ[ïD24:süçñZOæ %ëÄE\Ÿ z®·ðœ ¦Âü´™,DÅúóJ1UÔ1!ºä Ù7ý!¶«£š>©sšª¼r¸ÈÆ®$ ø¡ë… QØ ‚E#ô"gaZ2âs÷Å"d=?¬£¨»—¸í¿_Í6Ëa³;ÕJÍðz1»î›»¦xRSÞ‹MæDÌŒþ"çF»evèÜ3-zRÙ•˜õu®—]ò¬¥™]š2Ê›¨TǃÃä&Ô08N«rucIž¥œ±žT¬©êB…µŒ !a§’¬Hco³áe«¾úŠ XÕKb>µa“/Ú)@"ßË82 . ó‰l¿ï¼ÄgÆ,ö@8:’†tfNÕ¤£ŠçõŽHÑD žŽ %‡qå&P^ƒ¬ë|—¾iÆÀðóƒÒª }Kl3%n;Î.ŒûÓz=Õ(£Î‚vGtvqÓ±Ågó°{ ½L´è®Ïâø‡þ›—%cùÐ!¹Ýa ¦˜=¤AÙœ§,Þn,P>Qx #¸5–,­¹Åam?(¹"·d‰{hñ!À$ìòPµ¶þRœûgÈåyÌß'E@N®Ê«½=ô-øÕfæ^÷-#äêË#2n¦ì¤ }è:ˆ`L/ªÈ‹9Oò%¿Ðò$&È'RqñQ„vñwÑÅ Àv¤»\::ò¬@#iøHË /ø¥¹Ü˜ è»HB“*×q±«h.$Ï]#ù’$½Á¶)Îæ1Ém @›ÁÏô?VùjëÏÊx»µ£¤¶4ó‰…)î7Û·ú­ÒŽaðýlßò-€mÝý9$®Å‡§³ ãÑÇ.Þë<<åk&5„pêzÖ$^B¶‡AŒl¦Iü¾ä=CoôÖy:ªßt¡ê#@l tðêð_{9òc˰ߜøÍ0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2083 0 obj 17294 endobj 2084 0 obj 2231 endobj 2085 0 obj 14531 endobj 2086 0 obj 532 endobj 2087 0 obj /JWHVAP+CMTT10 endobj 2088 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName 2087 0 R /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [ -4 -235 731 800 ] /Flags 4 /CharSet (/exclam/quotedbl/numbersign/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/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/underscore/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde) /FontFile 2082 0 R >> endobj 393 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2089 0 R /BaseFont 2095 0 R /FontDescriptor 2096 0 R >> endobj 2089 0 obj [ 625 833 778 694 667 750 722 778 722 778 722 583 556 556 833 833 278 306 500 500 500 500 500 750 444 500 722 778 500 903 1014 778 278 278 500 833 500 833 778 278 389 389 500 778 278 333 278 500 500 500 500 500 500 500 500 500 500 500 278 278 278 778 472 472 778 750 708 722 764 681 653 785 750 361 514 778 625 917 750 778 681 778 736 556 722 750 750 1028 750 750 611 278 500 278 500 278 278 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 500 1000 500 500 500 ] endobj 2090 0 obj << /Length 2091 0 R /Length1 2092 0 R /Length2 2093 0 R /Length3 2094 0 R >> stream %!PS-AdobeFont-1.1: CMR10 1.00B %%CreationDate: 1992 Feb 19 19:54:52 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /YRLTXJ+CMR10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /Gamma put dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 14 /ffi put dup 18 /grave put dup 25 /germandbls put dup 26 /ae put dup 33 /exclam put dup 34 /quotedblright put dup 37 /percent put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 94 /circumflex put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 124 /emdash put dup 127 /dieresis put readonly def /FontBBox{-251 -250 1009 969}readonly def /UniqueID 5000793 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ\÷c¼3Râ*Rç?쨤‡±ÿÄȯ@› gSr æÚRÊIƒž†¯zE_ÑðÎEˆMvï,¹¼X!ý%6]Þ¦ä_3+_h¤JØ¥0ð’£o¬'ùzþê –ø9¢¼K“$à€ï|“t¡V\)Z! ¹j#ZÅš›Ðz1ôœUA~ "p?”ÿ{u@š]A}¦s iãújB)ü~Ob ÄÆ°Ê{z;þ¨Oí9ÌûmT[²¼Äž^—d«”UlÔð$ïW›h¶Ü:¯„ ?Æ‚(r6Ž;BtÝÊ6¯cFÁCÇrÌ$/;!,K×q¡§Lš”í“¥ûeWôàuG¯× ˜ì£¸®h˜7–åñIQß[u2¢0ý£µuZ8µç—*«Á# ™üøq¸Ûô•Pºêœñ¹|¿ÇÌ–IŽÌ“‹¶pe}é#¦YÛ‡W{ Hs(çãùÃ}ˆ²„CE à¼îêäŒÍcˆóü;ïØÙÄ[e/SmV&±ÿ i×2Ç¡ƒmc\0ÀkíC'sp)åºX0¹èŠ@$Ã2jÒóOGµG9´ˆ%­f™÷ÑêLJìD@¿mª™Þý2b5–\cdy!‚‹òiìÈz+Œ­lx¶åa°—¾+ÇÊ2´S@uöIéYÑö5F>qgžROEowK*øþóØÆ;/‹™þsºD³Ï¦G£Ç¡Íx=>´JÎå u›jLDfâØ÷džk­åß4ÒÆü‚ÉëÔØ.ä vî¬Ë|Î1wªm·à% Q–iw½Œý½ôÐXDN}}‘xê™|¾E.gK{£Í ôTü¦ š >kµ&ÒÒ½mxâ“o.<nô¢&lõQ>¿IÔÙ, “‚ 7 L‰³ÒUí/ÇGGS©ƒL@PŸÌEdáõ·Ô‘ÏŸ5ß: :""lØ5ùȸéM-‹á/Êê5p¼ªÿ7þÌZÕ˜òB×8]4ÁÁt/Ä«É+Iüªëιc/xäêeŸ\Ý%ÚË SqÂúP=¬]ÅóåIŠ C!­å¬#áÊÔ½¼EÁ~í!™|kZµ `f<ÇÒæ§·$TtPx´Cí÷·á·Àçkõ¤n¹ñàó÷ƒKA˜ŽAYÑsrƨíF0¥Š,tùšu|¡¤žbk"]ØÞfL`ú­*ðyd­NÅä)ìQÉ÷Éùl¡œ1$¦?ŠÓá»èXN¥ˆÐ €EÐ>Äc‹ÃfÕèŸV=Íÿ[miGU>L’áfqcÏD t—˜.¯2'§-ì;p[ÌMŸôRÓÓ+¹êS"Ñ÷#bpôøë¯`1Ôi0ò³…ÕzàžéÀ‚C€±D] ~+KX>`·Ÿ¼ìÆoþÝì÷™ø9ûN(V%úåU™¿Ø0H¼?ìÓª~¾'XèPŠl¡ þ+MŽkг‚p(ã¹éIŠ-«Žþhqœ®—.í¹=fKræ¶„.¯¸¬y<,=l2ž“Ï0êùÃÀ‰¼F¼nd°¶¯ì¿ÛQ6£_ª@ësPNœÑ†¨&Ðÿù- ±ß&D¤r!Û€ÌOp]ìñŠÜ!&|šÊhŽî]–×ëÍDD•_GJÒIK¤¸'íÁ‘.ŽzËH*‰$Q]„"©A eì€ÀÀ…tƒ`Ã[°ªvv3&›ù­g}`5¹–ê dzˆ+“ÿuÅÎ éYžŸŠæcÛåÂvã¥päo‡<˜‘h,Ë0EAâ¡0ܲ‹2õîL?ænø(”wK}¸Û½y!•Lÿ¼°pÕ"iôÂÑNÓgÙ”ù°5xïåíÃ|HÙE´Î5é!t-÷¥ÂoÁЙt)ÏÀÏ%Ôß/ÛŸ›¦Ë?Œ£Tî׉¤˜GÁðKQïó„,]Æ~o;õú¡GM!ŸØM†jŽçG`žiÿ Bî ;ÙÔv£ A^¬:õLÈÖoŠ,Ç$¯2I ká6ërÄ@¢‰¦xÕ‚~³LõC!B‘Èru¢Ù}ÒŸ5cK°ŠWJ0äT€ôÌ’ÅË€àEÓ¼²£“ªð8¾i’®;Ÿ}q÷[vr’‹Wˆ4˜!kç6 ¦owc–:Ÿ§²ÙbQ$¥*„ˆ“<·Œ!¨Ðû¡N†’FXÓ‘‹éAß9êxï^-¢ôÒß  ¼»/€J¸DLÿ¾ˆ;ÒR°éexô’Ûy~A·¿‰¡AKŒçÆÜëšò`zJGH×Ò—<©:À¯ðÎŽ4IPMÿû±Òøó‹žZO­ÕÚñ‰J¸^nN·<Á dØÙ‰•C?â—“ïlèê,¢|Æ(/¨HnÔùåío¼»6Á¦n7t3÷Pzô¿ RyºÎa™Þ¯„|9Â÷ô’Ô‡U}7eǶJÃ<Ÿ§$¾S2C¾S*ìj[SM—¯t*þ÷¼1¤§afq1ýD²¥g­“]À­hFH{¯:¡Êvu¹£†W÷1^žÉØÚ‡#ZôÛ‰ÀK4\Ù{ü%}IÔ§Ñãÿ’k¢ÇHtÚæ¥…²«6r‹ @&±ŒnËWH¯âûP \4±ª ÐùÓ@qÍdÊB‹é ñleð ‡-I[#КMŸý_ À²Å ¿4"a“¨Pqè›jB1\/\¶¯^ä¥ÏtíwütJí©8”QŽª/éÜV%ËA´Sßl)×MÄf”| û56ºXx‚9R&®†áå.s[+¬bƒ¶Þƒ’ëŸÇøoz—.w¶M„x¥šëåx™SzHƒºœèd@‘»ÄŸƒ¢òÉýð–]Q~)ü’>ek6T7AÉJCì>®DCx鯖 Ú†s|Ý#3Ò¡R™gçÈ=åáð;'Œ6«©}Œ+<€Õòì1ɦÄÂc¡,ty†:òˆòy S‹’FŠ›½™ž€]ÑêËÇ{¨??€0Œ©ÎÙYhç\ø$ðÇé ò,äÔâüsõíú„š*‰àÒYô/o%ÌKg^¦6\{~›FßrŸU‹2÷Š8 úŸÜ˜˜ÑRûK¢¾©Ð ÑÑkëÆ-~ÿ7äPr®›`ÉÿãË—Öù´–%&5Â>YÀ¥Ÿàk©jýaù˃9××$È2&ñu´Oú¬)çõ• ;äØf,-Û4ý#‚y½úSQFsjáÉø6”¸-<¦X§/©¥?ƒ³ë±”EÙØííoJU„Âd%ûÁ¢‚(ñÖ5ív¢¦ü€ðl€ë©uX£«`ͽÝ~驜 ì”>½>ª\@«ÞMÐÙ¿pÅÎJT£”í ²ÓWÜnš šoTø <°fÑÓŽÝyW‚Œz¤†Ü©¦ ˆ§bOYD¥LŽ€²+cQÓåóÉÐÓ"ŽÎíîsÊ U§{çG=Õãç[£—¹ÏÕËŸDàî=r„ývgc{Kº¨î„ßj {1´$ÝVÕ LÉ1t€­šÂ´%–B%k½¯³ÿ\ùo+\â'Õ`_ÉÚ¿·Ì¡¿i4(=‰ir©[õ°o åü%³åYÁ •¦>zâ˜n ¨•_ s±†KªÀLÇÈþ³}ž• 9­j¾ncWR·“ŽÎý€íæâ÷?Ã-Y"`Œ%W`nLý†þ¢±¬eÂùü…:ξ±ÓŠ®ˆ/Xô{VÇ“€î;»Ü;TjQТ˜yËm©èÄÔ -hW—д- U¯Åu÷®§÷" 6ÌÞ:Ec¡øïæ²:×Q§›NC¢ Ö< ~@_C9ÝLz‡üh|’F…ù?`œ¬¥Yˆ2ÝýzD)CR—äĸÈò¼³©û\_¶dê^ø’Š€ÿ"Í}"õDœÜêΜ™a„Îÿlv;è¹õbOÏ¿òꎎ™ÿC‚ΙA÷ |X¿{ P–Êf-±Sk ³;¿“× öõ”&Á@¥8VØ>›Â©‹l‡‹pRÈ"79\äêurÜ„â*³º)Jœ.á‰ÌÇNŽìÍé©ì• 8Kþ@B/)ZG· ¾‘”ž±kË[ û3¸þ®ën*Ä­.¹ÊY2Ð’Øt™ÚR×ÖJ0Ì«1øiLåcœ£˜x bûªã_» ²”¨Ä¼Ÿ¼EšÜ7Â%+äæ^ mSÕˆ©"¡+¼àG“҆&Lp…zó›xZ˜?æTØê¿{‚€ÌÚ{6bæùœQê§ê¦ù [0ƒfÚ3—aRb²ò«H²UC`²w¤5LEœ,«å–vdxåãª}ün[êï¯-uƒÃ}Ö^ß:(Ï'˜f­Í»¿QžÁH]ƒîw'4Ú`W>ÃâAQ°¬üJ ϸ…=†`¬37½¬4g1‚o€p¸3úL®¹•žye#ö“¾ ôÚ±öm3÷=ÔðGÊûÁµ³gÞ7€¥èn¤·"ú½H y‚䎭ث% |­[øÅÔ/.9¡T_ƒá8-•)›Ø?j²ü—þÅIOºäl鹓Ú1®ZBÆß¸¼×æÅ%.{” à¤@"º“áÔYóL ÊÁå„A¨ñ+ɵ² 6ç Z<ð×$"ä_1Ôvî Ô ÜÊY Ô#e2‹JI†€O(‹eÚ]£ùzÎ ÙæËçaSð€!8Ág+{›.ù90·o‰€4•|™üäèÑáOö‚A¿rù )‰ŸÚˆa<‘ÃÔØ%<€yžì¬ž®þ«×Ïgâׄõ™T zÄ‹ÎzDLM ÀÁ7†/ÐT t?»únÞ=û_!¨úXQŠ„ƒÞв1*Ç“[GZe“…L¦îLW³Ó„Ô¦¦N’Ë5¢Ão¢ú¹¦zVÕ”@às·ÏV»F’ ÿt¾·Ë·ŠëÓ¥)°±hGn™%ÉÅ™Âî²F@H–î/î6îá­þ#øúä²[ó!4Z,bEBd˜Ÿ[µ¶áÁÉ×ø¼}Ú4|#m¨kS,$Ž‘¥x¿Ê-îÕ‘È÷P?M>°ìiFÄ[zÿV|äìTPZÑ6–¬«¬óâv2ÄÑ`nŠjiΆŠtNL“aŒñ¶ÕQ¹ãh€¾ÑÎýRBaødÞË'ìsLnéeôòS­‰æ/dL¥vWƒý¡F¨ŒxG_EßGÔ¾`ض˜*ÀÒ³²§íßã}ÄÆ`¶­)ïY{Ç!œí•)#³ƒàfɺÚð,ÉbåÓâ•Ù~\,åÊ×Hüße)†=[öЙâéêE‘K/ój—ÔiÇ…à,©SÄò+öˆ Æ·Íf=÷l8ÀiÑÄÓœJ¿‹hdµ@ÔV <)þÀÏ€R7 ®NÝþ ÈL 'sbNÔÈ­ûëXvB@þõš´q¶ÏJÉÞ{+¯è>óV~$ EοÀ„À†~ç„ï)¡¼X`8\à óÌpó\¹Ã ´nZ5~ ÞŒ1 ì¿Ü\¬¹§ó5G*@„iÖ²+1}V”´¥DcÈÓÌç‘U#Ç9ºf.Û ïÎAjD3LC È׊Oi·[½%hR™ÿç¢=¦ƒ+EðYØLCÕû.“˜‰×@—jøÆ%h s&beÞ…$^b”¯¼„ÚEõh¸ Xü ¤Æ7byݬÆ^P±Ÿzã¸åPë]߉¦÷íÁ2|¾7h__ë,Ðõa\ƒ**©­ÎRuâ$ú‡/ ´";ÞƒÎ$Uá…ÈBÝZ/Px繟&ßGG¯]+רØ÷T51ÏðO–âüÄÖs=”0eÀ3ç¯(ýh1 `Ŧ ï´FÎù4ßÔiXƒO?«PQ éÐå´VßÄž8KønNBÚŒ`~:Ì:Ä(—‚YY0‘#U™’¦;Ø«&çÓNÙÿ -¾é©?6P‚šUƒ¼ôeYFúÔgDîj;r-%Þ‘b´ ÔÞ÷Ð+ò£¼Üƒy4Î1>×ð mÙ`6/Ô2D¨ä«b$˜âMVe`$—º+[ØÝßw¾/èYŽ¿¿O‡Ãð±ó׈ ‰ éFñÀëÔ*·î†¡›_©!UfT„§ Åû I¨áWvþøæp  øÔíè!΢•Ṯ0éúGÍ“•’Ÿ•.~¯V±•ÀO½‘ËÂIf ís"H‹ÐpîsVèÞ–}&n.hQÅÓ^.âo~ =¶ßfG0ó¶pþR9¢ÿP‚Wá ƒ*øó X$lÏŽÀ±ãæÊ/9,e¢cø“¦\n<}··7¦1)YëÿßÝw9.w×õ&v8KŒº] —Ê4G*Ô²ìªméqpò}:B2µ‡œx*îÞΘâô{PcŸ?~ÎXK\y—î'¶-Õã Žµ^·2ˆ ©)à9ŽèwÂN»Ø;q ¶n£Lð‡è-¦Ð†n=î»*ÓÌl+ ;”ÐÑ_’àŠ7 û‘þÈâ;Ù_=FŠEZ|hŽ©sÓ` Y/oBb‰Ý'bfHÏ:‡áÿ¶ëפC¶ó°­·ï[Š=SA$3àyºŒ³¤ÒÌí\”DiG»&{å•Y&âˆÕ LjNÊíÍæª,«”R0¢.ÆŒ%tíG ›µø54=½ËyšÁÛ7k’ MôÕMç’P3J·VØ›EÛõˆ"Q¥³l˜gZøÕV®}q&Fg9°|gî;gø9€:ˆ^šï¨e”ø‘–Vù»ó¯—/î¡çN…Úþšý­ •Ê×y*jbÑî.`4+[©AJ2~ºO„¾”ü»5N?O¡Ò~a÷þ{‹¼•.æÒÜn²^Æ;Éœ¬4ÅsŒÅ+|XýÄ’wSÝ@Äß­*ãtw L­á—,ýp#>Z¯)£Žl>Ç´Ë<ñ¼`Y*ãWÎgUš‘·(¡ë¥ ò£-ÀŒÕ‰»od>ŽÌZß i˜ ¯,:Ýõò9ÕÚ€é{û]bÔð:‚Ù3ÅÙD],TN<ˆW_?; $˜û©~*)ñSË‚)›»éçëTgxõ\MM”þfÿN÷·H!§4R'…\³T‘JÎwë@|PpïTج‰Ra¸]™~ËáÌoHœ çòSæ/,·¨BQ]3 ò£I•€àú:ä¼¥««CØminÀ®¹h‚--­·²¯pú!_ú·’nùT0‘ïÀÒz–¿‚Cª‰†gÊSc›-¯­å×¼k¨(Ø[bc$2Àn¤Q¿Øâ^{]v<ÙªM #:ÕdRŽXn'"hÁþ¹6( Ü™¨Jà•qÞx¾Ê‰k‡M`RfÙIÐGN“¯]œ¢ì”Rt3yõÊS e|`”.A|)h"QŸè>˜¬ëyôz>ü­{É.Àïš ÚÆò’Þ. ÄC„þ¬º~“Âj•)€…¼½™]oFø\lÈœ{’yt¥Žï1¾µ5º¼½¸¶D˸S‹0KÇ‹æQÖF˜;ðç´…oŽA«:9N#5à–Æ™¨¸×YSòªý. ÄûÔ8 JÓðB+²‘ÄÅûÍÆ~Qì87ªö—‰ÄÌâGº¦ð«FªÇ±5‰öS!L\…nOz¦ý±žzto"0ó½ŸjÍÓÓ2eÓ¾¡•þÒUÎÖmíljI2›zI>YƒÞÁ|ȉ–­=¹FÒÊ')Æõ¥Ås—zF·SZ²¶",ºŠô¢¤„X»µ£êìÌÁÃzÊòá$;šRÕŸÆ>î`¢ž¡Q½<‚rs´´…òSXc,‚Ø”Ós=?a¨üúL?ÿ¡ìrÕc[,'ª;Û¾ØeCÒzŒuV%skxrXÊ”¿µRðIwr¤EßD…È?1£Ä¯K ÎH“½Ì\Êy1Å(ù`?¾ ˜A¸ìL—ŽÈ|;Ã|ë¶ÖÙ&SPs]A—ÑøsçÌJõ:«Ä¹gêt ’i¸Ÿ{53}c:;¸ACe‘“ÝŠ†‘—SVYˆp"!‡ÇÊ€i›®ìLmm_uûDk|¿`m-à0´Gdò5»×J9MÆäoŽ±Î pŽ·«àókw:<î·˜YþÊ2”<Êô_d¤°,SIL0~\rñ^®Ó${kSMy1¼%>O0¯<ñÚ(|«Ô— )êI=ÎJ¾m³¯¡Ú©PW„µvàðô)³«(4ƒ02¿iÍpŽ@×´Q–KhnÌ«®¸ê¿†ä._g ÕY0ªÔ'†?©ï†Õz±/ó¾0ž#Ž^žÖü‚ÜÕ}ŽõTãd‘åKªxÞ2‰n6y- KæWÜêR B}3ü<ºÞººã*ïù’È+Ïz[IxÅ2Âø’ñW¤‚Ó~D+)d'ôé8( –ÞHÙn$^–"á‰^¹‰—[#âåØz¼%OŠÑY|†þS[¶®Ô§vµ<Ú²A:÷×éÚ‚xóæaÒ6JÖD¬‰u¼y$®îâ4-+_ÎÊ#ŒX7qå•^ôCT~ÓøD1$ÅÞ7åJ:×® U¥Ž™þLQgìðaqÓó½N(JADp…˜ï…A¨C½ÊMeýaÄÌcáy†oö;”«Aüj؄۳ K¦“…~ý‹¸¾˜¡H’µP]`=p|0 Æf ã^H•’û}ª6Xß<)îW.k|ÈÃoÊ•U=êÞ4˜E§½ëô…R l]êSøV®ê@¨ƒë%¦U sTŠtÚ>Õ ýåRY`¦¤îkF‡…éÃÓ+Š[ÐËÝ^ÅCB‚¾ƒŒqéù4Ÿ[þô¤–%t$©'6oŒSF„Ì3·'òó»•ÍÌ·`^‚ø²Cß`ï§rMˆÛÌ*rP±eo΃é kŒK$µ¡RÁ^ÂÂ<€ÉŸJX£¬#íÞ"çÚC@žxS\Ì.3˜ÖÅŸáÍöG$¦ž|檪`¨$d' _ÇNcQ )W»åòéïE›KÄ,‡Û0ô‡:éüFQÈëp³ʧۈú~c$‚“…/{ý=á{y_ ZœˆüÕËó:Û\Ë!üÌïØVÏðˆá Ÿ‚YâDñ4j¢YÐÍú©SM"BzK=.6ÓƒŒÕ»eOÄÊþäÜsîLf bjTg Ë"’Ìà­óxÏb´âK8}ÝPtlq —ãÙÁÿCÂW–|ì¨E½î’ DÎÞsò„"–žüIÂòßhÒಓ“¬óI&&5°¬'ä´vò€“¶übKЇ†áÑE™-jÙœ “ò™cÓ5׸š+,1)°Ó<’'_¢C„EðR?>ô×CIJÌm‰'µÙ9º7ÌÏš‰ÙÛ$R5œQuû™q—ìžœhËxáxõTÝèŸ(V¥G·âúªÚþíö˜r‡Ø»Á±Øõ·T‡œÎ‰ø1ÿÞ}–[5ZR9×ùAÕœ±‡ÿÀðÃeX)ŸÉ/+÷9Ûa«.º9-ÕWµ¸v¨êñ« *iƒ›zbÈ _ ÕÀÖ| h©“Ágb|@íU°Êbb^ø˜*€’ÿâá±;´qlj›ûŸzÌíë(oG©-*ü85O³ QþSuÍ=Ë•(v×’5ió™×ùl˜ÿÜÇ ›˜´'´*ƒÉRÚQl˜\þ3QBIÚkèñîÐ0YòM{¬"…I¢‡†džK)¢¥±BšZ5‰¬4/Ö_¸©K4îæ˜Š’2‡gäñ)„ØÖ‰k±q¬ßZèoÇ5‡f ô–¡ô`[tLdÏx겯¥ö9øEn\¾}—4UÎâ¾ÓOOäÅàbG³0r]ïÙÅHEvYw9CBH¤Ô0E´&™¥›5·J€‰ZI ÆÍ¸™Kk[6àd˨#ocÆr›;ÉãNÍ7MÛ.Fð†Z!³d ¾3--sw¨ž=´?’Õ‚Ÿ!hówøgäqjrh;J‚áÔDŠàËUn7¯Þh¼§Í|ƒõw—/‡d×q#§0*)ÛXÌäJ’%·Ù·Lkn¯.z^×QëKm;„áöÌÞJM˜|øüY®5½^z‰ÅDÔRµÚ0àÌ—OÏÕ™ßï¼Ë à×ÇÌ P¸ Ý 9 È#Âf]› ¾ ®0âäÜŒÝ:ÒŠW„‚šc'ETO2¾òMxª$¿Å±·êQqövWhí<׎¨‰RÔZŸªèÔb^­ ö+ÖÉì± ]¡ÖÆNUþÌÕ4ö÷³$ •JŠÖ—÷cð‹¨} =<ÒÊРÆœÝ~žHcÙ™Z41´ °H%¢®‰þ?# Ûˆâ@™îîIþ&¸ŽÐ€ó*‰jd¸KIF{Õë÷ÿä›t:S ‹»¾Ô¤n‰ôU÷×ÙgÒ*[´pìs[`¿:,ä5çü0ÈÆ|Ú#äûôB¡gæ¼LÀ=Ã; R7°ºÒãðoÉàŸ56Pˆ†Ñ ª–àÿƒPƒœˆ+vªV1fý&ZûBîó 1ñðèµòp&}•ø­óZ 5¿¥]M3˜c/U”ÌÔ¥Ù¢Dôòߦ³GoüDšo Ÿg‹K{+Aô«Å°:D?xD!Ö6NŠün o~½˜ƒ2´›äô‰Ÿ0ø)™.d§—ЀaNÛte0†x5–þTžÍˆÁªa,¬–n0Vx ¨“ ¶8l!]áô8Å(¯¾uJ&·õÁµ˜„Ó5I…*º“ÍHÔÍÂÛßóNó Äå ®Äè»X=La>0¤?'0šÚƒ•÷iÓí¾NíÀ­6n•Ôbëz¶Çª’$iˆéžÝú×ÄUH€"–ÝÄ8„r@•²®°ˆœÉKÈ£Âb ”#ôrL—f‡õ§2Íã³Éc§Sž A7ëvŸ¤Á؈Î,Ÿ'BWå>]ÍöŽ;|LßMyÔ°‹Ú›ÆƒK63SMªpUŒnK’O×T?™(±Íw˜‡ …OÓD.”0Á6®[È!lÖÖÅH1rÖ©¦ÑúœßÌü©r‰wä¿ 6Qcð­°IÕbIÎM·Êy¯Þ0ŸEÖ{fèǘe+‹sábcüØ”‘€úëRȆþ„ÌÊ~ÉûjÊL"c„`'mÛ B¦4h¦1^Ø”;Ùbw¾Êß9ÕäFo&qÅ¢j.=îÚì>È ¤3Ë +6•tàXö"¾èVløT§6¥z“ ~šv_:‰H1À(k&Äxç¹ö"±Ów³¦·úê,šp[ÑÞƒÝ"Óé2©Ï†à¿úÃlªŸÙ05]-˜…GIÃ)hŒÁÿ╦úÉ×öÛ¡>|H»^ÆvVŽOƒîzU`KíÊ"`ô¡Í›ÞCtÎZ Húç-0·œ€‹¯ Æž#;j×ë¤B9–\ðB N~Àv™:'FÂêÓ{‡cÍn…K `x\™ŸÖ¨ËÍÏÉoÄBÑ]ÐKSh±hƒ‹Âf„Êß=ñåðŽ1WǬ­U6Z›„4è+fâÅïã#RUóÐ]Û§çBhnj ~¦‡vÚv¢Mý¦ìsÕ Íƒ®;Æk^†àyÖRO©ëðíØäË2‡æCH­  èÿ  òÄÏÜêù³ä ƒW$B*WG!¢.ê³s0&›wrÍ{6£–j¬2ûu|rö±ž±¹8IäN”’soy<ý®BRyØcV®-€È­À+a&Þ^?ÐÝ­¯ÀNû$J1,Í]ÌYQAƒ3£úЙúʼnšÊoˆ>ƒÎ‘aá…±õÜ+Ž£,Þw=½Ëø.+A­0êEÕ4»pR™èüPÂ]ôL˜ïÉ}øíŸ>i:!šñ&nú¸Š-ac·f«÷n†Ì!ãâÇì4­Ù™ùf»u‚úšx)·«tþÁ^lÝ>¤¤›ÑxÆ Þs•*¨¦ð5ÏCœÖò(7­6 ì®…I#Ü.^ Êo‡„2¡žùœâ"ÑŸË ZTót„UCÔ†/¨†O‘Ç®r—#=°´>è{öêwQ„2Ô´¶X¤ Þ6[º c”“¤;õÂܧ#\© ¢PÆÕ¨ º‹ø`çÂäjf|ÞoéHT/›k~GâÇoØËÌV/ÛÒrðNhZ|2à`U™3¶¨ä{Ù3ôG>ëÈ]˜ˆtcy+@ªŒïÑf)°ÃYì[!¼ÅÒ ßN4öÀŒëéÙ&m$ &fÃŒEA¶ü•à»Í¢¨¾Ù†Ó°"§Lž,éŘt8‹Ã¥ùÊuÐG²eŽ%ïb©úà 4Žßµ•jÂ'5VíHéSÒÚKLóÇVŠYwp.?éHŠ ”DiFÝ‚Ÿ¼ìhë"dâþZç¶¤Ž¾¦ Aq°«…@‰âÀÊÄP¬(WYÚÎHãCwÌo›NÓ·)ÅQÜ—ÀßÐó­Ð€?F‹ã×3ÊÕlj¾§ûÇá³"@´²*iÒÈ C5­âb uÞOôŸÇ,ÙmæšØ_>BîXãÁáyR}d¿1ŽwJŽ^áÚïöì£Ùš¬ìJæS03 Ud8rï—ÔÀصâ¨êr•* öèûÏù+<_Eå Ö6Cê´6B¶Ëi»ÀÊÐÕ"{¿|lêü¿²'O¯" ø¡x‡¾œ†€VÖÔ…v½¢&rßž¬Â'…ÔAÌLIìËötËÿ€ÛìÁùgW“9Çw‘Ÿçš‚óÄOÇ -¤‡p~¤`ýÿÚ®õ¬/[Ó^Už—óá§ìŠg›ôÅP+Ò4zKá„cº2]•ÓŒ¿tôÿŽåïËi¾Ž/¬7ëE—˜ùçGÉ–á¾qË\D*²4Ú/@D—›Ì—ëúÌw!">™¥é”z @oåÖVO¿P{`P=Û›þ~žëç¨CèJ ívF³2`Ò#ª1’Ø= º¨k*ÿË]Ü • ‚?GÙ3™®ŠrG«Ú†1æñ¥3ÃPy+EoIÐ-ü¡ ¨K`´mQU ­õƒ'ƒQª¥qáB¬’µ Ý7r¶Šá6mñ%×=ÝÛ±;ìë§Áz=ÒÎèb;¡Ð[+¬¶ÈÇÑ)¬8õrŠ˜z«mëÇ|ôt`2ÓÕU*­Côþb±|UéŽîÅ´ lÆÓBφ#MÙÿ:Œñéòz.·#¥1oëû~ï7sX¦(sªf¯ë$¸F‡Œ§°ÒÂD;‡â)°‘¡ÄTàx…ku&®¡Îhb`ÇOȸÊkn/®mš7û1;"zmgŽ­<˜Ž§G0ø”aÕÈá*´‡½ax_`l¿KR„Éq猛÷<µºŒ²8,}ÓU3þêØÙŠþÿb®z w]Üõd½€Ã‚HËkGZx9››0F^jNÇ|$4»¶/>< 3öa>Ôƒá8Hë}̬ëÑñô4a‘ƒö ʰ‚N?i¹2ZÅbÆnÛHü?a´Zô¸Œ²Í³†ø²ÿo!íœêv6Í4˜ù³ˆ’÷ÒÞCº-hºÒnŸ‘l"¼~T$ìZ‰èŒù˶;4íAÕ•©jt> Faÿø”Q$š¦$«dç®>²O\ƒú «®–Rlú´o*ÊNa'2›¨DFU1cZD¸ d«ßì­Èêt66r\ló4Yƒ~y›Ä&RÀƒ(Öâ“ê&  ïšºù>x?•=5ùþޱ>ÿÍs“pbù˯@¡Ã7å<²^¿‰e—ßÿð îì*â?SG" ËúE äg€ƒJ³º¬SBÕ;9w‡Ú’ðǾٰÁ+-rÂhýòМߙ|0u§1¥—Ѿ=sßé&Í_452¿žOاV6è²Xß7 iŽ&VIm5i`žÈú8¡K¬wD"=üÒâºñ½="ƒMU—œ)ðP"ޤ΄±á˜¥:–JGŒ ®9UâAŒè#W Èà«}Ç JÊA î.±ËǹêD"TC&.c!&(Ò–ÓÿNÝë“Ë*œ”À­Ò_Ña#oÿÇ^8õïù1 ¦š)‘7p´bNqGü‘ɺ¨×É_Qû ô„Ñ:¤1ˆóU£š¿#…‡ÏŽ qÂJtKZ™D×SÀìï\–[ÎoeP ™Ç &~õKo¶šæÍ–ÒýÉ—Þ‰z²tR”ñ ÖHž •8ÛaäÃúÅ´ÝZ뛯Èõ±r)å\‡ÒÅ»d ,4º¦D/ìÞ…ý•JdãŽYÑT §Y§+DIó06G_7} gßoÀ6%¹Œ¸ ~0-7èGø£#²Ö¸0…?Qlf`Õ ›ýíÊ2û¹-’}ž*@cÀÁÔ»þTgXH¡ÁnY=PWËXW™Ö#Æ2Bë eÊѵ íuGbâ8½#ä q½Å¡NMþESK½£(øÿÕz‡¹ð`ô©vÞ›ø\ðwÄWBøhhp0Í*[ë‘ðuz`é0•ù®Ø2Þ·å-l+ÇzÿKËúü‚XzžY¸ÙƒŒ¼É^P¤æëÀ_3ºiÒ;¶u^Å–ŸhKߦ݅`~z0ð/–Å–›âDàÝm$ècвW·ö9ÛÄá›0Æ®ÆÁèæ;v!RxlÈ¿]O3ô’zjÇ…RôL¦¾úà—Lå¶@hØôsÛÓ¹Ó±n{°}Å÷ÝKÎÝåÔ.ᶉü#wŠi3TÓÏœôæëÿ!ñhüÁÏ0Ì¿ûf#¥Úp¦~©¡"°©¬.VÀ5„NÑ}î»Gƒ»£Gµ€¾Ðåhš°u8jmlä‚ÇL’ˆ„:‰Æ]èþ®<¯|Na݉?ðÎ+ìÔ1|¤ Ì‰Õov?5]u àO oFÈÊYjG¯×qÕ¬"ü­^6rBP°_²ó &kp²“l¸rƒOò¾¨îy¥F&!Û¥šÖ¥ ½Ä—ÔÇ4aw9t|0Ë´ƒ9#ý1é^&æKe 5MÕê`Ÿ“D‚ÖU/&¦M·ÖÑ.<° âf¹"™·ý>ÊݾվxõˆCÙÈëmײÊdP»GŒ¦»sÌ㨂¿umÅš­æÕ0>Û î*j¼ÀN*d®óã¢Yg\"(#—¿ÃPâ„D1¥«žÇí„y[ Rñ;ˆ‹@åïæ¡£#¹.­j%ŠÊ.ƒ€TUÔMG÷•Û¸¾/”¤ØD¯sÛ;Q7ìÍ_GÄÃ`±âÃ@¿ “àÿ£2Õ°«_™íøxýû,F(ŒŠkuwƒdÁVg+!ÍàPFvœ9WÛþ§R«}bü,ës bI# GŸ^qaº]<Œ拉Z±ôÛñN¾tèŽM"¼öY|[Xï°ÝňØÿn›±Ñ_i¯è“ =øËH.ÛÙ˃¾Ê\ y·dè<»Vc¼ãîDu€T‹¿`žd̓,¡DÎMð8:fhRü“æ†3 ä"6IU"^˜ tawvB"xÚµú3ŠÏïIÜEêäEb3vOÊHïk{"bH¾¬V´U§{éJsÓrE ïU_îÊÓœùï ]c= _*^úˆAø¯¥:9ÂyM˹Ø(0£oÆ'ìJ}j`_Â/d[¸‹ú˜>Ö!o:Žà„9Ñw'gpº,0Ó¿msKF¾æ®œˆÚãÅ{ï½ø§Ã{žXûõp‚Ë]Ðż0×"´r¾¶¸ ¼dò/ˆ»÷·ñJ¾ë¥§×ü£…RiE-yñ,Ÿ—ŒÅSPÁñvµ7<Ìc›ª þQ—KpŸçÖ„1?XŒ1‚É_:V3‘%á8Žð¹{Ð Ñ'ò5È: Úi.ý_6a0ƒ•ÎgcŽIÁ2G-–ãXz§{Óë—]J ÒÍþ—›l‘?é¶î8¦‘}´ã ñç¤òsm¡ ¯›8EŒÔ<gá×±êU. PÈN, ./!Ð}‡ÏÄócæ}ÿlæËRGüô¡}šã¥Áµ­¸y±é¨dº¼¶$ŽñÇïå›ÃDd ÒЛ¤i]¢ËkX”¯ƒÕ?+eV¸í¾Îs+‹\èÁ€Û.ýMˆìêðs¸1sÈ^à)yˆÄÁÄìU`tÕ%C[~}d8”KœÎ?ÍðSf0I’ ¤ëÚbÆ -|Ö/¾‚ @ù2ÊH“ ¡r)OüëôE¼a}¶÷s-^Ý*™Ð£¹Ú¬& œÕ>¼^V²ú€ÒíH1½}º@A.Ã…[<+vù1e"]#¿è%JŽ0C zü Øù¸‹?DíÌÊSoÈé­*ž;rMˆÒsŒ‚ w™¨í¿ÁåšLëð~ çþ›ˆ®°‚ÇŠ HM¥q\UVÌg}RÆö(ÕI…µØÈ†¼¢¶XÂlË—->Àäܵƒ.&„=Œn Ù ö^è:M{ÔÔ:1´i‹^Ú²{  o:[Hª£âÅñÇB-)Ñš†FYAUh”¿J ?qãK3+‡÷x†Cíð]sQ]`Tâp9N` ;Ç<ëp¤¡,"|=ù5í¥EY=·çåü å.èqèÛ:ë«8T¶Î?!¢¥›"aGú\ ½ß!ó2k.®ºà[;¸µk,œ¯”‹úC\™´]h&ôòäV3¬¾#ïá÷·‹µPg(oÁ¸ì 9“j¬F™Ñ è2QìÌ&Ž€R¹e_MøÅVEhÃuu±˜ÃÒì$iïw4DP TШë;¯ ˆSöï{‚Eؤ,I°ˆE£´(¨@µ{¨©cr9=$]ùQiÞÆ!Œáì=uA 7}q‚ë-G>VBGµ²|–|7¥ˆ:ÔOQfQ~âpžïšMØ0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2091 0 obj 19646 endobj 2092 0 obj 2288 endobj 2093 0 obj 16826 endobj 2094 0 obj 532 endobj 2095 0 obj /YRLTXJ+CMR10 endobj 2096 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName 2095 0 R /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [ -251 -250 1009 969 ] /Flags 4 /CharSet (/Gamma/ff/fi/fl/ffi/grave/germandbls/ae/exclam/quotedblright/percent/quoteright/parenleft/parenright/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/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/quotedblleft/bracketright/circumflex/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/endash/emdash/dieresis) /FontFile 2090 0 R >> endobj 391 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2097 0 R /BaseFont 2103 0 R /FontDescriptor 2104 0 R >> endobj 2097 0 obj [ 692 958 894 806 767 900 831 894 831 894 831 671 639 639 958 958 319 351 575 575 575 575 575 869 511 597 831 894 575 1042 1169 894 319 350 603 958 575 958 894 319 447 447 575 894 319 383 319 575 575 575 575 575 575 575 575 575 575 575 319 319 350 894 543 543 894 869 818 831 882 756 724 904 900 436 594 901 692 1092 900 864 786 864 862 639 800 885 869 1189 869 869 703 319 603 319 575 319 319 559 639 511 639 527 351 575 639 319 351 607 319 958 639 575 639 607 474 454 447 639 607 831 607 607 511 575 1150 575 575 575 ] endobj 2098 0 obj << /Length 2099 0 R /Length1 2100 0 R /Length2 2101 0 R /Length3 2102 0 R >> stream %!PS-AdobeFont-1.1: CMBX10 1.00B %%CreationDate: 1992 Feb 19 19:54:06 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMBX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /DUKMHY+CMBX10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 40 /parenleft put dup 41 /parenright put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 88 /X put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put readonly def /FontBBox{-301 -250 1164 946}readonly def /UniqueID 5000768 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ_ùc‹‹sˆ×t Úí?‚}¹ß´7-95†ãžç¬Ÿ¶©µÎM/®ÀåZà+üFCxw¹ö\#㺴úãDÝÉ«<ËÀa‚Ø=ÇVùÕ¾þË-°ã™—òdÔ½oe¥~”ÉÈ„š²é Ï£¬Í‘ÿRJ­rb±QźдÍUÒãiöè6È,YáåÇ?Þ?£ÊÒrÆ|l¿C¶oä¸g}¯î¡’ˆBþ±ôªhz­mÛä2qNyœúIØ¡¡(ó.‹($¼€AñæNÎ@SÄŸ ìišu¸'.Ÿ•‚m³öC3…€Ž3Љ –!vÏf¦.:ïm‘ÈŒ‡Þ°<æÌßO¶Q™†Ñt ñ!w=hwß…ß²i£Àz¦f½óÅ=¢1‹¡† ³N(ºÆè-ÛCå :Éß’w .BÀ÷½ÆÙ béw0$[ŽŽ‰¹"P˜œU£~NY®*ž6¶4Ÿ¢À›±õôC>NïÇ^?˜0ë^~o¾&f¬Z9Œ-ò(*ÏŸÊVV9 ƒ|J™ì7@ØsÏï.$‹DÊF“§‚YMÐi+M¿ÄÍ즒ÄDý¾÷¼SW[ò'1ç÷qy4­qZÃ;]6y·„É@FæÍ< ØÑöV&±N3ÏÚn²‚]ÄDúb a[Àsÿ½üÊKõ kÔƒý†9ùèÐ$[F=e ñ,&Ȩî)uv–Ãñ1DØêVIj­a©Iç#«µ…™“ò 5Ík~ ­…QÎäa’MÃjFJ¡±L3úû†.0ÆlÅVemÙ;Œ Ynžâ±ª´y÷ú£Ry­´h¦$¾&Õ'¿õíàgYŽ‹x¤¼û Qi-°¾»“ o —´7âŇka¥c¢g92ÂX3ú£]²*Þ#5ÓkîÉÕ°àÌQa?a°¸»éYÇtVSQj)ng„Èùàk‰(Fº3㊮FÕÝH~Q¸G Zxš8=÷9IB“rü•Ó{ÄÝ_áëYEMnŸ*ܧ}“ëÀKyWÀü3ÎK)U£Nº—ûÞ©ã>“[½GR"øõ‹¥÷õaç¬1®bÚ;:ÔjŒ®Ì3g¢©Šß²¥g¢Ò€¨7†s•áêÒ…÷RМÇhU§©ËS‰©h7ù~£ä¨d¬šú¶—UQ[ã²#ÛOMâýü/»Ü‚U%ÄáóL«qbË ±µëÊ”°†Ÿ´”GG>ÖÊhmÁï¢ÜC–19ãÛ ‰Y­LcªìwI+FŸ‹²† î)sí#‡¡æ2¤òTPˆ– Ž"L#ý¨á$²æ‹ôÓÿWbÒá8¶´y¦$; 7í*XÊL,q¦—è±]8 "Q¸SIJö†œb •û“yþÔ¶Åÿ!Õ k8 PÔáD—Œ³Ýµ%ÕC¢;è8_nPÃzŠ|èä%¨úüéb³7µŒK#–ál2†GAj:¢‚c"¢Q©êÓ9ÝØacI{¼¾kû¯‘~º®ï]ÖTÚà@«˜s»d~ØæåkI½Eÿu´Aˆ‰œŽy™)ä[:ß6tÞ]Æ?’„öXõÛ3«T û‡)*üÆš¤Ù¥÷dõ8e,'$ÙeT7OŒTl+‡º'#ß3ÕY4ö„•ž_45ÿï§…ߤQƒ6)AÍÕXÛLM²›3”´*1A°xOIEØb&e9¸ýÐ|ÅÌå ×Csãùíç§÷@ÀÂJ;¬s„.m¨PñüQDbÃ-6x~[`VãV`*Ú*²¯–¬ âõJ’ýI¤®¦ÝS"ïŸ%Ê<ùu“ž%vϼ¢Ç˜O<ºÀÅ8½’a·(µO–¼àH`ó˜K¹}ÀSW÷U±âuTTàÄ‘Àid³‘YCm™Œ€úÙ¢eøL¥ÓFÆ ³›Ñù€Wk&#¨,“¾µ]z‚°ôÀ#tÙ=«‘÷q¤>{.sL·F[[”é¥hQ8Á …kíÁnñ«‘b·ã±åˆT*pŒ ùKGQlÓ‹w±ÑÓ &Š[Äœ‹$•kçwjÜÖßÍðÝ‹TÊXT1’½¿1¿€(ŒuÜ¡uõ\yøöþ¨“å¿áÚ[¹^_Š#W•€ ¨ïô–HûuÍðrF(÷!p%Þ³‹9%{ þus©†?ŒD¯ë~HØi$sJ2UË[Ø^‡\´óÁÔ¬¸g]€)ÐÝê~-Ç ¿ª¿ãHBh5>¶¬Ù‡P®y@SB­Ìðì€a®ó{2gW)’X1º“ŠAcР¢0Ñ ?ϸöðAÞ&Ã,9GZïšG(z™Ô‘1{ *&«šôoÚOFàþkØÿ?*oÊnJ?TŠ»3³{œêt«nq)TÔbÑb¶zŽnàÛ Ê·6ší*Š`áï8Þ»}4_Þ…¾4­‹»8êÂmðHïÐëF-¡+J¶ Œ«¬Ë'bßÀ]¬øŽ@J¡à!à´™ëLsy­°Œp’s: E!f#…(#‚ûw²…N¹iÔºBWÌü1¢û9º3ª à(gAcü½ pjqåÂÅcÝ&Ët(U¥ÝË‚ÿ&³ªI0ǽGU{/ŠÂäÎó?hx>M` (æ¬/ ·|#³ä}S¼í˜©íÖå`ÕUpÍÆ (E0,e eŠù|Xî`f•YÔ¢|;= þŽcµ `û f.Ô…žFÏ¥„O8'ï3§áüU <ŠD Ÿ¿Uràp¹ÇÜ”LÐHùÐd}¡²÷Òò¿{¿®{g¡mÀëö‹fbYâ˜NjÁG9ÖÜê¹²€„Cñ šÍ±rÞnî¿v¥=Ônÿ¾@ç>8A=9VqË«[™Kå.Ò ·ØÇꓘŸu„õgÁJï÷ÿv ßåjW}NÅØZ Ã.! ì…1~àNå*Ô?’漎K‡1ºw‹‘œËk35e2:ÚùÇT]ž –*À-³&Ÿ5[0<Ù.µML©Ì€ÇÿšYÝ’›D× iÕc©Á1úµÂX¸Ã;Ùl¢"ÝÇáÉ{Á®6QŽrsõwI¢·£Ïéö1™¤n›¬íp ¹´ÖvöXЋ4Ûptr©“N°0j6yA´%šÃ#b>Ù Ð]Íþ±®­¯ ˆ»˜<íI×…\©í6óÒJVˆå+4+¢›UØ© >Ò¦ z? íÜOp¬ÚP‡;fŒœšˆHJSwè~LÉsòÏ2x^ŽJÙ«Òñ1X;yŠêZi¸#ôÖÌ)æÕ<Ö³Ä -,ꋲÛ‚ñä)æsŸë—Ÿ7¥}QØïftþ²>Š¥-NÔ n–$Úæê (’óÐ%W-ú1=6_¸Ë©pŽáûz© SÌpÁ¯ÏNœE|$",=ÿ› Æ å”GÿLÝŸ®X VÿèÈ¡o©”þsCOó©—®Øbí¨ã¿p¿JÊ:{¡ÔáÃ|)#Ó…g>5¬xeã‰ÏzJËfŸælèUfÛy{N¡ˆà1x{²»‡Ä~Šø+ââdÆ>z]{²{¤@-R@JÖv])õ„)³x?ÊCDJ79—0Û9},Oð¿ýê·(ãe@¥xYã£ÅMkíwøñiµová;2ôã5‡;Ý7%HÅÎí­BîïLø´Zí&æ$ŒZM´‡âùðüÕ,!€oTÑ^4í¢v¦ä×%çqÅ\¤ÄfD׿n¶tîésÒü.}èû®Þz¡Ý­¼µRgÙLºá[2>>‘í©ú;½Ñ LèiÄaÌäm%£ÿ#  t1½keÖð™ ¾5‘ ¹­ðÊb3¦Vo‡ºÙŒZ0‹¸&¦hçº5ÒQå7mU¢|zG5QëÖv†Y#K£U14;!Á¸¾…l‹~FYd‰)'}j¿õM©¢ )¨]tËŶW¬à·Ãh^žk)üä¸,Ýf"cମ&ˆÍ,$9ƒVñ:N¤ßBá`yÑæºsçúS}}=ðŽ?PÒÃéÛ‹Ÿ†ãøÁ¤ü«Uw ñT©Y4Bw_gé” (‡7vŒ‡I¯þ SçÞÁµ`¯Ï*¹ƽ½3G•]@!g_H¾Úæ)f‘¦{<\¤û¡¹+Un¨D÷yñFH¡gd]/ü[òX!ö±¡Ó’•V8èâÍf\H9±C {uè~8sÀÀ¸‡Qdï‡Ã¬¿J ¶=’ÙåDIK ƒÁ¼YW¿^íÝãì–ËÍÁ‚d‚ŃXCy?ñiK[ªl¥Ni²‡³ CúhÅ'²MBQ•ûð¨Ü 4ËžGyÏà9YêæÿŒ9Y‘5ËçPØAî-sì› ·tMÕŠþÖ(ä¹x·¿Pk9™kî™ÝcîWI@)d.ÖY •[¾ÅÔ€g²^[+@йA•ÒÇ%°ßø8¯ve‚Xä¡aºéÐå-K0'Œ¯ZH'¹Ð5K/NbúÆJ:#ÁûàŸŸiµ†Å@Ä£‰t­+™ä)lÉÓqE‰ãL²žßÛìkÐÓs8Ï‘HøöDü‰àìT¡ õ£OÚóZ´²”ª­?^ ‘ÀX}Qò”IT@Á4®6$ß¼2m©ÀnŠüþÌ·®äÆù‚ië(û‹kiƒNtzÇÅß O?<Hæð“}c 2CÍQ÷ß 3ÙþAÕA¯‡pù0¶bÞ€8ËùÿüHÎêÝ6‘È:O䇻AJ=ëš¶íSªÒšædÞ%=ž‚…í¾ UDÄ6tŽ‹¦Ü:*‰ûJ߻ב·¶’ @ËsRA¢­±“CÄnÿ”ûä\$~rf<®¡éÖ ½#JæQB~9–¶Ö1ªÆâjÒACyÄ'?ÉàÛÖˆ·äw÷:Áî)Œ¤Ö› ¹W—Axÿ((T&Fc”ƱMµòp”º§3¤5­¨1tiÆx‰z{|ù=ín²Ìmî/#¡Ù”{-«÷F:³ ÷¹n%i´ØX_v£ge¹­Û À½Á™ý¶Kãµ²uáÍ=p»Í£è†øòs§Û¤à*ï×5ï{}$ŠÞÝ"9Ó#Ë•CC¯Í«#™ï‹U—g¯VÿuÞ±mWEÁ*à‡2¸äA×ðuíßêiüN8´òËFídTò‡Á ¿Pf¢ÞúìÁ•áj?1ÑIÃÌð‡9:')£õ•‰ “iÎA%¹6öŒ÷>ycˆ›d°P?à çW4WžïÇɺbý‘o|ˆ/ÓžOs©-›šv0æÍȸ& uþØ¿2 ³3P2„_\‰.Â¥MKCÉ·&×Mââ´þ#»´ÿÈTfÿΖ|÷I,êStß?–@@Ðv\Õ©Âí?E{‹"ý—JÞÇQ’ËmžòŽÄWaБÊrâÈCs4sÌ£-4έ:Í1½žÁiŸ·ü0žj>‡ &ý‘8Ù`WH‹ñº Ü1ø”ûPÜÑÒè“ßî zŽABWˆL.šÑã5ç.1º_¥ ðJ§'Î »äAh E²¥$¨+wJ~Wº‚{zVM¿ÿ׊éFjêÖWb—%9¶9æØâØ2t·ÌÀf?¬Û0×äºä6ñÈèØ˜8꓃âCd¬ëaÖ*½œYÓ"=šš7Ò܃‰ûiËÝËlÚÐkf,b² y¤¹XK¾‰±mɬ7.¦cuÕ¾öŠ*7IPu•½i`Í7Ï<^8Anx èáôÏË_Ƀd{¾¾‹‘Á¥Íé[ªr ÈàZ4ÒbWÑÕŽ’ÎiA‘ÙÁÓôÃãø:ú=¦lІÓL†³ý’Ž‚ß;—ݼÿØ9!Ù‡ì€ÙF¦ÁBg:ðëÇPc„sÌ5ÍÀt‰DÙ^ëÝ¥ˆ¢à,g>„®'˜ü†>ú•’½ˆ>Hbº™éhÇl<Š,õ±Ý¤Ù ä%á(>DYužÆº=„ÿ­³wa}’Õ2Ú|]·§ÎÓ/£öÐ00ˆ¸<2åx:ƒ×.½*\w²„«=6M ¥›PVhT‡vjcÛ’nþ~°¯Î&ŒÁÑ%†Ž“BUo@wÆC‰by*t Ê5¬öÚ»Wá¾Y¡:z»¾¨ˆÃòWË Õô<Ô(ÐëFö°ÀÆYv¯ 8ð¾ÙUôvüg4_Ê­ xþŽì°pX)²tÕrè:zw—SÏ^.r9úHl4)ɦo¦ú.EÆK}ÒG2óÕvÐ@"KõÐø¶5M<±kŶ—+ªŒEæÓ•Q«Z¬ÅCä·ñLÒÆé3<ÉHQÁ+&Yû¥"ùTÓçL{n™ ⳟfOJÐÑvìÍö’)ê{;¤ŽÃ{ö6|ÃÄG';I¦4!›eȯ‚–"ܘlÁ1Vâ{R™¦05@Öÿ§èÒ!?ÆY‚~c–|èq 7²[³IsEáä<=äþå>Ø–'¡ª‹2‘ÝÔÇ}ª´šM›ˆê‹GÿºS@'Ÿ[¼Û$/Ì2Pá-œÏªtë`kÌès7`j W…KÃòIdSá9zØÉ­Ãó?§lËòðY£ aúøl æ/q,nÍb$Pøl!™Ë²ÞhŠõíWdâR/yzÝv•Ã>³o·egQBýæÆÂùsÜ+Fφg)Bxžßy>ž6× àרžsp| ‰‘ºÕÁNÏ3ZCÓVy'm$bl/–;ì!ÈfATº)í&üà‰…JhÚ+ú.á}J}ðÝ÷§û­‚w­îu´Îe–r¯Ž_ bdW¶?„hŠÚãˆÿdQü“Ë|¯¢Oׄmb¾o²ušÄÍØŒ“ù(o˜ó˜Í 6ðœ3¨zÍ^°nÄÞ…ÍÚ³Õî(‡c¨@¨¿öÀ¥—ëî ²ýÎþÁ8Ò—CJï–‘)_¿¡@‘‡È(Ø ¨žðVê`cÀjØ©8‰TœÿMÝ÷Å/93†šÜäÆ}<°²ýǛ æ5¯Bäë ËX÷8ÎüHTzï%ÞWÊ .»}oãÇD–ÿª å(eñ»­"ô£8Ѝð,\©è‡ëàÍÂûZy[Aj“6ØŒåÏ…fDoç¹æˆyË’É7i†ÑpmàEØZA®Jн&ÓiòϪe€_1¢3‰ç3!(ë7§­Â±_S)î­ÚëKâ`5n4ŒŽ^g¡JqÊ´§šg™ãœ×¨,';.%§E}E»dS/hy&sÌBˆ8È¢A즖žNÌ“e71ò;Ó°&héë¸ÒPw^Íf³.ªæ‡÷ÏXVúQqÿ!æFõÅÒ%™…R›lõ8p‡™‰\$æKIz ãLì“avŒ•9:ÍßwH¹÷ªYšÅ…îA_ÉŒÖfÕ:Ã… @¦rë_DÚÖ”. ]é¥mõ¦dFy‹Îø‚páé"ahåaØ.1s²Ãù7½!®\AIkÆ÷Ûâ¾f¢MÂûЛ&ÏT\¥Éz­=-OO:À µž›o¦&_„Ä ¾| ŠøÓòcGìNFE–&ý ò€ XL7 V±ºÈÕÔ̵/c?°å|{«nÇqpsÈÐ#aÜМ—usɾSýÔ'¾ùýz¦õ3ÓÀ¸ut‰ÁaÙšgÄ¥Ö]›}_‘Ï¥”"€3yÿ9ˆï¢ºÉ©9S /Z£yá׬Ã+Pר‡± [ËJ‰¢ýR¨'\ÛûJï‡ÀV„Î:n!ÌnN8"n¸ð,$ø¥È%•ì ú¾ƒ9¡:¡t€Is̡֯¨³,rÝ\>àzÇŽ·œ.@‚² íé|¶:H±ñì+Puo?öÄ#²`¯÷S21Š…QŸ€OVÕ¬U=ëýÞ*6ŽÀ‚ךָ;Qjè®I’¸Oü“ÍÌœŸy!Œ§æŸb91aéúåÊ,3ÛmÉ žûË}Õü(Ù.4™ÔÕmaF¡\¨E TkÞHß³IžÆ|•/—’«-;Âi)WÆ#|¢ uˆÃœw¡Ü¿¿ Ì´P¯³$Ù]ŽÉ4ƒ ­gN‡ý«]Uò¿$‰¡b6õ¥Ì˜4ŸL\|°±,*×íÊ8j7+ 4eນº`÷ßë¥[‘I—Þ*]G™ £PWIAEŒ ©qsþ$8tÍÒ²@›ÝZpl@§‘àKcÞ’Èì3MÏé|Ý‹t1þžûwáä ºÞ»’Ñ£°Ú¬r©³US#â” ;ígàú¾\.ŒdϦ‰Qu°a×o/ý–0BsS_=¨­ñ„G—¥~Áž´O ú©Ï¼ ÙT{ê^û ËÄ250MbA”G“§à“ à~a]˜à&°9?CEŠìB†+" Z’ÌÛ'Xsº×6ñu¤ªbæ÷(ä ~­—7ù®¹LCÿ‰LÍyÎ=då (FñZÞaSžw\u&}£ÁOÒ¸ö1òóïöVÄYYBÓÈ”±FŸ•&WóËçY¹F²ï[Gê‹Y~Ìu‡dGínZ\+èÌ©2#Ó»BÆ ê¸)¤ê^×°H}×GÞÓz™—,Ä¡TƒåF§D,œ^=>ÄtŒ~¦´EXA•G¯x$ˆ­2 å1S<YGŒz¯³ú—Û!3—ÄÃÂѦvkK8yý§ʬ–ŠÔÃЫ÷mã§;©jõ îÁÙó7„bÝp[ÏŠV_sÇÇp¨'ËÿA&nuFÈSn;çNYˆó¢÷¹BQWaÑ@¦/±v˜_ÔIUþ”DmvI ü…z~NNšÈDP¹L±tµ§KòØwœE˜w)"ãd¦)žï1¥ÁïëJ¦eǬ ½àœ€JÏœgZ•ú?V=qAþΫ˗ñÜKÈa"\ð_g\íSHöFµ&0.¾t·ß$øMT¸k\ÐÊ}o\g \mH©qñBi•É9Æf4D™³ÝOËAz~ÐíýúÓõ¿C-»m¼ëòŸ£yËJ-ð› =ùl0#5†;F†ê¸¼ä0zçGó^A¨ŽóO&ù–ÐNhcñã–>·~[+«ÏÛ0Õ)›†L Žë|¶iIØmà®™SÜŒålm '­ ³r~y¦ýkŽn{s™³¿ÆŒF97|’’ä¯ÙÍòŒ¶m\Á¦8^ˆ÷]¯æy0uªG<â ÙBºhÝBQ½z>ÿÚ¤Ÿ~`S‹ˆžm¬4Az2¦Žžµì µŽl÷µ_Dw?m‰ìç;jA4¼ãÉ l ÁΤÇ|,_cG{ÌúåU¶£Ô_óp©Ÿÿò¥=€X$%Ê7Åù¨%í× ìÌK¤­&0ñ;†øˆ+„ÑEV@¸º±†Ê…Ê„]g d†¥2õ‘ô¯hi¯d¸„<~f¬V«—7/F¨sDã/E†Ò#öê,›½{Ò¼Ï ‰ ²ñK¦ºùáªãâV/*±=á eÉBm~&y&x솗›?þ(kšs¯p»?_IÕézhJïe™Ñ ¦Îg–· ¶¡Ü ¤ª'ËeÕþ”hS3*.ö½20ü©¶Á ôî£çÞܧ¥æîÙ•\÷BH‹,ûÑ™V¢ÿ‰Ã³Ý·f,ßô¸ëà+¯²¸»j«Oc’”ô³J[Ѩü#^ `aÿ=v^$Ÿð1çrK¸pìàu‰ÑO‘|Ãï[+z÷ÅN±i"w³l}“ߨ#i„—Á2¶´Á´H a}¿ä{}2"£ ø È (~Ë‘ö•RR¢AÝ`›` ïž;‹ ^2’”™¡§Î‰ØØÑfÀ0î’dO@.ªË&0ÖÊ‚ùý¾°S¸ªñ™ƒÿšôO!$éTQCªÖ*¹~ˆ´ÆÃä?Snµºr<ü‘!UÉIQ·€¸ ¢©_VžšoY>ÊÛÖ¾çG®ð¢ž>µå­¸š¾ä²½xÀ”®Ô¢>´wrí^«N·ZìF݉kªxzº`ÿ˯mÊMxs5Êd “¿ O•)KøÔ­!¬ŒkÏ1‚r4V¤Ý)PÄòÂ00E\ˬƽß°>’ÔÎÉýVÿ…Y‰GŠ‹茂‰|3"X8¤ÿ±Ò"AþsÙóðÎûzÈ™¬ÿÉ;Š—zتPÚìÑBš¢¼ä|_Pü]cŽ..ó&.!s-e!Ãîb2”µ8®@yb}g„¸v0é:BSì4¢z3úÖÔZ¯ÌRËg!]“ž#øÉا‚Š –MaAa•­k–wyaëîÿ‡‘ì,y íJKo :îWP’§ðz¥àúL÷bÏ®˜ÇìzQ!“[!£Qe£}°Óh.Uùõ#}‘`u® ®-JS|r˜>ÜÅâBcëQ¢"Ú1ž¾¹K’í}ÿ@«á‚Âé™§FDÈŠ ¡«Ødbþ«ºãd%âÊõøñ--…ºXl–T£rO„ÜòDŽ)?p¡zß)®¡€ŒŽ@ŧ׸¢±Ô É…ˆ€³|ñ~MØÇTaîj"™#M‡è?ßb¹_ç[y@L2X$(Œ¬ˆŠgæ²%ÄfOaa%ç Žþ„ðh»"'C@Ðç«Âc5¡çñùqi±éL•3ÐM!¥ó‰­8­ý÷[kƒz y¼RÖèð”²Y?úÉÇ¥Š”‰€rU˜‹vñ·Jm«¶µì%¯…·¢™nP°#¸µ÷ßdùúM<°³¸‡T"pØÝßïØš^G’€J iþº6ˆvX\:„›†C»êRÿµÊ¨ãЉMÜ™$ÕW©¤Ùs3,kô…°ËGòRaÓe?à&’Cbî´¡›ð¡„üJ²:êFB%Ñè§µ¿oËé Ð&†VL±”8еc˜¢ÐTïíD.â fì‹Ù¬H¶7€PÔ¤¢_ º{ ãïY+,1taMèñF™“^Aø‘ó?…`«÷Јݼ^ÑlP<µÿa ²9Kš›’C᎔ïûÔ4Õa†IðÇÍ¡¬ò×!÷ðcyRc®0(Ômv èf‰”I¶Þ¼•ÄE;‰L;%->î¼´!—X¦Eä;D`»¦Ÿ;Zá›Ù±—úN! Öc$™7:¡±Åÿ°úÁÌ÷_i‰wÛú¹Î0‘S†g¬‹8Ø0™Ê<í¹gåu£Át‚a92üQÈY•T‹I” ¾¨'ÄÐÕ’8¦‡1OêÛ¡RÏc_Sž/[ë¿‹Þ‘pŽàS!šf@c3‡«'táØK®gñº4û½óXùb»•5M”,z V{ S¨@OÑÖ.™Wm„¯*ß› 6U!¥DçB,ûx1öEîÚò\ï²,² @íúÅd1 ñÍ!xóÏhÙy±Å }‘ÙP¬XJèIø>ðžìÒp%~² “d4V¡ç–§N/\µÿÝZñxLIjŽtŠÌÍÈdâ‚R>MpÖeÖ›k¢;H›úÍš–`Uú Ì|ö·ë=‡sį u1ûsb…Aä8t’Ç@-š¸À‚î‡õ¸wwB‹U…³- ËyqNЬï£è¶?ÕÄcƒ«†4äÿÍS¬ëzˆ~smd fvRiÔ(m÷ÆÖÁôBžÍSç°ÑSÇê­R{›Á†¡N]1€³Â…wÃr5¿ûa¸~B‰R&cž'$y§q¬36E–tïk­ÙD ŽònëDGªâýÅè¡\Aµâ‚Iâ;ÄŸF$¢,¨ Dí¢ÒG"±…ŽÛû •'ë„Hë û¨Øù0ç‹CîKQŒOÞ ¸1Š™5 ý[›ŸýéìÄZ:ÏéRóÐ#êŒWÁÃüó¯¢ü\zþùÁxp”ô}_‡@êgŸxœ‹NPÙ € òàg@øZL¤H»Ä¤_©+§èîë‚࣑-ôØ@y=“ IbÝ\§ÒÍ‘œÙ%ÕÝûF U¤q¡™ëû“jpû†ŽvÄ·ýmõ0Üç?VC?·%Ô–bË£vÕÔk+®ÖÖzhD¨+'Š2Ü`1¾ùn­â•¾ ¨D“iN˜å9nçrœ-hÉ3/#p¯Ug{±ýºò4ûìÛëÎBC݆҂—÷”¬œ ê–g¡‰ŠÍ‘™^´P¼ h¬¥QÌÙèˆE2Ö†Âe%K/@’NGl·´%k¦Þä_P i1[9.v9€¾æ’d{=ÇV'³µn¬£a¯Ãüôà¼ØŠc£`ùXÇð 0oç?–œÜYØó_.6·8º‰õLB›ÑQ$ó&r<ü¦._Yµ!7™ŽõÞ¢ILp€äÇarÔ¾æR(ƒ}Ã1x 1UÌ4"¹;Î9YsBØ?Ë¥¯¢¦øü¶øgß#_×v©vœgú(ÊqÆnG÷UVñõü[*»HMÀÊaŽjSî'缨Á¡N Ã­ÔøgÞp:v8C¤BUýéÛ7ò¡ŒîV\V`»úëdõ¾QCf×ï¡øAÒÖĦN¶#?cÛéyìXÎÐYáil vCPmÓ´ßL,Òwfü7LŒÔ%TùþY/{e}ŒM…°…š}œd‘» å7#•:ij‰H`80 }²UÛqI,¼Œ.õŸÂÔˆå8i±}6Ä7üU/¤cqŒVƒ½Ø€ùA;2±dÑZã¢r¬pú?÷Ú“ñM´ÄÁ)ûˆØ«k~?Ž—y¯²¶Ñߘ•Ò`õ!žÕq›”WòUú.Ìx¤jp$•TÏϨ>ŸŸìxúêí¾[á».ŒAÑêQüm̘JWêeÊh@±*å–Lä[…/1óÙFüªí{¥à©Þ"ÍÕhQ«ñRÏvÝ=÷™÷§ Îbœœ@ŽÆ]‚^ ÁóÎÝÄèsêäEŽJW‹¶äÞYÈ[“Ó>Â>máÅÛêýXþ.ɫ㠷¹@Òf' òÀI»èl$ ¿ ëÌÌÝ_ ^Â~umqîP´»+ŽçAr0BíÒ`¹6Ω|·×]ŰûÎ)³%ÿãb@pâÊœ*üöfƒ1“ÁTh­”N 9'ɈÑ…/b¸×(UÈÊ®Çá'nïw¹ßUÀ™$Ç}NÕUºAÝŽ"Xâ 'ÔC¾ˆhûrŒlñé=ÝGµÛvbÉ;¶4¯ç;aÞ˜i£Ÿ^¬c â£]2Ú'›úD’àÑÄÉ]nŽ^$}÷’Øv¢,¬tŒEî ž¤¿R¢DFwÏò×h€þhúV‚¿¢ë5ºðcE²o²xGœ‹_Új¸žAjÖz ¼ºV›FÙ è t¬ï<ÄðäÎä÷lvkØ–ðµ´£“=7O×ö´óo^m·êuºº.‡OÆc‡ï$\&/À>5o;@Q —yæãø^»¶y`b°Iuï4Öì£ÉoÓPºy*I°²Xf²è7úEN¢»×á…Ôw‘o;¾¶¬Üö B|Ľ*8×m¯ô¦ð…²)öÞÞe/ÞD±p§=GŽh¾´ Úeù¬Èµ°Ø¿L+—JtâÓ}ÈžèÒtPmA2Õ“¾ 8–ˆL‘‰ŽáÓ”¾Þü@ ´ÁĉóÇçìl ,1ët+ÏøÕjwŽz#él ~Ä PS©ËNØÐaìiææà¿qïÖ àÿ ÌÁ˜8x]0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2099 0 obj 14775 endobj 2100 0 obj 1786 endobj 2101 0 obj 12457 endobj 2102 0 obj 532 endobj 2103 0 obj /DUKMHY+CMBX10 endobj 2104 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName 2103 0 R /ItalicAngle 0 /StemV 114 /XHeight 444 /FontBBox [ -301 -250 1164 946 ] /Flags 4 /CharSet (/ff/fi/parenleft/parenright/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/W/X/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash) /FontFile 2098 0 R >> endobj 382 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2105 0 R /BaseFont 2111 0 R /FontDescriptor 2112 0 R >> endobj 2105 0 obj [ 683 903 844 756 728 814 786 844 786 844 786 553 553 319 319 524 302 424 553 553 553 553 553 814 494 916 736 824 636 975 1092 844 319 319 553 903 553 903 844 319 436 436 553 844 319 378 319 553 553 553 553 553 553 553 553 553 553 553 319 319 844 844 844 524 844 814 771 786 829 742 713 851 814 406 567 843 683 989 814 844 742 844 800 611 786 814 814 1106 814 814 669 319 553 319 553 319 319 613 580 591 624 558 536 641 613 302 424 636 513 747 613 636 558 636 602 458 591 613 613 836 613 613 502 553 1106 553 553 553 ] endobj 2106 0 obj << /Length 2107 0 R /Length1 2108 0 R /Length2 2109 0 R /Length3 2110 0 R >> stream %!PS-AdobeFont-1.1: CMCSC10 1.0 %%CreationDate: 1991 Aug 18 17:46:49 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /AJLCAA+CMCSC10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 66 /B put dup 77 /M put dup 82 /R put dup 97 /a put dup 101 /e put dup 105 /i put dup 110 /n put dup 114 /r put dup 122 /z put readonly def /FontBBox{14 -250 1077 750}readonly def /UniqueID 5000772 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å– ]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 0)xfáÍ 0ëv“7ϱ9 ¥ÀàE(O&k¡{ä‡Ç›”úÆÖHF„ſꇼÌwÔ ÑR^•ãq&AŽÔ›hF‹8¡NˆæŠ&{˜o—i¥¯¼(^[ެŸ’ol WÙÃ%®'5,Ù.V‰à!0‰½&¥äu%ËŽ«ªKx¡Zê4pX‰«:ÿ¸•;[4‚å+ú @c ߌ Â}s$)žé€èPòͶ'–/CÕ¦xÄBCÍéxS½Æ«Eý\ ­'M¯‰’ŸX<ÉÌÂK߯‹’U«¥òm-Æ|poq•wÖZçF¦ 0@æË$¹Í­‡®8¢ûðä«Ò§@ñçù]ÈÊPËØp-ŽVÐÙ/vÎ R«Û‘ã$8Ò»óæ¤ {_»CxÊÆí)–÷`mÉbÄýâÿ2'‚ÃCßDÎÅÿ¥\c é® Vsup“ýͰÎÔŒýž C ìq6 ¾ 2T‰1ûe|jÔ²H*} t—‰.ž”-õŽˆÊðÈ"ók÷Ä5¿,h:J.ôËèX ¨­4†Z@0ºv)FÞöžÊE–ÖäÊ«ø@‘"©jKÇŠÐrþ·Y¦ŠD¾dc‹m•!Gî~,ìöf\ÛHÖA«Ó®´hc†éc”¹ç¾ÑÑ>SK‰}¹¦ìpkªàkâþÿúRX>›LÒÓfU—8dWNb‘䊌b ?g›~Ø8o|½R<)Cì©”ÊÎcÓp}‰Ò% :myÿM·ÕÄM>í­C‡ªfqupа¬üYŠí‡~}‡wȇôM³ŠN¼Pþ-V)útø`3<6]-‚û+‹Iå‰twQÜKÃ]-¯›®3#}ÈZꜰ£²JÊì P5ˆ-öHn}³Eœ](}0—Òš5Ï·rMÕÅ÷ÕÛÆ3«¢'ÜÁà­öMo¡Œ÷%¹SRK-+ù«jsËÏ$³@èl°P¾Õ»‰Ù”µ‡Ë5æ-δs=ŠD:‰nÚi !ü†‘ª\EücBõ~qÅñà&9[­D‘%•Yy¨'$†5t׿h£Q™5ýѺÒTlžÔ„µR%oLÀ?k4iFMªš£"Rô{|i£¤Ê~_ ×εṴ̂ù—ÛHÖxCùþÉcJ¡o>Ūô¹wˆØ$èh…´ÊÕš¸F¶×ÄÖ«5…€7©xφë8‰á"ê tgŸ0EÛ3ø‘ÀSª —}éPýÜ×ZFéçîÎ#ɸ)<ëx ,åÍæWS»È55&´ù?ÕsÖ϶]_ˆÅ#ïåå[CÚÄ› ë«Ç"„rrõb"ì“É*Ï|pg޾¸˜žT?¥ "Ç^å–˜gFì_‡Nsw¶V"üDõ€¢˜Ft÷lÍ©Ô× 6sÏíó´ýR ؤ¹Þ&,˜„¬,Ú®JµvñhU`ô ˆ®«JMí²$Ï–eKAôCvÚû–MªèYw¦ßú¢„„G{I#ϤËçñBnÛ1±”I+6ô“êœe¼a·d´É¶~C>«þ]çœÚEÄš—vöT:.„hÕj»¯?l²¸ãVGºkÚRYI(‰Í˹CdZ3 Œ YºIc ×Lp ¯sýð²ÏÈå[rÃ7¸7®\ªPý÷*ÅPß® V+‘×·A2õU­œrئŠ"Ålûk æH²D‚¦E !&a¾iqVjì·x5Ùøa£~@e!Ðj÷ýáö·§®zºÔ¨)‚ŸÐà ´R3¾··½ 6delt¤{+æêz€ù¾¹Á-|ИƒX¤Wð[CÎÊF„5‰Û å `Å(Út¶Ž"Ì•P´wq,¨Ã*cþ”ÆÑ®‰!_F½¡d|ê©ìú\óC%J¢ˆpø9mÿz<’ðáÈ3õ%~aW¤}?+–Ø¡žså'†wËp*S¾ÿ04Cî´’cû¶Òn%=áuú¨d2Kúåá±"úÈôäŸ*?OÑÏ6üœãåÛ>†(bkÛWùR'ì~ÛÚ$«£µÿ ¹ÕfEÊân¿Ô¤2þ½åÜ„§zÀƒÿsC¼¬Ææ "<•[6µïû©Û™"ñÎÁÞ uMÍ[ˆ¢ïçŽ8‡-•1N¹ Ib<Å?½µWí! 癦!­ì£¢¿êºK<%:ijϬ‰„KSÈh@—ówí!–=#ÈÂg˽¿¢Ã¿å¢æš…!1¼.‰$í囚S£‚PÄ>ÃÔ‘Œ ¼Å‚Ò'úhIó!ÃhºJže[ yhlGO à4ë>ùª¨‰áÅ' {ݤà‡§Aæ¹0ÔœO£Páè²[~àA±Ãd ûÞW‘‚ô‹ö[}Òj Øü|ú-Š¿ä#L²+V†çÉ)KC¸§¡æÀâÔÌßC9b¦,ãpdˆsýu ]yÚo[¯t”†·–÷:×ÊõT8¼d =ã•Í*åX£G„1Ö->þK¹ BÜ¿Úx'\6Wñ ú©ë4Ͼ9#Fœ 㺼â.6Öaè51´Rø´S^¸ðw ãP0E­:4!hQׯøy+¸Šî ]G¨EKO”ÝFH¾Ôò™¸óßžu;¥)Lî'§‰…•$øõq¦yUØB“§ú%V+:úýŸiÃVº°ßÑväáØ5§ÊË‚5¬‹€hpWoX˜CC‰[O[Éî«3Nª1R£}e:gàŽÒ£dæ[Å&~©0¬ºIvRݘt**®o°4ÏÍÒÛ×ÌÏi$,ÀjKœó¦{vôEG oZ‘93iœ&Cëã˜x®±r­yyßÊæË(û¡²`;æ] "Ý‚D¨W•üï!I)¹!H \ 5‰¹–ÜM;XÄÂ9SRH4´0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2107 0 obj 3893 endobj 2108 0 obj 880 endobj 2109 0 obj 2481 endobj 2110 0 obj 532 endobj 2111 0 obj /AJLCAA+CMCSC10 endobj 2112 0 obj << /Ascent 514 /CapHeight 683 /Descent -144 /FontName 2111 0 R /ItalicAngle 0 /StemV 72 /XHeight 431 /FontBBox [ 14 -250 1077 750 ] /Flags 4 /CharSet (/B/M/R/a/e/i/n/r/z) /FontFile 2106 0 R >> endobj 381 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2113 0 R /BaseFont 2119 0 R /FontDescriptor 2120 0 R >> endobj 2113 0 obj [ 612 816 762 680 653 734 707 762 707 762 707 571 544 544 816 816 272 299 490 490 490 490 490 793 435 490 707 762 490 884 993 762 272 272 490 816 490 816 762 272 381 381 490 762 272 326 272 490 490 490 490 490 490 490 490 490 490 490 272 272 272 762 462 462 762 734 693 707 748 666 639 768 734 353 503 761 612 897 734 762 666 762 721 544 707 734 734 1006 734 734 598 272 490 272 490 272 272 490 544 435 544 435 299 490 544 272 299 517 272 816 544 490 544 517 381 386 381 544 517 707 517 517 435 490 979 490 490 490 ] endobj 2114 0 obj << /Length 2115 0 R /Length1 2116 0 R /Length2 2117 0 R /Length3 2118 0 R >> stream %!PS-AdobeFont-1.1: CMSL12 1.0 %%CreationDate: 1991 Aug 20 16:40:41 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSL12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def end readonly def /FontName /CNILPA+CMSL12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 44 /comma put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 53 /five put dup 56 /eight put dup 77 /M put dup 86 /V put dup 97 /a put dup 101 /e put dup 105 /i put dup 110 /n put dup 111 /o put dup 114 /r put dup 115 /s put dup 123 /endash put readonly def /FontBBox{-56 -251 1102 750}readonly def /UniqueID 5000799 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å– ]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÖ¨ð[G¯•ï(©ÅaÛܘÄ|õUûÑÎ÷8ï¸ékKaÙÁ¢O_Ⲟøž¤2 Ëã"«’nºÚ¬ýÅxG@˜*Ü–¿ß5†øÁ.onX‹D"mˇÞü3ÍÇ9ÎBóÍ9X¡Úg#£¿àüjÎ8•i`à¢ø!›Ê0µfšnôŽOÃ+¼ÃÊ|ÂÇa]¬ÇqåŸÜº0óI²¾ôìkE]#½îÆi³¿RX…{”+÷$`Œº¨7Ë’¤r¸”!ÔºbHÔô÷ªÚNî´³ÕzL/A·æiš§MŸGC¬h ¡‹V{½Š+ÌêÁy\ËQˆÇ|['ßñXYAÍ&—1”xžÙµ'‘6¨¹ÐÙ—ž^€ùZ"8Q¼àë¹OÚèó/è‰wMrúáyõ¯98Tû©ssKÊåMÓ=ê0±¼ª’ÙkÛÆ®•ã`:Ú ²¥*Ýù5þê§YQ]ó&ˆÐé[7Î#éôZErv‹«tdØ¡¿{ïíþÄärogŒ^/na¯žZ]m¸Vå8SX‰öÃa¤šl6œ&€ËvšU@Õ¦$)ÚîN*õ—Á-¯7³Úëfº”)˜­Ýcß:ë/ÄÃC:êüÕÒá»#ÄDÔg•J“×1uB=¢uH¾‡¨Í¦Gæk]‡êmÊhˆÇö¡óƒÒpÁ1(µãõrÊsÄTòíùÕþåèÈâ_F ÁÑÅn‚ܸr–û>Ý|×3 ™©ûwÝCÌfE¾$Ð*Î+úK½¶†1â÷Ù`¿[W¾/EöFqn³=xŒˆßw!ôÓôí°=<&h·ã„ ¥«[;{0+¯‘£Ž?±nIG;Ъ}üo…ÞóÇ8Ë÷Ø`búg–ÁÌX¨O4j+ElýŸ¹Z]ÿ¼ÃÈ«g«ñ.™rn- [é`Sr8‡ï?Ë%M›™÷ò*%mà‘©ÆçùJ}ÚÔH©X-¿ 'f÷Å »s´ ÜàXXŸ–p°–MÀ0 µ.ºæ}+›kͶYûÆÚÛ’EØ&nð6k•‰‚-;OÖ‚¹€vÙæYÛôjTkˆ}ƒø ðU×@ˆ"ˆMhzpP,¥Ø_åw‘ë†0Æz2ý™gz~ï=òÂ&]àîõ[›Ð+¬[A¿§!¶ÛZõØ_S$Ôø£‹ •yþ~X¶ ­)eGhÐÙûbW§"!–RºµN¸®NªŸºÀQܱMM1ÆýÔ¾Žÿþɉ#Ò.6I[ Y06ݰPÑ.×.žË_ ƒŒªsp®×B òW–t@Â÷B˜þ•üJ¾™'yÑO·[ku’úó,dmÚa‚31Ñ¿îbÖ õ®X";pVb…Sy6øÓ¡Ö›:0Ge7Zsoð!E”#6}îµ< ¯¨øã ØíÒ—œ®£G”мÁ²ÂQ™6> œ0S%B,1Ÿ¶òåkðY<$ðÉÔÂÀA„iIèìù¬¢˜?cÕ#/Áy¸˜Ë ¾³r¾ê‹:ˆÕ…ìÏA—ü4[é½úþA ÃL¾U.°:H)Íú2ÃÓú’k7LOÙÓ*Ó8ÚV²XÆÌÃtT÷¯ö¸¨h½åÿCƒ^×M—÷šÈHK‚É®úÿéæÉô£oqM& ËëÒ´ç±¾©m©tv"«þìÎêøÎ=j:®Å=§Èð(Û[QöÞr}èvEµ¯útbÓ%Œ“y¸ï—y›z­³ @¨,k Êþ…¨d|æ{°uúˆ04èdmÑJy¶žŠVÏ®#ÓàÝ7/ü…­ÔŽ¡¸r¢”m«5†Ó̽{}ü!+Í.€1I†r—-œe‰®x‰UnGn?§b8•–kåÓÝkÖA½¤/ ¦ŸTØ&ÝL¼ƒº¼rQþö€ÚkŸWò€{dß’(Ì¡q* ÙyÝ%:Or{–I,yž_?Îd´ŽlGQý7ëâäA³ÖÍÖbÂy *…PÊ]:‚Mq¯*«"¿‘]¸)>$&Ÿ†ëI±âj«€Œ{Ñý«‘óé|ÏË ã7ê<¶¶ù•Éi«ñpĆÑñÔVÇB`Võ1±üGyõÞÁå¯KÜCITþÂcok»Ï³ç&0[yš ÐMpN|{½1?ÉzP—O~ñþÕZñ#ÞÎâ\O<½ Æ5ÔCšº=ºhYVÖUÂÕUº{'‹10»¢jOUÄA­9!Z¸L"iìê›m<(ü9—b¯«ðëMvÄm+1jÏ2’çÛq°Žô×â>aP*ؤ¬ø­Ì?wWÝ@’Ÿ™©8Â0½®¼{ä¬{ì¼+aÛ€œšÂ½˜|M ‚ö„ÚÂEü7êÔî$ÓÅ®]OD-!yPl¸ý|Øß‚:Æy=ꢑ"\z¥`ËùeD( ¹×ª= VSG1o_le”TEÀôJùíZ}aË5øšž´då•PÒF"˜,šù_uñd³pÑ=Å[ɖÆ\h°ûê é†9óUö$!`i|…ʤ‘Ǹ9³> endobj 380 0 obj << /Type /Font /Subtype /Type1 /FirstChar 0 /LastChar 127 /Widths 2121 0 R /BaseFont 2127 0 R /FontDescriptor 2128 0 R >> endobj 2121 0 obj [ 676 937 875 787 750 880 812 875 812 875 812 656 625 625 937 937 312 344 562 562 562 562 562 850 500 574 812 875 562 1019 1144 875 312 343 581 937 562 937 875 312 437 437 562 875 312 375 312 562 562 562 562 562 562 562 562 562 562 562 312 312 343 875 531 531 875 850 800 812 862 738 707 884 880 419 581 881 676 1067 880 845 769 845 839 625 782 865 850 1162 850 850 687 312 581 312 562 312 312 547 625 500 625 513 344 562 625 312 344 594 312 937 625 562 625 594 459 444 437 625 594 812 594 594 500 562 1125 562 562 562 ] endobj 2122 0 obj << /Length 2123 0 R /Length1 2124 0 R /Length2 2125 0 R /Length3 2126 0 R >> stream %!PS-AdobeFont-1.1: CMBX12 1.0 %%CreationDate: 1991 Aug 20 16:34:54 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /JKBRSN+CMBX12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 13 /fl put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def /FontBBox{-53 -251 1139 750}readonly def /UniqueID 5000769 def currentdict end currentfile eexec ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsм|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!Á[v´Á›„67XFšlU‡…²&3!R˜q©ˆ4‡Ýw”’Ýσ~j‡¸+Ûño¼uú£ “þ_dÍV`÷Kî–y ãZúÌ÷±€]¨Šãu M™YŽ­üb[Üœ1[lòŒ›Ô'ó,t\™®¾pÚ®Ôž¤ZùO4ªG‰J7 iŠº½¤!U±¯&Ï·Ý¢¼h`ZNöÌ£ÖhKGÿµˆz;íà´ÓŽº¿ ˜ #1&ë¯(›)$ÿJ3K…ÙÖ…Eý­´™s±èjF¥¯ˆfÀ"P$Õå†-IÞµØìË•ÙBƒÅ 6=h¤qDVð<ã` EŠkÀ³ªE“NrraÆŒJGø ×~Lò{6ö¶ó¬IŽE6ùà¯U'õãÌy 0„gK>&)o>2\U]$XWЉç-1f£Å×@³«±'ÏB 1mùW‡= LðÛ%§5t¤Þ.O-]NŽ CTÏ4Û>&wÁ”vN­XÅ…ôžñCþŸßÙf å ›×¢¨r™¼1žf×¹VãC¡›“È–~äqŸ0 þXfðÖÚ^Å^$Ó·ï£%ÔG7dé›È±\ò¬­úlFcè0…]g<銷_‚Ÿ¢&«Wð{>}N|ãÓ·ë 05ŨÙú4H4ý¨ãÜžlGž>îš TÉ_¤cÑœé6àYŽ1— §»nUÏÕïr®Á-š–u$y£f³ÍÒOσ¹»4nŽAy’غINz+:Ó΃«µÎƒÐþê}=Ì|z`ÇvÙ+™D{.ô;FW‘LEc6ÎÅåoè,Ïý e&ØöŽÛºHêà–ÐíÎת¥¾%&e‡µ+Ú o=—çͺ'¨aç9°Ü®;-Ïsg}¶l3´K?ËS€ŽEhAr;²û¡}5Ù ¼Øõë•·Ž7_Kß”Z´Á‰n+€½µŸç KÎw©$ZˆdëòvÔ¬|ÍdÉ-ª‡½@IV¦¥ñ ó‹!š›xƒe\9ÕÁlCó,—±µJ$5ŸUØ/ÃR‚ݺöǸ–S-ׄ69è0°ø¬SEŠóÚ=ˆ_öF®²ÇìwœˆÖtÃî-3 Xçkg„r˜aÍÀà.»ó)ió„•GÖZñæÄ*rA­ó›dï‹X¯˜¶Þp"÷ÅòzXœß¯‘µƒ´c¼Û!ëÆq,æ ø !°$à‡H5}Ô´ÄΠ‚Ó!†í0‹&v©ü´Pi`ЬΚÃòRÜY¼P†‹7Ù—Ë økÁëmñ…ˆ_¿`Ž3cç&è W.8X¡ÐÙÄȇ;2F7Ä;­rzæÊIž-?¸`Íam¤ÃoóAyk®˜Dz©XmÔf›80¥’štʪM£b&†Cg¶Ê͉R—ÉÙóÕz§ÑžŠ­q §¡ov.Ô‘n€gbF÷¡çæÐE¨•†Y¼ø¥¾ÓÓ UªW¾ZøË[»Mé’ÍqUØ8±BÄ3;¶¨.½KFX1ó]xØõ|3¥Ó½ˆòÙª,“ûØp™`¯†uvÑ/tÍFhµhOv)}%¶ÄœÄ‘…ÜÀ)m  £;\\;ýl]¼Tc`:h-%Œðºqg ê0NöGb«º¨Lð­ƒÆšÐÇNœ8sfàiãE{}‹]TD^ÑÒõ Û^\€W3&ÿBGˆÑjOŠÎzRá‡i7ðM»4Aë]4E(•ãÒeììÇœ &Ükùñ¯ü/iê¨>¬S €•,Åé’íM "“óc€\)`Ôd$‰ûÅÀ«^”òÏ\ƒK–‰TÓS~.ófÑx@×NŒþ2íØ(Ëjs i¤…& ó„¼eô_ðâð…ÔØ¡nõ`À’ÿ7CMúÌQˆÛƒZ¿k¬=ÔmïÏâÃè ‹ia%‡3ÅJ?3°^!ôuŸ§øáx;'UˆiíÓâ _2=Gùf™R¼*SyMm°)³UU²Óš¬5Œo6[ „[Lý.L–VQ>†3H(ËïîšT(aÅç×ÿœ9RžÏ–©í…­VÙ¥”%yê’÷WrÞÓÛoc=WÀ׃šqóÄ´þž.]h.“šmùY¡É%U³Ôötî­8pH’6ú?,{ÚŠáøZ¥‘eɯ®Kù#ÏïÝnú>5`o•™Í›ÂÏØ–½cFДè¾ õ]&f$5áðrŒqæ8Ÿ”óËùª ¹\EõÖ,<ª"×± O顜믌'´ÞXp¢H'« °áA”ìWUT\æN>ˆ¼Ì¾CЊÂð퀠#†Ì5—rC¶ÁŸbR2÷  •î7 YF¼N–FÄOÄÅ~%J5RZŸÕ†_ÅW‰]ÈkØáe¨Î¥–6àV¸T¬‡=U±ªêm0:•rƒP¨¯×}Ë8)-#"k~s\¯›ù‰××j9ÍÛÙ–!nì¥÷ÀèÜbÔ#¢RlR·Ú’|eŒ^lÐñ÷¨òâ_eµÑùG™ÓþÐë~°VÎ YôþòŽïÆ;dp¤µÊ( ©Ô§¡·7qWlS’Ë0$PØACGéMÆz¿ÁÜ€Oò8ÒëÙ1‚Aà^ªŽ 7 & çù™E{Fµ¨}úïq:‘O)x¤µòz:òÑ(@ß͸d>æÂÁªPÄЪ¸Ël›lÝÃm§ˆÀ´2è\@¼¹!z–¸¶BØ*Pâ†,-¢óØËS³B‹Òç•Qºk»huAVl]Ÿ® ý=Ýn—™;Ü%šƒY,ô$3P­ú#ôu¼º§G¸ˆeV fÉQI–5†–ø¡ÕŠ“ž:#ùÊû=ä0 È±åE:î™V±@Hly¾© ªØyzNYžŽ”Ÿ¢aw*—)ïkõ/nØÔaH8ñDåÔYZ”*ÎøMR,>+ö6–¶÷^e{7¥Üm5*‡ °>££ªšæ”Õ+³«ã’Ó6Äh»½1 *[¤—ÖÇ„ÉkŽüjéGŒkÙíDt‹PÇê{£¦&£[¢Næ³¼—OΧÑ_ Ù(_ÕîyŒ°C©€$[B_6úö‘h@‚KÙiyÀ«vTgF.ØÎ1F¼UUÝÖ’ÊHðÁ‡ÇGÂ…#Öý¤ui3EI¸}ž£¨y ‹¿ç“õÈ>p+rhn*…:¦a˜]‘€{å ÁCW}ðJJ È9(ÜÁ@pɼs\fÓ¤[«Z(b²“÷9ž@é°À³\àì…¬x©oúŠ5”H²ÈY’;=/NÒm” 4ùúG­èµ`{d…¤þV£R0Êdn5à.o¯›‰d÷Áv2ä å%;Kû ›:Ä7êÜe¢’õÙt%Zje&‡{hG¥œýøÊÅ0çè ±¯"½BõËñ“ÇE°Ò­r©±CÁˆdk?“.øi{(W¶y£*5Þ›@¥8¢#ÁªŒ-œ?/’™Aù¾HѪÍkæ-kjx »Hÿj —ÛëբŽ÷ñÕ¨ï3Þý±dÛVvçÆ^ï„¶œfaì¾¢€h¸D´í%<‰dúü¼Ãþ \Ýû)Å<ÓP'˱.=v>³Ì«ñ“èåXßuÐÚõÄ4Ü6’œk_,ÈÙó‰…C6l2{ïì”ÈâáÄ÷ÌñÔ+xG´ HsªµŽØBÓE€pؘy&mLt~qMv5~¿'ö¯æÔ6¤ ’•Úb€‹ŽÓÎ tÈ!ТP8duÐn¥pê儉u aÞÌ›:óÞ…•r~È¢ÝPƒ.l7p7߇ÿ{ŸšÂf›dÑ–3#Õƒ5çI…Y2¿Ó×kQpõYùC0s½ÆLZ J²²I6M©ØIì‰nÿ]MÔî&È»¢CÔÀ<`§µãCá‡í?°ƒ˜ºpÞà½f´Y¿QÜ|ô ²¿ÁOÐý°Z´Ô׸A!êõA’iý{÷O~ÒlmS±"Ïß4³9‘^‡‡6$uùû I]¤Þž¼ã&ºìûýªû )ì‘£‰T)¡øg: tÄäg©Ð}|¤º LœHT=ãÙÕ„-EI»u“•ÚÙP·;îì­Ø#_ÚßMÅYšݵвt±„Ô6+ÀSÕ Ý‘1wq– zÇjÄg+Ó¤ ‚sgûŽ|¶C4¾åo„pošÁ ½ r ôßoÛz·ëσG¨ó—C¤ÂËóë@Lsu/U ‘„[Êël¿<µ#Ô¯56‘PSU…Óèß,—zÉ\|p%B®ÛPd…Ù‹‰l `:Æa ëЊ/´XÀŒž^v×ëg¼²ãÓ(:X½&Qíl¹ÑŽNÜÒÁ߆ËÁ2ÏÃ4 ¼A¥СiÜ_|AE~ÔËKˆÔâ#:¸å15vr Ñ^VÎ÷@®aüݺz¶ÿ«ìÎãò²ô8nXÁQæ>„}H×’7nÂm§)ð@Iдå§.hàJK¨6ê9\¡Ë¦„õßgLТ´o]Eäá"´NçdàO6˜)_U¢ÄvÓùôyðr›]œ¹KHÕ²¬‡iÿ٧ȾÚNY´3 ™»ÆÑÍ^NWÛµ_¢ŸzŸStõ™• S#¥u£!ØÅvEÇWœ55ÕEÑA @Ì™ÁØäàUÑ6Ò0ø¶à´ñ’²ã¾LS ÎAg {kË‚<+”ª(¯CLó79}y ¨Ä™µ&â㣠0 EÀikÆ^ÞáÞFõ*× ëÚÙú÷•35}nÑÇåæN¥ ‰nÃ.%§4f… θZY2"œ×&¥ ˆÇÅÛ.袵pÅ5î×8¿¹ÞµªKòU®“¡k¾c,kÙ]a‹E Þ:SÖ3äûùPhØPÙË{ ßmùI»‹óÆ= ó^"Þˆ¯­é²û‚{»Q¯¬º–2°·­¸ö¤ÏrÓ.ð9B:èg÷h4祋†˜ÅÇmz j¡tÍ ›éY¤¨ º®Xë<„té_Ûàf´x »&6 ³?™ªÁa^!*‹ÕÓ×|zxÁ‡‰ñáÔ,50™ÏÔO(xºñË…™‘»C6Þº° 56æÔslІ0#õkôØŸI´¹g]ós¾˜/&.¹©ÿ“•ýò(öÓRøûáYtÍ›½¦µNá+ù¯eFäuºf·vÿRE5¾3>Vó|ñ›h&Ò#ž£7ÚIÁ ‘"êun™ÏúÓë,Ÿ-éÃ(¾IºÀÔ^èñ¦tØp$¾;㿨`ùeÖ}PÛ Ã•;<¢(P„$âܲ¾åüKwÑ€ª&HïGRBOˆÄV.<Ÿ]8µ•XÅ=ï¤A¯îºÏœÙmÕ½¤–÷ãÓŽ±Í¿šPËч°µkÑ –*Ä¡ñè›'»÷¿ Œs²º}ZPÍ€¹ Òö–¦Ò²á`H&þØf£¥Å›í3g‰C DL5®iÌÇb'|øo'¶™”Gùë†ç>_ìýïÔ§Åö¹Áb‘1†¢@ jÜCQõ’ÔÑ´ÿR/Úº_æQ+úªP.„I/VŸqk*ÛTó#ÎÆød_–<é– (ócSdzŒmq©hJM|¢Ÿ”•Öj ®)˦ 0Vmn÷*0í‡ü™@pºŽf³ï3Áéžü÷IèY¨-;&œòËó qÀõä Áá«c^ww.ÜA:ÈVB¶€ö/lfŸYÅžp$"è3—™—,=Yyð·Ôµí7ƒK¢s=InÊg~Í5¸° þ Hûøþ±-&ðôhÒ Ññ è ºƒó¿© {¸3ä­"ÙØP]¸“’Uì¿Z®’³/+³Ä¡>d<#Óg"ê9n­ÓW#íüÁ$òÒÂQâ¡%«Ž°0ÁU•Åú4â«]ߟhcò}Xhø™&dI,~º«þ{%lºy;—¦”?±RÃÈ¡ñóÂ=Kl©0küT æÏˆ°¢èI|Ã_tR6FÖS ˜r¸CWɤ‘ o´Ã¦A'Ѧ ññô¿@)i€ÈžÒ†ê3àŽY ñ\À¿fךæÏæ48c~'g9o‰=H;n Ý˜^«ÅTù6ö'ÇØp³`ïá·¢PñaкHœU¯Q./nÒ·EØd÷$Ãy…D‰3ÔºžÂ²ÑôÓE¶_ êMŠàÚ½«ºaÐai3]g5ž¹A“$êI:…ܤá…÷Œgãg/»Ém]ŽMŽèèoàû­òŸ~H“ ïÀ‹â™³^o.nQƒ˜nb—-"6HXÇ{áS•tÝ›i4ì£þZpå[ÔRu½Kǧr]2&4°?‹Y?gÆ'Û¶¦(`OTŒMщJ›’‹t#£ ZêÁîà?Ù&ûåïF…ŸïðÄ´}Ûrî/gª©1OÐ6êª32.šÑ¿0"ú…´#’–s‘þedIõókæ$P;ƒ0)îåt÷Gœ51AßPÊ£¨ÚpSÙöu¶ÅzÆý=ì~Ó0>ŠƒYËÿ?ó¥ŽNiuÐоÔ\¾,G͈â?黽Þ¼œv¡ò‹m,øX ï\¾@Ú¶å–Ì}S+ð>ûÍÔœõPvL×Y޹çž,"PK¡¡Tb=NÆãc—bÀ°ê'ÖIOt}x„z}‹pL¸€˜%¾üÃi-ªUÄ&UMj¢•³õ•§”±ìå+Ô« 1OïëTH¹á[˜¢—zt¡A‰{èAƒ"LfÖ°DŠêþãCÈUö½iË{š„fn§ÅãÃRõΫõ/Œú?²P« à îX=ÞSÏóÄsè LS(µ¡µQh &Þ”æñÙ˜)Áô=]\§FBÚy¿¡vò;ý_î´EVKMÛ)ŒuVV;rù jþþò­Õs8ûÉxcÒràƒ!Ÿ4-$õŠ/òyÏ¢uvêrjÔ¡Ó<³Í­ÌÅ¢§ˆ,6BNœÃ@D »H)ª’3É<èÞ‡†É~‘U#KNø1ò.¥Ãò:årÇa2ž‚\ÄçN†×£ˆ6fÊM T½¬¢ÉƒÏãÙì©4á€ðA½ªo+ý°áÌ“Ù^0+\·ä+‰ 9¿Õ^˜7? Îâ'Iu¬C•,à`"cÓ®Ã`Þý(ã§H/®T£¼zyÞ¢MgÒ`‰¶ÕL™oKùþ˨X>”ŠÏÖ%¹|V×u dê7‹:[„¡{Q^Z¡jW ByWcxîàÕ±|èÙ@RÓÒÚôøK-h—e”ªyg‹û‡€I4™Ð7 Â4®p*³È8“УèWþ_Ûî˜H¸…Âáѳz‘HCÞËh:Äï¡Ñ±€)n‘®:Çyïߌ:NZµÁ‚ì{ó0Xªƒ;\!(NÝ”d1ËþÞàoÆ1Ú³{Ǩ/èäxGF>÷ÇXÉcu½V·6˜¤q›´ãZ¬¸ÌÂòÊM7íâ׿ª[á5%ð)˜RaæŒ*²Ä/NÄÓ@eì£Ïõ°´3¾¾1 ÍQŠ ¿à–âŠÊ÷U'µ¬£q|-Àæ%> åÖ…|ÿ}ÕÆT›ø—øWÅCÁŠÔ~íÄü*~M£ ܘ(ÅücZ)_ðOŒ§~Ë›lW^нW‘i[2³M8ó9Xéø¬£3¯s@i½§çW÷J®øÿlØ;‘ œ¥Ifz™|X.JÅæáÄ7¶îK%Ô‘Z]BHmÙp|ÜÏð¾!UçÓ&Šs€ZMŒ©„lìŠ#ë1uy­—¬¡4Ù_¶ìÞ@4·å²†çÂcßmMØfw²{-Sà–Ó´î?³½uè[t‡d‡¥\Œ¶Óÿeu¹¾¾.!烶†ú(Jà>Ô$½…&í°ûMµk¨…måðy×Cúž[Ê ØhNöˆ¤ •hi‡ñJ‰ò¡ü㦽š6nÞ~„“0ÌÛ*o›ã°c|LXšê½ã‘%vÿ¹¢* LgˆK¦ âb£‡lÓ¿6Ñ­üòÑà¯Ã§‚$T„:4ìÇ—ˆ3l¿©;plå8³öFpÖõ·FÁv³ôèrPÔ“½WÒ©n5‡—Úè ËÜ ¢‰8s*RSpU»ø:€¢$ÞÅ/®–0XåIäó83WhÝý“êE—æBÈ“U‚%HA2VPòølÔâ³}ÈÑuuf‘aî²ý(ÓÛyøðõ‰E:Ì#ÔÀÈÒÕÓiúÛÉì+a%uu'¢Âôçb 7dçÖ"¬h~Á0”*¼Á¨ïÚòd«ÒrL»"®º·WbUÊ•‚AÎyK|H³¤sjHÛþ9±[ówèÓšïÎí \lì>Ä!1‹ÿzÉM7âÿ¢$fp:nW4Ì Ä7e/—š<ôºá÷!¤C1¥ÖEí6™Ãóà yƒì„Ú?l›ûÊü[¼/0’fÀ[øÍÌ•§oKäd)×oÜÕÚ<¿+‘‘^€É1b;¶R ¶k»z>Wå»å½”T“˜*° ³,ÙqÃ¥KŠèöh±Þdü2]AžV7þ²‘ÐrXÒª«Ùã6§Ü#Áƒ Lïµr ¡È»o¡ÉE«‰`Ä“Ãv}—TWsÊž™ÿƒ"¿’"ÜæÒË.í›í,(£[„°úÀÙdo” ¯Ò+]ɇâÝŸÀÞ$й–ŒYœ|!8ÊVì¬ÑÙ°÷&ßË^El„¤`}Pr±üQU/o@O-½´é}§s¸+xÆ;)'<‹]Ü Ys_ŸžÀ£Ôê…”Pu]]¬SYçø^:²â4š†ÂTPœp=ø`d{JF˜ÏìÑËh•Ü®B>½æ–ù¬‚û•äMîf>GÏAjøJiaG‰‘%5XéÄ=;™Ñà…L¦·ig£Gj´MdnÅ–‚Jm›p¶A¢º#j%·£Ëþ³jwÇöêƨn‰KÄ:®N&5'ÐôöÛ@‚±‚ÃR¥jQùä3HN@†šÍ&ì,.ãUïÏ]WÙ!E YྣhŽ 'µYfÉJsÞyè.cæ‚=´ekP¬e…²ˆ˜*ËìM`•Éúù`.¿6Ä¥f ±>ùRêij%ÝAÐpy[^à¢eU§ÒCR¢Œ-"bƒ ÷0 ILž|úÔ…5ªø'V2Öl$Uhµ¿2N›*´£ñÊZèȱ¡Éï¸Ú“løÌíÄpiW¬SÎvXú` „‚}çèOÀ™ÈIõ¨žÙÚÈÊ–šë£î¦$GmÅXêe=—jIwH^º‚λãôf5·rºYt:)Î Z3aû0ë¿/k,©&áNo,6¥óK?->‘'1i‰sT%ÎØŽBñÈñgZåïžÇUá ¿‹Á¤Ô)ÜIÏïÉ¥ì'Á÷E¬©ýÐÿ©öÁr*e¯þõ]zÒ'âø¨ONˆúHuôÕÀE´ÓlŒ.² b|ƒ&8µ´ÐÉÿÏ~GΞ8\–bcû–áX’¡‹ à/››âD—ÝPn7¶Vý^s/ FØûqa –”×Q÷äIùÐÙ‚ÉkòwÍrÎÉ­‹·¥6ÁulèÆ+ –tX­[õåµxÅ© m=+g¡]ÍøÍù ²}‰ˆœ'¬¯Žj“H‘86©J•ÆvwB9‹ÀÃJ*Šmc»É,{—ËîãdÉ? ÆÓË¢ØÌF]5Uñëa¶»t«wÓ¹žÑ•a±|»ˆaçŸ<€K[& ãT?Þ}A!ÜfF[ò}QˆÁ²îUz}!NÝ#/j¦VçôÞF–'û2 oÿŸ‚îWe¥õBd²A! Â{Üf#t_ œ³™€±c„/>:m¬ŠbÕÁ‘Ûª&nÖÝ:Ài–ÞYjâþ[Ì ²í|ÅH§’ #5Wæþ V)x‘oLî1X\Ѳj"82"{`Q\w¤ v2 Sú ‰¼\ ÿ[ ²¡…˜¿`#>/—ͰOÎb8m„¬¶ «g™åÈñ=êe%A.«àðD4Äcp¶},ˆZ¡O÷Xt% `'/ƒ‹£S¡à{È㌜ʷtEkÍŠ›ž û>1hK™®‹ b’¯V@õÇ5jí+Ý;â[W'ªÓG›Yå·Æ(húô©AQ3$iP? ÇAæ;̺¤X]à v(¯pRK×Éë•Õ¥3ÝÞj®Ûå6>å‡FrkÀ˕ü§x+¥·Hœ¼\[ Æx1 “nJñ#‘Hôó'äŽwP/myµüâ„wˆŽê*ľ#vgÙ¿&î†M?bTQh>€À›‡ÊŽŒ|Á‚xkš ½ÕÔ”ì7KÍ’Œ1-±þÙ¦éÛÄø5ãÜó°ÐÛ¹—Îʺx ÍI¾œ^€ R=åëC€4nIä°‹‰à.*r®¤ Xº™d;?ÛªÏÁ“-*ói E´ô¢ý´t6`,Çl›ƒ*esR„Rj\T„†ç "T\þÙ*+%ÞHoEºO\4Bä]­ÊçO\EFÁ°b2ì4´³T˜¡–"ÏmÖ³¤näeGçU ¼ t¡pä•õjµëiHeÜEމ„p¡†^4îM®‰H³ÿý¡ ”RqpçÓ{ éV a,ïãŠ#øf 1ïÜeò©ÖE†}5*ïçÇñ’3óÁ?†o¥t‡–M4$ï|B¾ºµý©Œ©æIó¾«ñ[n&8(GúNÓn.»m¥ôy¹×?éió¯}]‹ã#›•ú›2mDÊv—5\¦_’ý_”_Êù„ž„ßíqÓÄSÉû×7rÝ"N2S®0 ¼)$³º](Ö6Ñe!Ô¬¥ÏH»¤T$¼®Pru¾%LoWö’új t9íëõ©MÈd5'¢·/>=«ñ“Ñ YJU‹Ãq‡ÀïþùÁ¤ÆÍÝ÷ XÈÖ²ÏÛjPöLÕ[Ì9:p¡à¢ÍDÔ|‡ÙM-¿SQT —HfäErŽœ{Ÿv÷%©&0ë-%…%ü0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark endstream endobj 2123 0 obj 13219 endobj 2124 0 obj 1768 endobj 2125 0 obj 10919 endobj 2126 0 obj 532 endobj 2127 0 obj /JKBRSN+CMBX12 endobj 2128 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName 2127 0 R /ItalicAngle 0 /StemV 109 /XHeight 444 /FontBBox [ -53 -251 1139 750 ] /Flags 4 /CharSet (/fi/fl/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/question/A/B/C/D/E/F/G/H/I/L/M/N/O/P/Q/R/S/T/U/V/W/X/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z) /FontFile 2122 0 R >> endobj 383 0 obj << /Type /Pages /Count 6 /Parent 2129 0 R /Kids [373 0 R 387 0 R 440 0 R 492 0 R 500 0 R 507 0 R] >> endobj 524 0 obj << /Type /Pages /Count 6 /Parent 2129 0 R /Kids [519 0 R 527 0 R 539 0 R 552 0 R 557 0 R 564 0 R] >> endobj 572 0 obj << /Type /Pages /Count 6 /Parent 2129 0 R /Kids [569 0 R 575 0 R 580 0 R 588 0 R 593 0 R 598 0 R] >> endobj 611 0 obj << /Type /Pages /Count 6 /Parent 2129 0 R /Kids [607 0 R 614 0 R 621 0 R 630 0 R 636 0 R 643 0 R] >> endobj 653 0 obj << /Type /Pages /Count 6 /Parent 2129 0 R /Kids [648 0 R 660 0 R 673 0 R 681 0 R 687 0 R 696 0 R] >> endobj 707 0 obj << /Type /Pages /Count 6 /Parent 2129 0 R /Kids [701 0 R 710 0 R 716 0 R 722 0 R 731 0 R 739 0 R] >> endobj 752 0 obj << /Type /Pages /Count 6 /Parent 2130 0 R /Kids [749 0 R 755 0 R 765 0 R 773 0 R 782 0 R 791 0 R] >> endobj 806 0 obj << /Type /Pages /Count 6 /Parent 2130 0 R /Kids [800 0 R 813 0 R 819 0 R 825 0 R 831 0 R 838 0 R] >> endobj 848 0 obj << /Type /Pages /Count 6 /Parent 2130 0 R /Kids [844 0 R 851 0 R 858 0 R 864 0 R 878 0 R 886 0 R] >> endobj 934 0 obj << /Type /Pages /Count 6 /Parent 2130 0 R /Kids [931 0 R 937 0 R 944 0 R 951 0 R 957 0 R 964 0 R] >> endobj 976 0 obj << /Type /Pages /Count 6 /Parent 2130 0 R /Kids [972 0 R 989 0 R 999 0 R 1055 0 R 1062 0 R 1067 0 R] >> endobj 1083 0 obj << /Type /Pages /Count 6 /Parent 2130 0 R /Kids [1076 0 R 1098 0 R 1103 0 R 1143 0 R 1153 0 R 1165 0 R] >> endobj 1177 0 obj << /Type /Pages /Count 6 /Parent 2131 0 R /Kids [1174 0 R 1180 0 R 1185 0 R 1190 0 R 1195 0 R 1200 0 R] >> endobj 1211 0 obj << /Type /Pages /Count 6 /Parent 2131 0 R /Kids [1208 0 R 1214 0 R 1219 0 R 1225 0 R 1230 0 R 1236 0 R] >> endobj 1245 0 obj << /Type /Pages /Count 6 /Parent 2131 0 R /Kids [1241 0 R 1251 0 R 1257 0 R 1262 0 R 1269 0 R 1279 0 R] >> endobj 1664 0 obj << /Type /Pages /Count 6 /Parent 2131 0 R /Kids [1660 0 R 1667 0 R 1676 0 R 1684 0 R 1701 0 R 1718 0 R] >> endobj 1748 0 obj << /Type /Pages /Count 6 /Parent 2131 0 R /Kids [1742 0 R 1757 0 R 1780 0 R 1789 0 R 1798 0 R 1804 0 R] >> endobj 1952 0 obj << /Type /Pages /Count 1 /Parent 2131 0 R /Kids [1904 0 R] >> endobj 2129 0 obj << /Type /Pages /Count 36 /Parent 2132 0 R /Kids [383 0 R 524 0 R 572 0 R 611 0 R 653 0 R 707 0 R] >> endobj 2130 0 obj << /Type /Pages /Count 36 /Parent 2132 0 R /Kids [752 0 R 806 0 R 848 0 R 934 0 R 976 0 R 1083 0 R] >> endobj 2131 0 obj << /Type /Pages /Count 31 /Parent 2132 0 R /Kids [1177 0 R 1211 0 R 1245 0 R 1664 0 R 1748 0 R 1952 0 R] >> endobj 2132 0 obj << /Type /Pages /Count 103 /Kids [2129 0 R 2130 0 R 2131 0 R] >> endobj 2133 0 obj << /Type /Outlines /First 7 0 R /Last 371 0 R /Count 9 >> endobj 371 0 obj << /Title 372 0 R /A 370 0 R /Parent 2133 0 R /Prev 355 0 R >> endobj 367 0 obj << /Title 368 0 R /A 366 0 R /Parent 355 0 R /Prev 363 0 R >> endobj 363 0 obj << /Title 364 0 R /A 362 0 R /Parent 355 0 R /Prev 359 0 R /Next 367 0 R >> endobj 359 0 obj << /Title 360 0 R /A 358 0 R /Parent 355 0 R /Next 363 0 R >> endobj 355 0 obj << /Title 356 0 R /A 354 0 R /Parent 2133 0 R /Prev 339 0 R /Next 371 0 R /First 359 0 R /Last 367 0 R /Count -3 >> endobj 351 0 obj << /Title 352 0 R /A 350 0 R /Parent 339 0 R /Prev 347 0 R >> endobj 347 0 obj << /Title 348 0 R /A 346 0 R /Parent 339 0 R /Prev 343 0 R /Next 351 0 R >> endobj 343 0 obj << /Title 344 0 R /A 342 0 R /Parent 339 0 R /Next 347 0 R >> endobj 339 0 obj << /Title 340 0 R /A 338 0 R /Parent 2133 0 R /Prev 315 0 R /Next 355 0 R /First 343 0 R /Last 351 0 R /Count -3 >> endobj 335 0 obj << /Title 336 0 R /A 334 0 R /Parent 315 0 R /Prev 331 0 R >> endobj 331 0 obj << /Title 332 0 R /A 330 0 R /Parent 315 0 R /Prev 327 0 R /Next 335 0 R >> endobj 327 0 obj << /Title 328 0 R /A 326 0 R /Parent 315 0 R /Prev 323 0 R /Next 331 0 R >> endobj 323 0 obj << /Title 324 0 R /A 322 0 R /Parent 315 0 R /Prev 319 0 R /Next 327 0 R >> endobj 319 0 obj << /Title 320 0 R /A 318 0 R /Parent 315 0 R /Next 323 0 R >> endobj 315 0 obj << /Title 316 0 R /A 314 0 R /Parent 2133 0 R /Prev 103 0 R /Next 339 0 R /First 319 0 R /Last 335 0 R /Count -5 >> endobj 311 0 obj << /Title 312 0 R /A 310 0 R /Parent 103 0 R /Prev 295 0 R >> endobj 307 0 obj << /Title 308 0 R /A 306 0 R /Parent 295 0 R /Prev 303 0 R >> endobj 303 0 obj << /Title 304 0 R /A 302 0 R /Parent 295 0 R /Prev 299 0 R /Next 307 0 R >> endobj 299 0 obj << /Title 300 0 R /A 298 0 R /Parent 295 0 R /Next 303 0 R >> endobj 295 0 obj << /Title 296 0 R /A 294 0 R /Parent 103 0 R /Prev 275 0 R /Next 311 0 R /First 299 0 R /Last 307 0 R /Count -3 >> endobj 291 0 obj << /Title 292 0 R /A 290 0 R /Parent 275 0 R /Prev 287 0 R >> endobj 287 0 obj << /Title 288 0 R /A 286 0 R /Parent 275 0 R /Prev 283 0 R /Next 291 0 R >> endobj 283 0 obj << /Title 284 0 R /A 282 0 R /Parent 275 0 R /Prev 279 0 R /Next 287 0 R >> endobj 279 0 obj << /Title 280 0 R /A 278 0 R /Parent 275 0 R /Next 283 0 R >> endobj 275 0 obj << /Title 276 0 R /A 274 0 R /Parent 103 0 R /Prev 259 0 R /Next 295 0 R /First 279 0 R /Last 291 0 R /Count -4 >> endobj 271 0 obj << /Title 272 0 R /A 270 0 R /Parent 259 0 R /Prev 267 0 R >> endobj 267 0 obj << /Title 268 0 R /A 266 0 R /Parent 259 0 R /Prev 263 0 R /Next 271 0 R >> endobj 263 0 obj << /Title 264 0 R /A 262 0 R /Parent 259 0 R /Next 267 0 R >> endobj 259 0 obj << /Title 260 0 R /A 258 0 R /Parent 103 0 R /Prev 243 0 R /Next 275 0 R /First 263 0 R /Last 271 0 R /Count -3 >> endobj 255 0 obj << /Title 256 0 R /A 254 0 R /Parent 243 0 R /Prev 251 0 R >> endobj 251 0 obj << /Title 252 0 R /A 250 0 R /Parent 243 0 R /Prev 247 0 R /Next 255 0 R >> endobj 247 0 obj << /Title 248 0 R /A 246 0 R /Parent 243 0 R /Next 251 0 R >> endobj 243 0 obj << /Title 244 0 R /A 242 0 R /Parent 103 0 R /Prev 239 0 R /Next 259 0 R /First 247 0 R /Last 255 0 R /Count -3 >> endobj 239 0 obj << /Title 240 0 R /A 238 0 R /Parent 103 0 R /Prev 223 0 R /Next 243 0 R >> endobj 235 0 obj << /Title 236 0 R /A 234 0 R /Parent 223 0 R /Prev 231 0 R >> endobj 231 0 obj << /Title 232 0 R /A 230 0 R /Parent 223 0 R /Prev 227 0 R /Next 235 0 R >> endobj 227 0 obj << /Title 228 0 R /A 226 0 R /Parent 223 0 R /Next 231 0 R >> endobj 223 0 obj << /Title 224 0 R /A 222 0 R /Parent 103 0 R /Prev 203 0 R /Next 239 0 R /First 227 0 R /Last 235 0 R /Count -3 >> endobj 219 0 obj << /Title 220 0 R /A 218 0 R /Parent 203 0 R /Prev 215 0 R >> endobj 215 0 obj << /Title 216 0 R /A 214 0 R /Parent 203 0 R /Prev 211 0 R /Next 219 0 R >> endobj 211 0 obj << /Title 212 0 R /A 210 0 R /Parent 203 0 R /Prev 207 0 R /Next 215 0 R >> endobj 207 0 obj << /Title 208 0 R /A 206 0 R /Parent 203 0 R /Next 211 0 R >> endobj 203 0 obj << /Title 204 0 R /A 202 0 R /Parent 103 0 R /Prev 199 0 R /Next 223 0 R /First 207 0 R /Last 219 0 R /Count -4 >> endobj 199 0 obj << /Title 200 0 R /A 198 0 R /Parent 103 0 R /Prev 183 0 R /Next 203 0 R >> endobj 195 0 obj << /Title 196 0 R /A 194 0 R /Parent 183 0 R /Prev 191 0 R >> endobj 191 0 obj << /Title 192 0 R /A 190 0 R /Parent 183 0 R /Prev 187 0 R /Next 195 0 R >> endobj 187 0 obj << /Title 188 0 R /A 186 0 R /Parent 183 0 R /Next 191 0 R >> endobj 183 0 obj << /Title 184 0 R /A 182 0 R /Parent 103 0 R /Prev 163 0 R /Next 199 0 R /First 187 0 R /Last 195 0 R /Count -3 >> endobj 179 0 obj << /Title 180 0 R /A 178 0 R /Parent 163 0 R /Prev 175 0 R >> endobj 175 0 obj << /Title 176 0 R /A 174 0 R /Parent 163 0 R /Prev 171 0 R /Next 179 0 R >> endobj 171 0 obj << /Title 172 0 R /A 170 0 R /Parent 163 0 R /Prev 167 0 R /Next 175 0 R >> endobj 167 0 obj << /Title 168 0 R /A 166 0 R /Parent 163 0 R /Next 171 0 R >> endobj 163 0 obj << /Title 164 0 R /A 162 0 R /Parent 103 0 R /Prev 159 0 R /Next 183 0 R /First 167 0 R /Last 179 0 R /Count -4 >> endobj 159 0 obj << /Title 160 0 R /A 158 0 R /Parent 103 0 R /Prev 155 0 R /Next 163 0 R >> endobj 155 0 obj << /Title 156 0 R /A 154 0 R /Parent 103 0 R /Prev 151 0 R /Next 159 0 R >> endobj 151 0 obj << /Title 152 0 R /A 150 0 R /Parent 103 0 R /Prev 147 0 R /Next 155 0 R >> endobj 147 0 obj << /Title 148 0 R /A 146 0 R /Parent 103 0 R /Prev 143 0 R /Next 151 0 R >> endobj 143 0 obj << /Title 144 0 R /A 142 0 R /Parent 103 0 R /Prev 139 0 R /Next 147 0 R >> endobj 139 0 obj << /Title 140 0 R /A 138 0 R /Parent 103 0 R /Prev 115 0 R /Next 143 0 R >> endobj 135 0 obj << /Title 136 0 R /A 134 0 R /Parent 115 0 R /Prev 131 0 R >> endobj 131 0 obj << /Title 132 0 R /A 130 0 R /Parent 115 0 R /Prev 127 0 R /Next 135 0 R >> endobj 127 0 obj << /Title 128 0 R /A 126 0 R /Parent 115 0 R /Prev 123 0 R /Next 131 0 R >> endobj 123 0 obj << /Title 124 0 R /A 122 0 R /Parent 115 0 R /Prev 119 0 R /Next 127 0 R >> endobj 119 0 obj << /Title 120 0 R /A 118 0 R /Parent 115 0 R /Next 123 0 R >> endobj 115 0 obj << /Title 116 0 R /A 114 0 R /Parent 103 0 R /Prev 111 0 R /Next 139 0 R /First 119 0 R /Last 135 0 R /Count -5 >> endobj 111 0 obj << /Title 112 0 R /A 110 0 R /Parent 103 0 R /Prev 107 0 R /Next 115 0 R >> endobj 107 0 obj << /Title 108 0 R /A 106 0 R /Parent 103 0 R /Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 102 0 R /Parent 2133 0 R /Prev 99 0 R /Next 315 0 R /First 107 0 R /Last 311 0 R /Count -20 >> endobj 99 0 obj << /Title 100 0 R /A 98 0 R /Parent 2133 0 R /Prev 63 0 R /Next 103 0 R >> endobj 95 0 obj << /Title 96 0 R /A 94 0 R /Parent 63 0 R /Prev 91 0 R >> endobj 91 0 obj << /Title 92 0 R /A 90 0 R /Parent 63 0 R /Prev 87 0 R /Next 95 0 R >> endobj 87 0 obj << /Title 88 0 R /A 86 0 R /Parent 63 0 R /Prev 83 0 R /Next 91 0 R >> endobj 83 0 obj << /Title 84 0 R /A 82 0 R /Parent 63 0 R /Prev 79 0 R /Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 78 0 R /Parent 63 0 R /Prev 75 0 R /Next 83 0 R >> endobj 75 0 obj << /Title 76 0 R /A 74 0 R /Parent 63 0 R /Prev 71 0 R /Next 79 0 R >> endobj 71 0 obj << /Title 72 0 R /A 70 0 R /Parent 63 0 R /Prev 67 0 R /Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R /A 66 0 R /Parent 63 0 R /Next 71 0 R >> endobj 63 0 obj << /Title 64 0 R /A 62 0 R /Parent 2133 0 R /Prev 27 0 R /Next 99 0 R /First 67 0 R /Last 95 0 R /Count -8 >> endobj 59 0 obj << /Title 60 0 R /A 58 0 R /Parent 27 0 R /Prev 39 0 R >> endobj 55 0 obj << /Title 56 0 R /A 54 0 R /Parent 39 0 R /Prev 51 0 R >> endobj 51 0 obj << /Title 52 0 R /A 50 0 R /Parent 39 0 R /Prev 47 0 R /Next 55 0 R >> endobj 47 0 obj << /Title 48 0 R /A 46 0 R /Parent 39 0 R /Prev 43 0 R /Next 51 0 R >> endobj 43 0 obj << /Title 44 0 R /A 42 0 R /Parent 39 0 R /Next 47 0 R >> endobj 39 0 obj << /Title 40 0 R /A 38 0 R /Parent 27 0 R /Prev 35 0 R /Next 59 0 R /First 43 0 R /Last 55 0 R /Count -4 >> endobj 35 0 obj << /Title 36 0 R /A 34 0 R /Parent 27 0 R /Prev 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 30 0 R /Parent 27 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 26 0 R /Parent 2133 0 R /Prev 7 0 R /Next 63 0 R /First 31 0 R /Last 59 0 R /Count -4 >> endobj 23 0 obj << /Title 24 0 R /A 22 0 R /Parent 7 0 R /Prev 19 0 R >> endobj 19 0 obj << /Title 20 0 R /A 18 0 R /Parent 7 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 14 0 R /Parent 7 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 10 0 R /Parent 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 6 0 R /Parent 2133 0 R /Next 27 0 R /First 11 0 R /Last 23 0 R /Count -4 >> endobj 2134 0 obj << /Names [(Doc-Start) 375 0 R (Hfootnote.1) 532 0 R (Hfootnote.10) 788 0 R (Hfootnote.11) 969 0 R (Hfootnote.12) 984 0 R (Hfootnote.13) 996 0 R (Hfootnote.14) 1071 0 R (Hfootnote.15) 1147 0 R (Hfootnote.2) 535 0 R (Hfootnote.3) 536 0 R (Hfootnote.4) 604 0 R (Hfootnote.5) 728 0 R (Hfootnote.6) 736 0 R (Hfootnote.7) 768 0 R (Hfootnote.8) 778 0 R (Hfootnote.9) 779 0 R (Item.1) 513 0 R (Item.10) 627 0 R (Item.11) 654 0 R (Item.12) 655 0 R (Item.13) 656 0 R (Item.14) 657 0 R (Item.15) 668 0 R (Item.16) 669 0 R (Item.17) 670 0 R (Item.18) 684 0 R (Item.19) 690 0 R (Item.2) 514 0 R (Item.20) 691 0 R (Item.21) 692 0 R (Item.22) 693 0 R (Item.23) 744 0 R (Item.24) 745 0 R (Item.25) 746 0 R (Item.26) 769 0 R (Item.27) 770 0 R (Item.28) 807 0 R (Item.29) 808 0 R (Item.3) 515 0 R (Item.30) 809 0 R (Item.31) 810 0 R (Item.32) 1139 0 R (Item.33) 1140 0 R (Item.34) 1146 0 R (Item.35) 1148 0 R (Item.36) 1149 0 R (Item.37) 1150 0 R (Item.38) 1158 0 R (Item.39) 1159 0 R (Item.4) 516 0 R (Item.40) 1160 0 R (Item.41) 1161 0 R (Item.42) 1162 0 R (Item.43) 1168 0 R (Item.44) 1169 0 R (Item.45) 1170 0 R (Item.46) 1171 0 R (Item.47) 1204 0 R (Item.48) 1205 0 R (Item.49) 1246 0 R (Item.5) 530 0 R (Item.50) 1247 0 R (Item.51) 1248 0 R (Item.52) 1774 0 R (Item.53) 1775 0 R (Item.6) 531 0 R (Item.7) 533 0 R (Item.8) 534 0 R (Item.9) 626 0 R (equation.1) 1727 0 R (equation.10) 1736 0 R (equation.11) 1737 0 R (equation.12) 1738 0 R (equation.13) 1739 0 R (equation.14) 1749 0 R (equation.15) 1750 0 R (equation.16) 1751 0 R (equation.17) 1752 0 R (equation.18) 1753 0 R (equation.19) 1754 0 R (equation.2) 1728 0 R (equation.20) 369 0 R (equation.3) 1729 0 R (equation.4) 1730 0 R (equation.5) 1731 0 R (equation.6) 1732 0 R (equation.7) 1733 0 R (equation.8) 1734 0 R (equation.9) 1735 0 R (figure.1) 867 0 R (figure.10) 1714 0 R (figure.11) 1776 0 R (figure.2) 967 0 R (figure.3) 981 0 R (figure.4) 985 0 R (figure.5) 1072 0 R (figure.6) 1090 0 R (figure.7) 1265 0 R (figure.8) 1679 0 R (figure.9) 1696 0 R (page.1) 376 0 R (page.10) 550 0 R (page.100) 1787 0 R (page.101) 1796 0 R (page.102) 1802 0 R (page.103) 1902 0 R (page.11) 555 0 R (page.12) 562 0 R (page.13) 567 0 R (page.14) 573 0 R (page.15) 578 0 R (page.16) 586 0 R (page.17) 591 0 R (page.18) 596 0 R (page.19) 605 0 R (page.2) 385 0 R (page.20) 612 0 R (page.21) 619 0 R (page.22) 628 0 R (page.23) 634 0 R (page.24) 641 0 R (page.25) 646 0 R (page.26) 658 0 R (page.27) 671 0 R (page.28) 679 0 R (page.29) 685 0 R (page.3) 438 0 R (page.30) 694 0 R (page.31) 699 0 R (page.32) 708 0 R (page.33) 714 0 R (page.34) 720 0 R (page.35) 729 0 R (page.36) 737 0 R (page.37) 747 0 R (page.38) 753 0 R (page.39) 763 0 R (page.4) 490 0 R (page.40) 771 0 R (page.41) 780 0 R (page.42) 789 0 R (page.43) 798 0 R (page.44) 811 0 R (page.45) 817 0 R (page.46) 823 0 R (page.47) 829 0 R (page.48) 836 0 R (page.49) 842 0 R (page.5) 498 0 R (page.50) 849 0 R (page.51) 856 0 R (page.52) 862 0 R (page.53) 876 0 R (page.54) 884 0 R (page.55) 929 0 R (page.56) 935 0 R (page.57) 942 0 R (page.58) 949 0 R (page.59) 955 0 R (page.6) 505 0 R (page.60) 962 0 R (page.61) 970 0 R (page.62) 987 0 R (page.63) 997 0 R (page.64) 1053 0 R (page.65) 1060 0 R (page.66) 1065 0 R (page.67) 1074 0 R (page.68) 1096 0 R (page.69) 1101 0 R (page.7) 517 0 R (page.70) 1141 0 R (page.71) 1151 0 R (page.72) 1163 0 R (page.73) 1172 0 R (page.74) 1178 0 R (page.75) 1183 0 R (page.76) 1188 0 R (page.77) 1193 0 R (page.78) 1198 0 R (page.79) 1206 0 R (page.8) 525 0 R (page.80) 1212 0 R (page.81) 1217 0 R (page.82) 1223 0 R (page.83) 1228 0 R (page.84) 1234 0 R (page.85) 1239 0 R (page.86) 1249 0 R (page.87) 1255 0 R (page.88) 1260 0 R (page.89) 1267 0 R (page.9) 537 0 R (page.90) 1277 0 R (page.91) 1658 0 R (page.92) 1665 0 R (page.93) 1674 0 R (page.94) 1682 0 R (page.95) 1699 0 R (page.96) 1716 0 R (page.97) 1740 0 R (page.98) 1755 0 R (page.99) 1778 0 R (section*.1) 384 0 R (section*.2) 1801 0 R (section.1) 5 0 R (section.2) 25 0 R (section.3) 61 0 R (section.4) 97 0 R (section.5) 101 0 R (section.6) 313 0 R (section.7) 337 0 R (section.8) 353 0 R (subsection.1.1) 9 0 R (subsection.1.2) 13 0 R (subsection.1.3) 17 0 R (subsection.1.4) 21 0 R (subsection.2.1) 29 0 R (subsection.2.2) 33 0 R (subsection.2.3) 37 0 R (subsection.2.4) 57 0 R (subsection.3.1) 65 0 R (subsection.3.2) 69 0 R (subsection.3.3) 73 0 R (subsection.3.4) 77 0 R (subsection.3.5) 81 0 R (subsection.3.6) 85 0 R (subsection.3.7) 89 0 R (subsection.3.8) 93 0 R (subsection.5.1) 105 0 R (subsection.5.10) 161 0 R (subsection.5.11) 181 0 R (subsection.5.12) 197 0 R (subsection.5.13) 201 0 R (subsection.5.14) 221 0 R (subsection.5.15) 237 0 R (subsection.5.16) 241 0 R (subsection.5.17) 257 0 R (subsection.5.18) 273 0 R (subsection.5.19) 293 0 R (subsection.5.2) 109 0 R (subsection.5.20) 309 0 R (subsection.5.3) 113 0 R (subsection.5.4) 137 0 R (subsection.5.5) 141 0 R (subsection.5.6) 145 0 R (subsection.5.7) 149 0 R (subsection.5.8) 153 0 R (subsection.5.9) 157 0 R (subsection.6.1) 317 0 R (subsection.6.2) 321 0 R (subsection.6.3) 325 0 R (subsection.6.4) 329 0 R (subsection.6.5) 333 0 R (subsection.7.1) 341 0 R (subsection.7.2) 345 0 R (subsection.7.3) 349 0 R (subsection.8.1) 357 0 R (subsection.8.2) 361 0 R (subsection.8.3) 365 0 R (subsubsection.2.3.1) 41 0 R (subsubsection.2.3.2) 45 0 R (subsubsection.2.3.3) 49 0 R (subsubsection.2.3.4) 53 0 R (subsubsection.5.10.1) 165 0 R (subsubsection.5.10.2) 169 0 R (subsubsection.5.10.3) 173 0 R (subsubsection.5.10.4) 177 0 R (subsubsection.5.11.1) 185 0 R (subsubsection.5.11.2) 189 0 R (subsubsection.5.11.3) 193 0 R (subsubsection.5.13.1) 205 0 R (subsubsection.5.13.2) 209 0 R (subsubsection.5.13.3) 213 0 R (subsubsection.5.13.4) 217 0 R (subsubsection.5.14.1) 225 0 R (subsubsection.5.14.2) 229 0 R (subsubsection.5.14.3) 233 0 R (subsubsection.5.16.1) 245 0 R (subsubsection.5.16.2) 249 0 R (subsubsection.5.16.3) 253 0 R (subsubsection.5.17.1) 261 0 R (subsubsection.5.17.2) 265 0 R (subsubsection.5.17.3) 269 0 R (subsubsection.5.18.1) 277 0 R (subsubsection.5.18.2) 281 0 R (subsubsection.5.18.3) 285 0 R (subsubsection.5.18.4) 289 0 R (subsubsection.5.19.1) 297 0 R (subsubsection.5.19.2) 301 0 R (subsubsection.5.19.3) 305 0 R (subsubsection.5.3.1) 117 0 R (subsubsection.5.3.2) 121 0 R (subsubsection.5.3.3) 125 0 R (subsubsection.5.3.4) 129 0 R (subsubsection.5.3.5) 133 0 R] /Limits [(Doc-Start) (subsubsection.5.3.5)] >> endobj 2135 0 obj << /Kids [2134 0 R] >> endobj 2136 0 obj << /Dests 2135 0 R >> endobj 2137 0 obj << /Type /Catalog /Pages 2132 0 R /Outlines 2133 0 R /Names 2136 0 R /PageMode /UseOutlines /URI << /Base () >> /ViewerPreferences << >> /OpenAction 374 0 R >> endobj 2138 0 obj << /Author () /Title () /Subject () /Creator (LaTeX with hyperref package) /Producer (pdfTeX13.d) /Keywords () /Creator (TeX) /Producer (pdfTeX-0.13d) /CreationDate (D:20050518211800) >> endobj xref 0 2139 0000000000 65535 f 0000009833 00000 n 0000011151 00000 n 0000011238 00000 n 0000011338 00000 n 0000036423 00000 n 0000000009 00000 n 0000736800 00000 n 0000000054 00000 n 0000036478 00000 n 0000000084 00000 n 0000736727 00000 n 0000000135 00000 n 0000040411 00000 n 0000000173 00000 n 0000736641 00000 n 0000000224 00000 n 0000043624 00000 n 0000000265 00000 n 0000736555 00000 n 0000000316 00000 n 0000043679 00000 n 0000000345 00000 n 0000736482 00000 n 0000000396 00000 n 0000047583 00000 n 0000000455 00000 n 0000736357 00000 n 0000000501 00000 n 0000047639 00000 n 0000000535 00000 n 0000736283 00000 n 0000000586 00000 n 0000051770 00000 n 0000000656 00000 n 0000736196 00000 n 0000000707 00000 n 0000051826 00000 n 0000000752 00000 n 0000736072 00000 n 0000000803 00000 n 0000051882 00000 n 0000000835 00000 n 0000735998 00000 n 0000000891 00000 n 0000056928 00000 n 0000000942 00000 n 0000735911 00000 n 0000000998 00000 n 0000063827 00000 n 0000001045 00000 n 0000735824 00000 n 0000001101 00000 n 0000063883 00000 n 0000001142 00000 n 0000735750 00000 n 0000001198 00000 n 0000066022 00000 n 0000001243 00000 n 0000735676 00000 n 0000001294 00000 n 0000071895 00000 n 0000001346 00000 n 0000735550 00000 n 0000001392 00000 n 0000071951 00000 n 0000001429 00000 n 0000735476 00000 n 0000001480 00000 n 0000078788 00000 n 0000001542 00000 n 0000735389 00000 n 0000001593 00000 n 0000078844 00000 n 0000001662 00000 n 0000735302 00000 n 0000001713 00000 n 0000086492 00000 n 0000001761 00000 n 0000735215 00000 n 0000001812 00000 n 0000086548 00000 n 0000001849 00000 n 0000735128 00000 n 0000001900 00000 n 0000086604 00000 n 0000001936 00000 n 0000735041 00000 n 0000001987 00000 n 0000097785 00000 n 0000002035 00000 n 0000734954 00000 n 0000002086 00000 n 0000097955 00000 n 0000002140 00000 n 0000734880 00000 n 0000002191 00000 n 0000099973 00000 n 0000002240 00000 n 0000734789 00000 n 0000002286 00000 n 0000103484 00000 n 0000002326 00000 n 0000734656 00000 n 0000002373 00000 n 0000103541 00000 n 0000002404 00000 n 0000734577 00000 n 0000002456 00000 n 0000103598 00000 n 0000002512 00000 n 0000734484 00000 n 0000002564 00000 n 0000112807 00000 n 0000002650 00000 n 0000734352 00000 n 0000002702 00000 n 0000112864 00000 n 0000002764 00000 n 0000734273 00000 n 0000002821 00000 n 0000117428 00000 n 0000002864 00000 n 0000734180 00000 n 0000002921 00000 n 0000124348 00000 n 0000002995 00000 n 0000734087 00000 n 0000003052 00000 n 0000124404 00000 n 0000003100 00000 n 0000733994 00000 n 0000003157 00000 n 0000128309 00000 n 0000003208 00000 n 0000733915 00000 n 0000003265 00000 n 0000132526 00000 n 0000003326 00000 n 0000733822 00000 n 0000003378 00000 n 0000136185 00000 n 0000003415 00000 n 0000733729 00000 n 0000003467 00000 n 0000161569 00000 n 0000003505 00000 n 0000733636 00000 n 0000003557 00000 n 0000164471 00000 n 0000003601 00000 n 0000733543 00000 n 0000003653 00000 n 0000172965 00000 n 0000003704 00000 n 0000733450 00000 n 0000003756 00000 n 0000181813 00000 n 0000003789 00000 n 0000733357 00000 n 0000003841 00000 n 0000185085 00000 n 0000003901 00000 n 0000733225 00000 n 0000003954 00000 n 0000188026 00000 n 0000004016 00000 n 0000733146 00000 n 0000004074 00000 n 0000191168 00000 n 0000004130 00000 n 0000733053 00000 n 0000004188 00000 n 0000201455 00000 n 0000004236 00000 n 0000732960 00000 n 0000004294 00000 n 0000204786 00000 n 0000004341 00000 n 0000732881 00000 n 0000004399 00000 n 0000208415 00000 n 0000004445 00000 n 0000732749 00000 n 0000004498 00000 n 0000208472 00000 n 0000004541 00000 n 0000732670 00000 n 0000004599 00000 n 0000215510 00000 n 0000004644 00000 n 0000732577 00000 n 0000004702 00000 n 0000230135 00000 n 0000004754 00000 n 0000732498 00000 n 0000004812 00000 n 0000234368 00000 n 0000004886 00000 n 0000732405 00000 n 0000004939 00000 n 0000242120 00000 n 0000004989 00000 n 0000732273 00000 n 0000005042 00000 n 0000242177 00000 n 0000005074 00000 n 0000732194 00000 n 0000005132 00000 n 0000245899 00000 n 0000005171 00000 n 0000732101 00000 n 0000005229 00000 n 0000248903 00000 n 0000005277 00000 n 0000732008 00000 n 0000005335 00000 n 0000252772 00000 n 0000005373 00000 n 0000731929 00000 n 0000005431 00000 n 0000257985 00000 n 0000005490 00000 n 0000731797 00000 n 0000005543 00000 n 0000272724 00000 n 0000005584 00000 n 0000731718 00000 n 0000005642 00000 n 0000279466 00000 n 0000005676 00000 n 0000731625 00000 n 0000005734 00000 n 0000288949 00000 n 0000005768 00000 n 0000731546 00000 n 0000005826 00000 n 0000319015 00000 n 0000005870 00000 n 0000731453 00000 n 0000005923 00000 n 0000319073 00000 n 0000005956 00000 n 0000731321 00000 n 0000006009 00000 n 0000319130 00000 n 0000006057 00000 n 0000731242 00000 n 0000006115 00000 n 0000323310 00000 n 0000006155 00000 n 0000731149 00000 n 0000006213 00000 n 0000327097 00000 n 0000006262 00000 n 0000731070 00000 n 0000006320 00000 n 0000334168 00000 n 0000006357 00000 n 0000730938 00000 n 0000006410 00000 n 0000334225 00000 n 0000006445 00000 n 0000730859 00000 n 0000006503 00000 n 0000338536 00000 n 0000006560 00000 n 0000730766 00000 n 0000006618 00000 n 0000342141 00000 n 0000006662 00000 n 0000730687 00000 n 0000006720 00000 n 0000342199 00000 n 0000006772 00000 n 0000730555 00000 n 0000006825 00000 n 0000342256 00000 n 0000006865 00000 n 0000730476 00000 n 0000006923 00000 n 0000345488 00000 n 0000006958 00000 n 0000730383 00000 n 0000007016 00000 n 0000353414 00000 n 0000007070 00000 n 0000730290 00000 n 0000007128 00000 n 0000353590 00000 n 0000007212 00000 n 0000730211 00000 n 0000007270 00000 n 0000357372 00000 n 0000007297 00000 n 0000730079 00000 n 0000007350 00000 n 0000357430 00000 n 0000007384 00000 n 0000730000 00000 n 0000007442 00000 n 0000361287 00000 n 0000007490 00000 n 0000729907 00000 n 0000007548 00000 n 0000361345 00000 n 0000007590 00000 n 0000729828 00000 n 0000007648 00000 n 0000365078 00000 n 0000007680 00000 n 0000729749 00000 n 0000007733 00000 n 0000371671 00000 n 0000007775 00000 n 0000729616 00000 n 0000007822 00000 n 0000371729 00000 n 0000007859 00000 n 0000729537 00000 n 0000007911 00000 n 0000371787 00000 n 0000007959 00000 n 0000729444 00000 n 0000008011 00000 n 0000374795 00000 n 0000008066 00000 n 0000729351 00000 n 0000008118 00000 n 0000382102 00000 n 0000008157 00000 n 0000729258 00000 n 0000008209 00000 n 0000382160 00000 n 0000008265 00000 n 0000729179 00000 n 0000008317 00000 n 0000387081 00000 n 0000008364 00000 n 0000729046 00000 n 0000008411 00000 n 0000387139 00000 n 0000008455 00000 n 0000728967 00000 n 0000008507 00000 n 0000446351 00000 n 0000008547 00000 n 0000728874 00000 n 0000008599 00000 n 0000447550 00000 n 0000008654 00000 n 0000728795 00000 n 0000008706 00000 n 0000454852 00000 n 0000008759 00000 n 0000728662 00000 n 0000008806 00000 n 0000454910 00000 n 0000008844 00000 n 0000728583 00000 n 0000008896 00000 n 0000461920 00000 n 0000008924 00000 n 0000728490 00000 n 0000008976 00000 n 0000484253 00000 n 0000009025 00000 n 0000728411 00000 n 0000009077 00000 n 0000489454 00000 n 0000009141 00000 n 0000728331 00000 n 0000009190 00000 n 0000009713 00000 n 0000009224 00000 n 0000011520 00000 n 0000011463 00000 n 0000011577 00000 n 0000009276 00000 n 0000009692 00000 n 0000711134 00000 n 0000704732 00000 n 0000699716 00000 n 0000725674 00000 n 0000022085 00000 n 0000022028 00000 n 0000022141 00000 n 0000014267 00000 n 0000011688 00000 n 0000014245 00000 n 0000014759 00000 n 0000683608 00000 n 0000014910 00000 n 0000662456 00000 n 0000643670 00000 n 0000015071 00000 n 0000015232 00000 n 0000015393 00000 n 0000015553 00000 n 0000015705 00000 n 0000015865 00000 n 0000016024 00000 n 0000016185 00000 n 0000016352 00000 n 0000016518 00000 n 0000016685 00000 n 0000016852 00000 n 0000017013 00000 n 0000017165 00000 n 0000017326 00000 n 0000017487 00000 n 0000017648 00000 n 0000017809 00000 n 0000017969 00000 n 0000018130 00000 n 0000018290 00000 n 0000018451 00000 n 0000018603 00000 n 0000018755 00000 n 0000018916 00000 n 0000019077 00000 n 0000019237 00000 n 0000019404 00000 n 0000019571 00000 n 0000019737 00000 n 0000019903 00000 n 0000020070 00000 n 0000020231 00000 n 0000020392 00000 n 0000020553 00000 n 0000020714 00000 n 0000020875 00000 n 0000021036 00000 n 0000021198 00000 n 0000021366 00000 n 0000021534 00000 n 0000021701 00000 n 0000021868 00000 n 0000032772 00000 n 0000032829 00000 n 0000024583 00000 n 0000022252 00000 n 0000024561 00000 n 0000025091 00000 n 0000025259 00000 n 0000025427 00000 n 0000025594 00000 n 0000025756 00000 n 0000025918 00000 n 0000026085 00000 n 0000026253 00000 n 0000026421 00000 n 0000026589 00000 n 0000026749 00000 n 0000026917 00000 n 0000027084 00000 n 0000027252 00000 n 0000027413 00000 n 0000027573 00000 n 0000027741 00000 n 0000027908 00000 n 0000028076 00000 n 0000028238 00000 n 0000028406 00000 n 0000028574 00000 n 0000028741 00000 n 0000028902 00000 n 0000029070 00000 n 0000029238 00000 n 0000029405 00000 n 0000029573 00000 n 0000029735 00000 n 0000029903 00000 n 0000030071 00000 n 0000030239 00000 n 0000030401 00000 n 0000030553 00000 n 0000030714 00000 n 0000030875 00000 n 0000031035 00000 n 0000031195 00000 n 0000031355 00000 n 0000031503 00000 n 0000031664 00000 n 0000031825 00000 n 0000031986 00000 n 0000032138 00000 n 0000032299 00000 n 0000032460 00000 n 0000032620 00000 n 0000036366 00000 n 0000036532 00000 n 0000036246 00000 n 0000032927 00000 n 0000036224 00000 n 0000637756 00000 n 0000623630 00000 n 0000618021 00000 n 0000040354 00000 n 0000040466 00000 n 0000039881 00000 n 0000036682 00000 n 0000039859 00000 n 0000040029 00000 n 0000040192 00000 n 0000043567 00000 n 0000043734 00000 n 0000043271 00000 n 0000040590 00000 n 0000043249 00000 n 0000611430 00000 n 0000043411 00000 n 0000600817 00000 n 0000047694 00000 n 0000047751 00000 n 0000047806 00000 n 0000047863 00000 n 0000047526 00000 n 0000047920 00000 n 0000047225 00000 n 0000043884 00000 n 0000047203 00000 n 0000047365 00000 n 0000595339 00000 n 0000725792 00000 n 0000051713 00000 n 0000051938 00000 n 0000051593 00000 n 0000048096 00000 n 0000051571 00000 n 0000056701 00000 n 0000056757 00000 n 0000056984 00000 n 0000056814 00000 n 0000056871 00000 n 0000057045 00000 n 0000057106 00000 n 0000056644 00000 n 0000057165 00000 n 0000055672 00000 n 0000052114 00000 n 0000055650 00000 n 0000055844 00000 n 0000056006 00000 n 0000056168 00000 n 0000056326 00000 n 0000056485 00000 n 0000590045 00000 n 0000576233 00000 n 0000566627 00000 n 0000060137 00000 n 0000060194 00000 n 0000060017 00000 n 0000057328 00000 n 0000059995 00000 n 0000063770 00000 n 0000063939 00000 n 0000063304 00000 n 0000060318 00000 n 0000063282 00000 n 0000063452 00000 n 0000063609 00000 n 0000065965 00000 n 0000066078 00000 n 0000065845 00000 n 0000064076 00000 n 0000065823 00000 n 0000066930 00000 n 0000066987 00000 n 0000066810 00000 n 0000066176 00000 n 0000066789 00000 n 0000725910 00000 n 0000067842 00000 n 0000067899 00000 n 0000067722 00000 n 0000067072 00000 n 0000067701 00000 n 0000071838 00000 n 0000072007 00000 n 0000071366 00000 n 0000067984 00000 n 0000071344 00000 n 0000562762 00000 n 0000071514 00000 n 0000071676 00000 n 0000075422 00000 n 0000075479 00000 n 0000075302 00000 n 0000072183 00000 n 0000075280 00000 n 0000078731 00000 n 0000078900 00000 n 0000078611 00000 n 0000075590 00000 n 0000078589 00000 n 0000082560 00000 n 0000082617 00000 n 0000081928 00000 n 0000079037 00000 n 0000081906 00000 n 0000082084 00000 n 0000082246 00000 n 0000082403 00000 n 0000086660 00000 n 0000086435 00000 n 0000086720 00000 n 0000086136 00000 n 0000082728 00000 n 0000086114 00000 n 0000086276 00000 n 0000726028 00000 n 0000090052 00000 n 0000090109 00000 n 0000089580 00000 n 0000086883 00000 n 0000089558 00000 n 0000089728 00000 n 0000089890 00000 n 0000094227 00000 n 0000094284 00000 n 0000093753 00000 n 0000090207 00000 n 0000093731 00000 n 0000093901 00000 n 0000094064 00000 n 0000097841 00000 n 0000097898 00000 n 0000097728 00000 n 0000098011 00000 n 0000097420 00000 n 0000094421 00000 n 0000097398 00000 n 0000097560 00000 n 0000099916 00000 n 0000100029 00000 n 0000099443 00000 n 0000098135 00000 n 0000099421 00000 n 0000099591 00000 n 0000099754 00000 n 0000103427 00000 n 0000103655 00000 n 0000103307 00000 n 0000100140 00000 n 0000103285 00000 n 0000107907 00000 n 0000107964 00000 n 0000107440 00000 n 0000103818 00000 n 0000107418 00000 n 0000107588 00000 n 0000107748 00000 n 0000726146 00000 n 0000112921 00000 n 0000112978 00000 n 0000113035 00000 n 0000117201 00000 n 0000112750 00000 n 0000113091 00000 n 0000111762 00000 n 0000108075 00000 n 0000111740 00000 n 0000111934 00000 n 0000112090 00000 n 0000112252 00000 n 0000112414 00000 n 0000112582 00000 n 0000117258 00000 n 0000117314 00000 n 0000117371 00000 n 0000117144 00000 n 0000117485 00000 n 0000116508 00000 n 0000113228 00000 n 0000116486 00000 n 0000116664 00000 n 0000116825 00000 n 0000116988 00000 n 0000120940 00000 n 0000120997 00000 n 0000120820 00000 n 0000117609 00000 n 0000120798 00000 n 0000128025 00000 n 0000124291 00000 n 0000124461 00000 n 0000124171 00000 n 0000121095 00000 n 0000124149 00000 n 0000128082 00000 n 0000128139 00000 n 0000128196 00000 n 0000128252 00000 n 0000127968 00000 n 0000128366 00000 n 0000127848 00000 n 0000124585 00000 n 0000127826 00000 n 0000132469 00000 n 0000132583 00000 n 0000132000 00000 n 0000128490 00000 n 0000131978 00000 n 0000132148 00000 n 0000132308 00000 n 0000554555 00000 n 0000726264 00000 n 0000136128 00000 n 0000136241 00000 n 0000136008 00000 n 0000132720 00000 n 0000135986 00000 n 0000542247 00000 n 0000139592 00000 n 0000139649 00000 n 0000139295 00000 n 0000136365 00000 n 0000139273 00000 n 0000139435 00000 n 0000143990 00000 n 0000144047 00000 n 0000143347 00000 n 0000139760 00000 n 0000143325 00000 n 0000143503 00000 n 0000143665 00000 n 0000143827 00000 n 0000148570 00000 n 0000148513 00000 n 0000148631 00000 n 0000148047 00000 n 0000144158 00000 n 0000148025 00000 n 0000148195 00000 n 0000148354 00000 n 0000153387 00000 n 0000153330 00000 n 0000153448 00000 n 0000152863 00000 n 0000148794 00000 n 0000152841 00000 n 0000153011 00000 n 0000153173 00000 n 0000157722 00000 n 0000157779 00000 n 0000157836 00000 n 0000157665 00000 n 0000157893 00000 n 0000157545 00000 n 0000153637 00000 n 0000157523 00000 n 0000726382 00000 n 0000161512 00000 n 0000161626 00000 n 0000160534 00000 n 0000158017 00000 n 0000160512 00000 n 0000160706 00000 n 0000160869 00000 n 0000161030 00000 n 0000161192 00000 n 0000161355 00000 n 0000164414 00000 n 0000164528 00000 n 0000164294 00000 n 0000161737 00000 n 0000164272 00000 n 0000168739 00000 n 0000168626 00000 n 0000168682 00000 n 0000168569 00000 n 0000168799 00000 n 0000168100 00000 n 0000164652 00000 n 0000168078 00000 n 0000168248 00000 n 0000168410 00000 n 0000173022 00000 n 0000173083 00000 n 0000172908 00000 n 0000173143 00000 n 0000172278 00000 n 0000168936 00000 n 0000172256 00000 n 0000172434 00000 n 0000172592 00000 n 0000172751 00000 n 0000177474 00000 n 0000177417 00000 n 0000177534 00000 n 0000176621 00000 n 0000173319 00000 n 0000176599 00000 n 0000176785 00000 n 0000176942 00000 n 0000177099 00000 n 0000177258 00000 n 0000181756 00000 n 0000181870 00000 n 0000181101 00000 n 0000177697 00000 n 0000181079 00000 n 0000181257 00000 n 0000181420 00000 n 0000181588 00000 n 0000726500 00000 n 0000185142 00000 n 0000185199 00000 n 0000185255 00000 n 0000185312 00000 n 0000185028 00000 n 0000185369 00000 n 0000184726 00000 n 0000182007 00000 n 0000184704 00000 n 0000184866 00000 n 0000187969 00000 n 0000188083 00000 n 0000187666 00000 n 0000185493 00000 n 0000187644 00000 n 0000187806 00000 n 0000191111 00000 n 0000191225 00000 n 0000190809 00000 n 0000188194 00000 n 0000190787 00000 n 0000190949 00000 n 0000194599 00000 n 0000194656 00000 n 0000194126 00000 n 0000191349 00000 n 0000194104 00000 n 0000194274 00000 n 0000194437 00000 n 0000197891 00000 n 0000197948 00000 n 0000197589 00000 n 0000194754 00000 n 0000197567 00000 n 0000197729 00000 n 0000201398 00000 n 0000201512 00000 n 0000201097 00000 n 0000198072 00000 n 0000201075 00000 n 0000201237 00000 n 0000726618 00000 n 0000204729 00000 n 0000204843 00000 n 0000204252 00000 n 0000201649 00000 n 0000204230 00000 n 0000204400 00000 n 0000204562 00000 n 0000208358 00000 n 0000208529 00000 n 0000208055 00000 n 0000204954 00000 n 0000208033 00000 n 0000208195 00000 n 0000212157 00000 n 0000212214 00000 n 0000212037 00000 n 0000208679 00000 n 0000212015 00000 n 0000226934 00000 n 0000217046 00000 n 0000218258 00000 n 0000219470 00000 n 0000220696 00000 n 0000221923 00000 n 0000223153 00000 n 0000224388 00000 n 0000225620 00000 n 0000215453 00000 n 0000215567 00000 n 0000215158 00000 n 0000212338 00000 n 0000215136 00000 n 0000534846 00000 n 0000528442 00000 n 0000215298 00000 n 0000226877 00000 n 0000226996 00000 n 0000216926 00000 n 0000215755 00000 n 0000216904 00000 n 0000218189 00000 n 0000217265 00000 n 0000217285 00000 n 0000218105 00000 n 0000218084 00000 n 0000219401 00000 n 0000218477 00000 n 0000218497 00000 n 0000219317 00000 n 0000219296 00000 n 0000220627 00000 n 0000219689 00000 n 0000219709 00000 n 0000220543 00000 n 0000220522 00000 n 0000221854 00000 n 0000220915 00000 n 0000220935 00000 n 0000221770 00000 n 0000221749 00000 n 0000223084 00000 n 0000222142 00000 n 0000222162 00000 n 0000223000 00000 n 0000222979 00000 n 0000224319 00000 n 0000223372 00000 n 0000223392 00000 n 0000224235 00000 n 0000224214 00000 n 0000225551 00000 n 0000224607 00000 n 0000224627 00000 n 0000225467 00000 n 0000225446 00000 n 0000226808 00000 n 0000225839 00000 n 0000225859 00000 n 0000226724 00000 n 0000226703 00000 n 0000230078 00000 n 0000230192 00000 n 0000229958 00000 n 0000227239 00000 n 0000229936 00000 n 0000726736 00000 n 0000234311 00000 n 0000234425 00000 n 0000233850 00000 n 0000230354 00000 n 0000233828 00000 n 0000233998 00000 n 0000234155 00000 n 0000238244 00000 n 0000238301 00000 n 0000237770 00000 n 0000234600 00000 n 0000237748 00000 n 0000237918 00000 n 0000238081 00000 n 0000242063 00000 n 0000242234 00000 n 0000241761 00000 n 0000238412 00000 n 0000241739 00000 n 0000241901 00000 n 0000245842 00000 n 0000245956 00000 n 0000245371 00000 n 0000242384 00000 n 0000245349 00000 n 0000245519 00000 n 0000245680 00000 n 0000248846 00000 n 0000248960 00000 n 0000248726 00000 n 0000246067 00000 n 0000248704 00000 n 0000252710 00000 n 0000251722 00000 n 0000258042 00000 n 0000252653 00000 n 0000252829 00000 n 0000251582 00000 n 0000249084 00000 n 0000251560 00000 n 0000252498 00000 n 0000726854 00000 n 0000252429 00000 n 0000251931 00000 n 0000251951 00000 n 0000252408 00000 n 0000272600 00000 n 0000260326 00000 n 0000262125 00000 n 0000258103 00000 n 0000272662 00000 n 0000263918 00000 n 0000257928 00000 n 0000258164 00000 n 0000257127 00000 n 0000252981 00000 n 0000257105 00000 n 0000257291 00000 n 0000257451 00000 n 0000257612 00000 n 0000257768 00000 n 0000276756 00000 n 0000272543 00000 n 0000272781 00000 n 0000260184 00000 n 0000258353 00000 n 0000260161 00000 n 0000272386 00000 n 0000262053 00000 n 0000260548 00000 n 0000260569 00000 n 0000260874 00000 n 0000260853 00000 n 0000262031 00000 n 0000263846 00000 n 0000262347 00000 n 0000262368 00000 n 0000262673 00000 n 0000262652 00000 n 0000263824 00000 n 0000272314 00000 n 0000264140 00000 n 0000264161 00000 n 0000266962 00000 n 0000266939 00000 n 0000267401 00000 n 0000268886 00000 n 0000269148 00000 n 0000269429 00000 n 0000269713 00000 n 0000269953 00000 n 0000270236 00000 n 0000270503 00000 n 0000270742 00000 n 0000271018 00000 n 0000271283 00000 n 0000271499 00000 n 0000271734 00000 n 0000271850 00000 n 0000271966 00000 n 0000272082 00000 n 0000272198 00000 n 0000269126 00000 n 0000269407 00000 n 0000269691 00000 n 0000269931 00000 n 0000270214 00000 n 0000270481 00000 n 0000270720 00000 n 0000270996 00000 n 0000271261 00000 n 0000271477 00000 n 0000271712 00000 n 0000271829 00000 n 0000271945 00000 n 0000272061 00000 n 0000272177 00000 n 0000272293 00000 n 0000276697 00000 n 0000276818 00000 n 0000276229 00000 n 0000272988 00000 n 0000276206 00000 n 0000276382 00000 n 0000276541 00000 n 0000279407 00000 n 0000279524 00000 n 0000279284 00000 n 0000277021 00000 n 0000279261 00000 n 0000282256 00000 n 0000282315 00000 n 0000281957 00000 n 0000279636 00000 n 0000281934 00000 n 0000282101 00000 n 0000289007 00000 n 0000288885 00000 n 0000285459 00000 n 0000288826 00000 n 0000289070 00000 n 0000285287 00000 n 0000282427 00000 n 0000285264 00000 n 0000288180 00000 n 0000288348 00000 n 0000288508 00000 n 0000288665 00000 n 0000726975 00000 n 0000288108 00000 n 0000285682 00000 n 0000285703 00000 n 0000286017 00000 n 0000285996 00000 n 0000288085 00000 n 0000315181 00000 n 0000294912 00000 n 0000298401 00000 n 0000302160 00000 n 0000306392 00000 n 0000311246 00000 n 0000291842 00000 n 0000291901 00000 n 0000291718 00000 n 0000289290 00000 n 0000291695 00000 n 0000315122 00000 n 0000315245 00000 n 0000294749 00000 n 0000292013 00000 n 0000294726 00000 n 0000314653 00000 n 0000314810 00000 n 0000314966 00000 n 0000298329 00000 n 0000295130 00000 n 0000295151 00000 n 0000295457 00000 n 0000295436 00000 n 0000298306 00000 n 0000302088 00000 n 0000298619 00000 n 0000298640 00000 n 0000298945 00000 n 0000298924 00000 n 0000302065 00000 n 0000306320 00000 n 0000302378 00000 n 0000302399 00000 n 0000302705 00000 n 0000302684 00000 n 0000306297 00000 n 0000311174 00000 n 0000306610 00000 n 0000306631 00000 n 0000306937 00000 n 0000306916 00000 n 0000311151 00000 n 0000314581 00000 n 0000311464 00000 n 0000311485 00000 n 0000311791 00000 n 0000311770 00000 n 0000314558 00000 n 0000319188 00000 n 0000319247 00000 n 0000318956 00000 n 0000319306 00000 n 0000318832 00000 n 0000315460 00000 n 0000318809 00000 n 0000323075 00000 n 0000323368 00000 n 0000323134 00000 n 0000323193 00000 n 0000323252 00000 n 0000323016 00000 n 0000323430 00000 n 0000322533 00000 n 0000319457 00000 n 0000322510 00000 n 0000322687 00000 n 0000322848 00000 n 0000327155 00000 n 0000327214 00000 n 0000327272 00000 n 0000327331 00000 n 0000327390 00000 n 0000327038 00000 n 0000327449 00000 n 0000326914 00000 n 0000323594 00000 n 0000326891 00000 n 0000330655 00000 n 0000330714 00000 n 0000330773 00000 n 0000330832 00000 n 0000330596 00000 n 0000330891 00000 n 0000330472 00000 n 0000327574 00000 n 0000330449 00000 n 0000727100 00000 n 0000334109 00000 n 0000334283 00000 n 0000333985 00000 n 0000330990 00000 n 0000333962 00000 n 0000338477 00000 n 0000338594 00000 n 0000338353 00000 n 0000334408 00000 n 0000338330 00000 n 0000342082 00000 n 0000342314 00000 n 0000341958 00000 n 0000338706 00000 n 0000341935 00000 n 0000345429 00000 n 0000345546 00000 n 0000345305 00000 n 0000342439 00000 n 0000345282 00000 n 0000349639 00000 n 0000349698 00000 n 0000349331 00000 n 0000345658 00000 n 0000349308 00000 n 0000349476 00000 n 0000353472 00000 n 0000353531 00000 n 0000353355 00000 n 0000353648 00000 n 0000353231 00000 n 0000349810 00000 n 0000353208 00000 n 0000727225 00000 n 0000357313 00000 n 0000357488 00000 n 0000357189 00000 n 0000353747 00000 n 0000357166 00000 n 0000361228 00000 n 0000361403 00000 n 0000360914 00000 n 0000357613 00000 n 0000360891 00000 n 0000361059 00000 n 0000365019 00000 n 0000365136 00000 n 0000364895 00000 n 0000361528 00000 n 0000364872 00000 n 0000368258 00000 n 0000368317 00000 n 0000367950 00000 n 0000365261 00000 n 0000367927 00000 n 0000368095 00000 n 0000371612 00000 n 0000371845 00000 n 0000371488 00000 n 0000368429 00000 n 0000371465 00000 n 0000374736 00000 n 0000374853 00000 n 0000374427 00000 n 0000371983 00000 n 0000374404 00000 n 0000374572 00000 n 0000727350 00000 n 0000378950 00000 n 0000379009 00000 n 0000379068 00000 n 0000378891 00000 n 0000379127 00000 n 0000378583 00000 n 0000374965 00000 n 0000378560 00000 n 0000378728 00000 n 0000382043 00000 n 0000382218 00000 n 0000381919 00000 n 0000379265 00000 n 0000381896 00000 n 0000382840 00000 n 0000382899 00000 n 0000382716 00000 n 0000382343 00000 n 0000382694 00000 n 0000437596 00000 n 0000387955 00000 n 0000387022 00000 n 0000387197 00000 n 0000386382 00000 n 0000382985 00000 n 0000386359 00000 n 0000524347 00000 n 0000517328 00000 n 0000386545 00000 n 0000386702 00000 n 0000386859 00000 n 0000437537 00000 n 0000437660 00000 n 0000387831 00000 n 0000387350 00000 n 0000387809 00000 n 0000437465 00000 n 0000388178 00000 n 0000388199 00000 n 0000394514 00000 n 0000394491 00000 n 0000397790 00000 n 0000399275 00000 n 0000399510 00000 n 0000399713 00000 n 0000399916 00000 n 0000400143 00000 n 0000400379 00000 n 0000400590 00000 n 0000400848 00000 n 0000401065 00000 n 0000401317 00000 n 0000401579 00000 n 0000401849 00000 n 0000402112 00000 n 0000402316 00000 n 0000402573 00000 n 0000402824 00000 n 0000403049 00000 n 0000403272 00000 n 0000403493 00000 n 0000403784 00000 n 0000404071 00000 n 0000404374 00000 n 0000404584 00000 n 0000404894 00000 n 0000405159 00000 n 0000405442 00000 n 0000405674 00000 n 0000405962 00000 n 0000406251 00000 n 0000406575 00000 n 0000406866 00000 n 0000407168 00000 n 0000407443 00000 n 0000407726 00000 n 0000407944 00000 n 0000408171 00000 n 0000408457 00000 n 0000408734 00000 n 0000408976 00000 n 0000409180 00000 n 0000409387 00000 n 0000409627 00000 n 0000409842 00000 n 0000410180 00000 n 0000410397 00000 n 0000410620 00000 n 0000410822 00000 n 0000411091 00000 n 0000411375 00000 n 0000411587 00000 n 0000411849 00000 n 0000412093 00000 n 0000412314 00000 n 0000412555 00000 n 0000412780 00000 n 0000413028 00000 n 0000413271 00000 n 0000413506 00000 n 0000413709 00000 n 0000413950 00000 n 0000414181 00000 n 0000414406 00000 n 0000414615 00000 n 0000414826 00000 n 0000415067 00000 n 0000415325 00000 n 0000415585 00000 n 0000415798 00000 n 0000416061 00000 n 0000416327 00000 n 0000416557 00000 n 0000416791 00000 n 0000416995 00000 n 0000417199 00000 n 0000417446 00000 n 0000417695 00000 n 0000417915 00000 n 0000418166 00000 n 0000418425 00000 n 0000418658 00000 n 0000418861 00000 n 0000419075 00000 n 0000419283 00000 n 0000419504 00000 n 0000419726 00000 n 0000419974 00000 n 0000420258 00000 n 0000420468 00000 n 0000420709 00000 n 0000420955 00000 n 0000421206 00000 n 0000421449 00000 n 0000421672 00000 n 0000421889 00000 n 0000422109 00000 n 0000422360 00000 n 0000422576 00000 n 0000422782 00000 n 0000423020 00000 n 0000423249 00000 n 0000423479 00000 n 0000423699 00000 n 0000423957 00000 n 0000424172 00000 n 0000424380 00000 n 0000424641 00000 n 0000424891 00000 n 0000425139 00000 n 0000425348 00000 n 0000425570 00000 n 0000425812 00000 n 0000426066 00000 n 0000426316 00000 n 0000426539 00000 n 0000426809 00000 n 0000427053 00000 n 0000427268 00000 n 0000427517 00000 n 0000427721 00000 n 0000427920 00000 n 0000428156 00000 n 0000428403 00000 n 0000428634 00000 n 0000428899 00000 n 0000429107 00000 n 0000429347 00000 n 0000429592 00000 n 0000429834 00000 n 0000430036 00000 n 0000430295 00000 n 0000430517 00000 n 0000430736 00000 n 0000430985 00000 n 0000431201 00000 n 0000431448 00000 n 0000431669 00000 n 0000431785 00000 n 0000431901 00000 n 0000432017 00000 n 0000432133 00000 n 0000432249 00000 n 0000432365 00000 n 0000432480 00000 n 0000432596 00000 n 0000432712 00000 n 0000432828 00000 n 0000432944 00000 n 0000433060 00000 n 0000433176 00000 n 0000433292 00000 n 0000433408 00000 n 0000433524 00000 n 0000433640 00000 n 0000433756 00000 n 0000433872 00000 n 0000433988 00000 n 0000434104 00000 n 0000434220 00000 n 0000434336 00000 n 0000434452 00000 n 0000434567 00000 n 0000434683 00000 n 0000434799 00000 n 0000434915 00000 n 0000435031 00000 n 0000435147 00000 n 0000435263 00000 n 0000435379 00000 n 0000435494 00000 n 0000435610 00000 n 0000435726 00000 n 0000435842 00000 n 0000435958 00000 n 0000436074 00000 n 0000436190 00000 n 0000436306 00000 n 0000436422 00000 n 0000436538 00000 n 0000436654 00000 n 0000436770 00000 n 0000436886 00000 n 0000437002 00000 n 0000437117 00000 n 0000437233 00000 n 0000437349 00000 n 0000399488 00000 n 0000399691 00000 n 0000399894 00000 n 0000400121 00000 n 0000400357 00000 n 0000400568 00000 n 0000400826 00000 n 0000401043 00000 n 0000401295 00000 n 0000401557 00000 n 0000401827 00000 n 0000402090 00000 n 0000402294 00000 n 0000402551 00000 n 0000402802 00000 n 0000403027 00000 n 0000403250 00000 n 0000403471 00000 n 0000403762 00000 n 0000404049 00000 n 0000404352 00000 n 0000404562 00000 n 0000404872 00000 n 0000405137 00000 n 0000405420 00000 n 0000405652 00000 n 0000405940 00000 n 0000406229 00000 n 0000406553 00000 n 0000406844 00000 n 0000407146 00000 n 0000407421 00000 n 0000407704 00000 n 0000407922 00000 n 0000408149 00000 n 0000408435 00000 n 0000408712 00000 n 0000408954 00000 n 0000409158 00000 n 0000409365 00000 n 0000409605 00000 n 0000409820 00000 n 0000410158 00000 n 0000410375 00000 n 0000410598 00000 n 0000410800 00000 n 0000411069 00000 n 0000411353 00000 n 0000411565 00000 n 0000411827 00000 n 0000412071 00000 n 0000412292 00000 n 0000412533 00000 n 0000412758 00000 n 0000413006 00000 n 0000413249 00000 n 0000413484 00000 n 0000413687 00000 n 0000413928 00000 n 0000414159 00000 n 0000414384 00000 n 0000414593 00000 n 0000414804 00000 n 0000415045 00000 n 0000415303 00000 n 0000415563 00000 n 0000415776 00000 n 0000416039 00000 n 0000416305 00000 n 0000416535 00000 n 0000416769 00000 n 0000416973 00000 n 0000417177 00000 n 0000417424 00000 n 0000417673 00000 n 0000417893 00000 n 0000418144 00000 n 0000418403 00000 n 0000418636 00000 n 0000418839 00000 n 0000419053 00000 n 0000419261 00000 n 0000419482 00000 n 0000419704 00000 n 0000419952 00000 n 0000420236 00000 n 0000420446 00000 n 0000420687 00000 n 0000420933 00000 n 0000421184 00000 n 0000421427 00000 n 0000421650 00000 n 0000421867 00000 n 0000422087 00000 n 0000422338 00000 n 0000422554 00000 n 0000422760 00000 n 0000422998 00000 n 0000423227 00000 n 0000423457 00000 n 0000423677 00000 n 0000423935 00000 n 0000424150 00000 n 0000424358 00000 n 0000424619 00000 n 0000424869 00000 n 0000425117 00000 n 0000425326 00000 n 0000425548 00000 n 0000425790 00000 n 0000426044 00000 n 0000426294 00000 n 0000426517 00000 n 0000426787 00000 n 0000427031 00000 n 0000427246 00000 n 0000427495 00000 n 0000427699 00000 n 0000427899 00000 n 0000428134 00000 n 0000428381 00000 n 0000428612 00000 n 0000428877 00000 n 0000429085 00000 n 0000429325 00000 n 0000429570 00000 n 0000429812 00000 n 0000430014 00000 n 0000430273 00000 n 0000430495 00000 n 0000430714 00000 n 0000430963 00000 n 0000431179 00000 n 0000431426 00000 n 0000431647 00000 n 0000431764 00000 n 0000431880 00000 n 0000431996 00000 n 0000432112 00000 n 0000432228 00000 n 0000432344 00000 n 0000432459 00000 n 0000432575 00000 n 0000432691 00000 n 0000432807 00000 n 0000432923 00000 n 0000433039 00000 n 0000433155 00000 n 0000433271 00000 n 0000433387 00000 n 0000433503 00000 n 0000433619 00000 n 0000433735 00000 n 0000433851 00000 n 0000433967 00000 n 0000434083 00000 n 0000434199 00000 n 0000434315 00000 n 0000434431 00000 n 0000434546 00000 n 0000434662 00000 n 0000434778 00000 n 0000434894 00000 n 0000435010 00000 n 0000435126 00000 n 0000435242 00000 n 0000435358 00000 n 0000435473 00000 n 0000435589 00000 n 0000435705 00000 n 0000435821 00000 n 0000435937 00000 n 0000436053 00000 n 0000436169 00000 n 0000436285 00000 n 0000436401 00000 n 0000436517 00000 n 0000436633 00000 n 0000436749 00000 n 0000436865 00000 n 0000436981 00000 n 0000437096 00000 n 0000437212 00000 n 0000437328 00000 n 0000437444 00000 n 0000441681 00000 n 0000441740 00000 n 0000441373 00000 n 0000437776 00000 n 0000441350 00000 n 0000441518 00000 n 0000727475 00000 n 0000446292 00000 n 0000446409 00000 n 0000445475 00000 n 0000441852 00000 n 0000445452 00000 n 0000445647 00000 n 0000445811 00000 n 0000445972 00000 n 0000446129 00000 n 0000447491 00000 n 0000447608 00000 n 0000447367 00000 n 0000446521 00000 n 0000447345 00000 n 0000454788 00000 n 0000450639 00000 n 0000452327 00000 n 0000454729 00000 n 0000454968 00000 n 0000450494 00000 n 0000447720 00000 n 0000450471 00000 n 0000454573 00000 n 0000452255 00000 n 0000450862 00000 n 0000450883 00000 n 0000452232 00000 n 0000454501 00000 n 0000452550 00000 n 0000452571 00000 n 0000454478 00000 n 0000461856 00000 n 0000458113 00000 n 0000459805 00000 n 0000461797 00000 n 0000461978 00000 n 0000457959 00000 n 0000455138 00000 n 0000457936 00000 n 0000461484 00000 n 0000461640 00000 n 0000459733 00000 n 0000458336 00000 n 0000458357 00000 n 0000459710 00000 n 0000461412 00000 n 0000460028 00000 n 0000460049 00000 n 0000461389 00000 n 0000467120 00000 n 0000464431 00000 n 0000467061 00000 n 0000467184 00000 n 0000464286 00000 n 0000462135 00000 n 0000464263 00000 n 0000466903 00000 n 0000466831 00000 n 0000464654 00000 n 0000464675 00000 n 0000466748 00000 n 0000466725 00000 n 0000471561 00000 n 0000471625 00000 n 0000471689 00000 n 0000471753 00000 n 0000471817 00000 n 0000471881 00000 n 0000471945 00000 n 0000472009 00000 n 0000472073 00000 n 0000472136 00000 n 0000472200 00000 n 0000472263 00000 n 0000479351 00000 n 0000471502 00000 n 0000472327 00000 n 0000470863 00000 n 0000467339 00000 n 0000470840 00000 n 0000471026 00000 n 0000471184 00000 n 0000471343 00000 n 0000727600 00000 n 0000479415 00000 n 0000479479 00000 n 0000479543 00000 n 0000479607 00000 n 0000479671 00000 n 0000479735 00000 n 0000479292 00000 n 0000479799 00000 n 0000476807 00000 n 0000472490 00000 n 0000476784 00000 n 0000477069 00000 n 0000477227 00000 n 0000477386 00000 n 0000477545 00000 n 0000477705 00000 n 0000477864 00000 n 0000478022 00000 n 0000478182 00000 n 0000478341 00000 n 0000478500 00000 n 0000478659 00000 n 0000478817 00000 n 0000478976 00000 n 0000479134 00000 n 0000484311 00000 n 0000484370 00000 n 0000489390 00000 n 0000486979 00000 n 0000484194 00000 n 0000484429 00000 n 0000483387 00000 n 0000479949 00000 n 0000483364 00000 n 0000483559 00000 n 0000483719 00000 n 0000483877 00000 n 0000484036 00000 n 0000489331 00000 n 0000489517 00000 n 0000486855 00000 n 0000484580 00000 n 0000486832 00000 n 0000489259 00000 n 0000487202 00000 n 0000487223 00000 n 0000489236 00000 n 0000490483 00000 n 0000490542 00000 n 0000490359 00000 n 0000489658 00000 n 0000490337 00000 n 0000508315 00000 n 0000508256 00000 n 0000508374 00000 n 0000492490 00000 n 0000490641 00000 n 0000492467 00000 n 0000493481 00000 n 0000493637 00000 n 0000493793 00000 n 0000493948 00000 n 0000494104 00000 n 0000494260 00000 n 0000494416 00000 n 0000494572 00000 n 0000494727 00000 n 0000494883 00000 n 0000495039 00000 n 0000495194 00000 n 0000495350 00000 n 0000495506 00000 n 0000495662 00000 n 0000495818 00000 n 0000495973 00000 n 0000496128 00000 n 0000496284 00000 n 0000496440 00000 n 0000496595 00000 n 0000496750 00000 n 0000496906 00000 n 0000497062 00000 n 0000497217 00000 n 0000497373 00000 n 0000497529 00000 n 0000497684 00000 n 0000497838 00000 n 0000497994 00000 n 0000498150 00000 n 0000498305 00000 n 0000498459 00000 n 0000498614 00000 n 0000498770 00000 n 0000498926 00000 n 0000499082 00000 n 0000499238 00000 n 0000499394 00000 n 0000499549 00000 n 0000499704 00000 n 0000499860 00000 n 0000500016 00000 n 0000500171 00000 n 0000500325 00000 n 0000500481 00000 n 0000500636 00000 n 0000500790 00000 n 0000500946 00000 n 0000501102 00000 n 0000501258 00000 n 0000501414 00000 n 0000501569 00000 n 0000501725 00000 n 0000501880 00000 n 0000502035 00000 n 0000502191 00000 n 0000502347 00000 n 0000502503 00000 n 0000502659 00000 n 0000502814 00000 n 0000502970 00000 n 0000503126 00000 n 0000503281 00000 n 0000503435 00000 n 0000503589 00000 n 0000503745 00000 n 0000503901 00000 n 0000504056 00000 n 0000504212 00000 n 0000504368 00000 n 0000504524 00000 n 0000504679 00000 n 0000504835 00000 n 0000504991 00000 n 0000505147 00000 n 0000505302 00000 n 0000505458 00000 n 0000505614 00000 n 0000505770 00000 n 0000505924 00000 n 0000506080 00000 n 0000506236 00000 n 0000506391 00000 n 0000506547 00000 n 0000506703 00000 n 0000506858 00000 n 0000507014 00000 n 0000507169 00000 n 0000507325 00000 n 0000507481 00000 n 0000507636 00000 n 0000507790 00000 n 0000507946 00000 n 0000508102 00000 n 0000517183 00000 n 0000517242 00000 n 0000509647 00000 n 0000508473 00000 n 0000509624 00000 n 0000510188 00000 n 0000510343 00000 n 0000510499 00000 n 0000510653 00000 n 0000510809 00000 n 0000510965 00000 n 0000511121 00000 n 0000511276 00000 n 0000511432 00000 n 0000511588 00000 n 0000511743 00000 n 0000511897 00000 n 0000512053 00000 n 0000512209 00000 n 0000512364 00000 n 0000512518 00000 n 0000512674 00000 n 0000512830 00000 n 0000512985 00000 n 0000513141 00000 n 0000513297 00000 n 0000513453 00000 n 0000513607 00000 n 0000513762 00000 n 0000513917 00000 n 0000514073 00000 n 0000514226 00000 n 0000514382 00000 n 0000514538 00000 n 0000514693 00000 n 0000514849 00000 n 0000515005 00000 n 0000515161 00000 n 0000515317 00000 n 0000515472 00000 n 0000515628 00000 n 0000515784 00000 n 0000515940 00000 n 0000516094 00000 n 0000516250 00000 n 0000516406 00000 n 0000516561 00000 n 0000516717 00000 n 0000516872 00000 n 0000517028 00000 n 0000727725 00000 n 0000517468 00000 n 0000518002 00000 n 0000523960 00000 n 0000523983 00000 n 0000524006 00000 n 0000524029 00000 n 0000524051 00000 n 0000524084 00000 n 0000524487 00000 n 0000525025 00000 n 0000528107 00000 n 0000528130 00000 n 0000528152 00000 n 0000528175 00000 n 0000528197 00000 n 0000528232 00000 n 0000528581 00000 n 0000529146 00000 n 0000534272 00000 n 0000534295 00000 n 0000534318 00000 n 0000534341 00000 n 0000534363 00000 n 0000534396 00000 n 0000534985 00000 n 0000535527 00000 n 0000541891 00000 n 0000541914 00000 n 0000541937 00000 n 0000541960 00000 n 0000541982 00000 n 0000542014 00000 n 0000542386 00000 n 0000542920 00000 n 0000554048 00000 n 0000554072 00000 n 0000554095 00000 n 0000554118 00000 n 0000554140 00000 n 0000554172 00000 n 0000554694 00000 n 0000555231 00000 n 0000562374 00000 n 0000562397 00000 n 0000562420 00000 n 0000562443 00000 n 0000562465 00000 n 0000562498 00000 n 0000562901 00000 n 0000563447 00000 n 0000566289 00000 n 0000566312 00000 n 0000566334 00000 n 0000566357 00000 n 0000566379 00000 n 0000566411 00000 n 0000566766 00000 n 0000567300 00000 n 0000575768 00000 n 0000575791 00000 n 0000575814 00000 n 0000575837 00000 n 0000575859 00000 n 0000575891 00000 n 0000576372 00000 n 0000576909 00000 n 0000589514 00000 n 0000589538 00000 n 0000589561 00000 n 0000589585 00000 n 0000589607 00000 n 0000589638 00000 n 0000590184 00000 n 0000590729 00000 n 0000594974 00000 n 0000594997 00000 n 0000595019 00000 n 0000595042 00000 n 0000595064 00000 n 0000595095 00000 n 0000595478 00000 n 0000596015 00000 n 0000600450 00000 n 0000600473 00000 n 0000600495 00000 n 0000600518 00000 n 0000600540 00000 n 0000600571 00000 n 0000600956 00000 n 0000601496 00000 n 0000610998 00000 n 0000611021 00000 n 0000611044 00000 n 0000611067 00000 n 0000611089 00000 n 0000611122 00000 n 0000611569 00000 n 0000612104 00000 n 0000617662 00000 n 0000617685 00000 n 0000617708 00000 n 0000617731 00000 n 0000617753 00000 n 0000617785 00000 n 0000618160 00000 n 0000618705 00000 n 0000623202 00000 n 0000623225 00000 n 0000623248 00000 n 0000623271 00000 n 0000623293 00000 n 0000623326 00000 n 0000623769 00000 n 0000624304 00000 n 0000637322 00000 n 0000637346 00000 n 0000637369 00000 n 0000637393 00000 n 0000637415 00000 n 0000637448 00000 n 0000637895 00000 n 0000638429 00000 n 0000643323 00000 n 0000643346 00000 n 0000643368 00000 n 0000643391 00000 n 0000643413 00000 n 0000643446 00000 n 0000643809 00000 n 0000644343 00000 n 0000661749 00000 n 0000661773 00000 n 0000661796 00000 n 0000661820 00000 n 0000661842 00000 n 0000661875 00000 n 0000662595 00000 n 0000663132 00000 n 0000682890 00000 n 0000682914 00000 n 0000682937 00000 n 0000682961 00000 n 0000682983 00000 n 0000683015 00000 n 0000683747 00000 n 0000684286 00000 n 0000699173 00000 n 0000699197 00000 n 0000699220 00000 n 0000699244 00000 n 0000699266 00000 n 0000699299 00000 n 0000699855 00000 n 0000700392 00000 n 0000704397 00000 n 0000704420 00000 n 0000704442 00000 n 0000704465 00000 n 0000704487 00000 n 0000704521 00000 n 0000704871 00000 n 0000705406 00000 n 0000710753 00000 n 0000710776 00000 n 0000710799 00000 n 0000710822 00000 n 0000710844 00000 n 0000710877 00000 n 0000711273 00000 n 0000711812 00000 n 0000725143 00000 n 0000725167 00000 n 0000725190 00000 n 0000725214 00000 n 0000725236 00000 n 0000725269 00000 n 0000727805 00000 n 0000727925 00000 n 0000728046 00000 n 0000728172 00000 n 0000728255 00000 n 0000736910 00000 n 0000743339 00000 n 0000743380 00000 n 0000743420 00000 n 0000743601 00000 n trailer << /Size 2139 /Root 2137 0 R /Info 2138 0 R >> startxref 743808 %%EOF t1lib-5.1.2/doc/t1lib_doc.tex0000644000175000001440000000666210733501626014425 0ustar rmzusers%---------------------------------------------------------------------------- % ----- File: t1lib_doc.tex % ----- Author: Rainer Menzner (Rainer.Menzner@web.de) % ----- Date: 2005-05-18 % ----- Description: This file is part of the t1lib-documentation. % ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. % As of version 0.5, t1lib is distributed under the % GNU General Public Library Lincense. The % conditions can be found in the files LICENSE and % LGPL, which should reside in the toplevel % directory of the distribution. Please note that % there are parts of t1lib that are subject to % other licenses: % The parseAFM-package is copyrighted by Adobe Systems % Inc. % The type1 rasterizer is copyrighted by IBM and the % X11-consortium. % ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) % ----- Credits: I want to thank IBM and the X11-consortium for making % their rasterizer freely available. % Also thanks to Piet Tutelaers for his ps2pk, from % which I took the rasterizer sources in a format % independ from X11. % Thanks to all people who make free software living! %---------------------------------------------------------------------------- \documentclass[11pt,a4paper]{article} \usepackage[english]{babel} \usepackage{makeidx} \topmargin-1cm \oddsidemargin0cm \textwidth16cm \textheight24cm %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Added by NGUYEN-DAI Quy and edited by RMz) %% %% - Adapted to recent TeX developments according to suggestions %% of Reinhard Kotucha, a well-known TeX-Guru (2004-11-27, RMz) %% \ifx\pdfoutput\undefined\chardef\pdfoutput=0 \fi \ifcase\pdfoutput \usepackage{graphicx} \or \usepackage{graphicx} \usepackage[a4paper,pageanchor,hyperfigures,breaklinks,% colorlinks,citecolor=blue,urlcolor=red,linkcolor=magenta]{hyperref} \pdfcompresslevel=9 \fi \setcounter{tocdepth}{3} \setcounter{secnumdepth}{3} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %--- Some definitions \def\tonelib{{\mdseries\ttfamily t1lib}}\relax \def\libversion{5.1.0}\relax \def\libdate{Mai, 18, 2005}\relax \def\precorr{\par\vbox\bgroup}\relax \def\postcorr{\unskip\vskip-2mm\hrule \vbox to 0pt{\kern-17.7pt\parskip0pt\noindent\llap{\fbox{$\mathcal{F}()\Rightarrow$}\kern0pt}\vss} \vskip3mm\egroup\noindent}\relax \makeindex % %- hyphenation exceptions: \hyphenation{bit-maps bit-map} % \begin{document} \thispagestyle{empty} \begin{center} \leavevmode \vskip2cm {\Huge\bfseries T1Lib}\\[5mm] {\Large\sl Version \libversion\ -- \libdate}\\[2.5cm] {\LARGE\bf A Library for Generating}\\[5mm] {\LARGE\bf Character Bitmaps from}\\[5mm] {\LARGE\bf Adobe Type 1 Fonts}\\[2cm] {\Large\sc Rainer Menzner}\\[2mm] \end{center} \newpage \tableofcontents %-- Introduction \input intro.tex %-- Getting started \input getstart.tex %-- Program xglyph \input xglyph.tex %-- Program type1afm \input type1afm.tex %-- Using t1lib \input ut1lib.tex %-- X11-Interface \input xinterface.tex %-- Internals \input internals.tex %-- Print an alphabetically sorted function index \def\indexname{Function Index\addcontentsline{toc}{section}{\hskip1emFunction Index}}% \printindex \end{document} t1lib-5.1.2/doc/type1afm.tex0000644000175000001440000000517510733501626014311 0ustar rmzusers%---------------------------------------------------------------------------- % ----- File: type1afm.tex % ----- Author: Rainer Menzner (Rainer.Menzner@web.de) % ----- Date: 2001-04-01 % ----- Description: This file is part of the t1lib-documentation. % ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001. % As of version 0.5, t1lib is distributed under the % GNU General Public Library Lincense. The % conditions can be found in the files LICENSE and % LGPL, which should reside in the toplevel % directory of the distribution. Please note that % there are parts of t1lib that are subject to % other licenses: % The parseAFM-package is copyrighted by Adobe Systems % Inc. % The type1 rasterizer is copyrighted by IBM and the % X11-consortium. % ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) % ----- Credits: I want to thank IBM and the X11-consortium for making % their rasterizer freely available. % Also thanks to Piet Tutelaers for his ps2pk, from % which I took the rasterizer sources in a format % independ from X11. % Thanks to all people who make free software living! %---------------------------------------------------------------------------- \newpage \section{The Program {\ttfamily type1afm}} \label{type1afm}% \verb+type1afm+ is a simple commandline tool (about 150 lines C source code) that allows to generate an AFM file from a Type 1 font program. It is intended for people who want to use Type 1 font files that come without AFM files with \tonelib\ (or other software that requires AFM files). The syntax is \\[0.5cm] \verb+type1afm [-l] [ ...] +\\[0.5cm] For each fontfile specified on the commandline, an AFM file with the corresponding name is generated in the current directory. Most of the work is done in \tonelib-internal functions. See section \ref{missingafmfiles} on how AFM information is generated and written to files. It is usually not desireable to leave a logfile wherever the utility has been executed. Thus by default no logfile is generated. This behaviour can be changed by specifying the optional parameter \verb+-l+. This causes a logfile with \verb+T1LOG_DEBUG+ as loglevel to be written to the disk. Its name will be \verb+t1lib.log+ (see \ref{logfile}). %%% Local Variables: %%% mode: latex %%% TeX-master: "t1lib_doc" %%% End: t1lib-5.1.2/doc/mirrorh.eps0000644000175000001440000000054510733501626014230 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox: 0 0 200 200 %%EndComments /TimesRoman findfont 150 scalefont setfont 100 100 translate gsave [ -1 0 0 1 0 0] concat 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) show grestore [ 3 3 ] 2 setdash 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) true charpath stroke t1lib-5.1.2/doc/mirrorh.pdf0000644000175000001440000000246110733501626014211 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ}T9’T1 Í} ‡ðÑbyI©âÃtF5ÅVü`"®žäßÅ$ôtÛO²öeèàJøÛ÷ý,/…ëÏÂTÿøATã8Ë¿_1ã’ä?—g‡•}ÝÏúáVÞê•êí[y—Nêñ»o¾¿½ý*oõ©|®Jø~q‹õë+?òÀÿóσÌ]MÁKàÞ6×ñeŠM Maæ¯÷Âm4§úpÊ•šj(MÁ¥K/C­%r á2à3…<‚¹pkÛò¦Õ<naP–›‘¦8ZJ‰¸ªHˆ 1—á1Á๥\F`‰"-ÿ<0MNIµé/âÝ å4²PHNK^鎚ԉôðÜN …;CQúðh5´Q±ð| Cƒ\º‡Èè "½«D™—[î=ë%Lœ>Ã’E7Fß瀘r¨Òêhލ%…àÖ.Cè\”n󞥹‚0ŽœQN륟°­ |A¿z†8–IË86Åmöl ô ¡‹÷ÿŽ„¾`TPs£f=²œ±e½\½a|蚢{ù™½ÖÀ„Ë€àš='’êJë¨}aûñÒ} מ~@(8Œž˜—qÖaˆ°c¾1‰*›ðIu’J¼‰>£®eÉ{Ä(Q”+ÜýÌ%;/¼¢o2Kè Åx¡ ÓrMß$7K$)vÀ® Û@ðpذ—Ͳ Àº¢¾‰y¯á:\^ºg 9YÀÈs^">µ™½¸%¼yÃÿ€žËSù 7·ÿxendstream endobj 5 0 obj 573 endobj 3 0 obj << /Type /Page /MediaBox [0 0 200 200] /Parent 2 0 R /Resources << /ProcSet [/PDF /Text] /Font << /R6 6 0 R >> >> /Contents 4 0 R >> endobj 6 0 obj <> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 7 0 obj << /CreationDate (D:20010110083110) /Producer (GNU Ghostscript 5.10) >> endobj xref 0 8 0000000000 65535 f 0000000957 00000 n 0000000898 00000 n 0000000677 00000 n 0000000015 00000 n 0000000658 00000 n 0000000825 00000 n 0000001006 00000 n trailer << /Size 8 /Root 1 0 R /Info 7 0 R >> startxref 1093 %%EOF t1lib-5.1.2/doc/outlineproblems1.eps0000644000175000001440000152331410733501626016057 0ustar rmzusers%!PS-Adobe-3.0 EPSF-3.0 %%Creator: tiff2ps %%Title: outlineproblems1.tif %%CreationDate: Wed May 5 18:52:15 1999 %%DocumentData: Clean7Bit %%Origin: 0 0 %%BoundingBox: 0 0 871 82 %%LanguageLevel: 1 %%Pages: (atend) %%EndComments %%BeginSetup %%EndSetup %%Page: 1 1 gsave 100 dict begin 871.000000 82.000000 scale /bwproc { rgbproc dup length 3 idiv string 0 3 0 5 -1 roll { add 2 1 roll 1 sub dup 0 eq { pop 3 idiv 3 -1 roll dup 4 -1 roll dup 3 1 roll 5 -1 roll put 1 add 3 0 } { 2 1 roll } ifelse } forall pop pop pop } def /colorimage where {pop} { /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def } ifelse %ImageData: 871 82 8 3 0 1 2 "false 3 colorimage" /line 2613 string def 871 82 8 [871 0 0 -82 0 82] {currentfile line readhexstring pop} bind false 3 colorimage ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff 000000000000000000000000000000000000000000ffffffffffffffffff000000 000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffff000000000000 ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000ffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffff000000000000000000ffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000ffffff000000000000000000ffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffff000000000000000000000000ffffffffffff000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffff000000 000000ffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff 000000000000000000000000000000000000000000ffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffff000000000000000000 ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffff000000000000ffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000 000000000000000000000000000000ffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffff000000000000000000ffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff end grestore showpage %%Trailer %%Pages: 1 %%EOF t1lib-5.1.2/doc/outlineproblems1.pdf0000644000175000001440000064424110733501626016043 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ3Ð3T0A(œËU„æ†`Q #©k g†ÆÆ úAf .ù\@ˆ— gendstream endobj 5 0 obj 52 endobj 3 0 obj << /Type /Page /MediaBox [0 0 871 82] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageC] /XObject<> >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 8 0 obj << /CreationDate (D:20010110083125) /Producer (GNU Ghostscript 5.10) >> endobj 6 0 obj << /Type /XObject /Name /R6 /Subtype /Image /Length 7 0 R /ColorSpace /DeviceRGB/Width 871/Height 82/BitsPerComponent 8 >> stream ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ endstream endobj 7 0 obj 214267 endobj xref 0 9 0000000000 65535 f 0000000363 00000 n 0000000304 00000 n 0000000155 00000 n 0000000015 00000 n 0000000137 00000 n 0000000499 00000 n 0000214921 00000 n 0000000412 00000 n trailer << /Size 9 /Root 1 0 R /Info 8 0 R >> startxref 214943 %%EOF t1lib-5.1.2/doc/outlineproblems2.eps0000644000175000001440000142516510733501626016065 0ustar rmzusers%!PS-Adobe-3.0 EPSF-3.0 %%Creator: tiff2ps %%Title: outlineproblems2.tif %%CreationDate: Wed May 5 18:52:22 1999 %%DocumentData: Clean7Bit %%Origin: 0 0 %%BoundingBox: 0 0 871 76 %%LanguageLevel: 1 %%Pages: (atend) %%EndComments %%BeginSetup %%EndSetup %%Page: 1 1 gsave 100 dict begin 871.000000 76.000000 scale /bwproc { rgbproc dup length 3 idiv string 0 3 0 5 -1 roll { add 2 1 roll 1 sub dup 0 eq { pop 3 idiv 3 -1 roll dup 4 -1 roll dup 3 1 roll 5 -1 roll put 1 add 3 0 } { 2 1 roll } ifelse } forall pop pop pop } def /colorimage where {pop} { /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def } ifelse %ImageData: 871 76 8 3 0 1 2 "false 3 colorimage" /line 2613 string def 871 76 8 [871 0 0 -76 0 76] {currentfile line readhexstring pop} bind false 3 colorimage ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000 ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000ffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 ffffff000000000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffff000000000000ffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffff000000ffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffff000000000000ffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffff000000ffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffff000000000000ffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffff000000000000ffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff 000000000000ffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffff000000ffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffff000000000000000000000000000000000000000000000000 000000000000ffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffff000000ffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000ffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff end grestore showpage %%Trailer %%Pages: 1 %%EOF t1lib-5.1.2/doc/outlineproblems2.pdf0000644000175000001440000060554210733501626016045 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ3Ð3T0A(œËU„æ†`Qs3©k g¦ff úAf .ù\@‰ lendstream endobj 5 0 obj 51 endobj 3 0 obj << /Type /Page /MediaBox [0 0 871 76] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageC] /XObject<> >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 8 0 obj << /CreationDate (D:20010110083133) /Producer (GNU Ghostscript 5.10) >> endobj 6 0 obj << /Type /XObject /Name /R6 /Subtype /Image /Length 7 0 R /ColorSpace /DeviceRGB/Width 871/Height 76/BitsPerComponent 8 >> stream ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ endstream endobj 7 0 obj 198589 endobj xref 0 9 0000000000 65535 f 0000000362 00000 n 0000000303 00000 n 0000000154 00000 n 0000000015 00000 n 0000000136 00000 n 0000000498 00000 n 0000199242 00000 n 0000000411 00000 n trailer << /Size 9 /Root 1 0 R /Info 8 0 R >> startxref 199264 %%EOF t1lib-5.1.2/doc/outlineproblems3.eps0000644000175000001440000141267410733501626016067 0ustar rmzusers%!PS-Adobe-3.0 EPSF-3.0 %%Creator: tiff2ps %%Title: outlineproblems3.tif %%CreationDate: Wed May 5 18:52:27 1999 %%DocumentData: Clean7Bit %%Origin: 0 0 %%BoundingBox: 0 0 871 75 %%LanguageLevel: 1 %%Pages: (atend) %%EndComments %%BeginSetup %%EndSetup %%Page: 1 1 gsave 100 dict begin 871.000000 75.000000 scale /bwproc { rgbproc dup length 3 idiv string 0 3 0 5 -1 roll { add 2 1 roll 1 sub dup 0 eq { pop 3 idiv 3 -1 roll dup 4 -1 roll dup 3 1 roll 5 -1 roll put 1 add 3 0 } { 2 1 roll } ifelse } forall pop pop pop } def /colorimage where {pop} { /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def } ifelse %ImageData: 871 75 8 3 0 1 2 "false 3 colorimage" /line 2613 string def 871 75 8 [871 0 0 -75 0 75] {currentfile line readhexstring pop} bind false 3 colorimage ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffff000000000000000000 000000000000ffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffff000000ffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000ffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000ffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000 000000ffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff 000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffff000000000000000000ffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffff000000ffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffff000000000000000000ffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000 000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffff000000000000ffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffff000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff 000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffff000000000000ffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000ffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000ffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffff000000000000000000000000 000000ffffffffffff000000ffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff end grestore showpage %%Trailer %%Pages: 1 %%EOF t1lib-5.1.2/doc/outlineproblems3.pdf0000644000175000001440000060045610733501626016045 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ3Ð3T0A(œËU„æ†`QsS©k g††f úAf .ù\@ˆâ jendstream endobj 5 0 obj 52 endobj 3 0 obj << /Type /Page /MediaBox [0 0 871 75] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageC] /XObject<> >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 8 0 obj << /CreationDate (D:20010110083137) /Producer (GNU Ghostscript 5.10) >> endobj 6 0 obj << /Type /XObject /Name /R6 /Subtype /Image /Length 7 0 R /ColorSpace /DeviceRGB/Width 871/Height 75/BitsPerComponent 8 >> stream ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ endstream endobj 7 0 obj 195976 endobj xref 0 9 0000000000 65535 f 0000000363 00000 n 0000000304 00000 n 0000000155 00000 n 0000000015 00000 n 0000000137 00000 n 0000000499 00000 n 0000196630 00000 n 0000000412 00000 n trailer << /Size 9 /Root 1 0 R /Info 8 0 R >> startxref 196652 %%EOF t1lib-5.1.2/doc/outlineproblems4.eps0000644000175000001440000156237010733501626016067 0ustar rmzusers%!PS-Adobe-3.0 EPSF-3.0 %%Creator: tiff2ps %%Title: outlineproblems4.tif %%CreationDate: Wed May 5 18:52:32 1999 %%DocumentData: Clean7Bit %%Origin: 0 0 %%BoundingBox: 0 0 871 85 %%LanguageLevel: 1 %%Pages: (atend) %%EndComments %%BeginSetup %%EndSetup %%Page: 1 1 gsave 100 dict begin 871.000000 85.000000 scale /bwproc { rgbproc dup length 3 idiv string 0 3 0 5 -1 roll { add 2 1 roll 1 sub dup 0 eq { pop 3 idiv 3 -1 roll dup 4 -1 roll dup 3 1 roll 5 -1 roll put 1 add 3 0 } { 2 1 roll } ifelse } forall pop pop pop } def /colorimage where {pop} { /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def } ifelse %ImageData: 871 85 8 3 0 1 2 "false 3 colorimage" /line 2613 string def 871 85 8 [871 0 0 -85 0 85] {currentfile line readhexstring pop} bind false 3 colorimage ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000ffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffff000000ffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffff000000000000ffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000ffffff000000000000ffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffff000000000000ffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffff000000ffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffff000000000000ffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000ffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffff000000ffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffff000000ffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffff000000ffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffff000000ffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff000000 ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff 000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffff000000ffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000ffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffff000000ffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffff000000ffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffff000000ffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffff000000000000ffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffff000000ffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffff000000000000ffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffff000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffff000000ffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffff000000000000ffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffff000000000000000000 ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffff000000ffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffff000000ffffff ffffffffffffffffff000000ffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000 000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff 000000ffffffffffffffffffffffff000000ffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff 000000000000ffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffff000000ffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000 ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffff000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffff000000ffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000 000000ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffff000000ffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffff000000ffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffff000000000000 ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffff000000ffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffff000000ffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffff000000ffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff 000000ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffff000000000000ffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffff000000ffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffff000000ffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffff000000ffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffff000000000000ffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffff000000000000ffffff000000000000000000000000ffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000ffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffff000000000000000000ffffff000000000000000000 000000ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffff000000000000ffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffff000000000000000000ffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000ffffffffffff000000000000000000 ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffff000000000000000000 ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffff000000000000000000ffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000 000000ffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff 000000000000000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffff000000000000000000000000 ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffff000000ffffffffffff 000000000000ffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffff000000000000000000ffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffff000000ffffff ffffff000000000000000000ffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000 000000ffffffffffff000000000000ffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffff000000000000 ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffff000000000000ffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffff000000000000000000ffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffff000000ffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffff000000000000ffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff 000000ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000ffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffff000000ffffff000000000000ffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff000000 000000ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffff000000000000000000000000ffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000ffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffff000000000000000000 000000ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffff000000000000ffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff end grestore showpage %%Trailer %%Pages: 1 %%EOF t1lib-5.1.2/doc/outlineproblems4.pdf0000644000175000001440000066350010733501626016045 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ3Ð3T0A(œËU„æ†`Q S©k g†ffF úAf .ù\@ˆó jendstream endobj 5 0 obj 52 endobj 3 0 obj << /Type /Page /MediaBox [0 0 871 85] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageC] /XObject<> >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 8 0 obj << /CreationDate (D:20010110083141) /Producer (GNU Ghostscript 5.10) >> endobj 6 0 obj << /Type /XObject /Name /R6 /Subtype /Image /Length 7 0 R /ColorSpace /DeviceRGB/Width 871/Height 85/BitsPerComponent 8 >> stream ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ endstream endobj 7 0 obj 222106 endobj xref 0 9 0000000000 65535 f 0000000363 00000 n 0000000304 00000 n 0000000155 00000 n 0000000015 00000 n 0000000137 00000 n 0000000499 00000 n 0000222760 00000 n 0000000412 00000 n trailer << /Size 9 /Root 1 0 R /Info 8 0 R >> startxref 222782 %%EOF t1lib-5.1.2/doc/outlineproblems5.eps0000644000175000001440000152526310733501626016070 0ustar rmzusers%!PS-Adobe-3.0 EPSF-3.0 %%Creator: tiff2ps %%Title: outlineproblems5.tif %%CreationDate: Wed May 5 18:52:37 1999 %%DocumentData: Clean7Bit %%Origin: 0 0 %%BoundingBox: 0 0 873 82 %%LanguageLevel: 1 %%Pages: (atend) %%EndComments %%BeginSetup %%EndSetup %%Page: 1 1 gsave 100 dict begin 873.000000 82.000000 scale /bwproc { rgbproc dup length 3 idiv string 0 3 0 5 -1 roll { add 2 1 roll 1 sub dup 0 eq { pop 3 idiv 3 -1 roll dup 4 -1 roll dup 3 1 roll 5 -1 roll put 1 add 3 0 } { 2 1 roll } ifelse } forall pop pop pop } def /colorimage where {pop} { /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def } ifelse %ImageData: 873 82 8 3 0 1 2 "false 3 colorimage" /line 2619 string def 873 82 8 [873 0 0 -82 0 82] {currentfile line readhexstring pop} bind false 3 colorimage ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffff000000000000000000000000000000000000000000ffffff ffffffffffff000000000000ffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffff000000000000ffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000ffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffff000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffff000000000000 000000ffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffff000000000000000000ffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffff000000000000000000 000000ffffffffffff000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffff000000000000ffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000ffffff000000000000000000 000000000000000000000000ffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffff000000000000000000ffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 ffffff000000000000000000000000000000000000000000ffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffff000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffff000000000000000000ffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000ffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff end grestore showpage %%Trailer %%Pages: 1 %%EOF t1lib-5.1.2/doc/outlineproblems5.pdf0000644000175000001440000064521510733501626016051 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ3Ð3T0A(œËU„æÆ`Q #©k g†ÆÆ úAf .ù\@ˆå iendstream endobj 5 0 obj 52 endobj 3 0 obj << /Type /Page /MediaBox [0 0 873 82] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageC] /XObject<> >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 8 0 obj << /CreationDate (D:20010110083147) /Producer (GNU Ghostscript 5.10) >> endobj 6 0 obj << /Type /XObject /Name /R6 /Subtype /Image /Length 7 0 R /ColorSpace /DeviceRGB/Width 873/Height 82/BitsPerComponent 8 >> stream ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ endstream endobj 7 0 obj 214759 endobj xref 0 9 0000000000 65535 f 0000000363 00000 n 0000000304 00000 n 0000000155 00000 n 0000000015 00000 n 0000000137 00000 n 0000000499 00000 n 0000215413 00000 n 0000000412 00000 n trailer << /Size 9 /Root 1 0 R /Info 8 0 R >> startxref 215435 %%EOF t1lib-5.1.2/doc/mirrorv.eps0000644000175000001440000000054510733501626014246 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox: 0 0 200 200 %%EndComments /TimesRoman findfont 150 scalefont setfont 100 100 translate gsave [ 1 0 0 -1 0 0] concat 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) show grestore [ 3 3 ] 2 setdash 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) true charpath stroke t1lib-5.1.2/doc/mirrorv.pdf0000644000175000001440000000246110733501626014227 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœT¹’“1 îý.¡àG‡å£Ý`I:†* Ç)¶âõWŸä?ÙÄþ$ë>–®„¿}ßîåµpýU˜ê?ˆj÷"üû~\`^Ê«óÂʾn÷út-?÷ÊFõú½¤ Ýø]ïï~¼¿¾”O×ú\¾T%|¿V¡úíÿKò/…™»š‚—À½14l®ã/Ê› ;šÂÌ_o…ÛhNõá”+5ÕPš‚K—:^‡ZKäÂ-dÀg ysâÖ¶åM«yÜ ,7#Mq´”qU‘b.Ãc‚ÁsK¹&ŒÀEZþy`šœþ’jÓ_Ä»AÊid¡œ– ¼Ò5©é๜ w†¢ôáÑjh¢bá'ø†¹t‘ÑDzW7ˆ2/·Ü{ÖKÜqO' ˜8;$|(†%‹nŒ¾Ï1åP¥ÕÑQK Á­]†Ð9)ÝæO:=Ksa9!¢œÖ'J?a[ø‚~õ q4,’–qlŠÛìÙ@èBïÿ }Á¨ $:æFÍzd8cËz¹zÃøÐ9E·ò3z­ —Á5{N$Õ5"”ÖQû$Âöã¥û®=ý€>Pp=1/ã¬ÃaÇ|bU6á“6ê$9”x}F].Ê’÷ˆQ¢(g¸;ú™Kv?ñŠ¾É ,¡3ã„&LË5u~“Ü,‘\¤Ø;3lÁÃaÃ^6Ë2ëŠú&潆ëpyéžæd#Ï=x‰øÔfö6â–ðæy {üº”çò8+ÿxendstream endobj 5 0 obj 573 endobj 3 0 obj << /Type /Page /MediaBox [0 0 200 200] /Parent 2 0 R /Resources << /ProcSet [/PDF /Text] /Font << /R6 6 0 R >> >> /Contents 4 0 R >> endobj 6 0 obj <> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 7 0 obj << /CreationDate (D:20010110083114) /Producer (GNU Ghostscript 5.10) >> endobj xref 0 8 0000000000 65535 f 0000000957 00000 n 0000000898 00000 n 0000000677 00000 n 0000000015 00000 n 0000000658 00000 n 0000000825 00000 n 0000001006 00000 n trailer << /Size 8 /Root 1 0 R /Info 7 0 R >> startxref 1093 %%EOF t1lib-5.1.2/doc/getstart.tex0000644000175000001440000005631710733501626014424 0ustar rmzusers%---------------------------------------------------------------------------- % ----- File: getstart.tex % ----- Author: Rainer Menzner (Rainer.Menzner@web.de) % ----- Date: 2005-05-18 % ----- Description: This file is part of the t1lib-documentation. % ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. % As of version 0.5, t1lib is distributed under the % GNU General Public Library License. The % conditions can be found in the files LICENSE and % LGPL, which should reside in the toplevel % directory of the distribution. Please note that % there are parts of t1lib that are subject to % other licenses: % The parseAFM-package is copyrighted by Adobe Systems % Inc. % The type1 rasterizer is copyrighted by IBM and the % X11-consortium. % ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) % ----- Credits: I want to thank IBM and the X11-consortium for making % their rasterizer freely available. % Also thanks to Piet Tutelaers for his ps2pk, from % which I took the rasterizer sources in a format % independent from X11. % Thanks to all people who make free software living! %---------------------------------------------------------------------------- \newpage \section{Getting Started} \subsection{Building, Installing and Removing the \tonelib-Package} \label{compiling}% As of version 0.2-beta, the \verb+autoconf+-package is used to configure and build the library. \verb+imake+ is no longer supported. Furthermore, starting with version 0.8-beta GNU \verb+libtool+ is used for managing library-specific stuff. Here is how to build and install \tonelib: \begin{enumerate} \item Change to \verb+T1+-directory. \item Run \verb+./configure+. This will check your system's setup and generate the \verb+Makefile+s. By default, shared and static versions of the libraries are built. Specifying \verb+--disable-shared+ or \verb+--disable-static+ as a commandline option to \verb+configure+ will suppress the generation of the respective library type. Of course, these rules are superseded by the capability of the system to manage those library types. If you know shared libraries are supported on your system but \verb+configure+ says that no dll can be built, some compiler option may be setup incorrect. Please refer to (\ref{libtoolproblems}). If the X11 window system is installed on the target system \tonelib\ is automatically build with special X11 support. In cases where this is explicitly not desired the commandline option \verb+--without-x+ may be used to configure a library without extended X11 support. In this case the test program \verb+xglyph+ is also not build since it needs X11. \item Run \verb+make+. This will build all the stuff including the documentation. If you do not have \LaTeXe\, run \verb+make without_doc+. This will skip generating the documentation. \item Type \verb+make install+ to install the package. You'll probably need to be superuser for installing the package at the standard locations. However, the files may be located wherever the user wants, as long as the compiler finds them at compile time. So, place them where you want. The following files are installed when doing a \verb+make install+: \begin{itemize} \item \verb+lib/libt1.a+ and/or \verb+lib/libt1.so.+{\em v}\verb+.+{\em r}\verb+.+{\em p} if the system supports shared libraries. In the latter case, also two symbolic links to the shared library, \verb+libt1.so.+{\em v} and \verb+libt1.so+, are generated. Here, {\em v} and {\em r} mean version and revision of the shared library. {\em p} is the patch level. Library and links are installed in the directory specified by the \verb+autoconf+-variable \verb+libdir+ which is by default \verb+/usr/local/lib+. \item The same as above holds for \verb+lib/libt1x.a+ or \verb+lib/libt1x.so.+{\em v}\verb+.+{\em r}\verb+.+{\em p} respectively, which contain the X11 interface functions. This library is only installed if X11 support was possible and not suppressed. \item \verb+lib/t1lib.h+ and optionally \verb+lib/t1libx.h+. They are installed in the directory pointed to by the \verb+autoconf+-variable \verb+includedir+ which is by default\\ \verb+/usr/local/include+. \item The test program \verb+xglyph/xglyph+. If shared libraries are supported (and not suppressed by \verb+--with-static-lib+) this executable is dynamically linked to \verb+libt1.so+ and \verb+libt1x.so+. It is installed in the directory pointed to by the \verb+autoconf+-variable \verb+bindir+ (by default \verb+/usr/local/bin+). \item The converter \verb+type1afm+. The same applies as above for \verb+xglyph+. \item A subdirectory named \verb+t1lib-+{\em v}\verb+.+{\em r} is created in the directory pointed to by the \verb+autoconf+-variable \verb+datadir+ (default \verb+/usr/local/share+) and a default global configuration file \verb+t1lib.config+ is installed there. Note that this configuration is not of any use. It has to be setup by the administrator to specify the paths to the system's Type 1 fonts and AFM files as well as any \tonelib\ encoding files. Notice also that the global configuration file is not installed if it already exists. This is to prevent from deletion of an existent setup. \item A subdirectory \verb+doc+ is created in the directory where the global configuration file resides (see above). The \LaTeXe-documentation \verb+t1lib_doc.dvi+ as well as all needed graphics files is installed there. The \LaTeXe-sources are not installed! \item If you ever want to remove \tonelib\ from your system this can be achieved by calling \verb+make uninstall+. This reverts all steps described above. Of course, this works only if \tonelib\ has not been reconfigured using different parameters since the time of install. \end{itemize} \end{enumerate} The top level \verb+Makefile+ further supports the targets \verb+clean+ and \verb+distclean+. The latter is an extension of \verb+clean+ which also removes the makefiles as well as the log and cache files of the configuration process. It forces thus a new call to \verb+configure+. A \verb+make clean+ is needed, for example, if someone experiments with static and shared libraries since the object files for shared libraries require the additional position independent code options. The directory \verb+T1/parse_afm+ is not needed at all, it is included only for completeness. The parts needed from this have been copied to the \verb+lib/t1lib+-subdirectory. \subsection{Notes on Using GNU {\tt libtool}} \label{libtoolproblems}% \verb+libtool+ might get confused by heterogenous compiler setups. This is the case, for example, on our Solaris system where by default \verb+gcc+ is used in combination with the system specific linker. This configuration leads to \verb+libtool+ reporting that no shared library can be built which definitely is wrong. In most cases such problems can be solved by fiddling with the environment entries \verb+CC+, \verb+CFLAGS+, \verb+LD+ and \verb+LDFLAGS+. \verb+libtool+ hides the real objects in subdirectories named \verb+.libs+. This means, after a successful build, \verb+libt1.so+ is located in \verb+T1/lib/.libs+. Similarly, if shared libraries are built the executable \verb+T1/xglyph/xglyph+ is a simple wrapper to \verb+T1/xglyph/.libs/xglyph+. \subsection{Runtime-Setup} \label{runtimesetup}% \subsubsection{Searchpath and Environment Setup} \verb+t1lib+ basically needs four types of files: \begin{itemize} \item \verb+.afm+-files: These contain font metric descriptions as well as kerning and ligature information for a particular font. \item \verb+.pfa+-/\verb+.pfb+-files: These contain the character outline descriptions. Type 1 font files may also lack any extension in their filename. This is the habit on NeXTStep, for example. \item \verb+.enc+-files: These contain encoding arrays in a special but simple form. They are only needed if someone wants to load a special encoding to reencode a font. \item A font database file. The library needs at least one font database file specification. See below for a description of this font database file. Optionally, multiple font database files can be specified. \end{itemize} In order to tell \tonelib\ where these files are located in the filesystem, a configuration file usually has to be set up by the user. At time of initialization (see \ref{initialization} on page \pageref{initialization}) the library tries to locate all data it needs immediately or possibly later. The following actions take place in order: \begin{enumerate} \item The library tries to read the variable \verb+T1LIB_CONFIG+ from the program's environment. The value of this variable is expected to be the pathname of a configuration file for \verb+t1lib+. \item If the variable \verb+T1LIB_CONFIG+ exists, the file pointed to by this variable will be tried to be opened. In case no environment variable exists, the library will attempt to open a file called \verb+.t1librc+ in the user's home directory. If this file as well does not exist, the global configuration file \verb+t1lib.config+ is tried to be opened.\footnote{The filenames for the user's and the global configuration file as well as the name of the environment entry are default names defined in {\ttfamily lib/t1lib/t1misc.h}. They may be redefined by the user at compile time if necessary.} If all these attempts to open a configuration file did not succeed, all searchpaths are left at defaults (\verb+.+) and the font database file is setup to be \verb+./FontDataBase+. If this file cannot be opened, the call to \verb+T1_InitLib()+ returns a NULL-pointer thus indicating an error condition. The program should then exit because \tonelib\ would not be able to do anything without an association of font IDs to font files. \item Assuming a configuration file has been found and opened at any of the above three locations, this file is parsed and all relevant information in this file is recorded. \item Using the paths specified in the configuration file, the font database is opened and processed. The existence of every Type 1 file that might later be needed is ensured. The existence of the corresponding AFM file is not verified during initialization, because this information is not ultimatively critical when generating a character bitmap.\footnote{For example, a program may generate a character table of a Type 1 font without having AFM information.} Aside from this, \tonelib\ can generate the required part of the AFM information on the fly. \end{enumerate} \subsubsection{The {\ttfamily t1lib} Configuration File} \label{subsubsec:configfile} It is the purpose of the configuration file to setup search paths and font databases. The format of this file is quite simple and straightforward: \begin{itemize} \item Each line starting exactly with \verb+ENCODING=+ is read in. The remainder of the line is expected to be a list of searchpath specifications for encoding files. No white space may appear between \verb+=+ and the path specification(s). Multiple paths may be specified by separating the single paths with colons.\footnote{A colon is the default path separator on UNIX systems. For certain other Operating Systems the path separator may be a semicolon.} The path specification(s) may be followed by any white space characters. \item Each line starting exactly with \verb+AFM=+ is read in. The remainder of the line is expected to be a list of searchpath specifications for Adobe Font Metric files. No white space may appear between \verb+=+ and the path specification(s). Multiple paths may be specified by separating the single paths with colons. The path specification(s) may be followed by any white space characters. \item Each line starting exactly with \verb+TYPE1=+ is read in. The remainder of the line is expected to be a list of searchpath specifications for Type 1 font files. No white space may space between \verb+=+ and the path specification(s). Multiple paths may be specified by separating the single paths with colons. The path specification(s) may be followed by any white space characters. \item Each line starting exactly with \verb+FONTDATABASE=+ must specify a colon-separated list of font database filenames on the remainder of the line. No white space is allowed between \verb+=+ and the path specification, but trailing white space is allowed. \item Each line starting exactly with \verb+FONTDATABASEXLFD=+ must specify a colon-separated list of font database filenames that adhere to the XLFD (X11 Logical Font Definition) on the remainder of the line. No white space is allowed between \verb+=+ and the path specification, but trailing white space is allowed. This keyword is not an independent key word, rather, it allows to specify a special alternative type of font database---a type that usually exists as part of every X11 system. Standard and XLFD font database files may be specified both in one configuration file. They interact in a way, that if an XLFD font database file is specified, this overwrites the default standard font database setup before the configuration is read. \item All other lines are ignored by the library. \end{itemize} A configuration file may contain multiple path declarations of one type. In this case, a list of path elements is built internally in the same order that the specifications appear in the configuration file. For example, the statement \begin{verbatim} TYPE1=/usr/X11/fonts/Type1:/home/user/fonts/Type1 \end{verbatim} is equivalent to the two statements \begin{verbatim} TYPE1=/usr/X11/fonts/Type1 TYPE1=/home/user/fonts/Type1 \end{verbatim} In order to specify paths that incorporate {\em unusual} characters like white space or the path separator, it is possible to quote the path string element using double quotes ``\verb+"+''. All characters after the leading quotation mark are verbatim read to the path until the closing quotation mark appears. The double quotes may also become part of a path specification by using the escape sequence ``\verb+\"+''. Hence, the following statement specifies a correct albeit somewhat unusual search path: \begin{verbatim} TYPE1=/usr/X11/fonts/Type1:"/home/user/My \"Best\" Fonts/Type1" \end{verbatim} Here is an example of how a user could do the runtime setup: \\[2mm] {\bfseries Example}: \\ Create a file, say, named \verb+t1.config+ with the following contents in your HOME-directory: \begin{verbatim} # This is a configuration file for t1lib These two lines are considered to be comments FONTDATABASE=/home/user/test/myprog/FontDataBase ENCODING=/usr/local/lib/fonts/type1/enc:. AFM=/usr/local/lib/fonts/type1/afm:. TYPE1=/usr/local/lib/fonts/type1/outlines:. \end{verbatim} After this, make the environment variable \verb+T1LIB_CONFIG+ point to this file, i.e., \\ \verb+setenv T1LIB_CONFIG ~/t1.config+\\ for \verb+tcsh+, or\\ \verb+export T1LIB_CONFIG=~/t1.config+\\ for \verb+bash+. Provided that the path specifications in the configuration file are correct, the setup is done. When setting \verb+T1LIB_CONFIG+ in an interactive shell as described above, the shell does the tilde expansion. Notice that \tonelib\ never does tilde expansion. \subsubsection{The Font Database File} \label{fontdatabase}% This is one more file important at startup time. I call it ``font database file'' because it makes fonts declared in this file known to the library. Moreover, the association {\em declared font $\Longleftrightarrow$ FontID} is done using information from this file. The format specification of this file is relatively free. Here are the exact rules: \begin{itemize} \item Line 1 contains a positive integer specifying the number of fonts declared in that file. This is as in the \verb+fonts.dir+ files of the X11-system. \item All remaining lines contain declarations of one font each. The only thing taken from such a line is the last string (delimited by white space) in it. It is assumed to be a filename of the format {\em basename}\verb+.+{\em someextension}. Furthermore, the {\em basename}-part is assumed to be the basename of a fontfile name. After such a string has been parsed, the {\em extension} is cut off and replaced in turn with \verb+.pfa+ and \verb+.pfb+. The initialization routine tries to open a font file with one of the resulting filenames. Since V.~0.9 the ``\verb+.+'' as well as the ``{\em someextension}'' may be missing completely. Moreover, \tonelib\ looks for Type 1 Font files whose name do not have any extension at all. This is due to conventions of some UNIX-systems. \item The remaining of the line, i.e., from beginning to the start of the filename string is completely ignored and may contain some information for other programs or be empty. \end{itemize} The format described above may seem to be underspecified, but it has been chosen to be compatible with the \verb+SciFonts+-fileformat, which is used during the initialization of the SciTeXt word processor. \\[2mm] {\bfseries Example 1}: A minimal font database file for 4 fonts: {\footnotesize \begin{verbatim} 4 isvl.afm isvli.afm isvd.afm isvdi.afm \end{verbatim} }% This file is {\em minimal}, because it contains just the information needed, and nothing not needed by \tonelib. {\bfseries Example 2}: A more realistic example, which allows an application to match a fully qualified X11 fontname to a FontID in \tonelib. This is also a valid font database file: {\footnotesize\hfuzz=30pt\relax \begin{verbatim} 4 Souvenir Souvenir-Light --- -itc-souvenir-light-r-normal--#-0-0-0-p-0-iso8859-1 isvl.afm " Souvenir-LightItalic -*- -itc-souvenir-light-i-normal--#-0-0-0-p-0-iso8859-1 isvli.afm " Souvenir-Demi *-- -itc-souvenir-demi-r-normal--#-0-0-0-p-0-iso8859-1 isvd.afm " Souvenir-DemiItalic **- -itc-souvenir-demi-i-normal--#-0-0-0-p-0-iso8859-1 isvdi.afm \end{verbatim} }% \subsubsection{Alternative Runtime Setups} The runtime setup described above is the most simple principle of getting started. However, there might be applications that deal with only one font file. A good example is the \verb+type1afm+-utility which is described in section \ref{type1afm}. In such situations it seems to be overkill to read a font database file and several load paths. For this reason there are alternative ways to specify what should be read from where. Their description is deferred to section \ref{initialization}. \subsection{A Very Simple Programming Example} \label{programmingexample} The following code is a very simple programming example of how to use \tonelib. It even runs on an ASCII-terminal. It is provided in the \verb+examples+-subdirectory of the distribution as \verb+t1example1.c+. This program must be compiled to object format and then linked with the library \verb+libt1.a+ or \verb+libt1.so+, respectively. On most systems the commandline \begin{verbatim} cc -o t1example1 -I ../lib t1example1.c -L../lib -lt1 -lm \end{verbatim} should do it. For convenience reasons a \verb+Makefile.in+ is included in the examples directory and the stuff is built automatically. At runtime, a well defined setup must be found, i.e., a configuration file with path definitions and a font database file. These also are located in the \verb+examples+ subdirectory. \begin{verbatim} #include #include #include /* All needed declarations */ int main( void) { GLYPH *glyph; int i; /* Set our environment to an existent config file directory */ putenv( "T1LIB_CONFIG=./t1lib.config"); /* Pad bitmaps to 16 bits, the default being 8 bits */ T1_SetBitmapPad( 16); /* Initialize t1lib and return if error occurs. No logfile will be generated */ if ((T1_InitLib(NO_LOGFILE)==NULL)){ fprintf(stderr, "Initialization of t1lib failed\n"); return(-1); } /* For every font in the database, generate a glyph for the string "Test" at 25 bp. Use Kerning. Then dump an ASCII representation of the glyph to stdout */ for( i=0; i> stream xœ]T¹r1 íù,“fC\_ÝÉ×* ßoî¸~/nøæÔDX~à—wòxqÊ/žx³J69ŠîJ°°¹Ž˜=™ ;– ÄÌOo…t¨³>œ¹‘Š„Ñd¼d‰ãåyˆi"·`ÒМZè#™«nÏ›‹yÞ`^î†UðÐÔbvSæPåFx¸ Í­E¡jQ–¸MÊxÉtú cBé$†Lé Ê+Ã5å:Q~š[ÁÉ„34¥ÏV‹8!·p4šk÷P}A¥wq‡hórϽg¿Ø÷ BrBL‡ʈaîs@M(LÛê‹%Crk·!lN&ÛýÉ32«0á‘ÂBé}¢õ¾E!gÌ«÷ˆ£a‰P4c3Rì7{Cêìó¿aaÏX´DÆÜH­GÕ3·ì—›+Ö§[t+¿°àk l8(®Ùs#[]#RÑŽÞ' ß“n÷öúBAÁaÌļ³C†ûˆMÞÄ7mÔÙøF›ô}u¸Z¶¼GŽM9ÓÝÙϼd÷¯˜†KèÁzaÓòšº\9os^¤¸vV¨É# â^ªe€eEÓ¾†ëp}î^äf£Î½8‰üÄfÎ6òæˆæu {üº”çò)%endstream endobj 5 0 obj 591 endobj 3 0 obj << /Type /Page /MediaBox [0 0 200 200] /Parent 2 0 R /Resources << /ProcSet [/PDF /Text] /Font << /R6 6 0 R >> >> /Contents 4 0 R >> endobj 6 0 obj <> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 7 0 obj << /CreationDate (D:20010110083053) /Producer (GNU Ghostscript 5.10) >> endobj xref 0 8 0000000000 65535 f 0000000975 00000 n 0000000916 00000 n 0000000695 00000 n 0000000015 00000 n 0000000676 00000 n 0000000843 00000 n 0000001024 00000 n trailer << /Size 8 /Root 1 0 R /Info 7 0 R >> startxref 1111 %%EOF t1lib-5.1.2/doc/extentv.eps0000644000175000001440000000054610733501626014244 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox: 0 0 200 200 %%EndComments /TimesRoman findfont 150 scalefont setfont 100 100 translate gsave [ 1 0 0 1.4 0 0] concat 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) show grestore [ 3 3 ] 2 setdash 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) true charpath stroke t1lib-5.1.2/doc/extentv.pdf0000644000175000001440000000251010733501626014217 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ]T9’1 Ìù †v2ÆA‚dê*?`-e.GrùªU°‘¿o4ÀQÉÖJ3Ý$Ž&.\ û}»—·Âõ—ÿþ”·Ê±W¹›LTM¦Õ{‘'öúß]¾w©/Oáh‡«¯åÃg«Ü©^¿—”à.5œýw½¿ûñþú»|ººÿ—ª„ï×*T¿y—èFaI©fã×Öã%¹~)<¨{Â)Ø láÑç:žX0î:€ú¡ð$Þ}÷V¸ k6œ¹SS §)xéRÇËuho‰ÜC¸… Ö™ÂbNÜÚŽ¼¹vÀ-Êò0Ò–V"î*¦BŒ‡Ûð˜X๭ÜA‰âXþy`šœù’µé;â=!å ²PHÎH0^™ŽšÔ‰ã๠œ EºŽ¢ØpµÞ€¨Xä‰õ¹µ…ɰ3õ€(óòÈfY/ñÄ–I@˜8;$|(ãQ£Îèû0SWZ1¢=Ä­]†ð9™îð'ÏÌÒÜAœQÎ襟ˆ­ ë‚~™ECž‡–qlÆmZ6þÒÅûÃÂ_0*(‰Ž¹Q맜ڲ^îÞ0>tNÑ­üÄL€¯50á2`¸¦åDR]#¤4Cí“DìÇŽùe\{ú} `à0zÒ½Œ³Ž…†ùÄ$ªlâ“6ê$9”x›QW‡‹²ä%ŠrÊÝêg^²û‰WôMáú‚b¼€Ð„Ùóšúz“¼Y"y‘âôó„m@<6ÜËÖ³ Àº¢¾‰y_Ãu¸½˜Ÿ@s²€qÎ=Ø }Úgö6tKdósŒþøt)/å/¬œ!endstream endobj 5 0 obj 596 endobj 3 0 obj << /Type /Page /MediaBox [0 0 200 200] /Parent 2 0 R /Resources << /ProcSet [/PDF /Text] /Font << /R6 6 0 R >> >> /Contents 4 0 R >> endobj 6 0 obj <> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 7 0 obj << /CreationDate (D:20010110083058) /Producer (GNU Ghostscript 5.10) >> endobj xref 0 8 0000000000 65535 f 0000000980 00000 n 0000000921 00000 n 0000000700 00000 n 0000000015 00000 n 0000000681 00000 n 0000000848 00000 n 0000001029 00000 n trailer << /Size 8 /Root 1 0 R /Info 7 0 R >> startxref 1116 %%EOF t1lib-5.1.2/doc/internals.tex0000644000175000001440000010377610733501626014570 0ustar rmzusers%---------------------------------------------------------------------------- % ----- File: internals.tex % ----- Author: Rainer Menzner (Rainer.Menzner@web.de) % ----- Date: 2003-03-01 % ----- Description: This file is part of the t1lib-documentation. % ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003. % As of version 0.5, t1lib is distributed under the % GNU General Public Library License. The % conditions can be found in the files LICENSE and % LGPL, which should reside in the toplevel % directory of the distribution. Please note that % there are parts of t1lib that are subject to % other licenses: % The parseAFM-package is copyrighted by Adobe Systems % Inc. % The type1 rasterizer is copyrighted by IBM and the % X11-consortium. % ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) % ----- Credits: I want to thank IBM and the X11-consortium for making % their rasterizer freely available. % Also thanks to Piet Tutelaers for his ps2pk, from % which I took the rasterizer sources in a format % independent from X11. % Thanks to all people who make free software living! %---------------------------------------------------------------------------- \newpage \section{Internals (incomplete)} \label{internals}% \vskip1cm \hrule \vskip0.5cm \begin{center} \sffamily\large {\Huge\bfseries Note!}\\ This section is still very incomplete and some facts are not true anymore. This should be kept in mind. Currently I have no time to write this section. But I try to keep figure \ref{figure:t1data} consistent to the current releases. This may lead to inconsistencies between the text and the figure. \end{center} \hrule \vskip1cm In this section, some information on internals of \tonelib\ is given. There is no need for an average user to read this section although having understood what is going on internally might be helpful if problems occur. The basic idea of this section is to describe the data structures and to give information on when they are initialized, allocated and referenced. Figure \ref{figure:t1data} shows an image of the data-structures for the special case that the font with ID 0 has already been loaded and several size-instances have already been created. %-- Figure: The data structures of t1lib \begin{figure} \begin{center} \includegraphics*[angle=90]{t1_data} \end{center} \hrule\vskip3mm\small \caption{\label{figure:t1data}The internal data structures of \tonelib. The underlying substructures are shown only for the first font {\tt FontID=0}.} \end{figure} As the figure indicates, the complete area may be split into three different sub-areas, thereby pointing out their logical functions. \subsection{Level 0: Global Data} \label{globaldata}% This area contains information needed for the overall organization of the \tonelib. Its contents and its size are thus determined at the time \tonelib\ is initialized. This is done based on the contents of the configuration file and the fontdatabase file. The entries in detail are: \begin{itemize} \item {\tt Filename-Searchpaths}: This entry essentially does not depend on any other data. It consists of 4 \verb+\0+-terminated strings that are read from the configuration file. They are referenced internally by the global symbols \verb+PFAB_ptr+, \verb+AFM_ptr+, \verb+ENC_ptr+ and \verb+FDB_ptr+ respectively. All these are declared as \verb+unsigned char *+. These strings are used by \tonelib\ to locate the respective file types. If no configuration file exists or some path declaration is missing, the corresponding searchpath is set to ``\verb+.+'', causing \tonelib\ to only search the current working directory. \item \verb+no_fonts_ini+: This value is assigned after examining the fontdatabase file. It is meant to store the number of fonts initially declared in the fontdatabase file. In other words, it is assigned the integer number located on the first line of the fontdatabase file. \item \verb+no_fonts+: The number of actually allocated fonts. Initially, this quantity is identical to \verb+no_fonts_ini+. But if one creates a new logical font by calling \verb+T1_CopyFont()+ this counter is incremented to keep track of allocated fonts. \verb+no_fonts+ thus represents most large \verb+FontID+ minus 1 that makes sense to specify to any function of \tonelib. \item \verb+no_fonts_limit+: The number of fonts for which memory is currently allocated. This also is initially set to \verb+no_fonts_ini+ and is automatically enlarged to a multiple of the initial value if a call to \verb+T1_CopyFont()+ requires additional memory for logical fonts (see \ref{logicalfonts}). \item \verb+bitmap_pad+: This variable contains the number of bits to which scanlines of bitmaps and antialiased bitmaps are padded. It is set during initialization, either to a default value or to the value the application specified before starting initialization using \verb+T1_SetBimapPad()+. Allowed values are currently `8', `16' and `32'. \item \verb+endian+: During initialization the hardware is checked for representation of data in memory. If Big Endian is used, \verb+endian+ is set to \verb+1+ and otherwise it is set to \verb+0+. \verb+endian+ is needed at several times when an application or \tonelib\ itself must know the byte order of words and long words. \item \verb+pFontArray+: This a pointer to an array of structures whose type is referred to as \\ \verb+FONTPRIVATE+ in \tonelib. The contents of these structures will be described below. After \tonelib\ has been initialized, memory is allocated for exactly \verb+no_fonts_ini+ structures. This memory pool may be enlarged later if the one wants to make use of logical fonts, for example. The data in these structures initially is not specified. It is written with meaningful values when a font is loaded into memory. The index to access this array-elements is the well known font identification number (\verb+FontID+). \item \verb+pFontFileNameIDArray+: A pointer to a memory area where the font file names corresponding to the \verb+FontID+s are stored. During initialization, \tonelib\ looks for font files with extension \verb+.pfa+ and \verb+.pfb+. The basename of the file found is stored in this area and if the font is to be loaded later, its font file name is looked up here. \end{itemize} We should now discuss the entries of the structures of type \verb+FONTPRIVATE+. The term \verb+FONTPRIVATE+ indicates that every font needs its own structure area. As mentioned earlier, this area is initialized when the corresponding font is loaded. \begin{itemize} \item \verb+pAFMData+: A pointer to a memory area where Adobe Font Metric data of the font is stored. The memory area itself is build by the \verb+parse_afm+-package which is supplied by Adobe System and included in \tonelib. This happens while a font is loaded. In case there is no AFM file for the font in question, this pointer is given the value \verb+NULL+. \item \verb+pType1Data+: A pointer to the data area where the Type 1 information is stored. The known PostScript Type 1 objects Charstrings-dictionary, Subroutines, Othersubroutines and Fontinfo-dictionary are located here. The memory is filled with data during parsing the font file when the font is loaded. \item \verb+pFontEnc+: A pointer to an optional external encoding vector. During initialization, this pointer is set to \verb+NULL+, thus indicating that by default the font's internal encoding should be used. If a font is reencoded using a previously loaded encoding vector from an encoding file, this pointer simply is assigned the address of a valid encoding array somewhere in memory. \item \verb+vm_base+: The base address of the virtual memory required by the font. Unlike the original rasterizer, which allocated virtual memory in chunks of a fixed size, t1lib uses another principle. Since it is \`a priori not obvious how many virtual memory a font consumes, \tonelib\ tries to load a font repeatedly and increases the amount of virtual memory during every trial. In order not to waste memory, the memory is reallocated to the needed size when the font is completely loaded. Finally, the starting address of the virtual memory is needed when a font is to be unloaded and the memory it consumes is to be given back to system. \item \verb+pFontSizeDeps+: A pointer to the area where the size dependent data is to be stored. This data essentially consists of generated glyphs plus some administrative item (see \ref{sizedependentfontdata}). \item \verb+FontMatrix+: A matrix of four \verb+double+-values specifying the font matrix. If the FontInfo-dictionary of the font file defines a FontMatrix, it is copied to this location. If not, a default matrix is used which does no transformation and scales to $1/1000$~bp. \item \verb+FontTransform+: A matrix that will be concatenated with the FontMatrix to produce the final transformation of the characters. It is this matrix that is modified if a font is to be slanted or extended. \item \verb+slant+: A slant factor for the current font. Note that this value is initially 0, even for italic font. Only artificially slanting a font leads to values different from 0. \item \verb+extend+: The horizontal extension factor for the current font. Its default value is 1 and the font is thus rendered at its natural width. \item \verb+physical+: This is a switch that marks a font either being ``physical'' or ``logical''. A physical font by definition is a font for which a Type 1 font file is available and for which thus Level 1 (size-independent) data is present (see Fig.\ 5.1). In contrast, the term ``logical font'' refers to a structure of type \verb+FONTPRIVATE+ whose entry \verb+pType1Data+ points to Level 1 data of another (physical) font. This \verb+FONTPRIVATE+-structure is created by calling \verb+T1_CopyFont()+ with the identification number of an existing physical font as argument (see \ref{logicalfonts}). \item \verb+refcount+: This counter keeps track on how much logical fonts refer to the physical font that is represented by the current structure of type \verb+FONTPRIVATE+. In this since, \verb+refcount+ is only meaningful for physical fonts. It is necessary to keep track of the reference of logical fonts because if this font would be removed from memory by calling \verb+T1_DeleteFont()+, the Level 1 font data memory area would be given back to the system but the logical fonts referring to that font would still expect to find Type 1 or Font Metric data at this address. By checking \verb+refcount+, \verb+T1_DeleteFont()+ can check for logical fonts referring to the font in question and prevent from removing this font from memory. In structures describing logical fonts, \verb+refcount+ is used to store the information which physical font this logical font is referring to. This information is also needed by \verb+T1_DeleteFont()+ since when removing logical fonts, the reference counter of the corresponding physical font has to be decremented. \item \verb+space_position+: This variable stores the encoding index of the ``space''-character of the current font. If the space character does not appear in the current font's encoding, \verb+space_position+ is assigned -1. It follows that \verb+space_position+ is assigned when (1) a font loaded and (2) every time a font is reencoded. Why is it convenient to store the position of the space character in the encoding vector? The properties of the space character are set apart from the other characters' properties not only by the fact that it does not produce any colored pixels but also by that it may shrink and stretch in \tonelib. As a consequence a space character is treated by simply inserting a horizontal escapement of the width of the space character---corrected by the quantity \verb+space_off+ that a user may specify (see \ref{generatingbitmaps}). This involves always checking every character for being the space character and since the encoding principle is used in \tonelib, every check needs a call to \verb+strcmp()+. This overhead is avoided if the position of space is stored. \end{itemize} \subsection{Level 1: Size-Independent Font Data} \label{sizeindependentfontdata}% Size-independent data may be split into three categories as indicated in figure \ref{figure:t1data}. The external encoding is optional and is generated by loading an encoding file as described in \ref{encoding}. It is simply an array of 256 pointers to \verb+unsigned char+ and an ensemble of 256 \verb+\0+-terminated strings. Each pointer references one of the 256 strings in order. The strings are the characters' names to be defined in a \tonelib-encoding file. The internal Type 1 data structures hold all data specified in a type font file. I do not want to describe these data structures here, because this could fill a book. Adobe has made the description of the Type 1 font format available to the public. The Adobe Font Metrics area is entirely created by the \verb+parse_afm+-package. Adobe has made this available by means of the file \verb+parseAFM.shar+ which is a shell-archive and included in \tonelib\ in the subdirectory \verb+parse_afm+. \subsection{Level 2: Size-Dependent Font Data} \label{sizedependentfontdata}% $\ldots$ \newpage \section{Stroked Characters} \label{strokingimplementation}% This section is only meant for the reader interested in details about the algorithm used to create stroked versions from outlines intended to be filled. It can help to understand the code I added to \verb+type1.c+, which may seem a little bit strange. The basic idea to achieve stroked outlines was to map the stroking operation to a simple filling operation as already implemented by the rasterizer. Why did I choose this approach? Well, the actual reason for doing so was that I felt like doing so. One of the pivotal problems in this context turned out to be the computation of a third order Bezier curve, being located {\em in parallel} to a given third order Bezier curve---a problem set which everybody on the net said to be impossible to solve. After some experimenting I had to admit that these people actually were right: It is not possible to solve this problem in general, in particular because tracing a given cubic Bezier spline using a finite pen width might produce delimiting curves which aren't Bezier splines at all. In particular, the angular range and the pen width in relation to the original curve's bend are of importance. However, under some constraints, which usually are fulfilled by adhering to the Adobe design rules for Type 1 Fonts and by choosing reasonable stroke widths, it is possible to approximate these delimiting curves by cubic Bezier splines. \subsection{Approach} Type 1 character outline descriptions consist of mathematically thin defining curves and lines with an associated running direction. By convention, regions left of these defining curves are painted and regions right of these curves are left blank. For each properly defined character, this way, a finite area to be filled results by applying this rule, especially because for filled characters every subpath must be closed. Figure~\ref{figure:stroking1}~\fbox{A} shows the character ``8'' from the ComputerModern Roman font as an example. \begin{figure}[t] \hfill \fbox{A}\includegraphics[scale=0.5]{t1dump/t1dump_eight} \hfill \fbox{B}\includegraphics[scale=0.5]{t1dump/t1dump_o} \hfill\break \hrule\vskip3mm\small \caption{\label{figure:stroking1}\fbox{A} Character ``8'' from font ComputerModern Roman. The arrows indicate the direction of the paths. From the outer subpath it follows that the inner region will be filled (left of the path). From this massive black region, the holes are cut by means of the two inner subpaths (and their direction). \fbox{B} The principle of creating a stroked character by filling a newly created set of subpaths which surround the original path in an appropriate manor.} \end{figure} We find three subpaths which by means of their direction relations yield the filled character. When talking about {\em stroking}, we mean tracing a pen of finite width along these subpaths. When doing so, a new finite (more complex) region of ink is built. Actually we can consider this filled region being the result of filling a newly created path that consists of two subpaths surrounding the original path and having appropriate directions. These newly created subpaths are referred as the {\em right path} and the {\em left path}. Figure~\ref{figure:stroking1} \fbox{B} illustrates this idea for the character ``o''. The original path is represented by dashed curves whereas left paths and right paths are shown as solid curves. The respective directions are indicated by arrows. Now, what are the steps required to compute a right path or left path from a given path and given a certain strokewidth? Firstly, for each path segment two {\em parallel paths} the right and the left path, located half the strokewidth right and left of the original path have to be computed. This is shown for the character ``t'' in Figure~\ref{figure:stroking2}, \fbox{A}. \begin{figure}[t] \hfill \fbox{A}\includegraphics[scale=0.5]{t1dump/t1dump_t_1} \hfill \fbox{B}\includegraphics[scale=0.5]{t1dump/t1dump_t_2} \hfill\break \hrule\vskip3mm\small \caption{\label{figure:stroking2}\fbox{A} Character ``t'' from font ComputerModern Roman. The original path is shown in a thick dashed style. Each segment is surrounded by a parallel path to the right hand side and a parallel path to the left hand side. \fbox{B} Required additional connection segments in order to complete the outline path.} \end{figure} In particular, it turns out that in order to connect two parallel right or left paths of two neighboring original path segments, additional path segments are required. Therefore, in a second step, these parallel path segments---which in general may be disjoint---have to be connected appropriately. These additional path segments are shown in \fbox{B} of the figure. We term these path segments {\em Prolongation Segments}. They are always built as straight lines. It is also obvious, that for convex edges, prolongation actually is what it indicates, and for concave edges, some trick must be applied so that prolongation yields a path that actually {\em shortens} the respective parallel path segments. \subsection{Computation of Parallel Paths} \label{parallelpaths}% For straight lines, the notion of a parallel path in distance $w/2$ immediately becomes evident, but what about Bezier curves? Let us define the parallel of a curve as the infinite set of points, that results from tracing along the curve and for each point of the curve computing the point which in direction orthogonally to the curve's tangent at the respective location is just the distance $w/2$ apart. The {\em parallel curve} resulting from the principle above actually no longer is a third order Bezier curve. But if a few additional constraints hold, it can be approximated quite well by such a third order Bezier curve: \begin{itemize} \item The curvature should not exceed an angular range of 90 degrees. This condition automatically is fulfilled for Type 1 fonts which adhere to the Adobe recommendations. \item The strokewidth $w$ the curve should be drawn width is small compared to the extension and the curvature of the curve. This principle usually is fulfilled by nature because tracing a character outline path with a very thick pen won't lead to a good representation of the character. \end{itemize} In the following, we will describe how to compute a parallel Bezier curve defined by four points $\vec{A}'$, $\vec{B}'$, $\vec{C}'$ and $\vec{D}'$, given an original Bezier curve defined by four points $\vec{A}$, $\vec{B}$, $\vec{C}$ and $\vec{D}$ and a strokewidth $w$. The computation of parallel straight lines results as the special case of only respecting the points $\vec{A}$ and $\vec{D}$ from these considerations. Figure~\ref{figure:stroking3} represents the basis of our discussion. \begin{figure}[t] \centerline{\includegraphics[scale=0.7]{t1dump/parallelpath_sk}} \hrule\vskip3mm\small \caption{\label{figure:stroking3}Construction of parallel Bezier path segments. The original curve is shown in dashed style and the light gray area indicates the thick Bezier curve segment that later will result from filling between left and right parallel path. Furthermore, important intermediate points are shown. A detailed discussion is given in the text.} \end{figure} It shows the original mathematically thin Bezier segment defined by the points $\vec{A}$, $\vec{B}$, $\vec{C}$ and $\vec{D}$ in dashed style. The counterpart of $\vec{A}$ in the parallel path follows from simple geometric considerations, as illustrated for the point $\vec{A}'$. It lies half the strokewidth $w$ away from $\vec{A}$ and the direction is determined by the location of point $\vec{B}$. For the two coordinates of $\vec{A}'$ we find \begin{equation} \label{eq:eq1} A'_x = A_x + \frac{w}{2}\frac{B_y - A_y}{|\vec{B} - \vec{A}|} \end{equation} and \begin{equation} \label{eq:eq2} A'_y = A_x - \frac{w}{2}\frac{B_x - A_x}{|\vec{B} - \vec{A}|}. \end{equation} Corresponding equations can be derived for the point $\vec{D}'$, so that, up to now, we are able to compute parallel straight line segments. It remains to compute two control points, $\vec{B}'$ and $\vec{C}'$, in a way that the resulting Bezier curve appears as parallel to the original curve in the sense defined above. In order to make the path at point $\vec{A}'$ actually parallel to the orginal path at $\vec{A}$, we require $\vec{B}' - \vec{A}'$ to be parallel to $\vec{B} - \vec{A}$. From this we can derive an equation that expresses the fact that $\vec{B}'$ lies somewhere on the straight line that runs through point $\vec{A}'$ and has the direction $\vec{B} - \vec{A}$, i.e., \begin{equation} \label{eq:eq3} \vec{B}' = \vec{A}' + \mu_B (\vec{B} - \vec{A}), \end{equation} and correspondingly \begin{equation} \label{eq:eq4} \vec{C}' = \vec{D}' + \mu_C (\vec{C} - \vec{D})\phantom{,} \end{equation} for point $\vec{C}'$. Here, $\mu_B$ and $\mu_C$ are two positive quantities, whose exact values are still to be determined. In order to compute $\mu_B$ and $\mu_C$, we consider a third point on the curve. Using a well-known algorithm that iteratively approximates a Bezier curve via straight line segments, we can easily determine the coordinates of the point that---in the parameter equation $f(t)$ of a Bezier curve---corresponds to the parameter $t=1/2$. It can be considered as a {\em middle point} of the curve segment. In Figure~\ref{figure:stroking3}, this point is named $\vec{P}_6$. It can be computed by computing some intermediate points: \begin{equation} \label{eq:eq5} \vec{P}_1 = \frac{1}{2} ( \vec{A} + \vec{B} ) \end{equation} \begin{equation} \label{eq:eq6} \vec{P}_2 = \frac{1}{2} ( \vec{B} + \vec{C} ) \end{equation} \begin{equation} \label{eq:eq7} \vec{P}_3 = \frac{1}{2} ( \vec{C} + \vec{D} ) \end{equation} \begin{equation} \label{eq:eq8} \vec{P}_4 = \frac{1}{2} ( \vec{P}_1 + \vec{P}_2 ) \end{equation} \begin{equation} \label{eq:eq9} \vec{P}_5 = \frac{1}{2} ( \vec{P}_2 + \vec{P}_3 ) \end{equation} and finally \begin{equation} \label{eq:eq10} \vec{P}_6 = \frac{1}{2} ( \vec{P}_4 + \vec{P}_5 ) = \frac{1}{8} ( \vec{A} + 3 \vec{B} + 3 \vec{C} + \vec{D} ) \end{equation} Using the same geometrical considerations as in Eqs.~\ref{eq:eq1} and \ref{eq:eq2}, we can now compute a unit vector, $\vec{n}_6$, perpendicular to the curve at $\vec{P}_6$ and obtain \begin{equation} \label{eq:eq11} n_{6x} = \frac{ P_{5y} - P_{4y} }{\sqrt{(P_{5x}-P_{4x})^2 + (P_{5y}-P_{4y})^2}} \end{equation} \begin{equation} \label{eq:eq12} n_{6y} = - \frac{ P_{5x} - P_{4x} }{\sqrt{(P_{5x}-P_{4x})^2 + (P_{5y}-P_{4y})^2}} \end{equation} $\vec{P}'_6$ can now be computed as \begin{equation} \label{eq:eq13} \vec{P}'_6 = \vec{P}_6 + \vec{N}_6, \end{equation} where $\vec{N}_6 = \frac{w}{2} \vec{n}_6$, i.e., the vector orthogonal to the curve at $\vec{P}_6$ with a length of half the strokewidth $w$. As before, we have to require that the slope of the curve $\vec{P}_6$ equals the one at $\vec{P}'_6$, i.e., with respect to Figure~\ref{figure:stroking3} we find \begin{eqnarray*} \vec{P}'_5 - \vec{P}'_4 & = & \nu \left( \vec{P}_5 - \vec{P}_4 \right) \\ \frac{\vec{P}'_2 + \vec{P}'_3}{2} - \frac{\vec{P}'_1 + \vec{P}'_2}{2} & = & \nu \left( \frac{\vec{P}_2 + \vec{P}_3}{2} - \frac{\vec{P}_1 + \vec{P}_2}{2} \right) \\ \frac{\vec{C}' + \vec{D}'}{2} - \frac{\vec{A}' + \vec{B}'}{2} & = & \nu \left( \frac{\vec{C} + \vec{D}}{2} - \frac{\vec{A} + \vec{B}}{2} \right) \end{eqnarray*} and hence finally \begin{equation} \label{eq:eq14} \vec{C}' + \vec{D}' - \vec{A}' - \vec{B}' = \nu \left( \vec{C} + \vec{D} - \vec{A} - \vec{B} \right)\;. \end{equation} We have thus expressed the slope condition at $\vec{P}_6$ in terms of the characteristic points of a Bezier curve and a factor, $\nu$, still to be determined (cf.~Eqs.~\ref{eq:eq3} and \ref{eq:eq4}). On the way to Eq.~\ref{eq:eq14}, we made use of the well-known geometrical relations \hbox{Eqs.~\ref{eq:eq5} -- \ref{eq:eq9}}. Based on the same considerations that led to Eq.~\ref{eq:eq10}, we can write the corresponding equation for the point $\vec{P}'_6$: \begin{equation} \label{eq:eq15} \vec{P}'_6 = \frac{1}{2} ( \vec{P}'_4 + \vec{P}'_5 ) = \frac{1}{8} ( \vec{A}' + 3 \vec{B}' + 3 \vec{C}' + \vec{D}' ) \end{equation} Exploiting Eq.~\ref{eq:eq13} and solving for $\vec{C}'$, we can reorganize Eq.~\ref{eq:eq15}: \begin{equation} \label{eq:eq16} \vec{C}' = \frac{8 (\vec{N}_6 + \vec{P}_6) - \vec{A}' - \vec{D}'}{3} - \vec{B}' \end{equation} From this equation, we are able eliminate $\vec{B}'$ by substituting the transformed slope condition for point $\vec{P}'_6$ (Eq.~\ref{eq:eq14}). We obtain \begin{eqnarray} \nonumber \vec{C}' &=& \frac{8 (\vec{N}_6 + \vec{P}_6) - \vec{A}' - \vec{D}'}{3} + \left[ \nu \left( \vec{C} + \vec{D} - \vec{A} - \vec{B} \right) - \vec{C}' - \vec{D}' + \vec{A}' \right] \\ \nonumber 2\, \vec{C}' &=& \frac{8 (\vec{N}_6 + \vec{P}_6) - \vec{A}' - \vec{D}'}{3} + \vec{A}' - \vec{D}' + \nu \left( \vec{C} + \vec{D} - \vec{A} - \vec{B}\right) \\ \label{eq:eq17} \vec{C}' &=& \underbrace{\frac{4 (\vec{N}_6 + \vec{P}_6) + \vec{A}' - 2 \vec{D}'}{3}} _{\mbox{$\vec{l}_C$}} + \frac{\nu}{2} \underbrace{\left( \vec{C} + \vec{D} - \vec{A} - \vec{B}\right)} _{\mbox{$\vec{d}_C$}} \,. \end{eqnarray} Here, for the sake of brevity, we introduced a location vector, $\vec{l}_C$, and a direction vector, $\vec{d}_C$, which together with the parameter $\nu$ define the point $\vec{C}'$. Considering Eqs.~\ref{eq:eq4} and \ref{eq:eq17}, we finally found two independent relations for $\vec{C}'$, that linearly depend on two quantities, $\mu_C$ and $\frac{\nu}{2}$. Therefore, by substituting the right hand sides of (\ref{eq:eq4}) and (\ref{eq:eq17}), we obtain the following $2 \times 2$ system of linear equations: \begin{equation} \label{eq:eq18} \left[ \begin{array}{cc} (\vec{C}-\vec{D}) & \vec{d}_C \end{array} \right] \left( \begin{array}{cc} \mu_C \\ \nu/2 \end{array} \right) = \left( \vec{l}_C - \vec{D}' \right) \end{equation} Formally, all vectors appearing in this equation are column vectors. The solution of the system can be written as \begin{equation} \label{eq:eq19} \left( \begin{array}{cc} \mu_C \\ \nu/2 \end{array} \right) = \left[ \begin{array}{cc} (\vec{C}-\vec{D}) & \vec{d}_C \end{array} \right]^{-1} \left( \vec{l}_C - \vec{D}' \right)\, . \end{equation} Once $\vec{C}'$ has been computed, it is easy to compute $\vec{B}'$, by making use of Eq.~\ref{eq:eq16}. A few remarks about the approach described above are appropriate. \begin{itemize} \item It is also possible to first compute the point $\vec{B}'$ and then use Eq.~\ref{eq:eq16} to compute $\vec{C}'$. \item The numerical stability at the respective end of the curve determines the preference of which point to compute first. A criterion for the numerical stability is the absolute value of determinant of the $2 \times 2$ matrix in Eq.~\ref{eq:eq18}. \item This determinant may become zero in which case the curve transforms into a straight line. These cases must be treated extraordinarily. \item There are a number of further exceptional cases, e.g., if point $\vec{C}$ equals $\vec{D}$. Then the slope at this end of the curve is not enforced by point $\vec{C}$. \item A good solution, that is, a {\em parallel curve}, will only result, if the set of assumptions discussed previously holds. If the resulting curve does not appear {\em parallel} to the original curve, the parallel curve cannot be approximated by a third order Bezier spline. \end{itemize} \subsection{Connection of Path Segments and Prolongation} \label{connectingpaths} In order to actually obtain delimiting paths for character outlines, the parallel paths have to be connected to a continuous path. This raises the problem of line joining. When connecting two neighboring parallel path segments, we have to distinguish between two qualitatively different situations. \begin{enumerate} \item Convex Corner\\ When tracing along two neighboring parallel path segments, we turn to the left and a convex corner appears. In these cases, we prolongate the end of the first path and the beginning of the second path using straight lines and compute an intersection between these prolongation segments. The resulting lengths of both prolongation segments will be positive. \item Concave Corner\\ When tracing along two neighboring parallel path segments, we turn to the right and a concave corner results. In these cases, the two neighboring parallel path segments intersect by nature and actually would have to be trimmed to their intersection point. Trimming on the other hand would make it impossible to feed the resulting curve in the standard format into the rasterizer. We therefore use a trick that saves us computing an intersection and recomputing the Bezier control points. From the ideal end point of the first parallel path we insert a straight prolongation to the connection point of the original path segments and a second straight prolongation segment from there to the starting point of the second parallel path segment. Then, the area left of the path is ensured to be within the extents that finally are to be filled with ink. \end{enumerate} We will now explain this principle using the example shown in Figure~\ref{figure:stroking4}. \begin{figure}[t] \centerline{\includegraphics[scale=1.1]{t1dump/t1dump_B}} \vskip3mm\hrule\vskip3mm\small \caption{\label{figure:stroking4}A small excerpt at the middle right from the character ``B'' of ComputerModern Roman. The ideal mathematical outline of the filled character is shown in thick dashed style. Left and right path of the character's outline representation are shown in medium solid style. Prolongation is indicated by large dashes of medium thickness.} \end{figure} The interesting part is in the middle right. The original path---shown in bold dashed style---steps into the figure in the lower right as the end of a curve segment $p_1$. At the following connection point, the path strongly turns to the right so that a concave corner results and continues with a further curve segment $p_2$. This path is now to be surrounded in a symmetrical manner by one right and one left path. For $p_1$, we find the right path as a parallel curve segment above the original path. It has been computed as described in the previous section. For $p_2$, the right path is a parallel curve segment located in an appropriate distance below $p_2$. The two neighboring right path segments are disjoint because of the concavity of the resulting corner. Hence, rule 2 from above applies in order to connect them using straight prolongation lines, in the figure shown in wide dashes of a medium linewidth: From the end of right path 1, we prolongate to the point where the original segments $p_1$ and $p_2$ join, and from there, a second prolongation to the beginning of right path 2 is inserted. The direction is indicated by arrows. Obviously, even the right path alone produces a closed region in this case, but this does not cause problems here. The left path runs into the direction opposite to the original path. By nature, the curvature at the point under consideration now is convex. Hence, according to rule 1, the neighboring left paths' segments are prolongated to their common intersection point, respecting the ending direction of left path 1 and the starting direction of left path 2. The kind of corner at two neighboring parallel path segments $p_1$ and $p_2$ can be computed analytically. Let $\vec{T}_1$ be the tangent vector at the end point of $p_1$ and $\vec{T}_2$ be the tangent vector at the starting point of $p_2$. Assuming that both $\vec{T}_1$ and $\vec{T}_2$ are column vectors, we can use the determinant of the square matrix constructed by these vectors to determine the corner type: \begin{equation} \label{eq:eq20} d = \left| \begin{array}{cc} \vec{T}_1 & \vec{T}_2 \end{array} \right| \end{equation} If $d<0$, the corner type is concave whereas for $d>0$, the corner type is convex. For the special case $d=0$, the slope at the joining point is continuous, so that effectively $\vec{T}_1$ and $\vec{T}_2$ linearly depend on each other. For those cases, prolongation is not required at all, because if the neighboring segments in the original path join, neighboring segments in the left and right path will do so too. The kind of joining lines described above is known as {\em mitered line joining}. \tonelib\ does not impose a limit on the width of mitered corners, so that the operation \tonelib\ implements is identical to what PostScript does by default, i.e., using a line join type of 0 and an infinite miter limit. %%% Local Variables: %%% mode: latex %%% TeX-master: "t1lib_doc" %%% End: t1lib-5.1.2/doc/rotate.eps0000644000175000001440000000067110733501626014044 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox: 0 0 200 200 %%EndComments /TimesRoman findfont 150 scalefont setfont 100 100 translate /sin30 30 sin def /minussin30 30 sin neg def /cos30 30 cos def gsave [ cos30 sin30 minussin30 cos30 0 0] concat 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) show grestore [ 3 3 ] 2 setdash 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) true charpath stroke t1lib-5.1.2/doc/rotate.pdf0000644000175000001440000000250510733501626014024 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœUT9’1 Ìù †và1‚Gê*?`-e.GrùªU°‘¿o4ÀQYZi¦›ÄE ¹tp%üí÷í^Þ ×ß…©þõQǽðìý ­lN_Ÿ¶°rn¿–Kyóˆ¶_·{ýt-¿ôʲŽE­^x:l µúጀñ»Þßý|ýS>_ëKùZ•ðýV…ê÷§ÌòÀÏÅKrýRx·)Ø ÜÃÃæ:þcö`l:€ì@YF f¾{+ÜFsÖ‡3wjªá4/]Þ ¾¼µ–È=„[Ø`)ìQ̉[Û‘7Wó¸E@YFšâÑÒJÄ]EÂTˆñp <·•{""QË?L“3_²6}G|:¤œAÉ Æ+ÓQ“:qü<·“¡HghJ^­†7 :ybÝ"Ð ·îa2ú‚IïêÑæå‘]J–pIÏ$ Lœ>bɦcîsÀL9\iu GÔ’¡¸µÛ>'Óþä™Yš;ã‘ åŒ>Ñú‰ØÚ°.˜Wï1GÃáÐ2ŽÍ¸Íž„¿¡tñùß @ø ¤‚–è˜5ëqêÀY[öËÝäC§Šnå4¾Ö€ÂeÀpÍžŠ¤ºF”Ò:zŸ$b?vº9ÜêtAÁÀaÌļ³C…ú„U6q¥:I%Þ¤Ïè«ÃEÙò5J4å,wW?ó’ÝO¼bn2—Ðò¦å5õõ&y³Dò"Űó„m x$l¸—Ͳ Àº¢¿‰y_Ãu¸½t?¦²€qÎ-ìD}j3guKdós {üº”—òtð}endstream endobj 5 0 obj 593 endobj 3 0 obj << /Type /Page /MediaBox [0 0 200 200] /Parent 2 0 R /Resources << /ProcSet [/PDF /Text] /Font << /R6 6 0 R >> >> /Contents 4 0 R >> endobj 6 0 obj <> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 7 0 obj << /CreationDate (D:20010110083239) /Producer (GNU Ghostscript 5.10) >> endobj xref 0 8 0000000000 65535 f 0000000977 00000 n 0000000918 00000 n 0000000697 00000 n 0000000015 00000 n 0000000678 00000 n 0000000845 00000 n 0000001026 00000 n trailer << /Size 8 /Root 1 0 R /Info 7 0 R >> startxref 1113 %%EOF t1lib-5.1.2/doc/manipulate.eps0000644000175000001440000011264310733501626014710 0ustar rmzusers%!PS-Adobe-3.0 EPSF-3.0 %%Creator: GIMP PostScript file plugin V 1.05 by Peter Kirchgessner %%Title: /home/rainer/tmp/manipulate.eps %%CreationDate: Thu Apr 15 20:22:23 1999 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%Pages: 1 %%BoundingBox: 14 14 440 186 %%EndComments %%BeginProlog % Use own dictionary to avoid conflicts 5 dict begin %%EndProlog %%Page: 1 1 % Translate for offset 14.173228 14.173228 translate % Translate to begin of first scanline 0.000000 170.919327 translate 425.196850 -170.919327 scale % Variable to keep one line of raster data /scanline 76 string def % Image geometry 607 244 1 % Transformation matrix [ 607 0 0 244 0 0 ] { currentfile scanline readhexstring pop } image ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0ffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc07fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc07fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc07fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff107fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff187fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff387fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff387fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff387fffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3cffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3effffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3effffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3effffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffe7e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffff07e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffc07e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffc07e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffff1807e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffc1807e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffe01807e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffc01807e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffc01807e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffc01807e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffc01807e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7bffc01807e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc63ffc01827e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03ffc01a37e ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffc03ffc01a3fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ff803ffc05a3fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ff003ffc05a3fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ff003ffc07e3fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01fe003ffd07e3fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01fe003ffd07e3fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fe003fff87e3fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fe003fff87e3fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00fe003fff87e7fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00fe003fff87e7fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00fe003fff87c7fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffc007e01ffff87c7fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffc3fffff8307e07ffff83c7fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffc1fffff8787e47ffff83c7fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff81fffff8787fc7ffff83c7fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff80fffff8787fc7ffff83c7fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffbff00fffff8fc3fc7ffffc3c7fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffff9ff00fffff8fc3fc7ffffc3c7fe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff78ff00fffff0fc3fc7ffffc3cffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffe787e007ffff0fc3fc7ffffc3cffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffe787e007ffff0fe3fc7ffffc38ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffc707e007ffff1fe3fc7ffffc38ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffc707e187ffff1fe3fc7ffffc38ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffe1ffc707e387ffff1fe3fc7ffffc38ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffc1ff8707c3c3ffff1fe3fc7ffffc18ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffff80ff8707c7c3ffff1fe1fc7ffffc18ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffff80ff0707c7c3ffff1fe1fc7ffffe18ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffff007f0607c7e3fffe1fe1fc7ffffe19ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffdfffffffffffffffffffffffff3ff007f0607c7e3fffe3ff1fc7ffffe19ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff9ffffffffffffffffffffffffe3fe007e0607c7e3fffe3ff1fc7ffffe19ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff1ffffffffffffffffffffffffe3fe007e06078fe3fffe3ff1fc7ffffe11ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffe1ffffffffffffffffffffffbfc3fe003e06078fe3fffe3ff1fc7ffffe11ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffc1ffffffffffffffffffffff3f83fe003e06078fe3fffe3ff1fc7ffffe11ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffff81fffffffffffffffffffffe3f03fc183e04078ff3fffe3ff1fc7ffffe11ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffff81fffffffffffffffffffffc3f03fc3c3ec4078ff1fffe3ff1fc7ffffe11ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffff81fffffffffffffffffffffc3f03fc7c3fc4078ff1fffe3ff1fc7fffff11ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffff81ffffffffffffffffffc3f83f03fc7c3fc4278ff1fffe3ff1fc7fffff01ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffff81ffffffffffffffffff00f03f03fcfe3fc4779ff1fffe3ff1fc7fffff03ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffff81fffffffffffffffffe00f03f03f8fe3fc4ff9ff1fffe3ff1fc7fffff03ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff1fffffffffffffffffc00f03f03f8fe3fc0ff1ff1fffe3ff0fc7fffff03ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff1fffffffffffffffffc00f03f03f8fe3fc1ff1ff1fffe3ff8fc7fffff03ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff1fffffffffffffffff800f03f03f8fe3fc1ff1ff1fffe7ff8fc7fffff03ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff1fffffffffffffc7ff800f03f03f8fe1fc3ff1ff1fffc7ff8fc7fffff03ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff efffffffffff1fffffffffffff03ff800f03fe3f8fe1fc3ff1ff1fffc7ff8fc7fffff03ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff cfffffffffff0fffffffffffff01ff000f03fe3f8fe1fc3ff1ff1fffc7ff8fc7fffff03ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 8fffffffffff0ffffffffffffe00ff0f0f03fe3f8fe1fc3ff1ff1fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0fffffffffff0ffffffffffffe00fe0f8fe3fe3f8ff1fc3ff1ff1fffc7ff8fc7fffff87ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe 0fffffffffff0ffffffffffffc00fe1f8fe3fe3f8ff1fc7ff1ff1fffc7ff8fc7fffff87ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 0ffffffff3ff0ffffffffffffc00fe3f8fe3fe3f8ff1fc7ff1ff1fffc7ff8fc7fffff87ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 0ffffffff3ff0ffffffffffffc00fe3f8fe3fe3f8ff1fc7ff1ff1fffc7ff8fc7fffff87ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 0ffffffff3ff0ffffff0fffff870fc3f8fe3fe3f8ff1fc7ff3ff1fffc7ff8fc7fffff87ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffc 0ffffffff3ff0fffffe07ffff870fc7f8fe3fe3f8ff1fc7ff3ff1fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffc 8ffffffff3ff0fffffe07ffff8f8fc7f8fe3fe3f8ff1fc7ff3ff1fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffff 8ffffffff3ff0fffffc03ffff8f8fc7f8fe3fe3f8ff1fc7ff3ff1fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ffff 8ffffffff3ff0fffffc03ffff9f8fc7f8fe3fe3fbff1fc7ff3fc1fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ffff 8ffffffff3ff0f8fff803ffff1f8fc7f8fe3fe3ffff1fc7fe3801fffc7ff8fc7fffffc3ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ffff 8ffffffff3ff0f07ff801ffff1f8f8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ffff 8ffffffff3ff0e07ff041ffff1f8f8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ffff 8ffffffff3ff0e03ff0e1ffff1f8f8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ffff 8fffffffe3ff0c03ff1f1ffff1f8f8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87f9ff 87ffffffe3ff0c03ff1f0ffff1fcf8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87f9ff 87ffffffe3ff0803fe3f8ffff1fcf8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff9ff 87ffffffe30f0981fe3f8ffff1fcf8ff8fe3fe3fffe1fc7fe0001fffc7ff8fc7fffff81ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff 87ffffffe00f01c1fe3f8ffff1fcf9ff8fe3fe3fffc1fc7fe0001fffc7ff8fc7fffff81ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff 87ffffffc00f03e1fe3f8ffff1fff1ff8fe3fe3fffc1fc7fe0001fffc7ff8fc7fffff81ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff 87ffffff800f03e1fe7f8ffff1fff1ff8fe3fe3fff81fc7fe001ffffc7ff8fc7fffff01ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff 87c7ffff000f07e1fc7fcffff1fff1ff8fe3fe3fff01fc7fe07fffffc7ff8fc7fffff01ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff 8783ffff000f07f1fc7fcffff1fff1ff8fe3fe3ffe01fc7fe3ffffffc7ff8fc7fffff01ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff 8703ffff007f0ff1fc7fc7fff1fff1ff8fe3fe3ffe01fc7fe3ffffffc7ff8fc7fffff01ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ff 8601ffff03ff0ff1fc7fc7fff1fff1ff8fe3fe3ffc01fc7fe3ffffffc7ff8fc7fffff01ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ff 8601ffffe3ff1ff1fc7fc7fff0fff1ff8fe3fe3ffc01fc7fe3ffffffc7ff8fc7fffff11ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ff 8401ffffe3ff1ff1fc7fc7fff0fff1ff8fe3fe3ff801fc7fe3ffffffc7ff8fc7fffff11ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff187 80e0ffffe3ff1ff1fcffc7fff0fff1ff8fe3fe3ff001fc7fe3ffffffc7ff8fc7fffff30ffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfe007 81e0ffffe3ff1ff1fcffc7fff07ff1ff8fe3fe3ff021fc7fe3ffffffc7ff8fc7fffff30ffe ffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffffffffffffffff8fc007 81f0ffffe3ff1ff1f8ffc7fff07ff1ff8fe3fe3fe061fc7fe3ffffffc7ff8fc7ffffe30ffe ffffffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffffffffffff0f8007 83f0ffffe3ff1ff1f8ffc7fff03ff1ff8fe3fe3fe061fc7fe3ffffffc7ff8fc7ffffe30ffe ffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffffffe70f8007 83f8ffffe3ff1ff1f8ffc7fff01ff1ff8fe3fe3fe0e1fc7fe3ffffffc7ff8fc7ffffe30ffe ffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffffffffffc060f807f 87f8ffffe3ff1ff1f8ffc7fff81ff1ff8fe3fe3fc1e1fc7fe3ffffffc7ff8fc7ffffe30ffe ffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffffffffffc040f91ff 87f8ffffe3ff1ff1f8f807fff80ff1ff8fe3fe3fc1e1fc7fe3ffffffc7ff8fc7ffffe30ffe ffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffffffff8fc040ff1ff 8ff8ffffe3ff1ff1f80007fff80ff1ff8fe3fe3fc3e1fc7fe3ffffffc7ff8fc7ffffe30ffe ffffffffffffffffffffffffffffffffffffffffffffffff0ffffffffffffffff9f8fc040ff1ff 8ff8ffffe3ff1ff1f80007fff807f1ff8fe3fe3f83e1fc7fe3ffffffc7ff8fc7ffffe30ffe ffffffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffe01f8fd1c0ff1ff 8ff8ffffe3ff1ff1f80007fffc07f1ff8fe3fe3f87e1fc7fe1ffffffc7ff8fc7ffffe30ffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01f0ff3c0ff1ff 8ff8ffffe3ff1ff1f80007fffc07f1ff8fe3fe3f87e1fc7fe1ffffffc7ff0fc7ffffe787fe fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0fdffc01f0ff3f8ff1ff 8ff8ffffe3ff1ff1f80007fffe03f1ff8fe3fe3f8fe1fc7fe1ffffffc7ff1fc7ffffe787fe fffffffffffffffffffffffffffffffffffffffffffffffffffffffff8003ffc0ff0ff3f8ff1ff 8ff8ffffe3ff1ff1f80007fffe03f1ff8fe3fe3f8fe1fc7fe1ffffffc7ff1fc7ffffc787fe fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0003ffd8ff0ff3f8ff1ff 8ff8ffffe3ff1ff1f807ffffff03f1ff8fe3fe3f0ff1fc7ff1ffffffc3ff1fc7ffffc787fe fffffffffffffffffffffffffffffffffffffffffffffffffffff1ffe0003fff8ff07f3f8ff1ff 8ff8ffffe3ff1ff1f8ffffffff01f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe fffffffffffffffffffffffffffffffffffffffffffffffffffbc0ffe1807fff8ff07e3f8ff1ff 8ff8ffffe3ff1ff1f8ffffffff81f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe ffffffffffffffffffffffffffffffffffffffffffffffffdfe3807fc3c3ffff87e47e3f8ff1ff 8ff8ffffe3ff1ff1f8ffffffff81f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe ffffffffffffffffffffffffffffffffffffffffffffffff9fc3007fc7e3ffff87e47e7f8ff1ff 8ff8ffffe3ff1ff1f8ffffffffc1f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe fffffffffffffffffffffffffffffffffffffffffffffffe1f82383fc7e3ffff87e47e7f8ff1ff 8ff8ffffe3ff1ff1f8ffffffffe1f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe fffffffffffffffffffffffffffffffffffffffffffffe0c1f007c3f8fe1ffff87e47e7f8ff1ff 8ff8ffffe3ff1ff1f8ffffffffe1f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe fffffffffffffffffffffffffffffffffffffffffffdf8081f00fc3f8ff1ffffc7e47e7f8ff1ff 8ff8ffffe3ff1ff1f8ffffffffe1f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffcf83fe fffffffffffffffffffffffffffffffffffffffffbf1f8081f01fe3f8ff1ffffc7e63e7f8ff1ff 8ff8ffffe3ff1ff1f8fffffffff0f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffff8f83fe f800001fffffffffffffffffffffffffffff07f803f1fa381fe3fe3f8ff1ffffc7ee3e7f8ff1ff 8ff8ffffe3ff1ff1f8fffffffff0f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffff8f83fe f800001ffffffffff9fffffffffffffff7fe01f803f1fe7b1fe3fe3f8ff1ffffc7ce3c7f8ff1ff 8ff8ffffe3ff1ff1f8fffffffff0f1ff8fe3fe3f1ff1fc7ff0ffffffe3fe1fc7ffff8fc3fe f9fc7f1ffffffffff9fffffffffffff9e1f800f91fe0fe7f1fe3fe3f8ff1ffffc3ce3cff8ff1ff 8ff8ffffe3ff1ff1f8fffffffff0f1ff8fe3fe3f1ff1fc7ff0ffffffe3fe1fc7ffff8fc3fe f9fc7f9ffffffffff9fffffffff07fe1c1f8f87f1fe0fe7f1fe3fe3f8ff1ffffc3ce3cff8ff1ff 8ff8ffffe3ff1ff1f8fffffffff0f1ff8fe3fe3f1ff1fc7ff0ffefffe1fe3fc7ffff8fc3fe f9fc7f9ffffffffff1ffffffffc000c1c1f1fc3f0fe0fe7f1fe3fe3f8ff1ffffc3ce3cff8ff1ff 8ff8ffffe3ff1ff1f8fffffffff8f1ff8fe3fe3f1ff1fc7ff0ffefffe1fe3fc7ffff8fc3fe f9fc7f9ffffffffff1ffffffff80008181e1fe3f0fe0fc7f1fe3fe3f8ff1ffffe3ce3cff8ff1ff 8ff8ffffe3ff1ff1f87ffffff3f8f0ff8fe3fe3f1ff1fc7ff0ffefffe1fe3fc7ffff8fc3fe fffc7ffffffffffff107ffffff1f1ff00de3fe3f0fc8fcff1fe3fe3f8fe3ffffe3ce1cff8ff1ff 8ff8ffffe3ff1ff1f87ffffff3f8f0ff8fe3fe3f1ff1fc7ff0ffdffff1fe3fc7ffff8fc3fe fffc7ffe03f007018007fffffe3f8ff07fe3ff1f8fc87cff1fe3fe3f8fe3ffffe39f1cff8ff1ff 8ff8ffffe3ff1ff1f87ffffff3f8f0ff8fe3fe3f1ff1fc7ff8ffdffff1fe3fc7ffff8fc3fe fffc7ffc01f00601800ffffffe3f8ff0ffc7ff1f8fcc7cff1fe3fe3f87e3ffffe39f18ff8ff1ff 8ff8ffffe3ff1ff1fc7ffffff3f8f0ff8fe3fe3f1ff1fc7ff87fdffff1fc3fc7ffff1fc1fe fffc7ff8f8f61f8ff1fffffffe3f8ff1ffc7ff1f87cc7cff1fe3fe3fc7c3ffffe39f19ff8ff1ff 8ff8ffffe3ff1ff1fc7ffffff3f8f8ff8fe3fe3f1fe1fc7ff87f9ffff1fc3fc7ffff1fc1fe fffc7ff1fc7e0f9ff1fffffffc7f8ff1ffc7ff1f879c78ff1fe3fe3fc3c7ffffe19f19ff8ff1ff 8ff8ffffe3ff1ff1fc7ffffff3f8f8ff8fe3fe3f1fe1fc7ff87f9ffff0fc3fc7ffff1fc1fe fffc7fe3fe7f0f1ff1fffffffc7f8ff1ffc7ff1fc79c79ff1fe3fe3fc187ffffe19f19ff8ff1ff 8ff8ffffe3ff1ff1fc7ffffff3f9f87f8fe1fe3f1fe1fc7ff87f9ffff0fc7fc7ffff1fc1fe fffc7fe3fe3f863ff1fffffffc7f8ff1ffc7ff8fc79e39ff1fe3fe3fe00ffffff19f19ff8ff1ff 8ff8ffffe3ff1ff1fc3ff7fff3f9f87f8fe1fc3f1fc1fc7ff87f1ffff0f87fc7ffff1fc1fe fffc7fe7fe3f867ff1fffffffc3f8ff1ffc7ff8fc79e39ff1fe3fe3fe01ffffff13f09ff8ff1ff 8ff8ffffe3ff1ff1fc3ff7fff3f1f87f8fe1fc3f0fc1fc7ff83f1ffff0f87f87ffff1b813e fffc7fc7fe3fc07ff1fffffffe3f8ff1ffc7ff8fc33e39ff1fe3fe3ff03ffffff13f89ff8ff1ff 8ff8ffffe3ff1ff1fc3ff7fff3f1f87f8fe1fc3f0f81fc7ff83f1ffff8787e86fffd13803e fffc7fc0003fe0fff1fffffffe3f1ff1ffc7ff1fc33e31ff1fe3fe3ff8fffffff13f81ff8ff1ff 8ff8ffffe3ff1ff1fc3fe7fff3f1f83f8fe1f83f0f81fc7ffc3e1ffff8707e86fffc07803e fffc7fc0003fe0fff1fffffffe1e1ff1ffc7ff1fe33e33ff1fe3fe3ff9fffffff13f83ff8ff1ff 8ff8ffffe3ff1ff1fe1fe7fff3f1f83f0ff0f83f0f11fc7ffc1e1ffff8307e00fffc07803e fffc7fc7ffffe0fff1ffffffff003ff1ffc7ff1fe33f13ff1fe3fe3ff3fffffff03f83ff8ff1ff 8ff8ffffe3ff1ff1fe1fc7fff3f1fc1e0ff0f23f07116c27fc0c1ffff800fe00fffc07803e fffc7fc7ffffe07ff1ffffffff807ff1ffc7ff1fe27f13ff1fe3fe3ff3fffffff03f83ff8ff1ff 8ff8ffffe1ff1ff1fe1fc7fff3e1fc1c0ff0e23700306007fc003ffff800fe00fffc07803e fffc7fc7ffffc43ff1ffffffffe1fff1ffc7ff1fe07f13ff1fe3fe3ff1fffffff87f83ff8ff1ff 8ff8ffffe1ff1ff1fe0f87fff1e3fc000ff0420780306007fc003ffffc00fe00fffc07803e fffc7fc3ffff8c3ff1ffffffffcffff1ffc3fe3fe07f03ff1fe3fe3ff03ffffff87f83ff8ff0ff 8ff8ffffe0ef0bb0df0707fff083fc000ff0060780306007fe003ffffc00fe00fffc07803e fffc7fe3ffff9e1ff1ffffffffcffff1ffe3fe3ff07f07ff1fe3fe3ff007fffff87fc3ff8ff0f7 87f86fffe0090b803f000ffff003fe000ff0060780706007fe007ffffc01fe00fffc07803e fffc7fe3ffff1e0ff1ffffffff87fff1ffe1fc3ff0ff87ff1fe3fe3ff003fffff87fc3fd05f004 81c01fffe00803803f000ffff003fe000ff0060780706007fe007ffffc01fe00fffc07803e fffc7fe1ffbe3f0ff1ff87ffff803ff1fff1f87ff0ff87ff1fe1fe1bf001fffff87fc7fc01f004 01c01fffe00803803f801ffff007fe010ff80e0780706007fe007ffffe01fe00fffc07803e fffc7ff07e3c7f07f0ff03ffffc00ff0eff070fff0ff87f803007007f700fffff87fc7fc01f004 01c01ffff00803803f803ffff007ff010ff80e07c0f06007ff00fffffe01fe00fffc07803e ffe007f800700e00f00703ffffb807801ff801fff8ff8ff803007007ef80fffff8ffc7fc01f80c 01c01ffff01803803fc03ffff80fff030ff81e07c1f06007ff00fffffe03fe00fffc07803e ffe007fe01f01e00f80f83fffe7f03801ffe03fff9ff8ff803007007cfe07ffffcffc7fc01f81c 01c01ffff87803803fc07ffffc0fff870ffc1e07c1f06007ff81ffffff03fe00fffc07803e ffffffffffffffffffffe3fffc7fc3ffffffffffffffffffffffffff8ff87fffffffffffffffff ffffffffffffffffffe0fffffe1fffef0ffc3fffe3ffffffff83ffffff07fffffffffffffe ffffffffffffffffffffe3fffc7fe3ffffffffffffffffffffffffff9ff87fffffffffffffffff ffffffffffffffffffffffffffffffff0ffe7fffffffffffffc7ffffff8ffffffffffffffe ffffffffffffffffffffe3fffcffe3ffffffffffffffffffffffffff1ffc7fffffffffffffffff ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffe7fff8ffe3ffffffffffffffffffffffffff1ffc7fffffffffffffffff ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffcffff87fe3ffffffffffffffffffffffffff1ffc7fffffffffffffffff ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffff9ffff87fe7ffffffffffffffffffffffffff1ffc7fffffffffffffffff ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe fffffffffffffffffffe3ffffc3fc7ffffffffffffffffffffffffff1ffc7fffffffffffffffff ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe fffffffffffffffffffefffffc1f8fffffffffffffffffffffffffff1ffcffffffffffffffffff ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe fffffffffffffffffffffffffe001fffffffffffffffffffffffffff1ff8ffffffffffffffffff ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffff007fffffffffffffffffffffffffff0ff8ffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffe3ffffffffffffffffffffffffffff0ff9ffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffff87f1ffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffff83e3ffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8007ffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00fffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01fffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe fffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe showpage %%Trailer end %%EOF t1lib-5.1.2/doc/manipulate.pdf0000644000175000001440000004603710733501626014675 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ3Ð3T0A(œËU„&F¦†z–æ`!CsK=CKC=sc#C (mRªd¦à’Ï„CLendstream endobj 5 0 obj 59 endobj 3 0 obj << /Type /Page /MediaBox [0 0 426 172] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageB] /XObject<> >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 8 0 obj << /CreationDate (D:20010110083104) /Producer (GNU Ghostscript 5.10) >> endobj 6 0 obj << /Type /XObject /Name /R6 /Subtype /Image /Length 7 0 R /ColorSpace /DeviceGray/Width 607/Height 244/BitsPerComponent 1 >> stream ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ‡ÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó‡ÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó‡ÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó‡ÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÏÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÏÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÏÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÏÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãïÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãïÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãïÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿþ~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿð~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÀ~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÀ~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿñ€~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÁ€~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿþ€~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿü€~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿü€~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿü€~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿü€~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇ¿ü€~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆ?ü‚~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ?ü£~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÀ?ü£þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒÿ€?ü£þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ü£þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?üãþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ?ýãþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ?ýãþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ?ÿ‡ãþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ?ÿ‡ãþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþ?ÿ‡çþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþ?ÿ‡çþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþ?ÿ‡Çþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿü~ÿÿ‡ÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÿÿø0~ÿÿƒÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿøx~GÿÿƒÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøxÇÿÿƒÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿøxÇÿÿƒÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿøü?ÇÿÿÃÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿøü?ÇÿÿÃÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxÿÿÿðü?ÇÿÿÃÏþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþx~ÿðü?ÇÿÿÃÏþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþx~ÿðþ?ÇÿÿÃþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüp~ÿñþ?ÇÿÿÃþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüp~ÿñþ?ÇÿÿÃþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüp~8ÿñþ?ÇÿÿÃþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüøp|ñÿøÿÿãÿñøÿÿÿÿðñÿãþ?ñüñÿÿÿãÿÇÿÿƒþøÿÿÿÿÿÿÿÿÿÿÿÿÿÿøñú8ãþ?ñÿÿÇî>ñÿøÿÿãÿñøÿÿÿÿðñÿãþ?ñüñÿÿÿãÿÇÿÿƒþøÿÿÿÿùÿÿÿÿÿÿÿ÷þøñþ{ãþ?ñÿÿÇÎ<ñÿøÿÿãÿñøÿÿÿÿðñÿãþ?ñüðÿÿÿãþÇÿÿÃþùüÿÿÿÿùÿÿÿÿÿÿùáøùàþãþ?ñÿÿÃÎ<ÿñÿøÿÿãÿñøÿÿÿÿðñÿãþ?ñüðÿÿÿãþÇÿÿÃþùüŸÿÿÿÿùÿÿÿÿðáÁøøàþãþ?ñÿÿÃÎ<ÿñÿøÿÿãÿñøÿÿÿÿðñÿãþ?ñüðÿïÿáþ?ÇÿÿÃþùüŸÿÿÿÿñÿÿÿÿÀÁÁñü?àþãþ?ñÿÿÃÎ<ÿñÿøÿÿãÿñøÿÿÿÿøñÿãþ?ñüðÿïÿáþ?ÇÿÿÃþùüŸÿÿÿÿñÿÿÿÿ€áþ?àüãþ?ñÿÿãÎ<ÿñÿøÿÿãÿñøÿÿóøðÿãþ?ñüðÿïÿáþ?ÇÿÿÃþÿüÿÿÿÿÿñÿÿÿð ãþ?Èüÿãþ?ãÿÿãÎÿñÿøÿÿãÿñøÿÿóøðÿãþ?ñüðÿßÿñþ?ÇÿÿÃþÿüþð€ÿÿþ?ðãÿÈ|ÿãþ?ãÿÿãŸÿñÿøÿÿãÿñøÿÿóøðÿãþ?ñüøÿßÿñþ?ÇÿÿÃþÿüüð€ÿÿþ?ðÿÇÿÌ|ÿãþ?‡ãÿÿãŸÿñÿøÿÿãÿñüÿÿóøðÿãþ?ñüøßÿñü?ÇÿÿÁþÿüøøöñÿÿÿþ?ñÿÇÿ‡Ì|ÿãþ?ÇÃÿÿãŸÿñÿøÿÿãÿñüÿÿóøøÿãþ?áüøŸÿñü?ÇÿÿÁþÿüñü~ŸñÿÿÿüñÿÇÿ‡œxÿãþ?ÃÇÿÿáŸÿñÿøÿÿãÿñüÿÿóøøÿãþ?áüøŸÿðü?ÇÿÿÁþÿüãþñÿÿÿüñÿÇÿÇœyÿãþ?Á‡ÿÿáŸÿñÿøÿÿãÿñüÿÿóùøáþ?áüøŸÿðüÇÿÿÁþÿüãþ?†?ñÿÿÿüñÿÇÿÇž9ÿãþ?àÿÿñŸÿñÿøÿÿãÿñü?÷ÿóùøáü?ÁüøÿðøÇÿÿÁþÿüçþ?†ñÿÿÿü?ñÿÇÿÇž9ÿãþ?àÿÿñ? ÿñÿøÿÿãÿñü?÷ÿóñøáü?Áüø?ÿðø‡ÿÿ>ÿüÇþ?Àñÿÿÿþ?ñÿÇÿÃ>9ÿãþ?ð?ÿÿñ?‰ÿñÿøÿÿãÿñü?÷ÿóñøáü?üø?ÿøx~†ÿý€>ÿüÀ?àÿñÿÿÿþ?ñÿÇÿÃ>1ÿãþ?øÿÿÿñ?ÿñÿøÿÿãÿñü?çÿóñø?áø?üü>ÿøp~†ÿü€>ÿüÀ?àÿñÿÿÿþñÿÇÿã>3ÿãþ?ùÿÿÿñ?ƒÿñÿøÿÿãÿñþçÿóñø?ðø?üüÿø0~ÿü€>ÿüÇÿÿàÿñÿÿÿÿ?ñÿÇÿã?ÿãþ?óÿÿÿð?ƒÿñÿøÿÿãÿñþÇÿóñüðò?l'ü ÿøþÿü€>ÿüÇÿÿàñÿÿÿÿ€ñÿÇÿâÿãþ?óÿÿÿð?ƒÿñÿøÿÿáÿñþÇÿóáüðâ70`ü?ÿøþÿü€>ÿüÇÿÿÄ?ñÿÿÿÿáÿñÿÇÿàÿãþ?ñÿÿÿøƒÿñÿøÿÿáÿñþ‡ÿñãüðB€0`ü?ÿüþÿü€>ÿüÃÿÿŒ?ñÿÿÿÿÏÿñÿÃþ?àÿãþ?ð?ÿÿøƒÿðÿøÿÿàï °ßÿðƒüð€0`þ?ÿüþÿü€>ÿüãÿÿžñÿÿÿÿÏÿñÿãþ?ðÿãþ?ðÿÿøÃÿð÷‡øoÿà €?ÿðþð€p`þÿüþÿü€>ÿüãÿÿñÿÿÿÿ‡ÿñÿáü?ðÿ‡ÿãþ?ðÿÿøÃýðÀÿà€?ÿðþð€p`þÿüþÿü€>ÿüáÿ¾?ñÿ‡ÿÿ€?ñÿñøðÿ‡ÿáþðÿÿøÇüðÀÿà€?€ÿðþø€p`þÿþþÿü€>ÿüð~<ðÿÿÿÀðïðpÿðÿ‡øp÷ÿÿøÇüðÀÿð€?€?ÿðÿøÀð`ÿÿÿþþÿü€>ÿàøpðÿÿ¸€øÿøÿøpï€ÿÿøÿÇüø Àÿð€?À?ÿøÿøÁð`ÿÿÿþþÿü€>ÿàþðøƒÿþ€þÿùÿøpÏàÿüÿÇüøÀÿøx€?Àÿüÿ‡üÁð`ÿÿÿÿþÿü€>ÿÿÿÿÿÿÿÿÿÿãÿüÃÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿþÿïü?ÿãÿÿÿÿƒÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿãÿüãÿÿÿÿÿÿÿÿÿÿÿÿÿŸøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÇÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿãÿüÿãÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿçÿøÿãÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÏÿøãÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿŸÿøçÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿþ?ÿü?Çÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿþÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ endstream endobj 7 0 obj 18545 endobj xref 0 9 0000000000 65535 f 0000000371 00000 n 0000000312 00000 n 0000000162 00000 n 0000000015 00000 n 0000000144 00000 n 0000000507 00000 n 0000019209 00000 n 0000000420 00000 n trailer << /Size 9 /Root 1 0 R /Info 8 0 R >> startxref 19230 %%EOF t1lib-5.1.2/doc/Makefile.in0000644000175000001440000000502610733501626014101 0ustar rmzusers# Makefile.in # # This file is part of the t1lib-package! See documentation and Readme files # of the t1lib-package for copyright restrictions. # # Targets provided: # all (default) # install # uninstall # clean # pdf (this is internally used only because it # interferes with the all-target) # ps (now=all-target) # # Author: Rainer Menzner (Rainer.Menzner@web.de) # Date: 04/06/1997 # Last modified: 2004-12-12 # SHELL = /bin/sh CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ OPTIONS = @OPTIONS@ X_LIBS = @X_LIBS@ TOPSRC = @top_srcdir@ XPM_LIB = -lXpm XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@ LDFLAGS = @LDFLAGS@ LDLIBS = @LDLIBS@ AR = ar rc RANLIB = @RANLIB@ RM = rm -f X_CFLAGS = @X_CFLAGS@ YACC = @YACC@ LEX = @LEX@ LEXLIB = @LEXLIB@ ALLCFLAGS = $(CFLAGS) $(X_CFLAGS) SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS)' 'OPTIONS=$(OPTIONS)' @SET_MAKE@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ bindir = @bindir@ datadir = @datadir@ libdir = @libdir@ mandir = @mandir@/man1 manext = .1 no_x = @no_x@ # targets to build all: t1lib_doc.ps t1lib_doc.dvi: t1lib_doc.tex intro.tex getstart.tex xglyph.tex ut1lib.tex xinterface.tex internals.tex type1afm.tex latex t1lib_doc.tex makeindex t1lib_doc latex t1lib_doc.tex latex t1lib_doc.tex .PHONY: clean ps: t1lib_doc.ps t1lib_doc.ps: t1lib_doc.dvi dvips -o t1lib_doc.ps t1lib_doc pdf: t1lib_doc.tex intro.tex getstart.tex xglyph.tex ut1lib.tex xinterface.tex internals.tex type1afm.tex pdflatex t1lib_doc.tex makeindex t1lib_doc pdflatex t1lib_doc.tex pdflatex t1lib_doc.tex clean: dummy $(RM) \#*\# *~ *.log *.aux *.bak *.dvi *.toc *.ilg *.idx *.ind *.out t1lib_doc.ps install: dummy if (test -f t1lib_doc.ps) \ then \ $(MKINSTALLDIRS) $(DESTDIR)@T1LIB_DATA_DIR@/doc; \ $(INSTALL_DATA) t1lib_doc.ps $(DESTDIR)@T1LIB_DATA_DIR@/doc; \ fi; if (test -f t1lib_doc.pdf) \ then \ $(MKINSTALLDIRS) $(DESTDIR)@T1LIB_DATA_DIR@/doc; \ $(INSTALL_DATA) t1lib_doc.pdf $(DESTDIR)@T1LIB_DATA_DIR@/doc; \ fi; uninstall: dummy $(RM) -R $(DESTDIR)@T1LIB_DATA_DIR@/doc dummy: t1lib-5.1.2/doc/shearh.eps0000644000175000001440000000054610733501626014021 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox: 0 0 200 200 %%EndComments /TimesRoman findfont 150 scalefont setfont 100 100 translate gsave [ 1 0 0.5 1 0 0] concat 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) show grestore [ 3 3 ] 2 setdash 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) true charpath stroke t1lib-5.1.2/doc/shearh.pdf0000644000175000001440000000247710733501626014010 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœUT¹r1 íù,“fƒƒàÑz&àH]&•2¹Æ*\ù÷ƒpåD–v@<Äa:¸þöûv/¯…ëoÿ½•×ÊÐY¾âÐȪ÷½¼«Hh.õùäÒ;·>]˧/½‚yýQ"ÞᾃßõþáçÇëŸòùêü¯U ßoî³~/îåÍi‰`òÀ/ÿéã%©¿äl N÷Æ`Ø\Ç?’=$6@v(˜ÁÌOo…Ûh.õá’“šj¦à¥K/ÏC­%r†p è™ÂÉœ¸µíyËjž·p(ËÝHS“E7Fß瀙rPiu4GÔRBrk—!8§¤Ûý)gdiNÆ#'D”ÓûDé'|kƒ^Яޣ!ކ%Â¥e[â6{6|Cêâý¿aÁŒ J¢cnԬǭgnY/§7ŒSt+¿0טp0\³çDR]#RiµO!|?Nº/ãÚÓè‡Ñó2Î: vÌ &Qe >i£N’C‰·ÐgÔÕá¢,y%Šr¦»³Ÿ¹d÷¯è› ºB1^@h´\S×7ÉÍÉEаó†m ylØËfY`]Qßļ×pn/Ýo 9YÀ¸çœD~j3{yKDó{ {üº”çòørDendstream endobj 5 0 obj 587 endobj 3 0 obj << /Type /Page /MediaBox [0 0 200 200] /Parent 2 0 R /Resources << /ProcSet [/PDF /Text] /Font << /R6 6 0 R >> >> /Contents 4 0 R >> endobj 6 0 obj <> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 7 0 obj << /CreationDate (D:20010110083243) /Producer (GNU Ghostscript 5.10) >> endobj xref 0 8 0000000000 65535 f 0000000971 00000 n 0000000912 00000 n 0000000691 00000 n 0000000015 00000 n 0000000672 00000 n 0000000839 00000 n 0000001020 00000 n trailer << /Size 8 /Root 1 0 R /Info 7 0 R >> startxref 1107 %%EOF t1lib-5.1.2/doc/shearv.eps0000644000175000001440000000054610733501626014037 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox: 0 0 200 200 %%EndComments /TimesRoman findfont 150 scalefont setfont 100 100 translate gsave [ 1 0.5 0 1 0 0] concat 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) show grestore [ 3 3 ] 2 setdash 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) true charpath stroke t1lib-5.1.2/doc/shearv.pdf0000644000175000001440000000250010733501626014011 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœUT¹r1 íù,“fƒƒàÑz&àH]&•2¹Æ*\ù÷ƒpG–v@<Äa:¸þöûv/¯…ëoÿ½•×ÊT͵Lç!“k¨Þ‹$xù§àP]êsré=·>]˧/=l®?<á»Ñ×û‡Ÿ¯Êç«ó¿V%|¿U¡úÝ{>n–;þÆ/ÿéã%©¿dp N÷Æ`Ø\Ç;É› ;L‚`æ§·Âm4—úpÉIM5HSðÒ¥Ž—ç¡Ö9C¸… ôLadNÜÚö¼e5O€[8”ån¤)-­Dœ*¦BŒ‡Ûð˜PðÜV΄x¢¸–˜&g¼”Úôñžr:Y($§'¯ GMêÄõðÜ. E8CQúðl5Ø€¨XÄ ½…£AnÝÃdô“ÞÕ¢ÌË=÷žõÜ3&Î Љɢ£ïsÀL9¨´:š#j)!¹µËœSÒíþ”3²4'ã‘"Êé}¢ô¾µA/èWïÑGÃáÒ2Ž-q›=¾!uñþß0€à F%Ñ17jÖãÖ3·¬—ÓƇÎ)º•_˜ Èk L¸ ®Ùs"©®©´ŽÚ§¾'Ý—qíéô‚Ãè‰yg† ;æ “¨²Ÿ´Q'É¡Ä[è3êêpQ–¼GŽE9ÓÝÙÏ\²û‰WôMa ]¡/ 4aZ®©ë›äf‰ä"ÅØyÃ6<6ìe³,°®¨obÞk¸·—î7М,`ÜsN"?µ™½¼%¢ù=†=þ]Êsù øˆDendstream endobj 5 0 obj 588 endobj 3 0 obj << /Type /Page /MediaBox [0 0 200 200] /Parent 2 0 R /Resources << /ProcSet [/PDF /Text] /Font << /R6 6 0 R >> >> /Contents 4 0 R >> endobj 6 0 obj <> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 7 0 obj << /CreationDate (D:20010110083248) /Producer (GNU Ghostscript 5.10) >> endobj xref 0 8 0000000000 65535 f 0000000972 00000 n 0000000913 00000 n 0000000692 00000 n 0000000015 00000 n 0000000673 00000 n 0000000840 00000 n 0000001021 00000 n trailer << /Size 8 /Root 1 0 R /Info 7 0 R >> startxref 1108 %%EOF t1lib-5.1.2/doc/t1_data.eps0000644000175000001440000006444210733501626014071 0ustar rmzusers%!PS-Adobe-2.0 EPSF-2.0 %%Title: t1_data.eps %%Creator: fig2dev Version 3.2 Patchlevel 0-beta3 %%CreationDate: Fri Oct 16 19:05:50 1998 %%For: rainer@mman (Rainer Menzner) %%Orientation: Portrait %%BoundingBox: 0 0 612 467 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -13.0 469.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Helvetica-Narrow-Bold /Helvetica-Narrow-Bold-iso isovec ReEncode /Helvetica-Narrow /Helvetica-Narrow-iso isovec ReEncode /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 8437 m -1000 -1000 l 10912 -1000 l 10912 8437 l cp clip 0.06299 0.06299 sc % Polyline 7.500 slw n 6750 1125 m 7650 1125 l 7650 675 l 6750 675 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 7200 855 m gs 1 -1 sc (External Encoding) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 7200 1005 m gs 1 -1 sc (\(optional\)) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 7740 1125 m 8640 1125 l 8640 675 l 7740 675 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 8190 855 m gs 1 -1 sc (Internal Type 1) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 8190 1005 m gs 1 -1 sc (Data Structures) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 5310 1935 m 5940 1935 l 5940 1710 l 5310 1710 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 5625 1845 m gs 1 -1 sc (KernMap) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 6210 1935 m 6840 1935 l 6840 1710 l 6210 1710 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 6525 1845 m gs 1 -1 sc (EncMap) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 7650 4365 m 8550 4365 l 8550 3870 l 7650 3870 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 8100 4140 m gs 1 -1 sc (glyphs[256]) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline gs clippath 7479 3840 m 7623 3870 l 7479 3900 l 7665 3900 l 7665 3840 l cp clip n 5940 3555 m 6750 3555 l 6750 3870 l 7650 3870 l gs col0 s gr gr % arrowhead n 7479 3840 m 7623 3870 l 7479 3900 l 7503 3870 l 7479 3840 l cp gs 0.00 setgray ef gr col0 s % Polyline n 7650 3105 m 8550 3105 l 8550 2610 l 7650 2610 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 8100 2880 m gs 1 -1 sc (glyphs[256]) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline gs clippath 7479 2580 m 7623 2610 l 7479 2640 l 7665 2640 l 7665 2580 l cp clip n 5940 2295 m 6750 2295 l 6750 2610 l 7650 2610 l gs col0 s gr gr % arrowhead n 7479 2580 m 7623 2610 l 7479 2640 l 7503 2610 l 7479 2580 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4950 6075 m 5940 6075 l gs col0 s gr % Polyline n 4950 6255 m 5940 6255 l gs col0 s gr % Polyline n 4950 6435 m 5940 6435 l gs col0 s gr % Polyline n 4950 6615 m 5940 6615 l gs col0 s gr % Polyline n 4950 6795 m 5940 6795 l gs col0 s gr % Polyline n 4950 5895 m 5940 5895 l 5940 6975 l 4950 6975 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 6030 m gs 1 -1 sc (pFontCache) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 6210 m gs 1 -1 sc (pNextFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 6390 m gs 1 -1 sc (pPrevFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 6570 m gs 1 -1 sc (pCharSpaceLocal) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 6750 m gs 1 -1 sc (float size) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 6930 m gs 1 -1 sc (int antialias) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 7650 6795 m 8550 6795 l 8550 6300 l 7650 6300 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 8100 6570 m gs 1 -1 sc (glyphs[256]) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline gs clippath 7479 6270 m 7623 6300 l 7479 6330 l 7665 6330 l 7665 6270 l cp clip n 5940 5985 m 6750 5985 l 6750 6300 l 7650 6300 l gs col0 s gr gr % arrowhead n 7479 6270 m 7623 6300 l 7479 6330 l 7503 6300 l 7479 6270 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4950 3645 m 5940 3645 l gs col0 s gr % Polyline n 4950 3825 m 5940 3825 l gs col0 s gr % Polyline n 4950 4005 m 5940 4005 l gs col0 s gr % Polyline n 4950 4185 m 5940 4185 l gs col0 s gr % Polyline n 4950 4365 m 5940 4365 l gs col0 s gr % Polyline n 4950 3465 m 5940 3465 l 5940 4545 l 4950 4545 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 3600 m gs 1 -1 sc (pFontCache) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 3780 m gs 1 -1 sc (pNextFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 3960 m gs 1 -1 sc (pPrevFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 4140 m gs 1 -1 sc (pCharSpaceLocal) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 4320 m gs 1 -1 sc (float size) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 4500 m gs 1 -1 sc (int antialias) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 4950 2385 m 5940 2385 l gs col0 s gr % Polyline n 4950 2565 m 5940 2565 l gs col0 s gr % Polyline n 4950 2745 m 5940 2745 l gs col0 s gr % Polyline n 4950 2925 m 5940 2925 l gs col0 s gr % Polyline n 4950 3105 m 5940 3105 l gs col0 s gr % Polyline n 4950 2205 m 5940 2205 l 5940 3285 l 4950 3285 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 2340 m gs 1 -1 sc (pFontCache) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 2520 m gs 1 -1 sc (pNextFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 2700 m gs 1 -1 sc (pPrevFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 2880 m gs 1 -1 sc (pCharSpaceLocal) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 3060 m gs 1 -1 sc (float size) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 5445 3240 m gs 1 -1 sc (int antialias) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 450 2655 m 2070 2655 l gs col0 s gr % Polyline n 450 2475 m 2070 2475 l 2070 4455 l 450 4455 l cp gs col0 s gr % Polyline n 450 2835 m 2070 2835 l gs col0 s gr % Polyline n 450 3015 m 2070 3015 l gs col0 s gr % Polyline n 450 3195 m 2070 3195 l gs col0 s gr % Polyline n 450 3375 m 2070 3375 l gs col0 s gr % Polyline n 450 3915 m 2070 3915 l gs col0 s gr % Polyline n 450 4095 m 2070 4095 l gs col0 s gr % Polyline n 450 4275 m 2070 4275 l gs col0 s gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 2610 m gs 1 -1 sc (struct DeviceSpecifics) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 2790 m gs 1 -1 sc (int T1_Up) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 2970 m gs 1 -1 sc (int T1aa_bpp) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 3150 m gs 1 -1 sc (int SetFuncRequestID) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 3510 m gs 1 -1 sc (Filename) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 3690 m gs 1 -1 sc (Searchpath) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 3870 m gs 1 -1 sc (Stuff) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 4050 m gs 1 -1 sc (char err_warn_msg_buf[1024]) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 4230 m gs 1 -1 sc (FILE *t1lib_log_file) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 4410 m gs 1 -1 sc (int t1lib_log_level) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 135.00 scf sf 1260 3330 m gs 1 -1 sc (int T1_errno) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 450 630 m 1530 630 l gs col0 s gr % Polyline n 450 810 m 1530 810 l gs col0 s gr % Polyline n 450 990 m 1530 990 l gs col0 s gr % Polyline n 450 1170 m 1530 1170 l gs col0 s gr % Polyline n 450 1350 m 1530 1350 l gs col0 s gr % Polyline n 450 450 m 1530 450 l 1530 1710 l 450 1710 l cp gs col0 s gr % Polyline n 450 1530 m 1530 1530 l gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 990 585 m gs 1 -1 sc (int no_fonts_ini) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 990 765 m gs 1 -1 sc (int no_fonts) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 990 945 m gs 1 -1 sc (int no_fonts_limit) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 990 1125 m gs 1 -1 sc (int bitmap_pad) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 990 1305 m gs 1 -1 sc (int endian) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 990 1665 m gs 1 -1 sc (pFontArray) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 990 1485 m gs 1 -1 sc (char **default_enc) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 2700 6300 m 3870 6300 l gs col0 s gr % Polyline n 2700 6480 m 3870 6480 l gs col0 s gr % Polyline n 2700 6660 m 3870 6660 l gs col0 s gr % Polyline n 2700 6840 m 3870 6840 l gs col0 s gr % Polyline n 2700 7020 m 3870 7020 l gs col0 s gr % Polyline n 2700 6120 m 3870 6120 l gs col0 s gr % Polyline n 2700 5940 m 3870 5940 l gs col0 s gr % Polyline n 2700 5760 m 3870 5760 l gs col0 s gr % Polyline n 2700 5580 m 3870 5580 l gs col0 s gr % Polyline n 2700 5400 m 3870 5400 l 3870 7200 l 2700 7200 l cp gs col0 s gr % Polyline n 2700 7200 m 2700 7380 l gs col0 s gr % Polyline n 3870 7200 m 3870 7380 l gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 5535 m gs 1 -1 sc (pFontFileName) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 6255 m gs 1 -1 sc (pKernMap) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 6075 m gs 1 -1 sc (pEncMap) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 5895 m gs 1 -1 sc (pType1Data) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 5715 m gs 1 -1 sc (pAFMData) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 6435 m gs 1 -1 sc (pFontEnc) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 6615 m gs 1 -1 sc (vm_base) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 6795 m gs 1 -1 sc (pFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 6975 m gs 1 -1 sc (double FontMatrix[4]) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 7155 m gs 1 -1 sc (double FontTransform[4]) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 7335 m gs 1 -1 sc (float slant) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 2700 1215 m 3870 1215 l gs col0 s gr % Polyline n 2700 1395 m 3870 1395 l gs col0 s gr % Polyline n 2700 1575 m 3870 1575 l gs col0 s gr % Polyline n 2700 1755 m 3870 1755 l gs col0 s gr % Polyline n 2700 1935 m 3870 1935 l gs col0 s gr % Polyline n 2700 2115 m 3870 2115 l gs col0 s gr % Polyline n 2700 2295 m 3870 2295 l gs col0 s gr % Polyline n 2700 2475 m 3870 2475 l gs col0 s gr % Polyline n 2700 2655 m 3870 2655 l gs col0 s gr % Polyline n 2700 2835 m 3870 2835 l gs col0 s gr % Polyline n 2700 3015 m 3870 3015 l gs col0 s gr % Polyline n 2700 3195 m 3870 3195 l gs col0 s gr % Polyline n 2700 1035 m 3870 1035 l gs col0 s gr % Polyline n 2700 855 m 3870 855 l gs col0 s gr % Polyline n 2700 675 m 3870 675 l gs col0 s gr % Polyline n 2700 495 m 3870 495 l gs col0 s gr % Polyline n 2700 3555 m 3870 3555 l gs col0 s gr % Polyline n 2700 3735 m 3870 3735 l gs col0 s gr % Polyline n 2700 3915 m 3870 3915 l gs col0 s gr % Polyline n 2700 4095 m 3870 4095 l gs col0 s gr % Polyline n 2700 3375 m 3870 3375 l gs col0 s gr % Polyline n 2700 315 m 3870 315 l 3870 4275 l 2700 4275 l cp gs col0 s gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 450 m gs 1 -1 sc (pFontFileName) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 1170 m gs 1 -1 sc (pKernMap) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 990 m gs 1 -1 sc (pEncMap) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 810 m gs 1 -1 sc (pType1Data) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 630 m gs 1 -1 sc (pAFMData) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 1350 m gs 1 -1 sc (pFontEnc) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 1530 m gs 1 -1 sc (vm_base) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 1710 m gs 1 -1 sc (pFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 1890 m gs 1 -1 sc (double FontMatrix[4]) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 2430 m gs 1 -1 sc (float extend) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 2610 m gs 1 -1 sc (float UndrLnPos) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 2790 m gs 1 -1 sc (float UndrLnThick) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 2970 m gs 1 -1 sc (float OvrLnPos) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 3150 m gs 1 -1 sc (float OvrLnThick) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 3330 m gs 1 -1 sc (float OvrStrkPos) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 3510 m gs 1 -1 sc (float OverStrkThick) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 3690 m gs 1 -1 sc (unsigned short physical) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 3870 m gs 1 -1 sc (unsigned short refcount) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 4050 m gs 1 -1 sc (short space_position) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 4230 m gs 1 -1 sc (short info_flags) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 2250 m gs 1 -1 sc (float slant) dup sw pop 2 div neg 0 rm col0 sh gr % Ellipse n 5400 5310 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 5400 5490 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr 0.000 slw % Ellipse n 3298 4577 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr % Ellipse n 3298 4712 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr % Ellipse n 3285 5310 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr % Ellipse n 3285 5175 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr % Ellipse n 3298 4410 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr % Polyline 7.500 slw gs clippath 2529 375 m 2673 405 l 2529 435 l 2715 435 l 2715 375 l cp clip n 1530 1440 m 2070 1440 l 2070 405 l 2700 405 l gs col0 s gr gr % arrowhead n 2529 375 m 2673 405 l 2529 435 l 2553 405 l 2529 375 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 8220 504 m 8190 648 l 8160 504 l 8160 690 l 8220 690 l cp clip n 3870 765 m 4950 765 l 4950 405 l 8190 405 l 8190 675 l gs col0 s gr gr % arrowhead n 8220 504 m 8190 648 l 8160 504 l 8190 528 l 8220 504 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9210 504 m 9180 648 l 9150 504 l 9150 690 l 9210 690 l cp clip n 3870 585 m 4500 585 l 4500 315 l 9180 315 l 9180 675 l gs col0 s gr gr % arrowhead n 9210 504 m 9180 648 l 9150 504 l 9180 528 l 9210 504 l cp gs 0.00 setgray ef gr col0 s % Polyline [60] 0 sd n 4275 45 m 4275 7425 l gs col0 s gr [] 0 sd % Polyline [60] 0 sd n 4275 1080 m 6525 1080 l 6525 1215 l 9900 1215 l gs col0 s gr [] 0 sd % Polyline n 8730 1125 m 9630 1125 l 9630 675 l 8730 675 l cp gs col0 s gr % Polyline [60] 0 sd n 225 45 m 9900 45 l 9900 7425 l 225 7425 l cp gs col0 s gr [] 0 sd % Polyline [60] 0 sd n 4275 2115 m 9900 2115 l gs col0 s gr [] 0 sd % Polyline gs clippath 6579 870 m 6723 900 l 6579 930 l 6765 930 l 6765 870 l cp clip n 3870 1305 m 4050 1305 l 4050 900 l 6750 900 l gs col0 s gr gr % arrowhead n 6579 870 m 6723 900 l 6579 930 l 6603 900 l 6579 870 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5430 1539 m 5400 1683 l 5370 1539 l 5370 1725 l 5430 1725 l cp clip n 3870 1125 m 4140 1125 l 4140 1260 l 5400 1260 l 5400 1710 l gs col0 s gr gr % arrowhead n 5430 1539 m 5400 1683 l 5370 1539 l 5400 1563 l 5430 1539 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6330 1539 m 6300 1683 l 6270 1539 l 6270 1725 l 6330 1725 l cp clip n 3870 945 m 4185 945 l 4185 1215 l 6300 1215 l 6300 1710 l gs col0 s gr gr % arrowhead n 6330 1539 m 6300 1683 l 6270 1539 l 6300 1563 l 6330 1539 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4779 3525 m 4923 3555 l 4779 3585 l 4965 3585 l 4965 3525 l cp clip n 5940 2475 m 6300 2475 l 6300 3420 l 4500 3420 l 4500 3555 l 4950 3555 l gs col0 s gr gr % arrowhead n 4779 3525 m 4923 3555 l 4779 3585 l 4803 3555 l 4779 3525 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4798 2378 m 4928 2311 l 4835 2425 l 4980 2309 l 4943 2262 l cp clip n 5940 3915 m 6120 3915 l 6120 3330 l 4725 3330 l 4725 2475 l 4950 2295 l gs col0 s gr gr % arrowhead n 4798 2378 m 4928 2311 l 4835 2425 l 4835 2387 l 4798 2378 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4779 5955 m 4923 5985 l 4779 6015 l 4965 6015 l 4965 5955 l cp clip n 4500 5535 m 4500 5985 l 4950 5985 l gs col0 s gr gr % arrowhead n 4779 5955 m 4923 5985 l 4779 6015 l 4803 5985 l 4779 5955 l cp gs 0.00 setgray ef gr col0 s % Polyline n 5940 6345 m 6120 6345 l 6120 5580 l gs col0 s gr % Polyline gs clippath 4798 3638 m 4928 3571 l 4835 3685 l 4980 3569 l 4943 3522 l cp clip n 6120 5085 m 6120 4680 l 6120 4590 l 4725 4590 l 4725 3735 l 4950 3555 l gs col0 s gr gr % arrowhead n 4798 3638 m 4928 3571 l 4835 3685 l 4835 3647 l 4798 3638 l cp gs 0.00 setgray ef gr col0 s % Polyline n 5940 3735 m 6300 3735 l 6300 4680 l 4500 4680 l 4500 5085 l gs col0 s gr % Polyline gs clippath 4779 2265 m 4923 2295 l 4779 2325 l 4965 2325 l 4965 2265 l cp clip n 3870 1845 m 4050 1845 l 4050 2295 l 4950 2295 l gs col0 s gr gr % arrowhead n 4779 2265 m 4923 2295 l 4779 2325 l 4803 2295 l 4779 2265 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4275 5445 m 4277 5446 l 4283 5448 l 4292 5452 l 4306 5457 l 4323 5463 l 4344 5471 l 4366 5479 l 4389 5487 l 4411 5495 l 4434 5503 l 4456 5510 l 4477 5517 l 4499 5524 l 4520 5530 l 4542 5537 l 4566 5543 l 4590 5550 l 4608 5555 l 4626 5560 l 4646 5565 l 4667 5570 l 4688 5575 l 4711 5581 l 4735 5586 l 4759 5592 l 4785 5597 l 4812 5603 l 4840 5608 l 4868 5614 l 4897 5619 l 4927 5624 l 4956 5628 l 4986 5633 l 5017 5637 l 5047 5641 l 5077 5644 l 5106 5647 l 5136 5649 l 5165 5651 l 5194 5653 l 5223 5654 l 5251 5655 l 5280 5655 l 5309 5655 l 5338 5654 l 5367 5653 l 5397 5651 l 5427 5649 l 5458 5647 l 5489 5644 l 5521 5641 l 5553 5638 l 5585 5634 l 5618 5630 l 5650 5626 l 5682 5622 l 5714 5618 l 5745 5613 l 5776 5609 l 5806 5604 l 5835 5600 l 5863 5596 l 5890 5592 l 5916 5588 l 5941 5584 l 5964 5581 l 5987 5578 l 6009 5575 l 6030 5573 l 6056 5570 l 6081 5567 l 6106 5566 l 6130 5564 l 6154 5564 l 6178 5563 l 6203 5564 l 6229 5564 l 6255 5565 l 6282 5567 l 6310 5569 l 6336 5571 l 6361 5573 l 6384 5575 l 6403 5577 l 6417 5578 l 6427 5579 l 6432 5580 l 6435 5580 l gs col0 s gr % Polyline n 4275 5040 m 4278 5040 l 4283 5042 l 4292 5043 l 4306 5046 l 4324 5050 l 4344 5053 l 4367 5058 l 4390 5062 l 4413 5067 l 4436 5071 l 4458 5075 l 4481 5079 l 4503 5083 l 4525 5087 l 4548 5091 l 4572 5096 l 4598 5100 l 4616 5103 l 4636 5107 l 4656 5110 l 4678 5114 l 4700 5117 l 4724 5121 l 4749 5125 l 4775 5129 l 4802 5133 l 4830 5137 l 4859 5141 l 4888 5145 l 4919 5148 l 4949 5152 l 4980 5155 l 5011 5159 l 5042 5162 l 5073 5164 l 5104 5167 l 5134 5169 l 5165 5171 l 5194 5172 l 5224 5173 l 5253 5174 l 5281 5175 l 5310 5175 l 5339 5175 l 5367 5174 l 5396 5173 l 5426 5172 l 5455 5171 l 5486 5169 l 5516 5167 l 5547 5164 l 5578 5162 l 5609 5159 l 5641 5155 l 5672 5152 l 5703 5148 l 5733 5145 l 5763 5141 l 5792 5137 l 5820 5133 l 5848 5129 l 5874 5125 l 5899 5121 l 5924 5117 l 5947 5114 l 5969 5110 l 5990 5107 l 6011 5103 l 6030 5100 l 6057 5096 l 6082 5091 l 6107 5087 l 6131 5083 l 6155 5079 l 6179 5075 l 6204 5071 l 6230 5067 l 6257 5062 l 6283 5058 l 6309 5053 l 6333 5050 l 6353 5046 l 6370 5043 l 6381 5042 l 6387 5040 l 6390 5040 l gs col0 s gr /Helvetica-Narrow-Bold-iso ff 225.00 scf sf 4500 225 m gs 1 -1 sc (Level 1: Size-Independent Font Data) col0 sh gr /Helvetica-Narrow-Bold-iso ff 225.00 scf sf 450 225 m gs 1 -1 sc (Level 0: Global Data Area) col0 sh gr /Helvetica-Narrow-Bold-iso ff 225.00 scf sf 4500 7290 m gs 1 -1 sc (Level 2: Size-Dependent Font Data) col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 9180 990 m gs 1 -1 sc (DataStructures) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 9180 855 m gs 1 -1 sc (Adobe Font Metric) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-Bold-iso ff 225.00 scf sf 6795 1440 m gs 1 -1 sc (Level 1b: Mapping Tables) col0 sh gr /Helvetica-Narrow-Bold-iso ff 225.00 scf sf 1305 2340 m gs 1 -1 sc (Global Variables) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 150.00 scf sf 3285 4905 m gs 1 -1 sc (Structure-Array of) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 150.00 scf sf 3285 5085 m gs 1 -1 sc (size no_fonts_limit) dup sw pop 2 div neg 0 rm col0 sh gr /Helvetica-Narrow-iso ff 120.00 scf sf 3285 2070 m gs 1 -1 sc (double FontTransform[4]) dup sw pop 2 div neg 0 rm col0 sh gr $F2psEnd rs t1lib-5.1.2/doc/t1_data.fig0000644000175000001440000003226310733501626014043 0ustar rmzusers#FIG 3.2 Portrait Center Metric A4 100.00 Single 0 1200 2 6 6750 675 7650 1125 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 6750 1125 7650 1125 7650 675 6750 675 6750 1125 4 1 0 0 0 20 8 0.0000 4 120 1065 7200 855 External Encoding\001 4 1 0 0 0 20 8 0.0000 4 120 555 7200 1005 (optional)\001 -6 6 7740 675 8640 1125 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 7740 1125 8640 1125 8640 675 7740 675 7740 1125 4 1 0 0 0 20 8 0.0000 4 120 810 8190 855 Internal Type 1\001 4 1 0 0 0 20 8 0.0000 4 105 855 8190 1005 Data Structures\001 -6 6 5310 1710 5940 1935 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 5310 1935 5940 1935 5940 1710 5310 1710 5310 1935 4 1 0 0 0 20 8 0.0000 4 105 510 5625 1845 KernMap\001 -6 6 6210 1710 6840 1935 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 6210 1935 6840 1935 6840 1710 6210 1710 6210 1935 4 1 0 0 0 20 8 0.0000 4 105 465 6525 1845 EncMap\001 -6 6 5940 3555 8550 4365 6 7650 3870 8550 4365 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 7650 4365 8550 4365 8550 3870 7650 3870 7650 4365 4 1 0 0 0 20 8 0.0000 4 120 660 8100 4140 glyphs[256]\001 -6 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4 2 1 1.00 60.00 120.00 5940 3555 6750 3555 6750 3870 7650 3870 -6 6 5940 2295 8550 3105 6 7650 2610 8550 3105 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 7650 3105 8550 3105 8550 2610 7650 2610 7650 3105 4 1 0 0 0 20 8 0.0000 4 120 660 8100 2880 glyphs[256]\001 -6 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4 2 1 1.00 60.00 120.00 5940 2295 6750 2295 6750 2610 7650 2610 -6 6 4950 5895 5940 6975 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 6075 5940 6075 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 6255 5940 6255 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 6435 5940 6435 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 6615 5940 6615 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 6795 5940 6795 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 4950 5895 5940 5895 5940 6975 4950 6975 4950 5895 4 1 0 0 0 20 8 0.0000 4 120 690 5445 6030 pFontCache\001 4 1 0 0 0 20 8 0.0000 4 120 1140 5445 6210 pNextFontSizeDeps\001 4 1 0 0 0 20 8 0.0000 4 120 1140 5445 6390 pPrevFontSizeDeps\001 4 1 0 0 0 20 8 0.0000 4 120 990 5445 6570 pCharSpaceLocal\001 4 1 0 0 0 20 8 0.0000 4 105 495 5445 6750 float size\001 4 1 0 0 0 20 8 0.0000 4 105 630 5445 6930 int antialias\001 -6 6 5940 5985 8550 6795 6 7650 6300 8550 6795 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 7650 6795 8550 6795 8550 6300 7650 6300 7650 6795 4 1 0 0 0 20 8 0.0000 4 120 660 8100 6570 glyphs[256]\001 -6 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4 2 1 1.00 60.00 120.00 5940 5985 6750 5985 6750 6300 7650 6300 -6 6 4950 3465 5940 4545 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 3645 5940 3645 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 3825 5940 3825 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 4005 5940 4005 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 4185 5940 4185 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 4365 5940 4365 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 4950 3465 5940 3465 5940 4545 4950 4545 4950 3465 4 1 0 0 0 20 8 0.0000 4 120 690 5445 3600 pFontCache\001 4 1 0 0 0 20 8 0.0000 4 120 1140 5445 3780 pNextFontSizeDeps\001 4 1 0 0 0 20 8 0.0000 4 120 1140 5445 3960 pPrevFontSizeDeps\001 4 1 0 0 0 20 8 0.0000 4 120 990 5445 4140 pCharSpaceLocal\001 4 1 0 0 0 20 8 0.0000 4 105 495 5445 4320 float size\001 4 1 0 0 0 20 8 0.0000 4 105 630 5445 4500 int antialias\001 -6 6 4950 2205 5940 3285 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 2385 5940 2385 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 2565 5940 2565 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 2745 5940 2745 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 2925 5940 2925 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 4950 3105 5940 3105 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 4950 2205 5940 2205 5940 3285 4950 3285 4950 2205 4 1 0 0 0 20 8 0.0000 4 120 690 5445 2340 pFontCache\001 4 1 0 0 0 20 8 0.0000 4 120 1140 5445 2520 pNextFontSizeDeps\001 4 1 0 0 0 20 8 0.0000 4 120 1140 5445 2700 pPrevFontSizeDeps\001 4 1 0 0 0 20 8 0.0000 4 120 990 5445 2880 pCharSpaceLocal\001 4 1 0 0 0 20 8 0.0000 4 105 495 5445 3060 float size\001 4 1 0 0 0 20 8 0.0000 4 105 630 5445 3240 int antialias\001 -6 6 315 2475 2205 4455 2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2 450 2655 2070 2655 2 2 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 5 450 2475 2070 2475 2070 4455 450 4455 450 2475 2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2 450 2835 2070 2835 2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2 450 3015 2070 3015 2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2 450 3195 2070 3195 2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2 450 3375 2070 3375 2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2 450 3915 2070 3915 2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2 450 4095 2070 4095 2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2 450 4275 2070 4275 4 1 0 0 0 20 9 0.0000 4 120 1410 1260 2610 struct DeviceSpecifics\001 4 1 0 0 0 20 9 0.0000 4 120 615 1260 2790 int T1_Up\001 4 1 0 0 0 20 9 0.0000 4 120 810 1260 2970 int T1aa_bpp\001 4 1 0 0 0 20 9 0.0000 4 120 1395 1260 3150 int SetFuncRequestID\001 4 1 0 0 0 20 9 0.0000 4 90 570 1260 3510 Filename\001 4 1 0 0 0 20 9 0.0000 4 120 705 1260 3690 Searchpath\001 4 1 0 0 0 20 9 0.0000 4 90 300 1260 3870 Stuff\001 4 1 0 0 0 20 9 0.0000 4 120 1860 1260 4050 char err_warn_msg_buf[1024]\001 4 1 0 0 0 20 9 0.0000 4 120 1170 1260 4230 FILE *t1lib_log_file\001 4 1 0 0 0 20 9 0.0000 4 120 1065 1260 4410 int t1lib_log_level\001 4 1 0 0 0 20 9 0.0000 4 105 750 1260 3330 int T1_errno\001 -6 6 450 450 1530 1710 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 450 630 1530 630 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 450 810 1530 810 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 450 990 1530 990 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 450 1170 1530 1170 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 450 1350 1530 1350 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 450 450 1530 450 1530 1710 450 1710 450 450 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 450 1530 1530 1530 4 1 0 0 0 20 8 0.0000 4 120 915 990 585 int no_fonts_ini\001 4 1 0 0 0 20 8 0.0000 4 120 705 990 765 int no_fonts\001 4 1 0 0 0 20 8 0.0000 4 120 1005 990 945 int no_fonts_limit\001 4 1 0 0 0 20 8 0.0000 4 120 840 990 1125 int bitmap_pad\001 4 1 0 0 0 20 8 0.0000 4 105 555 990 1305 int endian\001 4 1 0 0 0 20 8 0.0000 4 120 645 990 1665 pFontArray\001 4 1 0 0 0 20 8 0.0000 4 120 1005 990 1485 char **default_enc\001 -6 6 2565 5400 4005 7380 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 6300 3870 6300 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 6480 3870 6480 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 6660 3870 6660 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 6840 3870 6840 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 7020 3870 7020 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 6120 3870 6120 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 5940 3870 5940 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 5760 3870 5760 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 5580 3870 5580 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 2700 5400 3870 5400 3870 7200 2700 7200 2700 5400 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 7200 2700 7380 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 3870 7200 3870 7380 4 1 0 0 0 20 8 0.0000 4 120 840 3285 5535 pFontFileName\001 4 1 0 0 0 20 8 0.0000 4 105 585 3285 6255 pKernMap\001 4 1 0 0 0 20 8 0.0000 4 105 540 3285 6075 pEncMap\001 4 1 0 0 0 20 8 0.0000 4 120 660 3285 5895 pType1Data\001 4 1 0 0 0 20 8 0.0000 4 120 600 3285 5715 pAFMData\001 4 1 0 0 0 20 8 0.0000 4 120 570 3285 6435 pFontEnc\001 4 1 0 0 0 20 8 0.0000 4 120 495 3285 6615 vm_base\001 4 1 0 0 0 20 8 0.0000 4 120 870 3285 6795 pFontSizeDeps\001 4 1 0 0 0 20 8 0.0000 4 120 1170 3285 6975 double FontMatrix[4]\001 4 1 0 0 0 20 8 0.0000 4 120 1365 3285 7155 double FontTransform[4]\001 4 1 0 0 0 20 8 0.0000 4 105 555 3285 7335 float slant\001 -6 6 2610 315 3960 4275 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 1215 3870 1215 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 1395 3870 1395 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 1575 3870 1575 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 1755 3870 1755 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 1935 3870 1935 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 2115 3870 2115 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 2295 3870 2295 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 2475 3870 2475 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 2655 3870 2655 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 2835 3870 2835 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 3015 3870 3015 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 3195 3870 3195 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 1035 3870 1035 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 855 3870 855 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 675 3870 675 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 495 3870 495 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 3555 3870 3555 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 3735 3870 3735 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 3915 3870 3915 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 4095 3870 4095 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 2700 3375 3870 3375 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 2700 315 3870 315 3870 4275 2700 4275 2700 315 4 1 0 0 0 20 8 0.0000 4 120 840 3285 450 pFontFileName\001 4 1 0 0 0 20 8 0.0000 4 105 585 3285 1170 pKernMap\001 4 1 0 0 0 20 8 0.0000 4 105 540 3285 990 pEncMap\001 4 1 0 0 0 20 8 0.0000 4 120 660 3285 810 pType1Data\001 4 1 0 0 0 20 8 0.0000 4 120 600 3285 630 pAFMData\001 4 1 0 0 0 20 8 0.0000 4 120 570 3285 1350 pFontEnc\001 4 1 0 0 0 20 8 0.0000 4 120 495 3285 1530 vm_base\001 4 1 0 0 0 20 8 0.0000 4 120 870 3285 1710 pFontSizeDeps\001 4 1 0 0 0 20 8 0.0000 4 120 1170 3285 1890 double FontMatrix[4]\001 4 1 0 0 0 20 8 0.0000 4 105 675 3285 2430 float extend\001 4 1 0 0 0 20 8 0.0000 4 105 945 3285 2610 float UndrLnPos\001 4 1 0 0 0 20 8 0.0000 4 105 1005 3285 2790 float UndrLnThick\001 4 1 0 0 0 20 8 0.0000 4 105 870 3285 2970 float OvrLnPos\001 4 1 0 0 0 20 8 0.0000 4 105 930 3285 3150 float OvrLnThick\001 4 1 0 0 0 20 8 0.0000 4 105 960 3285 3330 float OvrStrkPos\001 4 1 0 0 0 20 8 0.0000 4 105 1080 3285 3510 float OverStrkThick\001 4 1 0 0 0 20 8 0.0000 4 120 1320 3285 3690 unsigned short physical\001 4 1 0 0 0 20 8 0.0000 4 120 1335 3285 3870 unsigned short refcount\001 4 1 0 0 0 20 8 0.0000 4 120 1185 3285 4050 short space_position\001 4 1 0 0 0 20 8 0.0000 4 120 900 3285 4230 short info_flags\001 4 1 0 0 0 20 8 0.0000 4 105 555 3285 2250 float slant\001 -6 1 3 0 1 0 0 0 0 20 0.000 1 0.0000 5400 5310 45 45 5400 5310 5445 5310 1 3 0 1 0 0 0 0 20 0.000 1 0.0000 5400 5490 45 45 5400 5490 5445 5490 1 3 0 0 0 0 0 0 20 0.000 1 0.0000 3298 4577 45 45 3298 4577 3343 4577 1 3 0 0 0 0 0 0 20 0.000 1 0.0000 3298 4712 45 45 3298 4712 3343 4712 1 3 0 0 0 0 0 0 20 0.000 1 0.0000 3285 5310 45 45 3285 5310 3330 5310 1 3 0 0 0 0 0 0 20 0.000 1 0.0000 3285 5175 45 45 3285 5175 3330 5175 1 3 0 0 0 0 0 0 20 0.000 1 0.0000 3298 4410 45 45 3298 4410 3343 4410 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4 2 1 1.00 60.00 120.00 1530 1440 2070 1440 2070 405 2700 405 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 5 2 1 1.00 60.00 120.00 3870 765 4950 765 4950 405 8190 405 8190 675 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 5 2 1 1.00 60.00 120.00 3870 585 4500 585 4500 315 9180 315 9180 675 2 1 1 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2 4275 45 4275 7425 2 1 1 1 0 7 0 0 -1 4.000 0 0 -1 0 0 4 4275 1080 6525 1080 6525 1215 9900 1215 2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 8730 1125 9630 1125 9630 675 8730 675 8730 1125 2 2 1 1 0 7 0 0 -1 4.000 0 0 -1 0 0 5 225 45 9900 45 9900 7425 225 7425 225 45 2 1 1 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2 4275 2115 9900 2115 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4 2 1 1.00 60.00 120.00 3870 1305 4050 1305 4050 900 6750 900 2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 1 0 5 2 1 1.00 60.00 120.00 3870 1125 4140 1125 4140 1260 5400 1260 5400 1710 2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 1 0 5 2 1 1.00 60.00 120.00 3870 945 4185 945 4185 1215 6300 1215 6300 1710 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 6 2 1 1.00 60.00 120.00 5940 2475 6300 2475 6300 3420 4500 3420 4500 3555 4950 3555 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 6 2 1 1.00 60.00 120.00 5940 3915 6120 3915 6120 3330 4725 3330 4725 2475 4950 2295 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 3 2 1 1.00 60.00 120.00 4500 5535 4500 5985 4950 5985 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 3 5940 6345 6120 6345 6120 5580 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 6 2 1 1.00 60.00 120.00 6120 5085 6120 4680 6120 4590 4725 4590 4725 3735 4950 3555 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 5940 3735 6300 3735 6300 4680 4500 4680 4500 5085 2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4 2 1 1.00 60.00 120.00 3870 1845 4050 1845 4050 2295 4950 2295 3 0 0 1 0 7 0 0 -1 0.000 0 0 0 5 4275 5445 4500 5535 5265 5715 6120 5535 6435 5580 0.000 1.000 1.000 1.000 0.000 3 0 0 1 0 7 0 0 -1 0.000 0 0 0 5 4275 5040 4500 5085 5310 5220 6120 5085 6390 5040 0.000 1.000 1.000 1.000 0.000 4 0 0 0 0 22 15 0.0000 4 210 3840 4500 225 Level 1: Size-Independent Font Data\001 4 0 0 0 0 22 15 0.0000 4 165 2655 450 225 Level 0: Global Data Area\001 4 0 0 0 0 22 15 0.0000 4 210 3675 4500 7290 Level 2: Size-Dependent Font Data\001 4 1 0 0 0 20 8 0.0000 4 105 825 9180 990 DataStructures\001 4 1 0 0 0 20 8 0.0000 4 105 1050 9180 855 Adobe Font Metric\001 4 0 0 0 0 22 15 0.0000 4 210 2670 6795 1440 Level 1b: Mapping Tables\001 4 1 0 0 0 22 15 0.0000 4 165 1725 1305 2340 Global Variables\001 4 1 0 0 0 20 10 0.0000 4 150 1320 3285 4905 Structure-Array of\001 4 1 0 0 0 20 10 0.0000 4 150 1305 3285 5085 size no_fonts_limit\001 4 1 0 0 0 20 8 0.0000 4 120 1365 3285 2070 double FontTransform[4]\001 t1lib-5.1.2/doc/t1_data.pdf0000644000175000001440000012725710733501626014057 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœí< —^ÕU”ÌäËÌ7+€Q˜–¾TJ2·çý ¤I‚Iƒ„’ú „×…š€5T-¶¨¨õý„ZØÖVžûqö¹çÞù&Öd™År±ÈÜ»ï>ûìsÎ~ž³Ï§:=Sø_ù{âÔò‹Ëzöì²ë¢qÆÏ¾ºì´Ñ]²3›“îl˜ùº¬g&ÙÎy?{é©å‡—_œi¢"NœšÝulùs_˜éÙ±“ËB| œö]ž9£:?;vê¶«®þĶÏ{n9!α'o[œlÇW L¯;&KÓã/¬\5Ý1=þÒÂÎÉ5Ókñ³Éª|Ÿ^‡ïkV›Y¶ù ú®±ë'oÛ9Ý5aòñ©µvü²sÊä ¦#ß¾xlöв‹ÎwnëFžLû‘ÿö“e”Ĥ7™ƒ…ëWoXØ5]üÔ'iÀÚ¸YvøùÆO/•1&Æ_Ú}ÓÍÛxLe–¶—9¡—Î$7°ô·8ÝSçÀ ¢gÖEÝÁ¼Ù@âL; ’.y¬É™YŸà_˜„ÏL¹ï$31½e÷ÒtWß„¹iëúOÿ•þ‹\ ût!¥.º™ÎNu.˺[ zðVøžm»€^WÄÍ•µÂ%½u²gá§Y. ôg&?;=~Ûôøg+O^>ºŒTƒ6jfŒµÈJy"˜®WI XCoÇ(QPbic@üöÂÈ.Øó`hΫZŸª–B ë=8èLFH™Ûò0h{˜+eˆ™8Šžâ }ű¶³ ‘Ðn.ÓY_>y{kÐ.[7§ûáEë:¢£ôG4l[&:V™ÈkLOí¢ @Eq~„âÂPt¬ n„¤MPþb¢csMè¤ä Ë¡²Qt™l}¿¦MûŠcb§B³¦óp˜Î&¢³õÝœ—ÃI$ÎG -Ó$°`E—»}ƒ%+ØÐyžK -–7¶3Z7Xi±œÊ]Áï±Òbªs V@! I¶˜K·ÓÚ€±ÍŽ­æ®½·ïÛ9Ù1e¯æ‹¨¯uK0Þ·NÉ#;­É%îRŸûôâ" í¦Å»‰nÚ{mëîÌ¢ºÐw±Û[³‚m™Ž½šÜSŽâÝJCR‹Ûú ’ÉÉZwët‰=¼µý®) fq¯;ñAâ’5ç¤i¤&‘#›µ¾B„m` Jx“+<3}÷ƒø&z­ÓêÛ©¦Øèä¹÷lpš"[bù‚ÚR¯•a…­ÉŠj䣺ÃhÌÁ©!‚+ l†Á_Äæeˆÿ”kmž@z›½wÁ6&¯6Z<`¤ó&6¦¨o-( OkK´¥PÙÄÞmu'½µƒèÂáßÞªd`U ˜‘ÐÚ1 °tˆim¢@XÊÛ.µöU -–Ä~=–@XÉ`8¹5ÆÎ¸xÉÖÎ^¹ÖÎ}tkg¶ÀÚ¹ËjíD¬†|"´b"VL¬ŠÕ´B.‘ëTHO#˜2ÀJ &ÞµX2À*ñgƒU ¬¦'¦-’_ ªý#½îŠòÕW¾ôjÏ;ViU”8­#˜À\!(%‚¥S‚o  ,8@´SEFÅdå:cBi ™˜U—|‹U ¬cçb‹U ,‘³Ê-V ° ë²k± d€¥58¦ÐbÈ`rŽœ. –@Ö/U[:œè  .i’÷ßA; eIï\80É?¿÷ÐÊÔ]¤ ®ˆÀÉ¡•»¿xÏ¡•ò¥h×½ûéÝzAL,ŽºÆŽw±Øð÷ûòÊÏÝxáƒ?ÿ=„’#í»o >xxáÈê‘•~iåžUF‡9Ù”ðÝG­äý©;WîÛw@ý‚:´úðÁ;gè1DBýó̤Ť:"à!–ØŒGhZøùÐÁûö9øåûqÿ°Î¥ÿ»Z9rôŽA x@=ºzÏÂ`ãÑ22º»æÇî\¸—°M™Vz[ó¨¬LòÀÞG޼crèèßÁó\öÑXùÅûá 9˘8úåÓô š! ¾ÿøqZŒPè^øÊÊ/­üòê¯p?©úÛ‡ÏGÙõûÕ•_{òÄþ¼ÿ𠢆VäKÐÛ#­¸<µòÄê+÷>v×€©ÁÔ•ñ™M—8?vxõn¯Û>}íóà¸Ï•Ò¶pâ:9Ä00¡y"µ‘R¼•C<‹&”™å7+hOm°UÎdË-Y 1q¬VIŽ=ZƒU ,ɉk‘ÐâØ Ê4H`%›»Ð’È+ ƒŒÕ¿F`<@X?°¡6šÀÑk%U —h_ îm:[‚ɱ²sr’½“™­é ΪúîTüèž…“¼éëíµ¼ÌFÏwU“màtwNçö’dc~Çpc¾8ß°i¦úÑg±Ð|úAz E6·S‘7Ó3<îzR°­ôÎÔv/Aqrº ¼û5D*æM‡²£/'Z&œ{ ²ØÃ]ª_D·Ÿ½y{k6xo_ ‘j\´VÆa0µ}õ¹ÇŸ{üš …nΪ,MgeÆ’™3Æ“Äøñ—匪ÉO«ˆ[¿MÂ*8A\Râ+Hi±\Æ ±Ð` ¤Å²Pºä,´X&¤N“ –@Z¬d=ÄÂ-–@Z¬ìRgsÛ£@Z,­‚fó#X`éèÙ”U¬`yÌÃgц.'r·tÔ¸k€sªŸ>ÝYKö!Ä©Îhƒt vÔ®ÃðÏC0ˆq¾'Äí|&§‹ó†»‹ß/MžÞ½X"0¿¾쟹ºœti«EÍnyôˆQÑ‹Ô$᪫QòúÏ6U ß5)gcê“ÓŸ_b+`UQ¸%V+˜ÃJmòìúíûn9¸%Ýe*¸.“ŒºWFÉ æ‰…p Oï>9yâò=ûxx)ôiÍ<ݽéæqî±÷ÆçûÜR9¡} X»Ùô™ÒWǼø©–l,¶ϯ¢lkô³÷ Þ5“Xé…²_¶$¼_¬ïš‚Hßׯòáaá0·‡YQs­ôð¬ñéÝÄäV•‡[k›§Rõ—S)¦ž‡mŒ”ÍÆÛmFŒL‹îh›»1-ZŽª*V€Ð?ë«@X>¹Î·vQ ¬r´Ù`ÈËzøÖ °ê‰JŪ'* –¶Öµñ]óŠ2È ‹y­I_5¯ƒ¤¯`Õ¤¯b ’>1Õ’ôõ¦ºMúŠuS6uª¥%,&ª­ÁcÈËàÑËÀ,ÈËFŒ¦$ x¯ •÷zÚ`ÉíìÀÈ«&¬k°¬š°V¬AÂZ°jŠ\±)rq!%‰?cÐߺKÞbçà\à¬öÿÃÇË9X<ʱùƒÍ1„É´™7mÁipLl((þf}²mï¯?Aòößða‡²Wï,³àÍ@Út‹M)Ø¿czýê­oÛ\p@^^,²R×åb<Ñ®ÝK§ÝÂöÇ€à^;­é;¤)5ÇMz~d·£á'~z‚œX".%Js–úŘÇIÉ´.‘í¢ŒÆFÙÝÖºýa? ux5YªÃó¦N÷ äBöA¥Çë¶8½f÷HZJ¬`D’·Avuëô†i#i]»ëCMàæ’õØœü° Š–ÇÍ b¨m&š¶æ|ÐÝd»%Ó± ¸-ãéIÐç²ûkEÑiÖ¸F­DmÂ{Óǵ­âî˜Ã{ͼ)‰iÞÇ¡-M®Ûã0åÆdm 2krîpÌ:ÏD1¹óx”€eZø®mKc‰ Ø]y?-¼ç‚á,· òÎ}` Å-„B´ÜBúàwl!\†p)†ã8‡§ßÁîGb¬æ˜®‡§:÷c{Ôù¾[~mF&ß Ûµ¹¼sÍÀðÔÁ÷ã2À¥n殼7ãªÂa!0ÂpÍ>Nã:½¬sô˜ è¤ ¶£sÄL)ÎÁb’ŽÕ<↘[Ëë Àj±ù®3£Kóò^:À1†”ö¸¥B Jå*†ð\ ‡@ËÕÂhNÂz ¡¡ª!ÃrľßòÞŒ¬bÈЄ‚¼sÍÐ"„íÔBæ‚}ÓN¿7c«Â¥PŽ£ .ðÇj?zk¿Îò”T­0’;cû¡³áAU Ȩ…PwÑíÂÚßS`ëÐ÷!ö£çB0„K¡0ÇppÎÂŒÄvpN;®²(dÒxô];.ïÍà*Fa½RwÃú;ÓÎùÄ-¤~oW1„K¡0ÇP,³6œÏ÷Ò‹Uqº•Õª ôÚ¥|e’æå½tÐÈd6‘”ö¥T¥vPÞ‘¬Âs!0kTDå ›æš'zj‹ 0*uκŠõcoG(¾´ë9¯”ª?Ifxº+õ AðïzŸÒWH_L¥] £䥋tªìñÉ´í+Þ``XEmçâ0Q9Õåëæô†U2^V Ÿók|Y%SQ’¡¤Rï–UØ8,™@Y6“ã¼Uê·U±ª¯$-õR‡æ•I¨ys ÍöŒ¬›W à1w¼ÑÖc'ÍØ^©Üå§¡ˆhNdHg´n—¯›+yÝ,x%OÛZQ¹·f d½‡8™Ó­Ûåëæ ^7‡$Ò †£€qK¬WHo»l²©³qdÞº%0/&¶Z±ë„&‰]l'Tpú ѯÛeëfúgåÂ> nà»]Òs^P¼£„d2% º@ÑCRT6,èeécÃ’fUfÚ™Ïj¤Šyds½/T“lÓÁ½„ð[ϵŸE‰Êbu÷׃dzÈF­‚~a™½}ÓX”î´o…~N!²‰^mq§ûˉÙv&µb+^lÛR©±1-7•ËÓÀ Úœ‡ ¢<6¦nl€% c:F©·¤õ&·¤…mb˜C34éTl‡sâèYôo#¤/¸¸eQÇyèœi4‡Í•y¢ `w§B=ZÓMÒ1Môrë»9Ý\“º‰êŠê¤ŸÊªE!eæÈ552§¡É5ãëÎXŽ?Dq~ŒìØp»j¸çniõõA¸gÛܤ@úܤ·Â·Ë¬gÈ NQÖ¦qE0¾+ªÉÊ:‡‰lb¶¸ÓMî̇”M»N%,?Ì\èˆw§’Øx܉ÆTÖ{Þƒ/¦³hS!ÈfÞÿ4ÞÒÅkè!ÐÁȰ|â­(¼9a@º¨t8s(ÍÚÐÎ#A =îŸ8Ž3ò‡w©˜pÄŸªÀ3 ÌUÜ&@OC–Jädi?ÙhUœTÔ„%à>B JQt´J­°Ìë P]¨¯4~ˆãr(q«ou@Ÿ™÷l÷…ÔØ¦DH–¨ž"ÑÎ9®î; ¤ e<‡Éx5"&¾°f¨MŽñfˆI¾ôÅÛ$ t NãýK&]($ËHVß “ÀÕxÉ7²]H¸ª5„Íž-… ´~X#ÏóŽóT#FϳŸÇU§» ‘k¼LÎTr Ƿ笂éå+.Ì!¸qO71ÊâXå2¯iè3R©¨‰-keC—D EDC¤Ï×F4_ù³˜k;*ÖUÌŒ¥.±Ò"óU!«}æ ÉñL&â$ v5èHŠ-%†.óôà‚îµT2]áD6]ÀÑ)EÏ ¬æ& ÇhxÈ­ÖQAÊZGnñfjj§Æ2JI\hñ‡UˆŽ+¥‹Ö©T–¡h„u}>BBáÐÁ¤Ó]Çjd1Ü6´âd’ XyK8^¡Â ð1™HÃ’¤¨kï<36ÖƒqÁÙ …¸¯¦{ µ¾²è¨:*þ¦ ””*ëé_` Ñ·†KrÊî¸XÕ*Œ ù´HŽWJ´ rF…Í‚?õ@<9Ž ¡­) ÉPéäÙX´n3À í9w¶1FÚ/Ÿø’@;Tk,^kV¶e'9aÙðf’MЗ":ŠýH@訾«4á9qjç"ƒÁ£õ¾ÈPYÃkË{½Õgx­‹BŸÆÌÓÀ«Ãð 9º: 0+±¨Úä0<øz0rlîHzÄ0$o€9”.Ê^¼ Ì*ƒÃ —]HfÃêÀˆKªè&jé‡Á͋ώïùF 8-+™¡_A€ÂE%oÁÑ%n£•ýüHå½ñ¬ÏT¤Kg¢ÑvÅ5*0ÀÚdÃQ” òMÆ\ƒ¢ÙtÐûPD6ûvƒbƒü--îåÑal.î-á~¾’¶‘g0¤l@q lЧ_‡BXŒ=¡'ÂØrtêK*@áRDÿÇ[…e({MVÊ5Ư¶øúѰbÅÙâïÛ0a;v/É“‡v°ê,æ% ÅWÏàÀβPÏ€–iò„П Ú¤À§ÌÜv=u^¯¿ÎÕB DQn)~¡RÁ[0ÙµamIr-/wêZn …@ýˆÀxób×Q[ŒÑB31 ³üÖ¹sŠË^úùuø[3±]|" ®Ëä@³­i–ÒâïƒxÊrƒW`ƒ^EÂz´#©—ëÁ)Ó–Åã×á³xJ¬l# à)<‹£È° JÄsö«çμúʹß:÷µó¿ýõ×ôïóæð?=½ú—ßúæœÿÖyüûí?¼ðö[G/pa¤—íZç˜Ö­?þ“W^ÿÖùwÎ_8÷Ê9ÀÿÓ·^øó?û‹ï<æÍ åþßKKæâí¿|³åâÛuæÕ7ÎBßÄˈ¤ÈÕ«XšiqC HÕ÷ú[€“RœçÕ~ØŸú~¶–<]?Ü‹ÕçÏLk±ùô–Ý‹Ü)î |@9ɯA¦€%‡ýÄ=ó&,ÂÙwÎíü_ÿÍ…soœãük°û÷÷Í çÞ9ÿÊãgÞü©D·3ðãØ²™ä·ÿñŸ.œûN÷Úëlˆî±Ä‹ËVÿY½»ï½ðÝÉ¿¬¾»ï»ê½ð=õ¯T%+7˜ÿíÔ{á½ðï“ÿøÏ÷'ß/5Ò 7–jnpô‡4/¥Tø¿h¸a¶ÆCøÞ¹©÷'?Vßß÷¾úÑä]"‹» ôñ\v.¸?~ð¿Ký-¿ÿ°ÔßÒËÿœ¥W² 6ÑZ TÊ›Òr;«ü¶Òÿ(`¶endstream endobj 5 0 obj 6064 endobj 3 0 obj << /Type /Page /MediaBox [0 0 612 467] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageB /Text] /Font << /A 7 0 R >> >> /Contents 4 0 R >> endobj 7 0 obj <>/FontBBox[0 -77 85 111]/FontMatrix[1 0 0 1 0 0]/Widths[ 0 0 33 0 31 0 0 35 0 0 0 34 39 0 0 0 0 0 0 0 0 0 0 0 38 0 60 0 36 0 52 41 0 0 0 0 0 0 0 0 0 0 0 42 30 0 45 0 43 25 0 0 0 0 26 0 0 0 0 27 0 0 0 47 0 0 0 0 0 54 0 0 0 0 50 0 0 51 0 0 46 0 0 0 0 0 0 0 28 24 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 37 49 59 0 0 29 0 0 48 0 0 63 0 64 65 0 72 0 0 0 71 0 77 0 0 0 0 32 0 0 73 0 0 79 0 0 0 84 57 0 0 90 0 56 0 89 0 92 0 76 0 97 0 0 95 0 0 85 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0]>> endobj endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 193 0 obj << /CreationDate (D:20010110083258) /Producer (GNU Ghostscript 5.10) >> endobj 6 0 obj <> endobj 8 0 obj <> stream 0 0 0 0 33 54 d1 33 0 0 54 0 0 cm BI /IM true/W 33/H 54/BPC 1/F/CCF/DP<> ID & ×ÿòI?ÿÿÿÿÿä_ÿÿ’Iÿÿÿÿÿù³_ÿ EI endstream endobj 9 0 obj <> stream 0 0 0 14 33 54 d1 33 0 0 40 0 14 cm BI /IM true/W 33/H 40/BPC 1/F/CCF/DP<> ID 63¨ß´¯[[¥¾éo¶•ëkzÚÞ±Ú¾­z~Ÿ§’VõuzWÞ•÷¥}é_n—I° EI endstream endobj 10 0 obj <> stream 33 0 0 0 0 0 d1 endstream endobj 11 0 obj <> stream 0 0 0 3 19 55 d1 19 0 0 52 0 3 cm BI /IM true/W 19/H 52/BPC 1/F/CCF/DP<> ID $8@×ÖGuÿÿÿÿÿÿÿÿÿÿ› æeÿÿÿü@ EI endstream endobj 12 0 obj <> stream 31 0 0 0 0 0 d1 endstream endobj 13 0 obj <> stream 0 0 0 13 35 55 d1 35 0 0 42 0 13 cm BI /IM true/W 35/H 42/BPC 1/F/CCF/DP<> ID 5 8AÓ§\‹î‚ éé7ý=~?ëú Ðk¿É§ý×ÿußêÚí+k†•ŽÕ«V Â€€ EI endstream endobj 14 0 obj <> stream 0 0 0 13 24 54 d1 24 0 0 41 0 13 cm BI /IM true/W 24/H 41/BPC 1/F/CCF/DP<> ID >_ÿÿÿÿÿÿÿÿÿïïïxy!ÈC_ß}÷  EI endstream endobj 15 0 obj <> stream 35 0 0 0 0 0 d1 endstream endobj 16 0 obj <> stream 0 0 0 13 34 54 d1 34 0 0 41 0 13 cm BI /IM true/W 34/H 41/BPC 1/F/CCF/DP<> ID >GRÿÿÿÿÿÿÿÿÿÿÿÿÿ¿þ×í-û ’W]®ÔC EI endstream endobj 17 0 obj <> stream 0 0 0 13 36 55 d1 36 0 0 42 0 13 cm BI /IM true/W 36/H 42/BPC 1/F/CCF/DP<> ID $ NpƒL&¨>Õ`–Eñ´~ú~ÿïÿÛ÷ï°~C²†;Áä¸y&;ÿ>ÿ¿­´°ÂØíjÔ0¡… EI endstream endobj 18 0 obj <> stream 0 0 0 0 13 54 d1 13 0 0 54 0 0 cm BI /IM true/W 13/H 54/BPC 1/F/CCF/DP<> ID >_ÿÿÿÿÿÿÿÿÿÿÿÿø€ EI endstream endobj 19 0 obj <> stream 34 0 0 0 0 0 d1 endstream endobj 20 0 obj <> stream 39 0 0 0 0 0 d1 endstream endobj 21 0 obj <> stream 0 0 0 13 33 55 d1 33 0 0 42 0 13 cm BI /IM true/W 33/H 42/BPC 1/F/CCF/DP<> ID :‰:pžéѺ Ò}uo_ÒøÿÿÿÿíK¯ïºïº[[ ,v¯jP€€ EI endstream endobj 22 0 obj <> stream 0 0 0 13 35 55 d1 35 0 0 42 0 13 cm BI /IM true/W 35/H 42/BPC 1/F/CCF/DP<> ID 5 8AÓ§O"öoMÒôõ½?ÿI¿ÿÿÿÿûÝ/ÿkzÚÛ­­°–;V­C P EI endstream endobj 23 0 obj <> stream 0 0 0 0 34 55 d1 34 0 0 55 0 0 cm BI /IM true/W 34/H 55/BPC 1/F/CCF/DP<> ID :‹ ›$ºzè‰Ã„é=>é¿¥ÿÿÿÿÿýî¿ö¯Ú¶¶¬K[ía¬0±ÿÿÿÀ@ EI endstream endobj 24 0 obj <> stream 0 0 0 0 13 54 d1 13 0 0 54 0 0 cm BI /IM true/W 13/H 54/BPC 1/F/CCF/DP<> ID >_ÿÿÿÿÿÿÿÿÿß/ÿÀ@ EI endstream endobj 25 0 obj <> stream 0 0 0 13 34 71 d1 34 0 0 58 0 13 cm BI /IM true/W 34/H 58/BPC 1/F/CCF/DP<> ID :‹ éÓÝ„¤ý½}ãïÍCÁ§§¡¬‹Ôzué×§ÿKßÿÿÿõÿ½ý~÷[VÖ±,{[íma„H À@ EI endstream endobj 26 0 obj <> stream 0 0 0 0 21 71 d1 21 0 0 71 0 0 cm BI /IM true/W 21/H 71/BPC 1/F/CCF/DP<> ID ]/J¿UÕ}/ézýzÿõ_ÿÿÿÿÿûïÿ÷íÿoßwÝý¿o EI endstream endobj 27 0 obj <> stream 0 0 0 13 35 70 d1 35 0 0 57 0 13 cm BI /IM true/W 35/H 57/BPC 1/F/CCF/DP<> ID <_ÿÿÿÿÿ8/>ŸOÞ/!ùá>›ÓÿMÿ_ûÿÿÿÿÿ~—ÿµõµÚXk’W]®Âˆa@@ EI endstream endobj 28 0 obj <> stream 0 0 0 -1 19 70 d1 19 0 0 71 0 -1 cm BI /IM true/W 19/H 71/BPC 1/F/CCF/DP<> ID 8íûwß·ý¿»ýûýÿý÷ÿÿÿÿׯúþºô¿ÕuëªëÒô  EI endstream endobj 29 0 obj <> stream 0 0 0 0 7 54 d1 7 0 0 54 0 0 cm BI /IM true/W 7/H 54/BPC 1/F/CCF/DP<> ID #—ÿÿÿÿÿÿÿÿÿÿÿÿþ  EI endstream endobj 30 0 obj <> stream 0 0 0 0 40 54 d1 40 0 0 54 0 0 cm BI /IM true/W 40/H 54/BPC 1/F/CCF/DP<> ID # ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ› Oÿ EI endstream endobj 31 0 obj <> stream 0 0 0 14 33 70 d1 33 0 0 56 0 14 cm BI /IM true/W 33/H 56/BPC 1/F/CCF/DP<> ID >X{ßÜVý÷»ú×~¹1ßÿ[Óþ·ý?ëzÖÿ§÷_úzßÿI¿ÿ½+ÿé7þ  EI endstream endobj 32 0 obj <> stream 38 0 0 0 0 0 d1 endstream endobj 33 0 obj <> stream 0 0 0 1 17 54 d1 17 0 0 53 0 1 cm BI /IM true/W 17/H 53/BPC 1/F/CCF/DP<> ID (/ÿÿÿÿÿÿÿÿüŽ ÿœ÷÷À@ EI endstream endobj 34 0 obj <> stream 60 0 0 0 0 0 d1 endstream endobj 35 0 obj <> stream 0 0 0 0 37 54 d1 37 0 0 54 0 0 cm BI /IM true/W 37/H 54/BPC 1/F/CCF/DP<> ID & ß‡½ï%«á¾·Ûÿ}ÿÛÿÿþßÿÿÿÿÿþ½ý}¯Ký.¼%ÂXõ…¬,@ EI endstream endobj 36 0 obj <> stream 36 0 0 0 0 0 d1 endstream endobj 37 0 obj <> stream 0 0 0 -1 41 55 d1 41 0 0 56 0 -1 cm BI /IM true/W 41/H 56/BPC 1/F/CCF/DP<> ID 5ƒÂtéÓ¢ï= Ý/O«Ý/þ¿ñ](XX%¤`g‚PJ‚ T ˆb´C—‚Â¥õÈ3ëÿþÚúëmv•†jÕ¨aC  EI endstream endobj 38 0 obj <> stream 52 0 0 0 0 0 d1 endstream endobj 39 0 obj <> stream 41 0 0 0 0 0 d1 endstream endobj 40 0 obj <> stream 0 0 0 14 34 55 d1 34 0 0 41 0 14 cm BI /IM true/W 34/H 41/BPC 1/F/CCF/DP<> ID : 3Œ'ÞžŸ"÷ Æ“ï^ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿ€€ EI endstream endobj 41 0 obj <> stream 0 0 0 13 32 55 d1 32 0 0 42 0 13 cm BI /IM true/W 32/H 42/BPC 1/F/CCF/DP<> ID : œ'ºtD÷„OI¿úüW Ad0b„@°X* Zä2ÿý[]®Ò±êö5 (€ EI endstream endobj 42 0 obj <> stream 0 0 0 0 36 54 d1 36 0 0 54 0 0 cm BI /IM true/W 36/H 54/BPC 1/F/CCF/DP<> ID &¤A‹¥þ—®¾ºô¿Òõ××^—®¾ºî¶–×uµõµÅk$?µßµÛ÷Ûí÷íûíöû}¾ßû}¾ßoßo¿n  EI endstream endobj 43 0 obj <> stream 0 0 0 0 50 54 d1 50 0 0 54 0 0 cm BI /IM true/W 50/H 54/BPC 1/F/CCF/DP<> ID >D2$¿ýÿë÷ÿ¯ÿ&ïÿ×úÿo×ÿúï×úÿoÿ×úÿo×ÿúï×úÿo×ÿúÿo×úÿ[ÿúÿ~8þŸþ½ÿë EI endstream endobj 44 0 obj <> stream 0 0 0 0 34 54 d1 34 0 0 54 0 0 cm BI /IM true/W 34/H 54/BPC 1/F/CCF/DP<> ID >GRÿÿÿÿÿÿÿÿÿÿÿÿÿ¿þýn¶¸k’W]®× ÿÿÿÿ€€ EI endstream endobj 45 0 obj <> stream 0 0 0 0 18 69 d1 18 0 0 69 0 0 cm BI /IM true/W 18/H 69/BPC 1/F/CCF/DP<> ID >ÿ“ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù kÿ€€ EI endstream endobj 46 0 obj <> stream 0 0 0 1 35 54 d1 35 0 0 53 0 1 cm BI /IM true/W 35/H 53/BPC 1/F/CCF/DP<> ID 8 ü’‡ûö÷ovíØvì;v7n·n½»~û> stream 0 0 0 2 35 55 d1 35 0 0 53 0 2 cm BI /IM true/W 35/H 53/BPC 1/F/CCF/DP<> ID :„'AÓôE£ÓtŸMë«ÿ¶?ÿëSæ¿Ú[\0–+ë&8Wkƒ±ÿÿ¿òßþÿÀ@ EI endstream endobj 48 0 obj <> stream 0 0 0 1 35 55 d1 35 0 0 54 0 1 cm BI /IM true/W 35/H 54/BPC 1/F/CCF/DP<> ID 5„:téä¤×I½?ëtÿþ¿ÿý¯[úí-®K&8û^»[ +†þîj?íoïÚV×iXíZµjP EI endstream endobj 49 0 obj <> stream 0 0 0 0 16 69 d1 16 0 0 69 0 0 cm BI /IM true/W 16/H 69/BPC 1/F/CCF/DP<> ID 8ÿ(?ÿÿÿÿÿÿÿÿÿÿÿÿÿóð EI endstream endobj 50 0 obj <> stream 0 0 0 0 31 54 d1 31 0 0 54 0 0 cm BI /IM true/W 31/H 54/BPC 1/F/CCF/DP<> ID &¥ÿÿÿÿÿÿÿÿü†dÿòJÿÿÿÿÿÿ Òkÿà EI endstream endobj 51 0 obj <> stream 42 0 0 0 0 0 d1 endstream endobj 52 0 obj <> stream 30 0 0 0 0 0 d1 endstream endobj 53 0 obj <> stream 0 0 0 -1 45 55 d1 45 0 0 56 0 -1 cm BI /IM true/W 45/H 56/BPC 1/F/CCF/DP<> ID "ÂtéÓ§D!ÞzMÒ}7Þ—¦ÿ_MÿúDH7ÿÿÿÿþßÿeY?i~ß×i[ì0–[jÕ«P†@ EI endstream endobj 54 0 obj <> stream 45 0 0 0 0 0 d1 endstream endobj 55 0 obj <> stream 0 0 0 0 35 54 d1 35 0 0 54 0 0 cm BI /IM true/W 35/H 54/BPC 1/F/CCF/DP<> ID &¤Aõý_×õäÇëéééééééééééééééÅ_×õýX€ EI endstream endobj 56 0 obj <> stream 43 0 0 0 0 0 d1 endstream endobj 57 0 obj <> stream 25 0 0 0 0 0 d1 endstream endobj 58 0 obj <> stream 0 0 0 14 32 54 d1 32 0 0 40 0 14 cm BI /IM true/W 32/H 40/BPC 1/F/CCF/DP<> ID 8û$"íÛöíßvï»wÝ»~Ý¿nß·oÛž ¯ü@ EI endstream endobj 59 0 obj <> stream 0 0 0 0 33 54 d1 33 0 0 54 0 0 cm BI /IM true/W 33/H 54/BPC 1/F/CCF/DP<> ID &¥ÿÿÿÿÿÿÿÿä Ò÷òU>·ßþ÷ÿÿÿýzëׄ±ëZ€€ EI endstream endobj 60 0 obj <> stream 0 0 0 14 33 54 d1 33 0 0 40 0 14 cm BI /IM true/W 33/H 40/BPC 1/F/CCF/DP<> ID :–ýwëòc¿Òû¯«ï_Þ¾õýéëûþž·þô¯ÿ¤þÿÞ•ÿ€€ EI endstream endobj 61 0 obj <> stream 0 0 0 0 28 54 d1 28 0 0 54 0 0 cm BI /IM true/W 28/H 54/BPC 1/F/CCF/DP<> ID &¡™ÿò@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð EI endstream endobj 62 0 obj <> stream 26 0 0 0 0 0 d1 endstream endobj 63 0 obj <> stream 0 0 0 0 19 55 d1 19 0 0 55 0 0 cm BI /IM true/W 19/H 55/BPC 1/F/CCF/DP<> ID 3/ÿÿÿÿÿÿÿÿÿÿÿÿ6ÿÌËÿÿûÈSWÝÀ€ EI endstream endobj 64 0 obj <> stream 0 0 0 0 36 46 d1 36 0 0 46 0 0 cm BI /IM true/W 36/H 46/BPC 1/F/CCF/DP<> ID 5‚ƒ„é‚§Õî½~:¨J ‚PJ„‚ Y…õÍEÿí+®دjÕ¨jP EI endstream endobj 65 0 obj <> stream 0 0 0 -12 22 46 d1 22 0 0 58 0 -12 cm BI /IM true/W 22/H 58/BPC 1/F/CCF/DP<> ID ::"ªëÈò¿ÿÿÿÿÿÿÿÿÿÿÎþN_ÿÿÿÿ EI endstream endobj 66 0 obj <> stream 0 0 0 0 19 45 d1 19 0 0 45 0 0 cm BI /IM true/W 19/H 45/BPC 1/F/CCF/DP<> ID #—ÿÿÿÿÿÿÿÿÿÿýÿ½ü=ä‡!Mwý÷ÜC€€ EI endstream endobj 67 0 obj <> stream 27 0 0 0 0 0 d1 endstream endobj 68 0 obj <> stream 0 0 0 1 30 46 d1 30 0 0 45 0 1 cm BI /IM true/W 30/H 45/BPC 1/F/CCF/DP<> ID 3 œ$ž½èr'á:O¾õïÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿø€ EI endstream endobj 69 0 obj <> stream 0 0 0 0 37 46 d1 37 0 0 46 0 0 cm BI /IM true/W 37/H 46/BPC 1/F/CCF/DP<> ID )Ä‚ƒ§Nh„÷„ô›ï§¯«ß×¢ 7ÿÿÿÿ·ù¬½¿[«kµ¶•Wµj†  EI endstream endobj 70 0 obj <> stream 0 0 0 -16 43 45 d1 43 0 0 61 0 -16 cm BI /IM true/W 43/H 61/BPC 1/F/CCF/DP<> ID .ðxx{Þò:ŸÃ}¾ý¿÷÷ßþûÿÿíÿÿÿÿÿÿÿë×ÿþ¾ºÿ¥þ—^— ÂX­kXXX(€ EI endstream endobj 71 0 obj <> stream 47 0 0 0 0 0 d1 endstream endobj 72 0 obj <> stream 0 0 0 0 40 46 d1 40 0 0 46 0 0 cm BI /IM true/W 40/H 46/BPC 1/F/CCF/DP<> ID )ƒ„éî´BMá¤Þž•÷×úúÿ ÖkÿÉéo¿ÿío[í®Ò°Ââ­^Õ¨aC  EI endstream endobj 73 0 obj <> stream 0 0 0 1 38 45 d1 38 0 0 44 0 1 cm BI /IM true/W 38/H 44/BPC 1/F/CCF/DP<> ID )Ç_¿_ºä‡û¥ÿ·Kÿoô¿}ëëí×þ›ý}_zþôõýÿO[ÿz_¿ EI endstream endobj 74 0 obj <> stream 0 0 0 -16 7 45 d1 7 0 0 61 0 -16 cm BI /IM true/W 7/H 61/BPC 1/F/CCF/DP<> ID #—ÿÿÿÿÿÿÿÿÿÿçÃärÿÿ EI endstream endobj 75 0 obj <> stream 0 0 0 -18 47 47 d1 47 0 0 65 0 -18 cm BI /IM true/W 47/H 65/BPC 1/F/CCF/DP<> ID *ÎD Ðp:tCò=ÓÒoO_Mÿ×ëÿŠéV‚Á)$`(„¡* Q õ" ˆ‚¢%RÖ¿!ÿÿ×[]ÕµØ[idÕŽÕ« Ô)Pp EI endstream endobj 76 0 obj <> stream 0 0 0 0 32 63 d1 32 0 0 63 0 0 cm BI /IM true/W 32/H 63/BPC 1/F/CCF/DP<> ID &¥ÿÿÿÿÿÿÏ Â§Óéâ÷óé½>›ÓÿWß_ûÿÿÿÿÿö½ký¥ý„°×’Úízᨆ  EI endstream endobj 77 0 obj <> stream 54 0 0 0 0 0 d1 endstream endobj 78 0 obj <> stream 0 0 0 -17 22 45 d1 22 0 0 62 0 -17 cm BI /IM true/W 22/H 62/BPC 1/F/CCF/DP<> ID '/ÿÿÿÿÿÿÿÿÿÿÿÿÿœ?üœ¿ÿÿ÷¼‡5}ðáÀ@ EI endstream endobj 79 0 obj <> stream 0 0 0 0 30 45 d1 30 0 0 45 0 0 cm BI /IM true/W 30/H 45/BPC 1/F/CCF/DP<> ID &¤S—ÿÿÿÿÿÿÿÿÿÿÿÿÿýÿ÷ë}¥¿aqä‡]û]®ÔC  EI endstream endobj 80 0 obj <> stream 0 0 0 -16 46 45 d1 46 0 0 61 0 -16 cm BI /IM true/W 46/H 61/BPC 1/F/CCF/DP<> ID Çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþpü@ EI endstream endobj 81 0 obj <> stream 0 0 0 -15 21 45 d1 21 0 0 60 0 -15 cm BI /IM true/W 21/H 60/BPC 1/F/CCF/DP<> ID :ÿÿÿÿÿÿÿÿÿÿ0îN;¾þþ  EI endstream endobj 82 0 obj <> stream 50 0 0 0 0 0 d1 endstream endobj 83 0 obj <> stream 0 0 0 52 43 56 d1 43 0 0 4 0 52 cm BI /IM true/W 43/H 4/BPC 1/F/CCF/DP<> ID 6ÿ€€ EI endstream endobj 84 0 obj <> stream 0 0 0 -16 41 47 d1 41 0 0 63 0 -16 cm BI /IM true/W 41/H 63/BPC 1/F/CCF/DP<> ID )Ît‚ƒ„éÓ¢o ÐA½=&ôôŸÞŸõýÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø€ EI endstream endobj 85 0 obj <> stream 51 0 0 0 0 0 d1 endstream endobj 86 0 obj <> stream 0 0 0 0 41 46 d1 41 0 0 46 0 0 cm BI /IM true/W 41/H 46/BPC 1/F/CCF/DP<> ID :PPƒM©éö¨AdYªAôOþýÿý÷÷ï°~C²ßc¼<§ ò @…½üÐÿÿ]­´±ûV­C P EI endstream endobj 87 0 obj <> stream 0 0 0 -16 32 46 d1 32 0 0 62 0 -16 cm BI /IM true/W 32/H 62/BPC 1/F/CCF/DP<> ID $ &¤}>ŸO¼‡ŸMéôÞŸú¾úÿÛÿÿÿÿÿÿµëû_í/ì%†¸¬ÿ]®× v ÿÿÿÿÿà EI endstream endobj 88 0 obj <> stream 46 0 0 0 0 0 d1 endstream endobj 89 0 obj <> stream 0 0 0 -16 37 45 d1 37 0 0 61 0 -16 cm BI /IM true/W 37/H 61/BPC 1/F/CCF/DP<> ID .?ÿÿÿÿÿÿÿÿÿþA¦ÿÿùÿÿÿÿÿÿä4Íü@ EI endstream endobj 90 0 obj <> stream 0 0 0 -16 44 45 d1 44 0 0 61 0 -16 cm BI /IM true/W 44/H 61/BPC 1/F/CCF/DP<> ID .2LOáÿõþ¿ÿÿÿÿÿÿÿ×ý.¼.+ZÖ°÷‘ˆ|?o·ßþûÿÿÿÿþ¿é…á,zÖµ…‚€€ EI endstream endobj 91 0 obj <> stream 0 0 0 0 38 63 d1 38 0 0 63 0 0 cm BI /IM true/W 38/H 63/BPC 1/F/CCF/DP<> ID #eÿÿÿþS‰„ô½ d_¤'¯t¿ßÒÿÿÿÿÿÿí_ÿµ~ÖÕ†6C@÷ÚÚÚÀ€ EI endstream endobj 92 0 obj <> stream 0 0 0 -16 9 45 d1 9 0 0 61 0 -16 cm BI /IM true/W 9/H 61/BPC 1/F/CCF/DP<> ID .?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿð EI endstream endobj 93 0 obj <> stream 0 0 0 -16 7 45 d1 7 0 0 61 0 -16 cm BI /IM true/W 7/H 61/BPC 1/F/CCF/DP<> ID #—ÿÿÿÿÿÿÿÿÿÿÿÿÿÿø€ EI endstream endobj 94 0 obj <> stream 0 0 0 0 50 45 d1 50 0 0 45 0 0 cm BI /IM true/W 50/H 45/BPC 1/F/CCF/DP<> ID #‘¨Ž¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷­§÷Úia¦¸$9 ã®ïÚk´×i¨†a@@ EI endstream endobj 95 0 obj <> stream 0 0 0 -16 30 45 d1 30 0 0 61 0 -16 cm BI /IM true/W 30/H 61/BPC 1/F/CCF/DP<> ID #‘¬¿ÿÿÿÿÿÿÿÿÿÿÿÿÿþÿûõºÚá®<ë¿®× vÿÿÿÿÿÀ@ EI endstream endobj 96 0 obj <> stream 28 0 0 0 0 0 d1 endstream endobj 97 0 obj <> stream 24 0 0 0 0 0 d1 endstream endobj 98 0 obj <> stream 0 0 0 1 53 45 d1 53 0 0 44 0 1 cm BI /IM true/W 53/H 44/BPC 1/F/CCF/DP<> ID :Œè?ÿÝ?¯ýÓúäÇÿ“×ß·ÿ__®¾ý¿úúêëÿ÷í¯þéuÿÿmn¿ë¯ûøî¯ÿÕn¿ßÿªoõýð EI endstream endobj 99 0 obj <> stream 0 0 0 0 39 64 d1 39 0 0 64 0 0 cm BI /IM true/W 39/H 64/BPC 1/F/CCF/DP<> ID )Ä‚Nt÷Z!=áÐo][×Þ>ü§ÂOOO]E'§Iéý^¿õzÿÿÿÿÿ_½ý~÷[VÖ±ÈlÖû[ p EI endstream endobj 100 0 obj <> stream 0 0 0 -16 13 62 d1 13 0 0 78 0 -16 cm BI /IM true/W 13/H 78/BPC 1/F/CCF/DP<> ID & Ÿü—ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù5ÿÀ@ EI endstream endobj 101 0 obj <> stream 0 0 0 -15 40 47 d1 40 0 0 62 0 -15 cm BI /IM true/W 40/H 62/BPC 1/F/CCF/DP<> ID %Ü €ƒ„éî± A½=&ûë«zÿVõÿÿý&ÿÿÿÿÿÿÿÿýºëÿþßÒþû¥¾ë´­® %cµjÕ¨aH:  EI endstream endobj 102 0 obj <> stream 0 0 0 -15 40 45 d1 40 0 0 60 0 -15 cm BI /IM true/W 40/H 60/BPC 1/F/CCF/DP<> ID <_þÉ$þï»~Þ»vá‡n÷ ØpÝ»Ãvïnû¿Ÿ&ÿþÿ÷ízëmv•µÁ‚V;V­XPÂn  EI endstream endobj 103 0 obj <> stream 0 0 0 -15 40 45 d1 40 0 0 60 0 -15 cm BI /IM true/W 40/H 60/BPC 1/F/CCF/DP<> ID ) ÿÿÿÿüðiü–¤¿íÿ·þßoý¿öûûíÿ·ßß}¿öûûïã½ýýïïï EI endstream endobj 104 0 obj <> stream 0 0 0 -16 19 62 d1 19 0 0 78 0 -16 cm BI /IM true/W 19/H 78/BPC 1/F/CCF/DP<> ID < ÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ< ÿ€€ EI endstream endobj 105 0 obj <> stream 0 0 0 -16 33 45 d1 33 0 0 61 0 -16 cm BI /IM true/W 33/H 61/BPC 1/F/CCF/DP<> ID #ƒWÿÈÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ EI endstream endobj 106 0 obj <> stream 0 0 0 -16 39 45 d1 39 0 0 61 0 -16 cm BI /IM true/W 39/H 61/BPC 1/F/CCF/DP<> ID .¿ÿ#ÿÿÿÿÿÿÿù (ÿÿä`ÿÿÿÿÿÿÈjÿÿ€€ EI endstream endobj 107 0 obj <> stream 0 0 0 -16 28 8 d1 28 0 0 24 0 -16 cm BI /IM true/W 28/H 24/BPC 1/F/CCF/DP<> ID $#EM:iþÚ_¶—«¯pƒäœ·°°ÖÿÀ@ EI endstream endobj 108 0 obj <> stream 58 0 0 0 0 0 d1 endstream endobj 109 0 obj <> stream 0 0 0 0 40 46 d1 40 0 0 46 0 0 cm BI /IM true/W 40/H 46/BPC 1/F/CCF/DP<> ID #„ éÓ§O"~‚ éé7ý=oOÿÖéÿÿÿÿÿí+ÿë¾éo¶–Öà cµjÕ« (€ EI endstream endobj 110 0 obj <> stream 0 0 0 60 37 64 d1 37 0 0 4 0 60 cm BI /IM true/W 37/H 4/BPC 1/F/CCF/DP<> ID 0_€€ EI endstream endobj 111 0 obj <> stream 0 0 0 13 51 54 d1 51 0 0 41 0 13 cm BI /IM true/W 51/H 41/BPC 1/F/CCF/DP<> ID >D2!—ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß÷ÿ¦·u»]„×$8‘¸®ïê»Mvšˆh0  EI endstream endobj 112 0 obj <> stream 0 0 0 0 35 55 d1 35 0 0 55 0 0 cm BI /IM true/W 35/H 55/BPC 1/F/CCF/DP<> ID 5‹> stream 0 0 0 0 43 54 d1 43 0 0 54 0 0 cm BI /IM true/W 43/H 54/BPC 1/F/CCF/DP<> ID 6E!{k×í¯ýoºúý¿¥û~=_ëß$Õý¯«ûúWÿµ½Jþþ•ýÿº_Çký_ø€ EI endstream endobj 114 0 obj <> stream 0 0 0 0 25 21 d1 25 0 0 21 0 0 cm BI /IM true/W 25/H 21/BPC 1/F/CCF/DP<> ID 'Ïp°ö·­­ë«TàÂY!Ë…‡ÂÃÇÿ€€ EI endstream endobj 115 0 obj <> stream 37 0 0 0 0 0 d1 endstream endobj 116 0 obj <> stream 49 0 0 0 0 0 d1 endstream endobj 117 0 obj <> stream 59 0 0 0 0 0 d1 endstream endobj 118 0 obj <> stream 0 0 0 1 35 54 d1 35 0 0 53 0 1 cm BI /IM true/W 35/H 53/BPC 1/F/CCF/DP<> ID ! ÿÿÿÿç£ÿ“ —}¿öý÷íÿ·þßoý¿öûûïï·ßÇ{ûûûÀ@ EI endstream endobj 119 0 obj <> stream 0 0 0 0 35 55 d1 35 0 0 55 0 0 cm BI /IM true/W 35/H 55/BPC 1/F/CCF/DP<> ID (8AÓ ëO!(è ún“é¿éëû§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ EI endstream endobj 120 0 obj <> stream 29 0 0 0 0 0 d1 endstream endobj 121 0 obj <> stream 0 0 0 0 34 54 d1 34 0 0 54 0 0 cm BI /IM true/W 34/H 54/BPC 1/F/CCF/DP<> ID >GAé¥þ—ú_ézë믮»­®ë¾²Cývûöû~û}¾ý¿}¾ßo¿¾?ÿÿÿÿà EI endstream endobj 122 0 obj <> stream 0 0 0 -1 49 55 d1 49 0 0 56 0 -1 cm BI /IM true/W 49/H 56/BPC 1/F/CCF/DP<> ID %ÃÁ á:téÑ w„¤MÒ}7Kíë«ûÓÿõôßÿÿÿÿÿÚWÿý¯«®þ•¿imm¥l.JÅZµjÔ0 Â€€ EI endstream endobj 123 0 obj <> stream 48 0 0 0 0 0 d1 endstream endobj 124 0 obj <> stream 0 0 0 0 64 102 d1 64 0 0 102 0 0 cm BI /IM true/W 64/H 102/BPC 1/F/CCF/DP<> ID 8ÿÿÿü_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð EI endstream endobj 125 0 obj <> stream 0 0 0 25 65 104 d1 65 0 0 79 0 25 cm BI /IM true/W 65/H 79/BPC 1/F/CCF/DP<> ID #Aå g‚:pƒ§N=ÖžëO Þ|zA½t›ÓÿOQúþºÿäMÿÿä'µþ¯ÿkÿV×û[imv•† Ž×µkÚµjÕ¨j†Pd8@ EI endstream endobj 126 0 obj <> stream 63 0 0 0 0 0 d1 endstream endobj 127 0 obj <> stream 0 0 0 27 67 102 d1 67 0 0 75 0 27 cm BI /IM true/W 67/H 75/BPC 1/F/CCF/DP<> ID &Šï×î¿~»õûõÞAÇ×ÿn—ÿ}é~ÿ_¾®¿ûzëûïKÿ¾õõ«û×_ý½uý÷¯¯ßzú¿Õýë¯þßé~÷ EI endstream endobj 128 0 obj <> stream 64 0 0 0 0 0 d1 endstream endobj 129 0 obj <> stream 65 0 0 0 0 0 d1 endstream endobj 130 0 obj <> stream 0 0 0 0 20 102 d1 20 0 0 102 0 0 cm BI /IM true/W 20/H 102/BPC 1/F/CCF/DP<> ID 6 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà EI endstream endobj 131 0 obj <> stream 72 0 0 0 0 0 d1 endstream endobj 132 0 obj <> stream 0 0 0 1 40 102 d1 40 0 0 101 0 1 cm BI /IM true/W 40/H 101/BPC 1/F/CCF/DP<> ID *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóa©ÿÿÿ”iÔ ¸w}ßß÷À@ EI endstream endobj 133 0 obj <> stream 0 0 0 29 24 102 d1 24 0 0 73 0 29 cm BI /IM true/W 24/H 73/BPC 1/F/CCF/DP<> ID <ÿÿÿÿ•¿ÿÿÿç€ÿÿÿÿð EI endstream endobj 134 0 obj <> stream 0 0 0 -3 69 105 d1 69 0 0 108 0 -3 cm BI /IM true/W 69/H 108/BPC 1/F/CCF/DP<> ID #BJ°Ù%Ã28 éÂ:téÓ§éú!™ï ¢­ á='Ó}ôô¿öëÿúüuÕT% ‚Ș5Áe 6A(,„¡a*T¨*T…@°TCY$A¤MÁ`°T°¾¾¹úÿÿ뺿×~×¥mp× %d w}_V­Z½…jÔ0¡… (0R$@ EI endstream endobj 135 0 obj <> stream 71 0 0 0 0 0 d1 endstream endobj 136 0 obj <> stream 0 0 0 -1 20 102 d1 20 0 0 103 0 -1 cm BI /IM true/W 20/H 103/BPC 1/F/CCF/DP<> ID 6 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÍ‚ÿÿÿÿø€ EI endstream endobj 137 0 obj <> stream 77 0 0 0 0 0 d1 endstream endobj 138 0 obj <> stream 0 0 0 27 60 102 d1 60 0 0 75 0 27 cm BI /IM true/W 60/H 75/BPC 1/F/CCF/DP<> ID <ÿÿÿ²ÞÞíßvíßvïovï»vï»w·»w·»wÝ»ÛÝ»ÛÝ»ÍKÿÿÿÿÿð EI endstream endobj 139 0 obj <> stream 0 0 0 53 39 71 d1 39 0 0 18 0 53 cm BI /IM true/W 39/H 18/BPC 1/F/CCF/DP<> ID > _ÿÿÿø€ EI endstream endobj 140 0 obj <> stream 0 0 0 0 21 102 d1 21 0 0 102 0 0 cm BI /IM true/W 21/H 102/BPC 1/F/CCF/DP<> ID 0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà EI endstream endobj 141 0 obj <> stream 0 0 0 25 59 102 d1 59 0 0 77 0 25 cm BI /IM true/W 59/H 77/BPC 1/F/CCF/DP<> ID 0 •¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿö¿}¯Ã[KúùÇ_íwõÚív»\0¢P`  EI endstream endobj 142 0 obj <> stream 32 0 0 0 0 0 d1 endstream endobj 143 0 obj <> stream 0 0 0 0 60 104 d1 60 0 0 104 0 0 cm BI /IM true/W 60/H 104/BPC 1/F/CCF/DP<> ID %ÂA„˜.zzzzzéèzë¢ ?:AééÒé÷­_ëýýzÿÿÿÿ×ÿþÿuûÿ[ÝoµÕ†¶V=÷Ù AïµÖÖøkaa¬0°`±ÿÿÿÿÿÿÀ@ EI endstream endobj 144 0 obj <> stream 0 0 0 25 63 131 d1 63 0 0 106 0 25 cm BI /IM true/W 63/H 106/BPC 1/F/CCF/DP<> ID 0 ÿÿÿÿÿÿÿÿÿÿÈa8 | øAôú}?}>Ÿ¼{ûù ¯xAð›ÓéûzûëíÿOÿÿW¿ÿÿÿÿÿÿý¯õþ»ÿµõµþ×ia…à ŠúúÈ.?×kµþ×k°»]…ƒ EI endstream endobj 145 0 obj <> stream 73 0 0 0 0 0 d1 endstream endobj 146 0 obj <> stream 0 0 0 6 40 103 d1 40 0 0 97 0 6 cm BI /IM true/W 40/H 97/BPC 1/F/CCF/DP<> ID *pPª«¯¯ü­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüàiÿÿÿç@_ÿÿÿÿÿÿÿà EI endstream endobj 147 0 obj <> stream 0 0 0 0 64 102 d1 64 0 0 102 0 0 cm BI /IM true/W 64/H 102/BPC 1/F/CCF/DP<> ID 8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8Ïÿÿÿÿÿÿ AWÿÿÿÿÿÿÿÿ Vkÿÿÿÿ€€ EI endstream endobj 148 0 obj <> stream 79 0 0 0 0 0 d1 endstream endobj 149 0 obj <> stream 0 0 0 25 63 104 d1 63 0 0 79 0 25 cm BI /IM true/W 63/H 79/BPC 1/F/CCF/DP<> ID $ÂÈ0Ït'N:téÓôéú _ÞOI½=&ôÿÓÖÿ§ÿý¤ÿÿÿÿÿÿÿö¯_þþ·­¯ö¶ë®[i`ÁlWµ}Zµ{V¬+V¡… (0¤˜x€ EI endstream endobj 150 0 obj <> stream 0 0 0 0 76 102 d1 76 0 0 102 0 0 cm BI /IM true/W 76/H 102/BPC 1/F/CCF/DP<> ID 8Yepðð÷‡½ï{ûÞA‚þáû}û}ûûïþßûÿßÿßÿÿÿoÿÿÿÿÿÿÿÿÿ^¿ÿÿ¯ý¯ú_ëþ—^½.¼%Áq_ZúÖµ­k X,,†Ù€ EI endstream endobj 151 0 obj <> stream 0 0 0 25 57 104 d1 57 0 0 79 0 25 cm BI /IM true/W 57/H 79/BPC 1/F/CCF/DP<> ID :‚2€a¡=:ßN©®ê‡ëò;„Iô¾Ÿýûÿýÿ¾ÿ÷ï°ü?Ù Ïàû±ûÞððyR¬3dhH g½ï#‚ýÿïÿ]û[k† Š¿Õí{V­Zµ + )  EI endstream endobj 152 0 obj <> stream 84 0 0 0 0 0 d1 endstream endobj 153 0 obj <> stream 57 0 0 0 0 0 d1 endstream endobj 154 0 obj <> stream 0 0 0 1 57 105 d1 57 0 0 104 0 1 cm BI /IM true/W 57/H 104/BPC 1/F/CCF/DP<> ID *Ç"x@á:téÓ§]ÓôýÙo‚~Þž—Ûþž¿½}ÿ_þÿý}ÿúþÿÿÿÿÿÿÿÿÿÿÿÿ«ÿþ×ÿÿ¯ßþ××ïíÒ·ízØia‚⯫ÚÕíZµjÔ0¬(0¥Xà EI endstream endobj 155 0 obj <> stream 0 0 0 -3 79 105 d1 79 0 0 108 0 -3 cm BI /IM true/W 79/H 108/BPC 1/F/CCF/DP<> ID "£0Ï Î éè<&«§§§Þž†º ÑÙ ­( ðƒ ž'§W§­^½ë_zý^¿ü¨ ?ô¿ÿÿÿÿÿÿÊXoÿ»ÿþýþù(·õßkêÚío[[k†•°»JÁ…È4b±Úµ«ÚµjÔ0­C Ô0 ÁA‚‘q` EI endstream endobj 156 0 obj <> stream 90 0 0 0 0 0 d1 endstream endobj 157 0 obj <> stream 0 0 0 0 63 104 d1 63 0 0 104 0 0 cm BI /IM true/W 63/H 104/BPC 1/F/CCF/DP<> ID #a Ìá§Óéôýôñ!•ï>z}?oO¯ý½}ÿ¯þ÷ÿúÿÿþÿÿý~ëÿë¿®ë®ý®ÒØ\\W××È.:õÚïÚívk°¸ap`¸ÿÿÿÿÿÿÿÿÿÀ@ EI endstream endobj 158 0 obj <> stream 56 0 0 0 0 0 d1 endstream endobj 159 0 obj <> stream 0 0 0 0 85 102 d1 85 0 0 102 0 0 cm BI /IM true/W 85/H 102/BPC 1/F/CCF/DP<> ID <ÉXë÷º_þêëý÷®¿Ý_ë¾õþ¶+ÿkû_û_ÚþÈ0_ºÿî–ÿÞºïýë®û×_ï½ußzÿ[¯õ·_ý×uÿÝ-ÿ¿Šþ×÷×¾¿µýõý¯ï¨€ EI endstream endobj 160 0 obj <> stream 89 0 0 0 0 0 d1 endstream endobj 161 0 obj <> stream 0 0 0 25 39 102 d1 39 0 0 77 0 25 cm BI /IM true/W 39/H 77/BPC 1/F/CCF/DP<> ID 0 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿûûÞ÷‡ƒÈjÿò ýÿßß}Ä88€ EI endstream endobj 162 0 obj <> stream 92 0 0 0 0 0 d1 endstream endobj 163 0 obj <> stream 0 0 0 1 63 102 d1 63 0 0 101 0 1 cm BI /IM true/W 63/H 101/BPC 1/F/CCF/DP<> ID >þÿûþÈ)îß·»v÷nÞ»víÛ·aÛ·nÝ»víÛ‡·nöïnû½íûûïs0_ÿÿÿÿm­¯ö·Kk†Á‚Xõ}^Ö¯jÕ« Ô0¡… FÊ  EI endstream endobj 164 0 obj <> stream 76 0 0 0 0 0 d1 endstream endobj 165 0 obj <> stream 0 0 0 0 85 102 d1 85 0 0 102 0 0 cm BI /IM true/W 85/H 102/BPC 1/F/CCF/DP<> ID 6 šƒP/¯ÿýÿÿ¯ÿÿëÿßÿÿëÿßÿ!Çúÿÿ·ÿÿõúÿ·ÿÿõúÿÿ·ÿõÿúÿ·ÿõÿúÿßïÿõÿúÿ·ÿõÿúÿ·ÿõÿÿúßïÿõÿúÿ·ÿõÿÿúßïõÿÿúßïÿõÿÿñ±ýÿ½ÿ½ÿû€€ EI endstream endobj 166 0 obj <> stream 97 0 0 0 0 0 d1 endstream endobj 167 0 obj <> stream 0 0 0 25 60 133 d1 60 0 0 108 0 25 cm BI /IM true/W 60/H 108/BPC 1/F/CCF/DP<> ID *$`7‚:téÓ§N»®è‚Šp¼'ÓÕ½?ÿûßò &xO éééëÞººè‚§Iééý'úÿ^Ÿÿÿÿÿÿÿí}ÿÖÿµu¿[VÖÖ+ûÈj}¯ÚÚÚß -¬D˜n @ EI endstream endobj 168 0 obj <> stream 0 0 0 0 73 102 d1 73 0 0 102 0 0 cm BI /IM true/W 73/H 102/BPC 1/F/CCF/DP<> ID #@Gÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþx¿ÿÿÿð EI endstream endobj 169 0 obj <> stream 95 0 0 0 0 0 d1 endstream endobj 170 0 obj <> stream 0 0 0 25 56 104 d1 56 0 0 79 0 25 cm BI /IM true/W 56/H 79/BPC 1/F/CCF/DP<> ID !Êpo á ÐtëNžëOäŸAðƒë¤ýºÿÿQ¨()&² å8jÂÁ*ÂU¥J‚¥…KA`²  £X-ar Ò_ÿúÛúXapÂØ¯í{V­ZµjÔ0 ÁIpH€ EI endstream endobj 171 0 obj <> stream 0 0 0 0 79 102 d1 79 0 0 102 0 0 cm BI /IM true/W 79/H 102/BPC 1/F/CCF/DP<> ID "`ÇÝÝ~ëþëþë÷_÷\†î¿õöëÿún¿ýÒÿÝ/¿¿×Óû¯ý7úÿÓ¯ÿtŸþÿIÿßëÿMþ¿ôÝûÓ×ÿ¾ô¿¯§÷úú¯Û­p EI endstream endobj 172 0 obj <> stream 85 0 0 0 0 0 d1 endstream endobj 173 0 obj <> stream 0 0 0 0 45 72 d1 45 0 0 72 0 0 cm BI /IM true/W 45/H 72/BPC 1/F/CCF/DP<> ID )ÂN€D pN:!tCë Ò}7KÓûIþ¿ÿÿÒ­a(X% ÃD@Ä„¡@¨Ø1È`š……KëòLÿÿußÒßuÚV× %`ÁlV­Z†¬(aJq  EI endstream endobj 174 0 obj <> stream 0 0 0 7 25 71 d1 25 0 0 64 0 7 cm BI /IM true/W 25/H 64/BPC 1/F/CCF/DP<> ID 5"Õuבz¿ÿÿÿÿÿÿÿÿÿÿÿüðgÿòÿÿÿÿÿ€€ EI endstream endobj 175 0 obj <> stream 0 0 0 19 23 70 d1 23 0 0 51 0 19 cm BI /IM true/W 23/H 51/BPC 1/F/CCF/DP<> ID 0?ÿÿÿÿÿÿÿÿÿÿÿýÿ¿½ïyä9¯ï¿ï¸‡ Ѐ EI endstream endobj 176 0 obj <> stream 0 0 0 21 35 71 d1 35 0 0 50 0 21 cm BI /IM true/W 35/H 50/BPC 1/F/CCF/DP<> ID ' 3ăÓ×O½“ôéÒÞ½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ EI endstream endobj 177 0 obj <> stream 0 0 0 20 42 71 d1 42 0 0 51 0 20 cm BI /IM true/W 42/H 51/BPC 1/F/CCF/DP<> ID "ÂtéÓ­“zI½u}7ú_~‘Hÿÿÿÿÿoò0~ß×[~Öõµ°ÂØ­^Ô5aA… EI endstream endobj 178 0 obj <> stream 0 0 0 20 37 71 d1 37 0 0 51 0 20 cm BI /IM true/W 37/H 51/BPC 1/F/CCF/DP<> ID !‡„ éÓ§NˆJt¤ún“ÿM××Çúý|†©¯ÿÈÂ[¯ÿ¯íþ¶·]ÕµÚV[íZ†¬(0  EI endstream endobj 179 0 obj <> stream 0 0 0 40 19 48 d1 19 0 0 8 0 40 cm BI /IM true/W 19/H 8/BPC 1/F/CCF/DP<> ID &¡Ÿÿð EI endstream endobj 180 0 obj <> stream 0 0 0 2 55 70 d1 55 0 0 68 0 2 cm BI /IM true/W 55/H 68/BPC 1/F/CCF/DP<> ID <)Ûõêþþ•ýÿº_ßÒ¿¿Õ×øíkÿdu¯ïº_ßt¿ûKûî—÷Þºþßë­¿×]÷ýu±ëß^ÿ^ð EI endstream endobj 181 0 obj <> stream 0 0 0 20 38 71 d1 38 0 0 51 0 20 cm BI /IM true/W 38/H 51/BPC 1/F/CCF/DP<> ID 3C(@Âiéªzkz"PHîƒè=_Oþÿïÿï¿¿}ƒò Ód4^Áö8xy 6H€yV%ïåËÿ÷þë¿il-V­Z†0  EI endstream endobj 182 0 obj <> stream 0 0 0 21 43 90 d1 43 0 0 69 0 21 cm BI /IM true/W 43/H 69/BPC 1/F/CCF/DP<> ID '{ûùXâ÷ß·ý¿ïºý×ï×y!õýë«ûþº¿½u¥öÿúWßõôßëêûþ¾¯½zzþõ÷¯ì@ EI endstream endobj 183 0 obj <> stream 0 0 0 20 37 71 d1 37 0 0 51 0 20 cm BI /IM true/W 37/H 51/BPC 1/F/CCF/DP<> ID !…„ Ó§O!?Aôô›ÓÖôÿ¤ßÿúMÿÿÿÿÿÿ¶—ÿý­ëkûimm¥m,v­Zµ (a@@ EI endstream endobj 184 0 obj <> stream 68 0 0 0 0 0 d1 endstream endobj 185 0 obj <> stream 0 0 0 1 25 70 d1 25 0 0 69 0 1 cm BI /IM true/W 25/H 69/BPC 1/F/CCF/DP<> ID $ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿ$ÿÿÿïì+»¸p EI endstream endobj 186 0 obj <> stream 0 0 0 0 41 51 d1 41 0 0 51 0 0 cm BI /IM true/W 41/H 51/BPC 1/F/CCF/DP<> ID )ÃÁ á:{­‡xA½=_W¿×ëŠáBP²‚PJ„A`¨ƒ×Aa}sXÿë®û®ÒÚØíjÔ5j(€ EI endstream endobj 187 0 obj <> stream 0 0 0 -18 9 50 d1 9 0 0 68 0 -18 cm BI /IM true/W 9/H 68/BPC 1/F/CCF/DP<> ID .?ÿÿÿÿÿÿÿÿÿÿÿó@ßþ\ÿà EI endstream endobj 188 0 obj <> stream 0 0 0 1 41 50 d1 41 0 0 49 0 1 cm BI /IM true/W 41/H 49/BPC 1/F/CCF/DP<> ID >_þÈŠvíûvï»wÝ»îÝ÷nö÷{{·}Û¾íßs@jÿð EI endstream endobj 189 0 obj <> stream 0 0 0 20 35 70 d1 35 0 0 50 0 20 cm BI /IM true/W 35/H 50/BPC 1/F/CCF/DP<> ID .20ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿß­ýmv¸k‘Ž+¿®×kµ€€ EI endstream endobj 190 0 obj <> stream 0 0 0 77 48 82 d1 48 0 0 5 0 77 cm BI /IM true/W 48/H 5/BPC 1/F/CCF/DP<> ID 8à EI endstream endobj 191 0 obj <> stream 0 0 0 2 9 70 d1 9 0 0 68 0 2 cm BI /IM true/W 9/H 68/BPC 1/F/CCF/DP<> ID .?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ@ EI endstream endobj 192 0 obj <> stream 0 0 0 0 56 50 d1 56 0 0 50 0 0 cm BI /IM true/W 56/H 50/BPC 1/F/CCF/DP<> ID .3XÍCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿ¾ÿûM{íRÝûA®F8‘G÷í5Ú®Ðk´ÔCA… EI endstream endobj xref 0 194 0000000000 65535 f 0000009172 00000 n 0000009113 00000 n 0000006169 00000 n 0000000015 00000 n 0000006149 00000 n 0000009310 00000 n 0000006324 00000 n 0000010547 00000 n 0000010726 00000 n 0000010923 00000 n 0000010987 00000 n 0000011164 00000 n 0000011228 00000 n 0000011427 00000 n 0000011605 00000 n 0000011669 00000 n 0000011854 00000 n 0000012063 00000 n 0000012229 00000 n 0000012293 00000 n 0000012357 00000 n 0000012552 00000 n 0000012749 00000 n 0000012945 00000 n 0000013114 00000 n 0000013328 00000 n 0000013515 00000 n 0000013719 00000 n 0000013907 00000 n 0000014069 00000 n 0000014243 00000 n 0000014442 00000 n 0000014506 00000 n 0000014678 00000 n 0000014742 00000 n 0000014940 00000 n 0000015004 00000 n 0000015225 00000 n 0000015289 00000 n 0000015353 00000 n 0000015538 00000 n 0000015740 00000 n 0000015949 00000 n 0000016164 00000 n 0000016353 00000 n 0000016534 00000 n 0000016732 00000 n 0000016931 00000 n 0000017141 00000 n 0000017314 00000 n 0000017493 00000 n 0000017557 00000 n 0000017621 00000 n 0000017832 00000 n 0000017896 00000 n 0000018098 00000 n 0000018162 00000 n 0000018226 00000 n 0000018408 00000 n 0000018597 00000 n 0000018786 00000 n 0000018961 00000 n 0000019025 00000 n 0000019204 00000 n 0000019408 00000 n 0000019592 00000 n 0000019770 00000 n 0000019834 00000 n 0000020018 00000 n 0000020214 00000 n 0000020421 00000 n 0000020485 00000 n 0000020685 00000 n 0000020875 00000 n 0000021045 00000 n 0000021284 00000 n 0000021490 00000 n 0000021554 00000 n 0000021740 00000 n 0000021926 00000 n 0000022107 00000 n 0000022284 00000 n 0000022348 00000 n 0000022503 00000 n 0000022708 00000 n 0000022772 00000 n 0000022983 00000 n 0000023193 00000 n 0000023257 00000 n 0000023442 00000 n 0000023650 00000 n 0000023853 00000 n 0000024021 00000 n 0000024189 00000 n 0000024395 00000 n 0000024591 00000 n 0000024655 00000 n 0000024719 00000 n 0000024932 00000 n 0000025150 00000 n 0000025340 00000 n 0000025557 00000 n 0000025768 00000 n 0000025968 00000 n 0000026149 00000 n 0000026331 00000 n 0000026520 00000 n 0000026706 00000 n 0000026771 00000 n 0000026971 00000 n 0000027127 00000 n 0000027331 00000 n 0000027533 00000 n 0000027733 00000 n 0000027913 00000 n 0000027978 00000 n 0000028043 00000 n 0000028108 00000 n 0000028300 00000 n 0000028493 00000 n 0000028558 00000 n 0000028757 00000 n 0000028973 00000 n 0000029038 00000 n 0000029234 00000 n 0000029468 00000 n 0000029533 00000 n 0000029751 00000 n 0000029816 00000 n 0000029881 00000 n 0000030064 00000 n 0000030129 00000 n 0000030322 00000 n 0000030498 00000 n 0000030785 00000 n 0000030850 00000 n 0000031038 00000 n 0000031103 00000 n 0000031307 00000 n 0000031468 00000 n 0000031651 00000 n 0000031865 00000 n 0000031930 00000 n 0000032167 00000 n 0000032416 00000 n 0000032481 00000 n 0000032679 00000 n 0000032880 00000 n 0000032945 00000 n 0000033182 00000 n 0000033421 00000 n 0000033672 00000 n 0000033737 00000 n 0000033802 00000 n 0000034051 00000 n 0000034326 00000 n 0000034391 00000 n 0000034638 00000 n 0000034703 00000 n 0000034941 00000 n 0000035006 00000 n 0000035204 00000 n 0000035269 00000 n 0000035506 00000 n 0000035571 00000 n 0000035838 00000 n 0000035903 00000 n 0000036166 00000 n 0000036362 00000 n 0000036427 00000 n 0000036679 00000 n 0000036918 00000 n 0000036983 00000 n 0000037226 00000 n 0000037411 00000 n 0000037595 00000 n 0000037786 00000 n 0000037991 00000 n 0000038199 00000 n 0000038356 00000 n 0000038568 00000 n 0000038789 00000 n 0000039000 00000 n 0000039207 00000 n 0000039272 00000 n 0000039457 00000 n 0000039669 00000 n 0000039842 00000 n 0000040029 00000 n 0000040222 00000 n 0000040378 00000 n 0000040545 00000 n 0000009221 00000 n trailer << /Size 194 /Root 1 0 R /Info 193 0 R >> startxref 40756 %%EOF t1lib-5.1.2/doc/t1dump/0000755000175000001440000000000010733501626013243 5ustar rmzuserst1lib-5.1.2/doc/t1dump/t1dump_eight.eps0000644000175000001440000004606310733501626016357 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%Creator: t1lib (edited manually by RMz, 2003-01-15) %%Title: Type1Char Character Dump %%Pages: 1 %%PageOrder: Ascend %%BoundingBox: 0 0 280 400 %%EndComments %! /T1LibDict 100 dict def T1LibDict begin % Setup the size from the type1 module /t1SetupSize { /size exch def } def % Prepare the page. Compute scales and fill the charspace unit square % background /t1PreparePage { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Start of Customizable Section % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Setup a standard linewidth /t1dumpstdlinewidth 1.0 def % Setup a scale for drawing direction arrows /arrowscale 1.5 def % Should we draw the device pixel grid? (1=yes, otherwise no) /t1drawgrid 0 def % Should we draw stems? (1=yes, otherwise no) /t1drawstems 0 def % Should we draw alignment zones? (1=yes, otherwise no) /t1drawzones 0 def % Should we fill the charspace unit square? (1=yes, otherwise no) /t1fillunitsquare 0 def % Should we fill the device page? (1=yes, otherwise no) /t1fillpage 0 def % Should we show path segment On-Curve points? (1=yes, otherwise no) /t1showoncurvepoints 0 def % Should we show path segment Off Curve points? (1=yes, otherwise no) /t1showoffcurvepoints 0 def % Should we show Bezier tangets and their defining points? (1=yes, otherwise no) /t1showbeziertangents 0 def % Define a few colors /t1linecolor { 0.0 0.0 0.0 } def /t1hlinecolor { 1.0 0.0 0.0 } def /t1slinecolor { 1.0 1.0 1.0 } def /t1movecolor { 0.0 0.0 0.0 } def /t1hmovecolor { 1.0 0.0 0.0 } def /t1smovecolor { 1.0 1.0 1.0 } def /t1curvecolor { 0.0 0.0 0.0 } def /t1hcurvecolor { 1.0 0.0 0.0 } def /t1scurvecolor { 0.0 0.0 1.0 } def /t1sprolongatecolor { 1.0 0.0 1.0 } def /t1stemcolor { 0.0 0.0 1.0 } def /t1alignedstemcolor { 1.0 0.0 1.0 } def /t1bottomzonecolor { 1.0 1.0 0.0 } def /t1topzonecolor { 1.0 1.0 0.0 } def /t1arrowcolor { 0.0 0.0 0.0 } def /t1harrowcolor { 1.0 0.0 0.0 } def /t1sarrowcolor { 0.0 0.0 1.0 } def /t1sbwcolor { 0.0 0.0 0.0 } def /t1closepathcolor { 0.0 0.0 0.0 } def /t1hclosepathcolor { 1.0 0.0 0.0 } def /t1sclosepathcolor { 0.0 0.0 1.0 } def /t1pagecolor { 0.7 0.7 0.7 } def /t1unitsquarecolor { 0.4 0.4 0.4 } def /t1gridcolor { 0.0 0.0 0.0 } def % Line scale relative to the standard linewidth /t1linescale 0.8 def /t1hlinescale 0.4 def /t1slinescale 0.4 def /t1movescale 0.4 def /t1hmovescale 0.4 def /t1smovescale 0.4 def /t1curvescale 0.8 def /t1hcurvescale 0.4 def /t1scurvescale 0.4 def /t1curvetangentscale 0.5 def /t1sprolongatescale 0.4 def /t1stemscale 0.5 def /t1alignedstemscale 0.5 def /t1bottomzonescale 0.5 def /t1topzonescale 0.5 def /t1closepathscale 0.8 def /t1hclosepathscale 0.4 def /t1sclosepathscale 0.4 def /t1gridscale 0.5 def % Line dash specifications (stems and zones are not configurable!) /t1linedash { [] 0 } def /t1hlinedash { [] 0 } def /t1slinedash { [] 0 } def /t1movedash { [2 2] 0 } def /t1hmovedash { [2 2] 0 } def /t1smovedash { [2 2] 0 } def /t1curvedash { [] 0 } def /t1hcurvedash { [] 0 } def /t1scurvedash { [] 0 } def /t1sprolongatedash { [1 1] 0 }def /t1closepathdash { [] 0 } def /t1hclosepathdash { [] 0 } def /t1sclosepathdash { [] 0 } def /t1griddash { [3 3] 0 } def % Define a clipping rectangle ROI (in charspace coordinates) /t1ROIxmin 0 def /t1ROIxmax 500 def /t1ROIymin -50 def /t1ROIymax 700 def % Device values (in bp). These must match the Bounding Box Statement! /xmindev 0 neg def /xmaxdev 280 def /ymindev 0 neg def /ymaxdev 400 def /dxdev 1 def /dydev 1 def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % End of Customizable Section % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % logical pixel values /xminpixel t1ROIxmin 1000.0 div size mul def /xmaxpixel t1ROIxmax 1000.0 div size mul def /yminpixel t1ROIymin 1000.0 div size mul def /ymaxpixel t1ROIymax 1000.0 div size mul def /dxpixel 1 def /dypixel 1 def % compute scales and set minimum scale /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse % Fill device page xmindev ymindev moveto xmaxdev 0 rlineto 0 ymaxdev rlineto xmaxdev neg 0 rlineto 0 ymaxdev neg rlineto closepath clip t1fillpage 1 eq { t1pagecolor setrgbcolor fill } if % reassign device values /xmindev xminpixel scale mul def /xmaxdev xmaxpixel scale mul def /ymindev yminpixel scale mul def /ymaxdev ymaxpixel scale mul def /dxdev dxpixel scale mul def /dydev dypixel scale mul def % translate coordinate system xminpixel scale mul neg yminpixel scale mul neg translate % Fill unit square of charspace coordinate system t1fillunitsquare 1 eq { t1unitsquarecolor setrgbcolor 0 0 moveto size scale mul 0 rlineto 0 size scale mul rlineto size scale mul neg 0 rlineto 0 size scale mul neg rlineto closepath fill } if } def /t1FinishPage { t1drawgrid 1 eq { t1gridcolor setrgbcolor t1gridscale setlinewidth t1griddash setdash % draw grid and align to the point (0,0) 0 dxdev xmaxdev { /xval exch def xval ymindev moveto xval ymaxdev lineto stroke } for 0 dxdev neg xmindev { /xval exch def xval ymindev moveto xval ymaxdev lineto stroke } for 0 dydev ymaxdev { /yval exch def xmindev yval moveto xmaxdev yval lineto stroke } for 0 dydev neg ymindev { /yval exch def xmindev yval moveto xmaxdev yval lineto stroke } for } if } def % Define three arrow routines available for later providing the output with directions /t1arrowhead { /tmpy exch def /tmpx exch def gsave t1arrowcolor setrgbcolor currx curry translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1harrowhead { /tmpy exch def /tmpx exch def gsave t1harrowcolor setrgbcolor currhx currhy translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1sarrowhead { /tmpy exch def /tmpx exch def gsave t1sarrowcolor setrgbcolor currsx currsy translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1rlineto { /y2 exch scale mul def /x2 exch scale mul def t1linecolor setrgbcolor t1linedash setdash t1linescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currx curry moveto x2 y2 rlineto stroke /currx currx x2 add def /curry curry y2 add def } def /t1srlineto { /y2 exch scale mul def /x2 exch scale mul def t1slinecolor setrgbcolor t1slinedash setdash t1slinescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def } def /t1sprolongate { /y2 exch scale mul def /x2 exch scale mul def t1sprolongatecolor setrgbcolor t1sprolongatedash setdash t1sprolongatescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def } def /t1hintedrlineto { /y2 exch scale mul def /x2 exch scale mul def t1hlinecolor setrgbcolor t1hlinedash setdash t1hlinescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currhx currhy moveto x2 y2 rlineto stroke /currhx currhx x2 add def /currhy currhy y2 add def } def /t1rmoveto { /y2 exch scale mul def /x2 exch scale mul def t1movecolor setrgbcolor t1movedash setdash t1movescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currx curry moveto x2 y2 rlineto stroke /currx currx x2 add def /curry curry y2 add def /startx currx def /starty curry def } def /t1srmoveto { /y2 exch scale mul def /x2 exch scale mul def t1smovecolor setrgbcolor t1smovedash setdash t1smovescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def /startsx currsx def /startsy currsy def } def /t1hintedrmoveto { /y2 exch scale mul def /x2 exch scale mul def t1hmovecolor setrgbcolor t1hmovedash setdash t1hmovescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currhx currhy moveto x2 y2 rlineto stroke /currhx currhx x2 add def /currhy currhy y2 add def /starthx currhx def /starthy currhy def } def /t1rrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1curvecolor setrgbcolor t1curvedash setdash t1curvescale t1dumpstdlinewidth mul setlinewidth t1showoffcurvepoints 1 eq { newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currx curry moveto currx x2 add curry y2 add lineto stroke currx x2 x3 add add curry y2 y3 add add moveto currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto stroke } if t1curvedash setdash t1curvescale t1dumpstdlinewidth mul setlinewidth currx curry moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currx currx x2 x3 x4 add add add def /curry curry y2 y3 y4 add add add def } def /t1srrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1scurvecolor setrgbcolor t1scurvedash setdash t1scurvescale t1dumpstdlinewidth mul setlinewidth t1showoffcurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currsx currsy moveto currsx x2 add currsy y2 add lineto stroke currsx x2 x3 add add currsy y2 y3 add add moveto currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto stroke } if t1scurvedash setdash t1scurvescale t1dumpstdlinewidth mul setlinewidth currsx currsy moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currsx currsx x2 x3 x4 add add add def /currsy currsy y2 y3 y4 add add add def } def /t1hintedrrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1hcurvecolor setrgbcolor t1hcurvedash setdash t1hcurvescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currhx currhy moveto currhx x2 add currhy y2 add lineto stroke currhx x2 x3 add add currhy y2 y3 add add moveto currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto stroke } if t1hcurvedash setdash t1hcurvescale t1dumpstdlinewidth mul setlinewidth currhx currhy moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currhx currhx x2 x3 x4 add add add def /currhy currhy y2 y3 y4 add add add def } def /t1sbw { /wy exch scale mul def /wx exch scale mul def /sby exch scale mul def /sbx exch scale mul def t1sbwcolor setrgbcolor newpath sbx sby 3 0 360 arc closepath fill newpath wx wy 3 0 360 arc closepath fill /currx sbx def /curry sby def /currhx sbx def /currhy sby def /currsx sbx def /currsy sby def } def /t1closepath { t1closepathdash setdash t1closepathscale t1dumpstdlinewidth mul setlinewidth t1closepathcolor setrgbcolor currx curry moveto startx starty lineto stroke } def /t1sclosepath { t1sclosepathdash setdash t1sclosepathscale t1dumpstdlinewidth mul setlinewidth t1sclosepathcolor setrgbcolor currsx currsy moveto startsx startsy lineto stroke } def /t1hintedclosepath { t1hclosepathdash setdash t1hclosepathscale t1dumpstdlinewidth mul setlinewidth t1hclosepathcolor setrgbcolor currhx currhy moveto starthx starthy lineto stroke } def /t1vstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1stemscale t1dumpstdlinewidth mul setlinewidth t1stemcolor setrgbcolor [] 0 setdash stemstart ymindev moveto stemstart ymaxdev lineto stroke [2 2] 0 setdash stemwidth stemstart add ymindev moveto stemwidth stemstart add ymaxdev lineto stroke } if } def /t1alignedvstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1alignedstemscale t1dumpstdlinewidth mul setlinewidth t1alignedstemcolor setrgbcolor [] 0 setdash stemstart ymindev moveto stemstart ymaxdev lineto stroke [2 2] 0 setdash stemwidth stemstart add ymindev moveto stemwidth stemstart add ymaxdev lineto stroke } if } def /t1hstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1stemscale t1dumpstdlinewidth mul setlinewidth t1stemcolor setrgbcolor [] 0 setdash xmindev stemstart moveto xmaxdev stemstart lineto stroke [2 2] 0 setdash xmindev stemwidth stemstart add moveto xmaxdev stemwidth stemstart add lineto stroke } if } def /t1alignedhstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1alignedstemscale t1dumpstdlinewidth mul setlinewidth t1alignedstemcolor setrgbcolor [] 0 setdash xmindev stemstart moveto xmaxdev stemstart lineto stroke [2 2] 0 setdash xmindev stemwidth stemstart add moveto xmaxdev stemwidth stemstart add lineto stroke } if } def /t1bottomzone { t1drawzones 1 eq { /bottom exch scale mul def /top exch scale mul def t1bottomzonescale t1dumpstdlinewidth mul setlinewidth t1bottomzonecolor setrgbcolor [] 0 setdash xmindev bottom moveto xmaxdev bottom lineto stroke [2 2] 0 setdash xmindev top moveto xmaxdev top lineto stroke } if } def /t1topzone { t1drawzones 1 eq { /bottom exch scale mul def /top exch scale mul def t1topzonescale t1dumpstdlinewidth mul setlinewidth t1topzonecolor setrgbcolor [2 2] 0 setdash xmindev bottom moveto xmaxdev bottom lineto stroke [] 0 setdash xmindev top moveto xmaxdev top lineto stroke } if } def end % Next follows drawing code from charstring commands: T1LibDict begin gsave 20.000001 t1SetupSize t1PreparePage -0.439758 0.000000 t1bottomzone 13.652496 14.092255 t1topzone 8.615265 8.955078 t1topzone 13.312683 13.532562 t1topzone -4.117737 -3.877869 t1bottomzone 0.839539 0.000000 0.839539 0.000000 t1sbw 2.418671 9.134979 t1arrowhead t1rmoveto -0.919495 0.599670 t1arrowhead -0.079956 0.679626 0.000000 0.339813 t1rrcurveto 0.000000 1.219330 t1arrowhead 1.299286 0.839539 1.419220 0.000000 t1rrcurveto 1.459198 0.000000 t1arrowhead 1.279297 -1.039429 0.000000 -1.439209 t1rrcurveto 0.000000 -1.139374 t1arrowhead -0.779572 -0.959473 -1.199341 -0.699615 t1rrcurveto t1closepath 0.439758 -0.299835 t1arrowhead t1rmoveto 1.439209 0.739594 t1arrowhead 0.979462 1.039429 0.000000 1.319275 t1rrcurveto 0.000000 1.838989 t1arrowhead -1.779022 1.139374 -1.819000 0.000000 t1rrcurveto -1.998901 0.000000 t1arrowhead -1.619110 -1.479187 0.000000 -1.858978 t1rrcurveto 0.000000 -0.359802 t1arrowhead 0.039978 -0.899506 0.839539 -0.939484 t1rrcurveto 0.219879 -0.239868 t1arrowhead 0.739594 -0.499725 0.499725 -0.339813 t1rrcurveto -1.159363 -0.579681 t1arrowhead -1.719055 -1.119385 0.000000 -1.978912 t1rrcurveto 0.000000 -2.118835 t1arrowhead 2.038879 -1.339264 2.098846 0.000000 t1rrcurveto 2.258759 0.000000 t1arrowhead 1.898956 1.659088 0.000000 2.138824 t1rrcurveto 0.000000 0.719604 t1arrowhead -0.219879 0.899506 -0.759583 0.839539 t1rrcurveto -0.379791 0.419769 t1arrowhead -0.319824 0.199890 -1.279297 0.799561 t1rrcurveto t1closepath -1.998901 -0.839539 t1arrowhead t1rmoveto 0.559692 -0.339813 t1arrowhead 0.939484 -0.599670 0.959473 -0.619659 t1rrcurveto 0.559692 -0.379791 t1arrowhead 0.939484 -0.599670 0.000000 -1.219330 t1rrcurveto 0.000000 -1.479187 t1arrowhead -1.499176 -1.039429 -1.639099 0.000000 t1rrcurveto -1.719055 0.000000 t1arrowhead -1.439209 1.239319 0.000000 1.659088 t1rrcurveto 0.000000 1.159363 t1arrowhead 0.639648 1.279297 1.699066 0.939484 t1rrcurveto t1closepath t1FinishPage grestore end t1lib-5.1.2/doc/t1dump/t1dump_eight.pdf0000644000175000001440000000337310733501626016336 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœÝVMnõ6 Ü¿Sø‚Hê‡í°áX:’«^lÖ'OIÙBÖÅ"ö,P9%á¸ÎµÇsÅÞ'^Z%HÌÎ6ÛaSA¡½Zž*áj6޹†œîË¹Ž¨AÒÏ{¢ÈÙ¦ h¸#JŸ6룧}_%EáÒdþÁ [(³ôAE|ÒósÁžw·¢ìw›8£†ž²¬ÖÉÔu4ñV÷ŽåÊ?¸.©o[²–ÆÀs+tHÀ¤8Ï+Õ‚÷{HC9ÓÙyfùÆø»SÔ"t0 ¤¤EÎ!z;ÖÐÆcýQÐ '‚ÔœídØdùÃf}ò4Œ+!,Rªž[Qœ€6'”h.;ß? ÷@êš2—x²Ø¦Eµ];Ö»—ŠÉHå@¤T0JAuÄÚš¢¯pq z(WìýâŒl‡æ´#F›õÉÓ܇‚e´ ª 6\“§41z1¤éÀÞ¯¬)”„†(y :Î%œYk &VŒQÀN ':¤éì© §V'‰“€À8¦ÄŽ.•rSö–ðp®Øûeê±³Ï-è«nœè 5eŠ8Gv¦Z çî©(ªb ÂòtL>Ê]éæ:VèJÙ‰ü‰:0>#Û´1§C®mÒÕ‹Íúài ˜aEù ù A ‰Ú:Ög娡ÜĹ!‡r›C¹ )ìÈúäÉ : ó@8A´Ì–ŒL*Ó\A9©öü\0ÜÊçÐ Ù0c DŸ6룧´ ŽT<]Š× ÄA φ½ÿµ7ú‚ò¹ãÄœ<ÐAdªÐ×xF~÷âÜ˲´ Ue©Nþñ«f~ÿ ÎÿO§º`ë!M£˜ ŽbMÁs›°-LúéÕôà™yôè+7×_WÈm0ÛÕoêUhçSJÁ³­K#¡ïÐü¸=û$½M›S.âSÛ žIšËÊ`–Ó²€x>Šq±ÒŸLWÌø B@ïÒÚ†›r'º]/&UÔƒ€âìäÁ‘!µÐ!‚<´QL°HÞA†£ÌµÕvÍΫÈy•ò ئ…š,=[¬O^:ñRmùè¡2|”dc’åi’ è˜d˜8ÌI6,æ$ó7vÖ»u&iHÂÀp (H0^šs}–ÆŽ-£îgd;lC®#¥\lÖOí“«O’I˜O†}?3ùÆö?^ÿâ1Òendstream endobj 5 0 obj 1151 endobj 3 0 obj << /Type /Page /MediaBox [0 0 280 400] /Parent 2 0 R /Resources << /ProcSet [/PDF] >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 6 0 obj << /CreationDate (D:20030302172809) /Producer (GNU Ghostscript 5.50) >> endobj xref 0 7 0000000000 65535 f 0000001435 00000 n 0000001376 00000 n 0000001256 00000 n 0000000015 00000 n 0000001236 00000 n 0000001484 00000 n trailer << /Size 7 /Root 1 0 R /Info 6 0 R >> startxref 1571 %%EOF t1lib-5.1.2/doc/t1dump/t1dump_t_1.eps0000644000175000001440000005265310733501626015744 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%Creator: t1lib (edited manually by RMz, 2003-01-15) %%Title: Type1Char Character Dump %%Pages: 1 %%PageOrder: Ascend %%BoundingBox: 0 0 280 400 %%DocumentPaperSizes: a4 %%EndComments %! /T1LibDict 100 dict def T1LibDict begin % Setup the size from the type1 module /t1SetupSize { /size exch def } def % Prepare the page. Compute scales and fill the charspace unit square % background /t1PreparePage { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Start of Customizable Section % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Setup a standard linewidth /t1dumpstdlinewidth 1.0 def % Setup a scale for drawing direction arrows /arrowscale 3.0 def % Should we draw the device pixel grid? (1=yes, otherwise no) /t1drawgrid 0 def % Should we draw stems? (1=yes, otherwise no) /t1drawstems 0 def % Should we draw alignment zones? (1=yes, otherwise no) /t1drawzones 0 def % Should we fill the charspace unit square? (1=yes, otherwise no) /t1fillunitsquare 0 def % Should we fill the device page? (1=yes, otherwise no) /t1fillpage 0 def % Should we show path segment On-Curve points? (1=yes, otherwise no) /t1showoncurvepoints 0 def % Should we show path segment Off Curve points? (1=yes, otherwise no) /t1showoffcurvepoints 0 def % Should we show Bezier tangets and their defining points? (1=yes, otherwise no) /t1showbeziertangents 0 def % Define a few colors /t1linecolor { 0.0 0.0 0.0 } def /t1hlinecolor { 1.0 0.0 0.0 } def /t1slinecolor { 0.0 0.0 0.0 } def /t1movecolor { 0.0 0.0 0.0 } def /t1hmovecolor { 0.0 0.0 0.0 } def /t1smovecolor { 0.0 0.0 0.0 } def /t1curvecolor { 0.0 0.0 0.0 } def /t1hcurvecolor { 1.0 0.0 0.0 } def /t1scurvecolor { 0.0 0.0 0.0 } def /t1sprolongatecolor { 1.0 1.0 1.0 } def /t1stemcolor { 0.0 0.0 1.0 } def /t1alignedstemcolor { 1.0 0.0 1.0 } def /t1bottomzonecolor { 1.0 1.0 0.0 } def /t1topzonecolor { 1.0 1.0 0.0 } def /t1arrowcolor { 0.0 0.0 0.0 } def /t1harrowcolor { 1.0 0.0 0.0 } def /t1sarrowcolor { 0.0 0.0 1.0 } def /t1sbwcolor { 0.0 0.0 0.0 } def /t1closepathcolor { 0.0 0.0 0.0 } def /t1hclosepathcolor { 1.0 0.0 0.0 } def /t1sclosepathcolor { 0.0 0.0 1.0 } def /t1pagecolor { 0.7 0.7 0.7 } def /t1unitsquarecolor { 0.4 0.4 0.4 } def /t1gridcolor { 0.0 0.0 0.0 } def % Line scale relative to the standard linewidth /t1linescale 1.2 def /t1hlinescale 0.4 def /t1slinescale 0.4 def /t1movescale 0.4 def /t1hmovescale 0.4 def /t1smovescale 0.4 def /t1curvescale 1.2 def /t1hcurvescale 0.4 def /t1scurvescale 0.4 def /t1curvetangentscale 0.5 def /t1sprolongatescale 0.0 def /t1stemscale 0.5 def /t1alignedstemscale 0.5 def /t1bottomzonescale 0.5 def /t1topzonescale 0.5 def /t1closepathscale 0.8 def /t1hclosepathscale 0.4 def /t1sclosepathscale 0.4 def /t1gridscale 0.5 def % Line dash specifications (stems and zones are not configurable!) /t1linedash { [2 2] 0 } def /t1hlinedash { [] 0 } def /t1slinedash { [] 0 } def /t1movedash { [2 2] 0 } def /t1hmovedash { [2 2] 0 } def /t1smovedash { [2 2] 0 } def /t1curvedash { [2 2] 0 } def /t1hcurvedash { [] 0 } def /t1scurvedash { [] 0 } def /t1sprolongatedash { [1 1] 0 }def /t1closepathdash { [2 2] 0 } def /t1hclosepathdash { [] 0 } def /t1sclosepathdash { [] 0 } def /t1griddash { [3 3] 0 } def % Define a clipping rectangle ROI (in charspace coordinates) /t1ROIxmin 0 def /t1ROIxmax 300 def /t1ROIymin -50 def /t1ROIymax 650 def % Device values (in bp). These must match the Bounding Box Statement! /xmindev 0 neg def /xmaxdev 280 def /ymindev 0 neg def /ymaxdev 400 def /dxdev 1 def /dydev 1 def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % End of Customizable Section % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % logical pixel values /xminpixel t1ROIxmin 1000.0 div size mul def /xmaxpixel t1ROIxmax 1000.0 div size mul def /yminpixel t1ROIymin 1000.0 div size mul def /ymaxpixel t1ROIymax 1000.0 div size mul def /dxpixel 1 def /dypixel 1 def % compute scales and set minimum scale /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse % Fill device page xmindev ymindev moveto xmaxdev 0 rlineto 0 ymaxdev rlineto xmaxdev neg 0 rlineto 0 ymaxdev neg rlineto closepath clip t1fillpage 1 eq { t1pagecolor setrgbcolor fill } if % reassign device values /xmindev xminpixel scale mul def /xmaxdev xmaxpixel scale mul def /ymindev yminpixel scale mul def /ymaxdev ymaxpixel scale mul def /dxdev dxpixel scale mul def /dydev dypixel scale mul def % translate coordinate system xminpixel scale mul neg yminpixel scale mul neg translate % Fill unit square of charspace coordinate system t1fillunitsquare 1 eq { t1unitsquarecolor setrgbcolor 0 0 moveto size scale mul 0 rlineto 0 size scale mul rlineto size scale mul neg 0 rlineto 0 size scale mul neg rlineto closepath fill } if } def /t1FinishPage { t1drawgrid 1 eq { t1gridcolor setrgbcolor t1gridscale setlinewidth t1griddash setdash % draw grid and align to the point (0,0) 0 dxdev xmaxdev { /xval exch def xval ymindev moveto xval ymaxdev lineto stroke } for 0 dxdev neg xmindev { /xval exch def xval ymindev moveto xval ymaxdev lineto stroke } for 0 dydev ymaxdev { /yval exch def xmindev yval moveto xmaxdev yval lineto stroke } for 0 dydev neg ymindev { /yval exch def xmindev yval moveto xmaxdev yval lineto stroke } for } if } def % Define three arrow routines available for later providing the output with directions /t1arrowhead { /tmpy exch def /tmpx exch def gsave t1arrowcolor setrgbcolor currx curry translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1harrowhead { /tmpy exch def /tmpx exch def gsave t1harrowcolor setrgbcolor currhx currhy translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1sarrowhead { /tmpy exch def /tmpx exch def gsave t1sarrowcolor setrgbcolor currsx currsy translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1rlineto { /y2 exch scale mul def /x2 exch scale mul def t1linecolor setrgbcolor t1linedash setdash t1linescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currx curry moveto x2 y2 rlineto stroke /currx currx x2 add def /curry curry y2 add def } def /t1srlineto { /y2 exch scale mul def /x2 exch scale mul def t1slinecolor setrgbcolor t1slinedash setdash t1slinescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def } def /t1sprolongate { /y2 exch scale mul def /x2 exch scale mul def t1sprolongatecolor setrgbcolor t1sprolongatedash setdash t1sprolongatescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def } def /t1hintedrlineto { /y2 exch scale mul def /x2 exch scale mul def t1hlinecolor setrgbcolor t1hlinedash setdash t1hlinescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currhx currhy moveto x2 y2 rlineto stroke /currhx currhx x2 add def /currhy currhy y2 add def } def /t1rmoveto { /y2 exch scale mul def /x2 exch scale mul def t1movecolor setrgbcolor t1movedash setdash t1movescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currx curry moveto x2 y2 rlineto stroke /currx currx x2 add def /curry curry y2 add def /startx currx def /starty curry def } def /t1srmoveto { /y2 exch scale mul def /x2 exch scale mul def t1smovecolor setrgbcolor t1smovedash setdash t1smovescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def /startsx currsx def /startsy currsy def } def /t1hintedrmoveto { /y2 exch scale mul def /x2 exch scale mul def t1hmovecolor setrgbcolor t1hmovedash setdash t1hmovescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currhx currhy moveto x2 y2 rlineto stroke /currhx currhx x2 add def /currhy currhy y2 add def /starthx currhx def /starthy currhy def } def /t1rrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1curvecolor setrgbcolor t1curvedash setdash t1curvescale t1dumpstdlinewidth mul setlinewidth t1showoffcurvepoints 1 eq { newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currx curry moveto currx x2 add curry y2 add lineto stroke currx x2 x3 add add curry y2 y3 add add moveto currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto stroke } if t1curvedash setdash t1curvescale t1dumpstdlinewidth mul setlinewidth currx curry moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currx currx x2 x3 x4 add add add def /curry curry y2 y3 y4 add add add def } def /t1srrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1scurvecolor setrgbcolor t1scurvedash setdash t1scurvescale t1dumpstdlinewidth mul setlinewidth t1showoffcurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currsx currsy moveto currsx x2 add currsy y2 add lineto stroke currsx x2 x3 add add currsy y2 y3 add add moveto currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto stroke } if t1scurvedash setdash t1scurvescale t1dumpstdlinewidth mul setlinewidth currsx currsy moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currsx currsx x2 x3 x4 add add add def /currsy currsy y2 y3 y4 add add add def } def /t1hintedrrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1hcurvecolor setrgbcolor t1hcurvedash setdash t1hcurvescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currhx currhy moveto currhx x2 add currhy y2 add lineto stroke currhx x2 x3 add add currhy y2 y3 add add moveto currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto stroke } if t1hcurvedash setdash t1hcurvescale t1dumpstdlinewidth mul setlinewidth currhx currhy moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currhx currhx x2 x3 x4 add add add def /currhy currhy y2 y3 y4 add add add def } def /t1sbw { /wy exch scale mul def /wx exch scale mul def /sby exch scale mul def /sbx exch scale mul def t1sbwcolor setrgbcolor newpath sbx sby 3 0 360 arc closepath fill newpath wx wy 3 0 360 arc closepath fill /currx sbx def /curry sby def /currhx sbx def /currhy sby def /currsx sbx def /currsy sby def } def /t1closepath { t1closepathdash setdash t1closepathscale t1dumpstdlinewidth mul setlinewidth t1closepathcolor setrgbcolor currx curry moveto startx starty lineto stroke } def /t1sclosepath { t1sclosepathdash setdash t1sclosepathscale t1dumpstdlinewidth mul setlinewidth t1sclosepathcolor setrgbcolor currsx currsy moveto startsx startsy lineto stroke } def /t1hintedclosepath { t1hclosepathdash setdash t1hclosepathscale t1dumpstdlinewidth mul setlinewidth t1hclosepathcolor setrgbcolor currhx currhy moveto starthx starthy lineto stroke } def /t1vstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1stemscale t1dumpstdlinewidth mul setlinewidth t1stemcolor setrgbcolor [] 0 setdash stemstart ymindev moveto stemstart ymaxdev lineto stroke [2 2] 0 setdash stemwidth stemstart add ymindev moveto stemwidth stemstart add ymaxdev lineto stroke } if } def /t1alignedvstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1alignedstemscale t1dumpstdlinewidth mul setlinewidth t1alignedstemcolor setrgbcolor [] 0 setdash stemstart ymindev moveto stemstart ymaxdev lineto stroke [2 2] 0 setdash stemwidth stemstart add ymindev moveto stemwidth stemstart add ymaxdev lineto stroke } if } def /t1hstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1stemscale t1dumpstdlinewidth mul setlinewidth t1stemcolor setrgbcolor [] 0 setdash xmindev stemstart moveto xmaxdev stemstart lineto stroke [2 2] 0 setdash xmindev stemwidth stemstart add moveto xmaxdev stemwidth stemstart add lineto stroke } if } def /t1alignedhstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1alignedstemscale t1dumpstdlinewidth mul setlinewidth t1alignedstemcolor setrgbcolor [] 0 setdash xmindev stemstart moveto xmaxdev stemstart lineto stroke [2 2] 0 setdash xmindev stemwidth stemstart add moveto xmaxdev stemwidth stemstart add lineto stroke } if } def /t1bottomzone { t1drawzones 1 eq { /bottom exch scale mul def /top exch scale mul def t1bottomzonescale t1dumpstdlinewidth mul setlinewidth t1bottomzonecolor setrgbcolor [] 0 setdash xmindev bottom moveto xmaxdev bottom lineto stroke [2 2] 0 setdash xmindev top moveto xmaxdev top lineto stroke } if } def /t1topzone { t1drawzones 1 eq { /bottom exch scale mul def /top exch scale mul def t1topzonescale t1dumpstdlinewidth mul setlinewidth t1topzonecolor setrgbcolor [2 2] 0 setdash xmindev bottom moveto xmaxdev bottom lineto stroke [] 0 setdash xmindev top moveto xmaxdev top lineto stroke } if } def end % Next follows drawing code from charstring commands: T1LibDict begin gsave 15.000001 t1SetupSize t1PreparePage -0.329987 0.000000 t1bottomzone 10.244583 10.574570 t1topzone 6.464737 6.719727 t1topzone 9.989594 10.154587 t1topzone -3.089874 -2.909882 t1bottomzone -0.164993 0.374985 t1hstem 0.000000 1.000000 t1alignedhstem 2.414902 0.299988 t1hstem 2.000000 1.000000 t1alignedhstem 5.999756 0.464981 t1hstem 5.000000 1.000000 t1alignedhstem 8.924637 0.299988 t1hstem 9.000000 1.000000 t1alignedhstem 1.559937 1.034958 t1vstem 2.000000 1.000000 t1alignedvstem 4.604813 0.374985 t1vstem 4.000000 1.000000 t1alignedvstem 0.284988 0.000000 0.284988 0.000000 t1sbw 2.309906 5.999756 t1srmoveto 0.000000 -0.112495 t1sprolongate 2.144913 0.000000 t1srlineto 0.112495 0.000000 t1sprolongate 0.000000 0.112495 t1sprolongate 0.000000 0.464981 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate -2.144913 0.000000 t1srlineto -0.000000 -0.112495 t1sprolongate 0.112495 -0.000000 t1sprolongate 0.000000 2.759888 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate -0.374985 0.000000 t1srlineto -0.111132 0.000000 t1sprolongate -0.001355 -0.111124 t1sprolongate -0.014942 -1.225209 -0.444926 -1.502841 -1.367155 -0.055802 t1srrcurveto -0.107908 -0.004404 t1sprolongate 0.000000 -0.107997 t1sprolongate 0.000000 -0.329987 t1srlineto 0.000000 -0.112495 t1sprolongate 0.112495 0.000000 t1sprolongate 1.274948 0.000000 t1srlineto -0.000000 0.112495 t1sprolongate -0.112495 -0.000000 t1sprolongate 0.000000 -4.139832 t1srlineto 0.000000 -1.938169 1.481412 -0.199244 0.566005 0.000000 t1srrcurveto 1.163073 0.000000 0.434362 1.158258 0.000000 0.979156 t1srrcurveto 0.000000 0.854965 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate -0.374985 0.000000 t1srlineto -0.112495 0.000000 t1sprolongate 0.000000 -0.112495 t1sprolongate 0.000000 -0.824966 t1srlineto 0.000000 -1.086171 -0.432363 -0.481265 -0.460100 0.000000 t1srrcurveto -0.872319 0.000000 -0.020145 1.203144 0.000000 0.304295 t1srrcurveto 0.000000 4.169830 t1srlineto -0.112495 0.000000 t1sprolongate t1sclosepath -0.112495 0.112495 t1srmoveto -0.000000 -0.112495 t1sprolongate 0.000000 -4.169830 t1srlineto 0.000000 -0.205685 -0.020145 -1.526745 1.137599 0.000000 t1srrcurveto 0.649854 0.000000 0.467600 0.658688 0.000000 1.133739 t1srrcurveto 0.000000 0.824966 t1srlineto -0.112495 -0.000000 t1sprolongate -0.000000 -0.112495 t1sprolongate 0.374985 0.000000 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate 0.000000 -0.854965 t1srlineto 0.000000 -0.940766 -0.405604 -0.971656 -0.966840 0.000000 t1srrcurveto -0.513951 0.000000 -1.308475 0.160742 0.000000 1.751680 t1srrcurveto 0.000000 4.139832 t1srlineto -0.000000 0.112495 t1sprolongate -0.112495 -0.000000 t1sprolongate -1.274948 0.000000 t1srlineto 0.000000 -0.112495 t1sprolongate 0.112495 0.000000 t1sprolongate 0.000000 0.329987 t1srlineto -0.112495 -0.000000 t1sprolongate 0.004588 -0.112402 t1sprolongate 1.572725 0.064193 0.455038 1.707028 0.015057 1.234691 t1srrcurveto -0.112487 0.001372 t1sprolongate -0.000000 -0.112495 t1sprolongate 0.374985 0.000000 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate 0.000000 -2.759888 t1srlineto -0.000000 -0.112495 t1sprolongate 0.112495 -0.000000 t1sprolongate 2.144913 0.000000 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate 0.000000 -0.464981 t1srlineto 0.112495 -0.000000 t1sprolongate -0.000000 0.112495 t1sprolongate -2.144913 0.000000 t1srlineto -0.112495 -0.000000 t1sprolongate t1sclosepath 0.112495 -4.282326 t1srmoveto t1FinishPage 0.284988 0.000000 0.284988 0.000000 t1sbw 2.309906 5.999756 t1rmoveto 2.144913 0.000000 t1rlineto 0.000000 0.464981 t1rlineto -2.144913 0.000000 t1rlineto 0.000000 2.759888 t1rlineto -0.374985 0.000000 t1rlineto -0.014999 -1.229950 -0.449982 -1.604935 -1.469940 -0.059998 t1rrcurveto 0.000000 -0.329987 t1rlineto 1.274948 0.000000 t1rlineto 0.000000 -4.139832 t1rlineto 0.000000 -1.844925 1.394943 -0.179993 0.539978 0.000000 t1rrcurveto 1.064957 0.000000 0.419983 1.064957 0.000000 0.959961 t1rrcurveto 0.000000 0.854965 t1rlineto -0.374985 0.000000 t1rlineto 0.000000 -0.824966 t1rlineto 0.000000 -1.109955 -0.449982 -0.569977 -0.554977 0.000000 t1rrcurveto -1.004959 0.000000 0.000000 1.364944 0.000000 0.254990 t1rrcurveto t1closepath t1FinishPage grestore end t1lib-5.1.2/doc/t1dump/t1dump_t_1.pdf0000644000175000001440000000337510733501626015723 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœÝX9®1Íû>å}91"¢AHHt@Äõ©òZ®Þ†ô×F~ó^¹¼ÔâQR …ÿÛçkßþlZüÚ´MÒ‡(Lò2j'öXe¤IFh㥶^X]ZµïÛøµe-sNv  ÄB÷9^Û@B–ÚÑ-¿ÎÑǯ­{1Ýïf¯ãµýüÐkû&ŒÂ¿ïp˜?6'þnÃîXmN€X v£–Ö‰ßÛW8óO Õ ÿªV–3©Ö$éRѪ¢3rìoR^·¨ÎgäLÔ:0·JWˆp悸SŒ25>\¼ui!%¡µ‹G "+&¤£K+‡ì.5}2'Ú¹ Ž_Ê?/¬ƒ_Œ3U6æ,S¸Û,Æ$Úä \ÀªeØôž²®îÕT%˜VÓ§nb¤&eá¸EË1d™ „uRJÚóëÎ9ûs¬éþÉ`E0±žsÐRCvQA&ûk˽nvseî[À VI¾A‡*¶O$€'ê< 8‡¨ógRí SŽí-…ÛìÁ9û泓&¼‘<‘(炯¥S÷Ƀs¦*£9_#‚cÔ¶—YAÆÖX.¼€È—JaFÇ8ˆc\nÃ`×btÒU†Û \+- âm\çÕ Ãöh«áó6†“jÜõh ܇7),¬cÎ[9¸:.êÕö¹_Œ‰Z {µÎÈ1Êš+?øÅ8D¥TI2‹í†M–ÇrŽëò.Èà…k·XÛXN³ë ¯XÉ‘we¨Z~L!€Õ8Æ9aªÉÕ ÃHnŒ_Î<ï °!ÔâËUq¿—~b­È‰®ädÅ ]OeÅŽ1‰ö&h9gªú–•É0ÂRuÑŠ YU)#¬†ŸGÚÇôH+æñ0‚N2»h, p”>Z“ã~•ІíyZƤE´ #,¡h]ÄÆB驿ªuZˆDI}JÏÓÑóc"9¬¤!=åUÛ+6YÁz™`Ò}J€H(ÅÊŒÜÇ4#w Œ@u—> $XXžÆã‡xCš9¶är˘DKb‡c½ü™…u(mŒ³ÏÃc\r&ÑÒ51 XX¹ïׇ¨HSsácÒ5-ÃðX¡ƒã„c…M¹hÚº=•¥sxà‰Q› “D¸‘ÖB’qŒ™ÏÔ–Zõëv3gƒKúnŽ?oçé÷¤Ñîôû÷ÅA5áØÌœ”u••ªç—gR-fL³dôŽÑ§Ñd]>Z‡j>ϦêáÑz¢%kbæÞ€Wåþ1Æ8Dõ\æ“>ĉ–a„u“78‡ìòs=gÌó^à¼ý¸nÎ.íÇQל ÍÀGþeèC¯í½ß¸ÌiÿúŸ1qÑïýó^6½Êý‘þº’ð°Ø`"B+=®Hð÷:/{K¶'EÛŽfB/,ŽMÖò.f±•±P'x\˜0¥Yγ k㥠k&B[Ç¡jd€ºë}ã>ï‹4›Ó—7[Òÿk¦—7ãŠM–Ç̇¥}é„-Ýä|_Ôáò¼¨¹AèÔpŠ$ÖÜV‰\þŽŸÇÉçítw¯ôendstream endobj 5 0 obj 1153 endobj 3 0 obj << /Type /Page /MediaBox [0 0 280 400] /Parent 2 0 R /Resources << /ProcSet [/PDF] >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 6 0 obj << /CreationDate (D:20030302172820) /Producer (GNU Ghostscript 5.50) >> endobj xref 0 7 0000000000 65535 f 0000001437 00000 n 0000001378 00000 n 0000001258 00000 n 0000000015 00000 n 0000001238 00000 n 0000001486 00000 n trailer << /Size 7 /Root 1 0 R /Info 6 0 R >> startxref 1573 %%EOF t1lib-5.1.2/doc/t1dump/t1dump_t_2.eps0000644000175000001440000005265010733501626015742 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%Creator: t1lib (edited manually by RMz, 2003-02-08) %%Title: Type1Char Character Dump %%Pages: 1 %%PageOrder: Ascend %%BoundingBox: 0 0 280 400 %%DocumentPaperSizes: a4 %%EndComments %! /T1LibDict 100 dict def T1LibDict begin % Setup the size from the type1 module /t1SetupSize { /size exch def } def % Prepare the page. Compute scales and fill the charspace unit square % background /t1PreparePage { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Start of Customizable Section % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Setup a standard linewidth /t1dumpstdlinewidth 1.0 def % Setup a scale for drawing direction arrows /arrowscale 3.0 def % Should we draw the device pixel grid? (1=yes, otherwise no) /t1drawgrid 0 def % Should we draw stems? (1=yes, otherwise no) /t1drawstems 0 def % Should we draw alignment zones? (1=yes, otherwise no) /t1drawzones 0 def % Should we fill the charspace unit square? (1=yes, otherwise no) /t1fillunitsquare 0 def % Should we fill the device page? (1=yes, otherwise no) /t1fillpage 0 def % Should we show path segment On-Curve points? (1=yes, otherwise no) /t1showoncurvepoints 0 def % Should we show path segment Off Curve points? (1=yes, otherwise no) /t1showoffcurvepoints 0 def % Should we show Bezier tangets and their defining points? (1=yes, otherwise no) /t1showbeziertangents 0 def % Define a few colors /t1linecolor { 0.0 0.0 0.0 } def /t1hlinecolor { 1.0 0.0 0.0 } def /t1slinecolor { 1.0 1.0 1.0 } def /t1movecolor { 0.0 0.0 0.0 } def /t1hmovecolor { 0.0 0.0 0.0 } def /t1smovecolor { 1.0 1.0 1.0 } def /t1curvecolor { 0.0 0.0 0.0 } def /t1hcurvecolor { 1.0 0.0 0.0 } def /t1scurvecolor { 1.0 1.0 1.0 } def /t1sprolongatecolor { 0.0 0.0 0.0 } def /t1stemcolor { 0.0 0.0 1.0 } def /t1alignedstemcolor { 1.0 0.0 1.0 } def /t1bottomzonecolor { 1.0 1.0 0.0 } def /t1topzonecolor { 1.0 1.0 0.0 } def /t1arrowcolor { 0.0 0.0 0.0 } def /t1harrowcolor { 1.0 0.0 0.0 } def /t1sarrowcolor { 0.0 0.0 1.0 } def /t1sbwcolor { 0.0 0.0 0.0 } def /t1closepathcolor { 0.0 0.0 0.0 } def /t1hclosepathcolor { 1.0 0.0 0.0 } def /t1sclosepathcolor { 0.0 0.0 1.0 } def /t1pagecolor { 0.7 0.7 0.7 } def /t1unitsquarecolor { 0.4 0.4 0.4 } def /t1gridcolor { 0.0 0.0 0.0 } def % Line scale relative to the standard linewidth /t1linescale 1.2 def /t1hlinescale 0.4 def /t1slinescale 0.0 def /t1movescale 0.4 def /t1hmovescale 0.4 def /t1smovescale 0.0 def /t1curvescale 1.2 def /t1hcurvescale 0.4 def /t1scurvescale 0.0 def /t1curvetangentscale 0.5 def /t1sprolongatescale 0.4 def /t1stemscale 0.5 def /t1alignedstemscale 0.5 def /t1bottomzonescale 0.5 def /t1topzonescale 0.5 def /t1closepathscale 0.8 def /t1hclosepathscale 0.4 def /t1sclosepathscale 0.4 def /t1gridscale 0.5 def % Line dash specifications (stems and zones are not configurable!) /t1linedash { [2 2] 0 } def /t1hlinedash { [] 0 } def /t1slinedash { [] 0 } def /t1movedash { [2 2] 0 } def /t1hmovedash { [2 2] 0 } def /t1smovedash { [2 2] 0 } def /t1curvedash { [2 2] 0 } def /t1hcurvedash { [] 0 } def /t1scurvedash { [] 0 } def /t1sprolongatedash { [] 0 }def /t1closepathdash { [2 2] 0 } def /t1hclosepathdash { [] 0 } def /t1sclosepathdash { [] 0 } def /t1griddash { [3 3] 0 } def % Define a clipping rectangle ROI (in charspace coordinates) /t1ROIxmin 0 def /t1ROIxmax 300 def /t1ROIymin -50 def /t1ROIymax 650 def % Device values (in bp). These must match the Bounding Box Statement! /xmindev 0 neg def /xmaxdev 280 def /ymindev 0 neg def /ymaxdev 400 def /dxdev 1 def /dydev 1 def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % End of Customizable Section % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % logical pixel values /xminpixel t1ROIxmin 1000.0 div size mul def /xmaxpixel t1ROIxmax 1000.0 div size mul def /yminpixel t1ROIymin 1000.0 div size mul def /ymaxpixel t1ROIymax 1000.0 div size mul def /dxpixel 1 def /dypixel 1 def % compute scales and set minimum scale /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse % Fill device page xmindev ymindev moveto xmaxdev 0 rlineto 0 ymaxdev rlineto xmaxdev neg 0 rlineto 0 ymaxdev neg rlineto closepath clip t1fillpage 1 eq { t1pagecolor setrgbcolor fill } if % reassign device values /xmindev xminpixel scale mul def /xmaxdev xmaxpixel scale mul def /ymindev yminpixel scale mul def /ymaxdev ymaxpixel scale mul def /dxdev dxpixel scale mul def /dydev dypixel scale mul def % translate coordinate system xminpixel scale mul neg yminpixel scale mul neg translate % Fill unit square of charspace coordinate system t1fillunitsquare 1 eq { t1unitsquarecolor setrgbcolor 0 0 moveto size scale mul 0 rlineto 0 size scale mul rlineto size scale mul neg 0 rlineto 0 size scale mul neg rlineto closepath fill } if } def /t1FinishPage { t1drawgrid 1 eq { t1gridcolor setrgbcolor t1gridscale setlinewidth t1griddash setdash % draw grid and align to the point (0,0) 0 dxdev xmaxdev { /xval exch def xval ymindev moveto xval ymaxdev lineto stroke } for 0 dxdev neg xmindev { /xval exch def xval ymindev moveto xval ymaxdev lineto stroke } for 0 dydev ymaxdev { /yval exch def xmindev yval moveto xmaxdev yval lineto stroke } for 0 dydev neg ymindev { /yval exch def xmindev yval moveto xmaxdev yval lineto stroke } for } if } def % Define three arrow routines available for later providing the output with directions /t1arrowhead { /tmpy exch def /tmpx exch def gsave t1arrowcolor setrgbcolor currx curry translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1harrowhead { /tmpy exch def /tmpx exch def gsave t1harrowcolor setrgbcolor currhx currhy translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1sarrowhead { /tmpy exch def /tmpx exch def gsave t1sarrowcolor setrgbcolor currsx currsy translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1rlineto { /y2 exch scale mul def /x2 exch scale mul def t1linecolor setrgbcolor t1linedash setdash t1linescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currx curry moveto x2 y2 rlineto stroke /currx currx x2 add def /curry curry y2 add def } def /t1srlineto { /y2 exch scale mul def /x2 exch scale mul def t1slinecolor setrgbcolor t1slinedash setdash t1slinescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def } def /t1sprolongate { /y2 exch scale mul def /x2 exch scale mul def t1sprolongatecolor setrgbcolor t1sprolongatedash setdash t1sprolongatescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def } def /t1hintedrlineto { /y2 exch scale mul def /x2 exch scale mul def t1hlinecolor setrgbcolor t1hlinedash setdash t1hlinescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currhx currhy moveto x2 y2 rlineto stroke /currhx currhx x2 add def /currhy currhy y2 add def } def /t1rmoveto { /y2 exch scale mul def /x2 exch scale mul def t1movecolor setrgbcolor t1movedash setdash t1movescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currx curry moveto x2 y2 rlineto stroke /currx currx x2 add def /curry curry y2 add def /startx currx def /starty curry def } def /t1srmoveto { /y2 exch scale mul def /x2 exch scale mul def t1smovecolor setrgbcolor t1smovedash setdash t1smovescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def /startsx currsx def /startsy currsy def } def /t1hintedrmoveto { /y2 exch scale mul def /x2 exch scale mul def t1hmovecolor setrgbcolor t1hmovedash setdash t1hmovescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currhx currhy moveto x2 y2 rlineto stroke /currhx currhx x2 add def /currhy currhy y2 add def /starthx currhx def /starthy currhy def } def /t1rrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1curvecolor setrgbcolor t1curvedash setdash t1curvescale t1dumpstdlinewidth mul setlinewidth t1showoffcurvepoints 1 eq { newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currx curry moveto currx x2 add curry y2 add lineto stroke currx x2 x3 add add curry y2 y3 add add moveto currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto stroke } if t1curvedash setdash t1curvescale t1dumpstdlinewidth mul setlinewidth currx curry moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currx currx x2 x3 x4 add add add def /curry curry y2 y3 y4 add add add def } def /t1srrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1scurvecolor setrgbcolor t1scurvedash setdash t1scurvescale t1dumpstdlinewidth mul setlinewidth t1showoffcurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currsx currsy moveto currsx x2 add currsy y2 add lineto stroke currsx x2 x3 add add currsy y2 y3 add add moveto currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto stroke } if t1scurvedash setdash t1scurvescale t1dumpstdlinewidth mul setlinewidth currsx currsy moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currsx currsx x2 x3 x4 add add add def /currsy currsy y2 y3 y4 add add add def } def /t1hintedrrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1hcurvecolor setrgbcolor t1hcurvedash setdash t1hcurvescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currhx currhy moveto currhx x2 add currhy y2 add lineto stroke currhx x2 x3 add add currhy y2 y3 add add moveto currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto stroke } if t1hcurvedash setdash t1hcurvescale t1dumpstdlinewidth mul setlinewidth currhx currhy moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currhx currhx x2 x3 x4 add add add def /currhy currhy y2 y3 y4 add add add def } def /t1sbw { /wy exch scale mul def /wx exch scale mul def /sby exch scale mul def /sbx exch scale mul def t1sbwcolor setrgbcolor newpath sbx sby 3 0 360 arc closepath fill newpath wx wy 3 0 360 arc closepath fill /currx sbx def /curry sby def /currhx sbx def /currhy sby def /currsx sbx def /currsy sby def } def /t1closepath { t1closepathdash setdash t1closepathscale t1dumpstdlinewidth mul setlinewidth t1closepathcolor setrgbcolor currx curry moveto startx starty lineto stroke } def /t1sclosepath { t1sclosepathdash setdash t1sclosepathscale t1dumpstdlinewidth mul setlinewidth t1sclosepathcolor setrgbcolor currsx currsy moveto startsx startsy lineto stroke } def /t1hintedclosepath { t1hclosepathdash setdash t1hclosepathscale t1dumpstdlinewidth mul setlinewidth t1hclosepathcolor setrgbcolor currhx currhy moveto starthx starthy lineto stroke } def /t1vstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1stemscale t1dumpstdlinewidth mul setlinewidth t1stemcolor setrgbcolor [] 0 setdash stemstart ymindev moveto stemstart ymaxdev lineto stroke [2 2] 0 setdash stemwidth stemstart add ymindev moveto stemwidth stemstart add ymaxdev lineto stroke } if } def /t1alignedvstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1alignedstemscale t1dumpstdlinewidth mul setlinewidth t1alignedstemcolor setrgbcolor [] 0 setdash stemstart ymindev moveto stemstart ymaxdev lineto stroke [2 2] 0 setdash stemwidth stemstart add ymindev moveto stemwidth stemstart add ymaxdev lineto stroke } if } def /t1hstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1stemscale t1dumpstdlinewidth mul setlinewidth t1stemcolor setrgbcolor [] 0 setdash xmindev stemstart moveto xmaxdev stemstart lineto stroke [2 2] 0 setdash xmindev stemwidth stemstart add moveto xmaxdev stemwidth stemstart add lineto stroke } if } def /t1alignedhstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1alignedstemscale t1dumpstdlinewidth mul setlinewidth t1alignedstemcolor setrgbcolor [] 0 setdash xmindev stemstart moveto xmaxdev stemstart lineto stroke [2 2] 0 setdash xmindev stemwidth stemstart add moveto xmaxdev stemwidth stemstart add lineto stroke } if } def /t1bottomzone { t1drawzones 1 eq { /bottom exch scale mul def /top exch scale mul def t1bottomzonescale t1dumpstdlinewidth mul setlinewidth t1bottomzonecolor setrgbcolor [] 0 setdash xmindev bottom moveto xmaxdev bottom lineto stroke [2 2] 0 setdash xmindev top moveto xmaxdev top lineto stroke } if } def /t1topzone { t1drawzones 1 eq { /bottom exch scale mul def /top exch scale mul def t1topzonescale t1dumpstdlinewidth mul setlinewidth t1topzonecolor setrgbcolor [2 2] 0 setdash xmindev bottom moveto xmaxdev bottom lineto stroke [] 0 setdash xmindev top moveto xmaxdev top lineto stroke } if } def end % Next follows drawing code from charstring commands: T1LibDict begin gsave 15.000001 t1SetupSize t1PreparePage -0.329987 0.000000 t1bottomzone 10.244583 10.574570 t1topzone 6.464737 6.719727 t1topzone 9.989594 10.154587 t1topzone -3.089874 -2.909882 t1bottomzone -0.164993 0.374985 t1hstem 0.000000 1.000000 t1alignedhstem 2.414902 0.299988 t1hstem 2.000000 1.000000 t1alignedhstem 5.999756 0.464981 t1hstem 5.000000 1.000000 t1alignedhstem 8.924637 0.299988 t1hstem 9.000000 1.000000 t1alignedhstem 1.559937 1.034958 t1vstem 2.000000 1.000000 t1alignedvstem 4.604813 0.374985 t1vstem 4.000000 1.000000 t1alignedvstem 0.284988 0.000000 0.284988 0.000000 t1sbw 2.309906 5.999756 t1srmoveto 0.000000 -0.112495 t1sprolongate 2.144913 0.000000 t1srlineto 0.112495 0.000000 t1sprolongate 0.000000 0.112495 t1sprolongate 0.000000 0.464981 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate -2.144913 0.000000 t1srlineto -0.000000 -0.112495 t1sprolongate 0.112495 -0.000000 t1sprolongate 0.000000 2.759888 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate -0.374985 0.000000 t1srlineto -0.111132 0.000000 t1sprolongate -0.001355 -0.111124 t1sprolongate -0.014942 -1.225209 -0.444926 -1.502841 -1.367155 -0.055802 t1srrcurveto -0.107908 -0.004404 t1sprolongate 0.000000 -0.107997 t1sprolongate 0.000000 -0.329987 t1srlineto 0.000000 -0.112495 t1sprolongate 0.112495 0.000000 t1sprolongate 1.274948 0.000000 t1srlineto -0.000000 0.112495 t1sprolongate -0.112495 -0.000000 t1sprolongate 0.000000 -4.139832 t1srlineto 0.000000 -1.938169 1.481412 -0.199244 0.566005 0.000000 t1srrcurveto 1.163073 0.000000 0.434362 1.158258 0.000000 0.979156 t1srrcurveto 0.000000 0.854965 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate -0.374985 0.000000 t1srlineto -0.112495 0.000000 t1sprolongate 0.000000 -0.112495 t1sprolongate 0.000000 -0.824966 t1srlineto 0.000000 -1.086171 -0.432363 -0.481265 -0.460100 0.000000 t1srrcurveto -0.872319 0.000000 -0.020145 1.203144 0.000000 0.304295 t1srrcurveto 0.000000 4.169830 t1srlineto -0.112495 0.000000 t1sprolongate t1sclosepath -0.112495 0.112495 t1srmoveto -0.000000 -0.112495 t1sprolongate 0.000000 -4.169830 t1srlineto 0.000000 -0.205685 -0.020145 -1.526745 1.137599 0.000000 t1srrcurveto 0.649854 0.000000 0.467600 0.658688 0.000000 1.133739 t1srrcurveto 0.000000 0.824966 t1srlineto -0.112495 -0.000000 t1sprolongate -0.000000 -0.112495 t1sprolongate 0.374985 0.000000 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate 0.000000 -0.854965 t1srlineto 0.000000 -0.940766 -0.405604 -0.971656 -0.966840 0.000000 t1srrcurveto -0.513951 0.000000 -1.308475 0.160742 0.000000 1.751680 t1srrcurveto 0.000000 4.139832 t1srlineto -0.000000 0.112495 t1sprolongate -0.112495 -0.000000 t1sprolongate -1.274948 0.000000 t1srlineto 0.000000 -0.112495 t1sprolongate 0.112495 0.000000 t1sprolongate 0.000000 0.329987 t1srlineto -0.112495 -0.000000 t1sprolongate 0.004588 -0.112402 t1sprolongate 1.572725 0.064193 0.455038 1.707028 0.015057 1.234691 t1srrcurveto -0.112487 0.001372 t1sprolongate -0.000000 -0.112495 t1sprolongate 0.374985 0.000000 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate 0.000000 -2.759888 t1srlineto -0.000000 -0.112495 t1sprolongate 0.112495 -0.000000 t1sprolongate 2.144913 0.000000 t1srlineto 0.000000 0.112495 t1sprolongate -0.112495 0.000000 t1sprolongate 0.000000 -0.464981 t1srlineto 0.112495 -0.000000 t1sprolongate -0.000000 0.112495 t1sprolongate -2.144913 0.000000 t1srlineto -0.112495 -0.000000 t1sprolongate t1sclosepath 0.112495 -4.282326 t1srmoveto t1FinishPage 0.284988 0.000000 0.284988 0.000000 t1sbw 2.309906 5.999756 t1rmoveto 2.144913 0.000000 t1rlineto 0.000000 0.464981 t1rlineto -2.144913 0.000000 t1rlineto 0.000000 2.759888 t1rlineto -0.374985 0.000000 t1rlineto -0.014999 -1.229950 -0.449982 -1.604935 -1.469940 -0.059998 t1rrcurveto 0.000000 -0.329987 t1rlineto 1.274948 0.000000 t1rlineto 0.000000 -4.139832 t1rlineto 0.000000 -1.844925 1.394943 -0.179993 0.539978 0.000000 t1rrcurveto 1.064957 0.000000 0.419983 1.064957 0.000000 0.959961 t1rrcurveto 0.000000 0.854965 t1rlineto -0.374985 0.000000 t1rlineto 0.000000 -0.824966 t1rlineto 0.000000 -1.109955 -0.449982 -0.569977 -0.554977 0.000000 t1rrcurveto -1.004959 0.000000 0.000000 1.364944 0.000000 0.254990 t1rrcurveto t1closepath t1FinishPage grestore end t1lib-5.1.2/doc/t1dump/t1dump_t_2.pdf0000644000175000001440000000336210733501626015720 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœÝXÉn1 ½ÏWä ¢ìËô §AHHÌ¿=ÙlOZµ×R¤*Ïo'^S£­2øÓŸ×ñ÷°ê÷a}Ñ1eåJÔÙuMħ]qʺ¨­ÊÛÆ°¦Ëûú<ªÕµ?‘Œ¢a¬Çç1‘Tµ I .ò=Æú<†“1ìîä9Îã×ç>›z9¾+gðÿpèÏcê§­oAo¶Úõçøv˜û»öEPÿú•+:”û+ÜÍ0v“Áu Œ{ n)Cv\5‡g=¶¢ÅÍð+d±9.8Ä{¶w‡Èi(inÎeä¦{l/e”½Œ•X`<ð+cM „l±}®U—Ä/@È»!Òt lÙÉXÂÿ‹]\JaäaÀ-ÊTu1ü[bÈrº8H±bŒö<¥ì:rÍ-…áŸN^%—›—’Õ2Ü$],Þ™¿oád7Äeב0uÌ ܺayb×BìmxˆJa‹, ”=#z!+E$võ\OÛ•²ëˆ5h—¶)*D„»Œp¢ÕÁìSTÊ»¢šØbTbTgÔÕ@ͳXp£‚¬ÓÆ`MÄ8Ís~”ÜKÎAòUÏVAaµC¼¯Û¾¹iØ5ë-üY%d” 6{¾ + ÆCâ¬YY¸ ÏÁËØÓ!C¶…{ºFYëTÓ!#lcîg:;¶X›ž †¤ST¡Ç õùöÐX7¯qì®KÏ?¿ê5©¤Zó\ׂÉ_›‘ʹÉ3){­7eÕ×—7›"yނ;¡Þu(Ù0ŠÊ£ ùj“dR¶Øã:îæ"0Â2%Ù« ͧ¼F\îkꮆE¼èd‹®a"K0¸)f¯s s=ÂäÖ"°k!»$2š$xFX.CSÎD#!3å®Ñ‰—î^6–3Ŷvd”¦“c‹•|Ô6KÐËÄñÝ⬊cM«âÀ@ ôGËD’‡cYt)ä×ZÒ¢(±k"Û6&d„Mb^b£Ù8ÆšDÈ®5àŠ< ³é囿À€…mǹý´)d„Mÿ´@Ȩ½dL:p 8,FN!ƒiÇTºžGr;Cۣܿù·xþíæ±Fÿ›Yú¾GýûªÞkÕ8Ó7|Á‡E‚]^¥ZZ„s…’íåÜ·Öý¦5úÙœ-cIl±ØëN`DWÅ&Yàuçð`ÊÝ#d]sL_³9¦cXäü=rͯú– ÷Řçzì{’1mÙòÎaîc'{%ql±"V p–w×VþžÇÖÔÝ–lèn‰ Œe)¸EQ¼Æµ‘»àø>O¾ÿ"èJSendstream endobj 5 0 obj 1142 endobj 3 0 obj << /Type /Page /MediaBox [0 0 280 400] /Parent 2 0 R /Resources << /ProcSet [/PDF] >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 6 0 obj << /CreationDate (D:20030302172824) /Producer (GNU Ghostscript 5.50) >> endobj xref 0 7 0000000000 65535 f 0000001426 00000 n 0000001367 00000 n 0000001247 00000 n 0000000015 00000 n 0000001227 00000 n 0000001475 00000 n trailer << /Size 7 /Root 1 0 R /Info 6 0 R >> startxref 1562 %%EOF t1lib-5.1.2/doc/t1dump/parallelpath_sk.sk0000644000175000001440000000336410733501626016756 0ustar rmzusers##Sketch 1 2 document() layout('A4',0) layer('Ebene 1',1,1,0,0,(0,0,0)) eps((11.0594,95.5815),'parallelpath.eps') fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('A',(48.6889,127.34)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt("A'",(108.399,98.9939)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('B',(117.18,293.277)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('C',(306.795,501.208)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('D',(572.904,541.071)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt("D'",(582.6,485.048)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt("C'",(348.812,434.412)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt("B'",(177.512,248.028)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('P1',(82.704,211.398)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('P2',(204.094,394.016)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('P3',(432.847,524.91)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('P4',(146.899,308.758)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('P5',(321.878,461.346)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('P6',(256.159,376.234)) lw(1) ld((4, 4)) b() bs(130.394,294.803,0) bs(130.394,136.063,0) bs(65.1969,136.063,0) lw(1) ld((4, 4)) b() bs(68.0315,136.063,0) bs(113.386,116.22,0) bs(113.386,136.063,0) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt('w/2',(74.8713,115.976)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt("P6'",(283.465,331.654)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt("A''",(14.1732,138.898)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt("B''",(79.3701,334.488)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt("C''",(274.961,549.921)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt("D''",(561.26,581.102)) fp((0,0,0)) le() lw(1) Fn('Helvetica') txt("P6''",(198.425,428.031)) guidelayer('Hilfslinien',1,0,0,1,(0,0,1)) grid((0,0,2.83465,2.83465),1,(0,0,1),'Gitter') t1lib-5.1.2/doc/t1dump/parallelpath.eps0000644000175000001440000001642010733501626016430 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%Creator: (Created manually by RMz, 2003-01-15. Illustration of t1lib parallel path construction) %%Title: Parallel Path Construction %%Pages: 1 %%PageOrder: Ascend %%BoundingBox: 0 0 600 500 %%EndComments % % 3. gsave /xa 100 def /ya 100 def /xb 100 def /yb 400 def /xc 500 def /yc 750 def /xd 500 def /yd 100 def % 4. /xa 100 def /ya 300 def /xb 100 def /y5 400 def /xc 500 def /yc 300 def /xd 300 def /yd 300 def % 2. /xa 100 def /ya 100 def /xb 100 def /yb 400 def /xc 300 def /yc 550 def /xd 500 def /yd 600 def % 1. /xa 55 def /ya 40 def /xb 120 def /yb 200 def /xc 300 def /yc 400 def /xd 550 def /yd 445 def /TimesRoman findfont 25 scalefont setfont /line1 20 string def /linewidth 100 def % compute distance from Bezier_A to Bezier_B /dista xb xa sub dup mul yb ya sub dup mul add sqrt def % compute distance from Bezier_C to Bezier_D /distd xd xc sub dup mul yd yc sub dup mul add sqrt def /diameter linewidth 2 div def % compute resulting limit values of thick curve at end points /dxa yb ya sub diameter mul dista div def /dya xb xa sub diameter mul dista div neg def /dxd yd yc sub diameter mul distd div def /dyd xd xc sub diameter mul distd div neg def % draw curve as rendered by ghostscript 0.9 0.9 0.9 setrgbcolor xa ya moveto xb yb xc yc xd yd curveto %linewidth 40 div setlinewidth linewidth setlinewidth 0 setlinecap stroke 0.0 0.0 0.0 setrgbcolor xa ya moveto xb yb xc yc xd yd curveto 1 setlinewidth 0 setlinecap [4 4] 0 setdash stroke % reset dash [] 0 setdash % correct right path end points /xar xa dxa add def /yar ya dya add def /xdr xd dxd add def /ydr yd dyd add def % correct left path end points /xal xa dxa sub def /yal ya dya sub def /xdl xd dxd sub def /ydl yd dyd sub def /x1 xa xb add 0.5 mul def /y1 ya yb add 0.5 mul def /x2 xb xc add 0.5 mul def /y2 yb yc add 0.5 mul def /x3 xc xd add 0.5 mul def /y3 yc yd add 0.5 mul def /x4 xa xb 2 mul add xc add 4 div def /y4 ya yb 2 mul add yc add 4 div def /x5 xd xc 2 mul add xb add 4 div def /y5 yd yc 2 mul add yb add 4 div def /x6 xa xb 3 mul add xc 3 mul add xd add 8 div def /y6 ya yb 3 mul add yc 3 mul add yd add 8 div def 0 0 0 setrgbcolor newpath xa ya 4.0 0 360 arc closepath fill newpath xb yb 4.0 0 360 arc closepath fill newpath xc yc 4.0 0 360 arc closepath fill newpath xd yd 4.0 0 360 arc closepath fill 0 0 0 setrgbcolor newpath x1 y1 3.0 0 360 arc closepath fill newpath x2 y2 3.0 0 360 arc closepath fill newpath x3 y3 3.0 0 360 arc closepath fill 0 0 0 setrgbcolor newpath x4 y4 2.0 0 360 arc closepath fill newpath x5 y5 2.0 0 360 arc closepath fill 0 0 0 setrgbcolor newpath x6 y6 4.0 0 360 arc closepath stroke % compute right-side normal vector /nabs diameter x5 x4 sub dup mul y5 y4 sub dup mul add sqrt div def /nxr y5 y4 sub nabs mul def /nyr x4 x5 sub nabs mul def 0 0 0 setrgbcolor newpath x6 nxr add y6 nyr add 4.0 0 360 arc closepath stroke newpath x6 nxr sub y6 nyr sub 4.0 0 360 arc closepath stroke % calculate location and direction vectors of lines to intersect /bloc1x 4 nxr x6 add mul xar 2 mul sub xdr add 3 div def /bloc1y 4 nyr y6 add mul yar 2 mul sub ydr add 3 div def /bdir1x xc xd add xa sub xb sub def /bdir1y yc yd add ya sub yb sub def /bloc2x xar def /bloc2y yar def /bdir2x xb xa sub def /bdir2y yb ya sub def % calculate determinant and inverse /bdet bdir2x bdir1y mul bdir2y bdir1x mul sub def %bdet 0.0 eq bdet abs 0.001 le { /xbr xb nxr add def /ybr yb nyr add def /bnu 0.0 def /bmu 0.0 def } { /binvdet 1 bdet div def % calculate inverse of dir matrix /binvdir2x bdir1y binvdet mul def /binvdir2y bdir2y binvdet mul neg def /binvdir1x bdir1x binvdet mul neg def /binvdir1y bdir2x binvdet mul def % calculate mu and nu value (nu actually is not required) /bmu binvdir2x bloc1x bloc2x sub mul binvdir1x bloc1y bloc2y sub mul add def /bnu binvdir2y bloc1x bloc2x sub mul binvdir1y bloc1y bloc2y sub mul add def /xbr bloc2x bmu bdir2x mul add def /ybr bloc2y bmu bdir2y mul add def } ifelse % calculate location and direction vectors of lines to intersect /cloc1x 4 nxr x6 add mul xar add xdr 2 mul sub 3 div def /cloc1y 4 nyr y6 add mul yar add ydr 2 mul sub 3 div def /cdir1x xc xd add xa sub xb sub def /cdir1y yc yd add ya sub yb sub def /cloc2x xdr def /cloc2y ydr def /cdir2x xc xd sub def /cdir2y yc yd sub def % calculate determinant and inverse /cdet cdir2x cdir1y mul cdir2y cdir1x mul sub def %cdet 0.0 eq cdet abs 0.001 le { % curve is just a straight line /xcr xc nxr add def /ycr yc nyr add def /cmu 0.0 def } { /cinvdet 1 cdet div def % calculate inverse of dir matrix /cinvdir2x cdir1y cinvdet mul def /cinvdir2y cdir2y cinvdet mul neg def /cinvdir1x cdir1x cinvdet mul neg def /cinvdir1y cdir2x cinvdet mul def % calculate mu and nu value (mu actually is not required) /cmu cinvdir2x cloc1x cloc2x sub mul cinvdir1x cloc1y cloc2y sub mul add def /cnu cinvdir2y cloc1x cloc2x sub mul cinvdir1y cloc1y cloc2y sub mul add def /xcr cloc2x cmu cdir2x mul add def /ycr cloc2y cmu cdir2y mul add def } ifelse % Analyse coefficients and decide how to compute displacements bmu 0.1 le { /xbr 8 nxr x6 add mul xar sub xdr sub 3 div xcr sub def /ybr 8 nyr y6 add mul yar sub ydr sub 3 div ycr sub def } if cmu 0.1 le { /xcr 8 nxr x6 add mul xar sub xdr sub 3 div xbr sub def /ycr 8 nyr y6 add mul yar sub ydr sub 3 div ybr sub def } if % define delta values /dxb xbr xb sub def /dyb ybr yb sub def /dxc xcr xc sub def /dyc ycr yc sub def 0.5 setlinewidth % show tangent at t=0.5 and their shifted counterparts [32 32] 0 setdash x4 y4 moveto x5 y5 lineto stroke x4 nxr add y4 nyr add moveto x5 nxr add y5 nyr add lineto x4 nxr sub y4 nyr sub moveto x5 nxr sub y5 nyr sub lineto stroke [] 0 setdash 0 0 0 setrgbcolor 1 setlinewidth % stroke right curve xar yar moveto xb dxb add yb dyb add xc dxc add yc dyc add xdr ydr curveto stroke % stroke left curve xal yal moveto xb dxb sub yb dyb sub xc dxc sub yc dyc sub xdl ydl curveto stroke %0.2 0.5 0.8 setrgbcolor %newpath bloc2x bloc2y 5.0 0 360 arc closepath fill %bloc2x 10 bdir2x mul sub bloc2y 10 bdir2y mul sub moveto %bloc2x 10 bdir2x mul add bloc2y 10 bdir2y mul add lineto stroke %0.5 0.5 0.5 setrgbcolor %newpath bloc1x bloc1y 5.0 0 360 arc closepath fill %bloc1x 10 bdir1x mul sub bloc1y 10 bdir1y mul sub moveto %bloc1x 10 bdir1x mul add bloc1y 10 bdir1y mul add lineto stroke % draw tangents 0 0 0 setrgbcolor %1 setlinewidth %[5 5] 0 setdash 0.5 setlinewidth [4 4] 0 setdash xa ya moveto xb yb lineto stroke xd yd moveto xc yc lineto stroke [] 0 setdash xar yar moveto xb dxb add yb dyb add lineto stroke xdr ydr moveto xc dxc add yc dyc add lineto stroke xal yal moveto xb dxb sub yb dyb sub lineto stroke xdl ydl moveto xc dxc sub yc dyc sub lineto stroke % draw auxiliary lines [8 8] 0 setdash xb yb moveto xc yc lineto stroke [16 16] 0 setdash x1 y1 moveto x2 y2 lineto stroke x2 y2 moveto x3 y3 lineto stroke % draw resulting points 0 0 0 setrgbcolor newpath xar yar 4.0 0 360 arc closepath fill newpath xb dxb add yb dyb add 4.0 0 360 arc closepath fill newpath xc dxc add yc dyc add 4.0 0 360 arc closepath fill newpath xdr ydr 4.0 0 360 arc closepath fill newpath xal yal 4.0 0 360 arc closepath fill newpath xb dxb sub yb dyb sub 4.0 0 360 arc closepath fill newpath xc dxc sub yc dyc sub 4.0 0 360 arc closepath fill newpath xdl ydl 4.0 0 360 arc closepath fill grestore t1lib-5.1.2/doc/t1dump/parallelpath_sk.eps0000644000175000001440000004072510733501626017132 0ustar rmzusers%!PS-Adobe-3.0 EPSF-3.0 %%For: Rainer Menzner %%CreationDate: Sun Feb 9 17:57:06 2003 %%Title: parallelpath_sk.eps %%Creator: Sketch 0.6.8 %%Pages: 1 %%BoundingBox: 8 92 614 598 %%Extensions: CMYK %%DocumentSuppliedResources: (atend) %%DocumentNeededResources: font Helvetica %%EndComments %%BeginProlog %%BeginResource: procset Linux-Sketch-Procset 1.0 2 /SketchDict 100 dict def SketchDict begin /bd { bind def } bind def /x { exch } bd /xd { exch def } bd /PI 3.14159265358979323846264338327 def /radgrad { 180 mul PI div } bd /skstartmatrix matrix currentmatrix def /tmpmat matrix def /ISOLatin1Encoding dup where { pop pop } { [/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /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 } ifelse /arct dup where {pop pop} { /arct {arcto pop pop pop pop} bd } ifelse /size 0 def /fontname 0 def /newfont 0 def /sf { /size xd /fontname xd fontname findfont dup /Encoding get StandardEncoding eq { dup length dict /newfont xd { 1 index /FID ne { newfont 3 1 roll put } { pop pop } ifelse } forall newfont /Encoding ISOLatin1Encoding put fontname newfont definefont } if size scalefont setfont } bd /pusht {matrix currentmatrix} bd /popt {setmatrix} bd /pushc {gsave} bd /popc {grestore} bd /rgb {setrgbcolor} bd /w { setlinewidth } bd /j { setlinejoin } bd /J { setlinecap } bd /d { setdash } bd /F { eofill } bd /f { closepath F } bd /S { pusht skstartmatrix setmatrix stroke popt } bd /s { closepath S } bd /m { moveto } bd /l { lineto } bd /c { curveto } bd /txt { /tmpmat tmpmat currentmatrix def dup type /arraytype eq {concat} {translate} ifelse 0 0 m tmpmat } bd /T {txt x show popt} bd /P {txt x true charpath popt} bd /TP {txt x dup show 0 0 m true charpath popt} bd /C {newpath 0 360 arc} bd /R { 2 copy m x 2 index l x 2 index x l l closepath } bd /ellipse { dup type /arraytype eq { pusht x concat 0 0 1.0 C popt } { pusht 5 1 roll 4 -1 roll concat newpath dup 2 eq { 0 0 m } if 3 1 roll radgrad x radgrad x 0 0 1 5 -2 roll arc 0 ne { closepath } if popt } ifelse } bd /radius1 0 def /radius2 0 def /factor 0 def /rect { dup type /arraytype eq { pusht x concat 0 0 m 1 0 l 1 1 l 0 1 l closepath popt } { /radius2 xd /radius1 xd pusht x concat radius1 radius2 div 1 scale 0 radius2 m 0 1 radius2 1 radius2 arct radius2 radius1 div dup 1 1 index 0 radius2 arct 0 0 0 radius2 arct 0 0 0 1 radius2 arct closepath popt } ifelse } bd /buf 0 def /width 0 def /height 0 def /skcimg { /tmpmat tmpmat currentmatrix def { concat } if /height xd /width xd /buf width 3 mul string def width height scale width height 8 [width 0 0 height neg 0 height] { currentfile buf readhexstring pop } bind false 3 colorimage tmpmat setmatrix } bd /skgimg { /tmpmat tmpmat currentmatrix def { concat } if /height xd /width xd /buf width string def width height scale width height 8 [width 0 0 height neg 0 height] { currentfile buf readhexstring pop } bind image tmpmat setmatrix } bd /rclip { 4 2 roll m dup 0 x rlineto x 0 rlineto neg 0 x rlineto closepath clip } bd /skeps { 10 dict begin /sk_state save def concat 3 index neg 3 index neg translate rclip 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [ ] 0 setdash newpath /sk_dict_count countdictstack def /sk_count count 1 sub def userdict begin /showpage { } def /languagelevel where { pop languagelevel 1 ne { false setstrokeadjust false setoverprint } if } if } bd /skepsend { count sk_count sub { pop } repeat countdictstack sk_dict_count sub { end } repeat sk_state restore end } bd /gradidx 0 def /gradient { 3 mul array /gradidx 0 def } bd /$ { 3 index gradidx 5 -1 roll put 2 index gradidx 1 add 4 -1 roll put 1 index gradidx 2 add 3 -1 roll put /gradidx gradidx 3 add def } bd /! { 3 { dup dup gradidx dup 3 1 roll 3 sub get put /gradidx gradidx 1 add def } repeat } bd /gradcolor { 3 mul dup 2 add 1 exch % idx 1 idx+2 { 1 index exch % array array i get % array component exch % component array } for 4 1 roll } bd /x0 0 def /y0 0 def /x1 0 def /y1 0 def /left 0 def /right 0 def /top 0 def /bottom 0 def /numcolors 0 def /axial { /y1 xd /x1 xd /y0 xd /x0 xd dup length 3 idiv /numcolors xd pusht exch % ctm array x0 x1 ne y0 y1 ne or { x0 y0 translate [x1 x0 sub y1 y0 sub dup neg 2 index 0 0] concat clippath flattenpath pathbbox /top xd /right xd /bottom xd /left xd newpath 0 gradcolor rgb clippath f 0 1 numcolors 1 sub { dup numcolors div 3 1 roll gradcolor rgb exch bottom right top R f } for } if pop popt } bd /r0 0 def /r1 0 def /dr 0 def /radial { /r1 xd /r0 xd /y0 xd /x0 xd /dr r1 r0 sub def dup length 3 idiv /numcolors xd pusht exch % ctm array r0 r1 ne { x0 y0 translate clippath flattenpath pathbbox /top xd /right xd /bottom xd /left xd newpath dr 0 gt {numcolors 1 sub}{0} ifelse gradcolor rgb clippath f dr 0 gt {numcolors 1 sub -1 0} { 0 1 numcolors 1 sub} ifelse { dup numcolors div dr mul r0 add 3 1 roll gradcolor rgb exch 0 0 3 -1 roll C f } for } if pop popt } bd /max { 2 copy lt {exch} if pop } bd /conical { pusht 5 1 roll 3 1 roll /y0 xd /x0 xd x0 y0 translate radgrad rotate dup length 3 idiv /numcolors xd clippath flattenpath pathbbox newpath 4 { abs 4 1 roll} repeat 3 { max } repeat 2 mul dup scale 0 gradcolor rgb 0 0 1 0 360 arc f 1 1 numcolors 1 sub { dup numcolors div 180 mul 3 1 roll gradcolor rgb exch 0 0 moveto 0 0 1 4 -1 roll dup neg arc closepath f } for pop popt } bd /XStep 0 def /YStep 0 def /imagedata 0 def /components 0 def /tileimage2 { exch 4 2 roll /height xd /width xd mark /components 2 index /PatternType 1 /PaintType 1 /TilingType 1 /BBox [0 0 width height] /XStep width /YStep height /PaintProc { begin XStep YStep 8 matrix imagedata false components colorimage end } counttomark 2 div cvi dup dict begin { def } repeat pop currentdict end dup /imagedata 4 -1 roll width height mul mul string currentfile exch readhexstring pop put exch makepattern setpattern clippath eofill } bd /tileimage1 { concat /components xd /height xd /width xd /imagedata currentfile width height mul components mul string readhexstring pop def clippath flattenpath pathbbox /top xd /right xd /bottom xd /left xd left width div floor width mul bottom height div floor height mul translate top bottom sub height div ceiling cvi { gsave right left sub width div ceiling cvi { width height 8 matrix components 1 eq { { imagedata } image } { imagedata false components colorimage } ifelse width 0 translate } repeat grestore 0 height translate } repeat } bd /makepattern where { pop /tileimage /tileimage2 load def } { /tileimage /tileimage1 load def } ifelse end %%EndResource %%EndProlog %%BeginSetup %%IncludeResource: font Helvetica 10.433 setmiterlimit %%EndSetup %%Page: 1 1 SketchDict begin 0 0 600 500 [1 0 0 1 11.0594 95.5815] skeps %%BeginDocument: /home/rmz/src/t1lib-5.0.0/doc/t1dump/parallelpath.eps %!PS-Adobe-2.0 EPSF-1.2 %%Creator: (Created manually by RMz, 2003-01-15. Illustration of t1lib parallel path construction) %%Title: Parallel Path Construction %%Pages: 1 %%PageOrder: Ascend %%BoundingBox: 0 0 600 500 %%EndComments % % 3. gsave /xa 100 def /ya 100 def /xb 100 def /yb 400 def /xc 500 def /yc 750 def /xd 500 def /yd 100 def % 4. /xa 100 def /ya 300 def /xb 100 def /y5 400 def /xc 500 def /yc 300 def /xd 300 def /yd 300 def % 2. /xa 100 def /ya 100 def /xb 100 def /yb 400 def /xc 300 def /yc 550 def /xd 500 def /yd 600 def % 1. /xa 55 def /ya 40 def /xb 120 def /yb 200 def /xc 300 def /yc 400 def /xd 550 def /yd 445 def /TimesRoman findfont 25 scalefont setfont /line1 20 string def /linewidth 100 def % compute distance from Bezier_A to Bezier_B /dista xb xa sub dup mul yb ya sub dup mul add sqrt def % compute distance from Bezier_C to Bezier_D /distd xd xc sub dup mul yd yc sub dup mul add sqrt def /diameter linewidth 2 div def % compute resulting limit values of thick curve at end points /dxa yb ya sub diameter mul dista div def /dya xb xa sub diameter mul dista div neg def /dxd yd yc sub diameter mul distd div def /dyd xd xc sub diameter mul distd div neg def % draw curve as rendered by ghostscript 0.9 0.9 0.9 setrgbcolor xa ya moveto xb yb xc yc xd yd curveto %linewidth 40 div setlinewidth linewidth setlinewidth 0 setlinecap stroke 0.0 0.0 0.0 setrgbcolor xa ya moveto xb yb xc yc xd yd curveto 1 setlinewidth 0 setlinecap [4 4] 0 setdash stroke % reset dash [] 0 setdash % correct right path end points /xar xa dxa add def /yar ya dya add def /xdr xd dxd add def /ydr yd dyd add def % correct left path end points /xal xa dxa sub def /yal ya dya sub def /xdl xd dxd sub def /ydl yd dyd sub def /x1 xa xb add 0.5 mul def /y1 ya yb add 0.5 mul def /x2 xb xc add 0.5 mul def /y2 yb yc add 0.5 mul def /x3 xc xd add 0.5 mul def /y3 yc yd add 0.5 mul def /x4 xa xb 2 mul add xc add 4 div def /y4 ya yb 2 mul add yc add 4 div def /x5 xd xc 2 mul add xb add 4 div def /y5 yd yc 2 mul add yb add 4 div def /x6 xa xb 3 mul add xc 3 mul add xd add 8 div def /y6 ya yb 3 mul add yc 3 mul add yd add 8 div def 0 0 0 setrgbcolor newpath xa ya 4.0 0 360 arc closepath fill newpath xb yb 4.0 0 360 arc closepath fill newpath xc yc 4.0 0 360 arc closepath fill newpath xd yd 4.0 0 360 arc closepath fill 0 0 0 setrgbcolor newpath x1 y1 3.0 0 360 arc closepath fill newpath x2 y2 3.0 0 360 arc closepath fill newpath x3 y3 3.0 0 360 arc closepath fill 0 0 0 setrgbcolor newpath x4 y4 2.0 0 360 arc closepath fill newpath x5 y5 2.0 0 360 arc closepath fill 0 0 0 setrgbcolor newpath x6 y6 4.0 0 360 arc closepath stroke % compute right-side normal vector /nabs diameter x5 x4 sub dup mul y5 y4 sub dup mul add sqrt div def /nxr y5 y4 sub nabs mul def /nyr x4 x5 sub nabs mul def 0 0 0 setrgbcolor newpath x6 nxr add y6 nyr add 4.0 0 360 arc closepath stroke newpath x6 nxr sub y6 nyr sub 4.0 0 360 arc closepath stroke % calculate location and direction vectors of lines to intersect /bloc1x 4 nxr x6 add mul xar 2 mul sub xdr add 3 div def /bloc1y 4 nyr y6 add mul yar 2 mul sub ydr add 3 div def /bdir1x xc xd add xa sub xb sub def /bdir1y yc yd add ya sub yb sub def /bloc2x xar def /bloc2y yar def /bdir2x xb xa sub def /bdir2y yb ya sub def % calculate determinant and inverse /bdet bdir2x bdir1y mul bdir2y bdir1x mul sub def %bdet 0.0 eq bdet abs 0.001 le { /xbr xb nxr add def /ybr yb nyr add def /bnu 0.0 def /bmu 0.0 def } { /binvdet 1 bdet div def % calculate inverse of dir matrix /binvdir2x bdir1y binvdet mul def /binvdir2y bdir2y binvdet mul neg def /binvdir1x bdir1x binvdet mul neg def /binvdir1y bdir2x binvdet mul def % calculate mu and nu value (nu actually is not required) /bmu binvdir2x bloc1x bloc2x sub mul binvdir1x bloc1y bloc2y sub mul add def /bnu binvdir2y bloc1x bloc2x sub mul binvdir1y bloc1y bloc2y sub mul add def /xbr bloc2x bmu bdir2x mul add def /ybr bloc2y bmu bdir2y mul add def } ifelse % calculate location and direction vectors of lines to intersect /cloc1x 4 nxr x6 add mul xar add xdr 2 mul sub 3 div def /cloc1y 4 nyr y6 add mul yar add ydr 2 mul sub 3 div def /cdir1x xc xd add xa sub xb sub def /cdir1y yc yd add ya sub yb sub def /cloc2x xdr def /cloc2y ydr def /cdir2x xc xd sub def /cdir2y yc yd sub def % calculate determinant and inverse /cdet cdir2x cdir1y mul cdir2y cdir1x mul sub def %cdet 0.0 eq cdet abs 0.001 le { % curve is just a straight line /xcr xc nxr add def /ycr yc nyr add def /cmu 0.0 def } { /cinvdet 1 cdet div def % calculate inverse of dir matrix /cinvdir2x cdir1y cinvdet mul def /cinvdir2y cdir2y cinvdet mul neg def /cinvdir1x cdir1x cinvdet mul neg def /cinvdir1y cdir2x cinvdet mul def % calculate mu and nu value (mu actually is not required) /cmu cinvdir2x cloc1x cloc2x sub mul cinvdir1x cloc1y cloc2y sub mul add def /cnu cinvdir2y cloc1x cloc2x sub mul cinvdir1y cloc1y cloc2y sub mul add def /xcr cloc2x cmu cdir2x mul add def /ycr cloc2y cmu cdir2y mul add def } ifelse % Analyse coefficients and decide how to compute displacements bmu 0.1 le { /xbr 8 nxr x6 add mul xar sub xdr sub 3 div xcr sub def /ybr 8 nyr y6 add mul yar sub ydr sub 3 div ycr sub def } if cmu 0.1 le { /xcr 8 nxr x6 add mul xar sub xdr sub 3 div xbr sub def /ycr 8 nyr y6 add mul yar sub ydr sub 3 div ybr sub def } if % define delta values /dxb xbr xb sub def /dyb ybr yb sub def /dxc xcr xc sub def /dyc ycr yc sub def 0.5 setlinewidth % show tangent at t=0.5 and their shifted counterparts [32 32] 0 setdash x4 y4 moveto x5 y5 lineto stroke x4 nxr add y4 nyr add moveto x5 nxr add y5 nyr add lineto x4 nxr sub y4 nyr sub moveto x5 nxr sub y5 nyr sub lineto stroke [] 0 setdash 0 0 0 setrgbcolor 1 setlinewidth % stroke right curve xar yar moveto xb dxb add yb dyb add xc dxc add yc dyc add xdr ydr curveto stroke % stroke left curve xal yal moveto xb dxb sub yb dyb sub xc dxc sub yc dyc sub xdl ydl curveto stroke %0.2 0.5 0.8 setrgbcolor %newpath bloc2x bloc2y 5.0 0 360 arc closepath fill %bloc2x 10 bdir2x mul sub bloc2y 10 bdir2y mul sub moveto %bloc2x 10 bdir2x mul add bloc2y 10 bdir2y mul add lineto stroke %0.5 0.5 0.5 setrgbcolor %newpath bloc1x bloc1y 5.0 0 360 arc closepath fill %bloc1x 10 bdir1x mul sub bloc1y 10 bdir1y mul sub moveto %bloc1x 10 bdir1x mul add bloc1y 10 bdir1y mul add lineto stroke % draw tangents 0 0 0 setrgbcolor %1 setlinewidth %[5 5] 0 setdash 0.5 setlinewidth [4 4] 0 setdash xa ya moveto xb yb lineto stroke xd yd moveto xc yc lineto stroke [] 0 setdash xar yar moveto xb dxb add yb dyb add lineto stroke xdr ydr moveto xc dxc add yc dyc add lineto stroke xal yal moveto xb dxb sub yb dyb sub lineto stroke xdl ydl moveto xc dxc sub yc dyc sub lineto stroke % draw auxiliary lines [8 8] 0 setdash xb yb moveto xc yc lineto stroke [16 16] 0 setdash x1 y1 moveto x2 y2 lineto stroke x2 y2 moveto x3 y3 lineto stroke % draw resulting points 0 0 0 setrgbcolor newpath xar yar 4.0 0 360 arc closepath fill newpath xb dxb add yb dyb add 4.0 0 360 arc closepath fill newpath xc dxc add yc dyc add 4.0 0 360 arc closepath fill newpath xdr ydr 4.0 0 360 arc closepath fill newpath xal yal 4.0 0 360 arc closepath fill newpath xb dxb sub yb dyb sub 4.0 0 360 arc closepath fill newpath xc dxc sub yc dyc sub 4.0 0 360 arc closepath fill newpath xdl ydl 4.0 0 360 arc closepath fill grestore %%EndDocument skepsend /Helvetica 12 sf (A) 48 127 0 0 0 rgb T (A') 108 98 T (B) 117 293 T (C) 306 501 T (D) 572 541 T (D') 582 485 T (C') 348 434 T (B') 177 248 T (P1) 82 211 T (P2) 204 394 T (P3) 432 524 T (P4) 146 308 T (P5) 321 461 T (P6) 256 376 T newpath 130.394 294.803 m 130.394 136.063 l 65.1969 136.063 l 1 w 0 j 0 J [4 4 ] 0 d S newpath 68.0315 136.063 m 113.386 116.22 l 113.386 136.063 l S (w/2) 74 115 T (P6') 283 331 T (A'') 14 138 T (B'') 79 334 T (C'') 274 549 T (D'') 561 581 T (P6'') 198 428 T %%PageTrailer showpage %%Trailer end %%DocumentSuppliedResources: procset Linux-Sketch-Procset 1.0 2 %%EOF t1lib-5.1.2/doc/t1dump/parallelpath_sk.pdf0000644000175000001440000000502010733501626017101 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ­X=¯eµí÷¯H÷ ¸!‰óY2€¨f˜+½bDuР9HTü}–'Ù‰„ÞOÌÕÁ޽l'Žílg½qüŸþ>ž×_×üý÷"g(™'ÿ&GÙ|¾²#¿ý?Ö?_¿]^Î6ç[öæÇË›ß/ïœ3_©:›Z4‘’­ž±| f™à„eÈu:*’Ò± ý¸>^ Ÿ Áÿ~‹¿þÿžÃ‰29© ¨l² 6×dbéÓ®Ò+¥j±+K"©18žl Ñ j»A?®áÅàL/áŒãq½a?ʶχ]óƇX¦Åu³v°èùààÚðm˜4 …ÉÏŒøÖ6 ƒf ݇%Q€r˜xCJ–ídŸ7NwŒ\GêøÊ…9ql0BkÀ¢‡ÙÅéŽ)©ßÃÍȆK¢å0ñ†\*[Ž>'9q,%,…=«•æ|ì‘ Øv€AÏk°8Y1÷&N êÔ(@9L¼] Ar†"4²ÅUÓB°>ó‰g‘hn¬gE©µYòäÔ²#,zìèâøfC2 Á6œj,/T‚v„3Ž-øÜÏ~æãâtÏ‚° »çÁk¶¸[ð>Z®SÂn³ÁƒÓ=[î°á¦ÆðbHä!6Þ®H¾ŸeÀšÄ¶8¥°g14AůHÄPu½Ó ºâÙ’HBÚl°ÆàÄÈž-:lÐÔ^¨ÄôRŽ8¤B&ªÖ5Þ©Q!''f[‘')4ë#èÔ«SòºžFýâkåÒ’ˆmG˜ô,‘“¢-Å,ØðÓÆðbHÐ@‡ ÔÈ’œeŽÕ’ÔÈÉIÍ¢‰ŽÛft™œE‚‚ÓõN£‚ùmJKÂ×aÒqj ŠYá°†ÆôbH„ሃcû¤ƒ@@)µûR[°è´ÏÅi¸ Ȇ@•lcšD"PÖõNãN5[ÒM"a³Áƒ“›mÅL„švJ³†z1$¦ßŠpÄñÀPõñ …K ¤ng!Žnr"äƒ Å›™N"rÓõNÃr.dc¹I¤aÒ~j('â>á\&B,» ¥¡1¼ÃËpÄ¡Ñ9ä”Gä›9¸É¨ÙF™1œ  É±@p¡/wfËRî:÷º©/:wùňiꇰáw’ñÕþXχzÞñ9¨Oœàò×4aP]×y+óô”þ MÜ/W» …ÆÊR i%=¬UHy_£%>LôgVC-Ð*!0ÿå$HŸîS²w‘l%>›ßŸá?NÅd1ß;xÃîQÂéÕfRÆ)ùÂS‹ôrž’=I)EØq&VÄ”"v…"2ÁäŠnlÞ ´F\0È™9â×}†O_4Âs<çØÎÃÞ>ØïQÿ¯€ó˜Ç6|þ¢°눕¯é¶Ý½êøŸ:y„ùo!¡Ë_×Z³Êš2hë׬uòЯg¯ìOBsõܦÁAI*¾ÏsHC…¨]bn¬Ò¸P.H|KÂn³ÁÊá’ŽÇãDp‡ ·4Ô‹)Q„zØ@WÏu;ðç|T Ÿqgù·d‘X)ÒiØ•UºI¸Ám6XC9¹5䈙¹î6”f õbJÔ¡6ÐÕ)oiú\œŒ‚2A;Ø}â‡ÄLl¥¹ã¶Û2'Ç]}Ðj€Å/#`)®Mwp¥!=ÌO‰¼iþË›‡§‰í2Úb_d\(œ.nG_èõ4¿HÐk\]ŒGPzUµÅA Íd^Ø›ACC½XiG8âèæYB&ã¡kÈìžj†“%fÑQ/’«&‡gæÌ_&aÒahLŸ)zÔ@Hu·1hä¢z1%†—ŠpÆÁ±Õ´ÃçSŸrèJ$S˜H¬òÙixÚЬMN);¢ãИœ€rk€;L8UXN¨DÚÎ(ä=Wê½€?'#ù^m¸I{~RS¯_Zð•”‘ïLp»¾»ã³¼2P:ÑÆ§:îøJ²¼:0ê®_w|\²X.58‰?Ö¥ˆäòüuÏëG‚¨‹^8FìÝ$Ü]Ýý~qøY1U6ƒfîÂ’¨B=l¼É—Ê¿ÐäÛ¥þ<žæÝëõÍÏüÈ7¯¸‚}‘G4Œ×çWß~ýúÇ…®úšyýõ«oÿÃ4Œ‰ÉwLùÊ͹2ýÓ!sñaò{Y†2Z&EùÉŽùÎñÅ›_Eè]gÿÓï½ `¸ôÈf±Ð4I̼§Ž €<„E  <÷„‘DçýRÅõ÷™?¼šçSù&+ã Dæ'¶Ý_$<õöº¤œ(×CBBUkò‘G±ii,P +úÁžP•¾é|éñð‚øxþþ¦o†ŒÌ=ò¬» o^|£~jÂËüiQ7Y|ŠxŠ÷“Æ4­~XOKàè&æÎ”]ûpýù/{öendstream endobj 5 0 obj 1821 endobj 3 0 obj << /Type /Page /MediaBox [0 0 606 506] /Parent 2 0 R /Resources << /ProcSet [/PDF /Text] /Font << /R6 6 0 R >> >> /Contents 4 0 R >> endobj 6 0 obj <> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 7 0 obj << /CreationDate (D:20030302172755) /Producer (GNU Ghostscript 5.50) >> endobj xref 0 8 0000000000 65535 f 0000002204 00000 n 0000002145 00000 n 0000001926 00000 n 0000000015 00000 n 0000001906 00000 n 0000002074 00000 n 0000002253 00000 n trailer << /Size 8 /Root 1 0 R /Info 7 0 R >> startxref 2340 %%EOF t1lib-5.1.2/doc/t1dump/t1dump_B.eps0000644000175000001440000005503610733501626015440 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%Creator: t1lib (edited manually by RMz, 2003-03-01) %%Title: Type1Char Character Dump %%Pages: 1 %%PageOrder: Ascend %%BoundingBox: 0 0 400 280 %%DocumentPaperSizes: a4 %%EndComments %! /T1LibDict 100 dict def T1LibDict begin % Setup the size from the type1 module /t1SetupSize { /size exch def } def % Prepare the page. Compute scales and fill the charspace unit square % background /t1PreparePage { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Start of Customizable Section % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Setup a standard linewidth /t1dumpstdlinewidth 0.6 def % Setup a scale for drawing direction arrows /arrowscale 1.5 def % Should we draw the device pixel grid? (1=yes, otherwise no) /t1drawgrid 0 def % Should we draw stems? (1=yes, otherwise no) /t1drawstems 0 def % Should we draw alignment zones? (1=yes, otherwise no) /t1drawzones 0 def % Should we fill the charspace unit square? (1=yes, otherwise no) /t1fillunitsquare 0 def % Should we fill the device page? (1=yes, otherwise no) /t1fillpage 0 def % Should we show path segment On-Curve points? (1=yes, otherwise no) /t1showoncurvepoints 0 def % Should we show path segment Off Curve points? (1=yes, otherwise no) /t1showoffcurvepoints 0 def % Should we show Bezier tangets and their defining points? (1=yes, otherwise no) /t1showbeziertangents 0 def % Define a few colors /t1linecolor { 0.0 0.0 0.0 } def /t1hlinecolor { 1.0 0.0 0.0 } def /t1slinecolor { 0.0 0.0 0.0 } def /t1movecolor { 1.0 1.0 1.0 } def /t1hmovecolor { 1.0 0.0 0.0 } def /t1smovecolor { 1.0 1.0 1.0 } def /t1curvecolor { 0.0 0.0 0.0 } def /t1hcurvecolor { 1.0 0.0 0.0 } def /t1scurvecolor { 0.0 0.0 0.0 } def /t1sprolongatecolor { 0.0 0.0 0.0 } def /t1stemcolor { 0.0 0.0 1.0 } def /t1alignedstemcolor { 1.0 0.0 1.0 } def /t1bottomzonecolor { 1.0 1.0 0.0 } def /t1topzonecolor { 1.0 1.0 0.0 } def /t1arrowcolor { 0.0 0.0 0.0 } def /t1harrowcolor { 1.0 0.0 0.0 } def /t1sarrowcolor { 0.0 0.0 0.0 } def /t1sbwcolor { 0.0 0.0 0.0 } def /t1closepathcolor { 0.0 0.0 0.0 } def /t1hclosepathcolor { 1.0 0.0 0.0 } def /t1sclosepathcolor { 0.0 0.0 0.0 } def /t1pagecolor { 0.7 0.7 0.7 } def /t1unitsquarecolor { 0.4 0.4 0.4 } def /t1gridcolor { 0.0 0.0 0.0 } def % Line scale relative to the standard linewidth /t1linescale 2.5 def /t1hlinescale 0.4 def /t1slinescale 1.0 def /t1movescale 0.0 def /t1hmovescale 0.0 def /t1smovescale 0.0 def /t1curvescale 2.5 def /t1hcurvescale 0.4 def /t1scurvescale 1.0 def /t1curvetangentscale 0.5 def /t1sprolongatescale 1.0 def /t1stemscale 0.5 def /t1alignedstemscale 0.5 def /t1bottomzonescale 0.5 def /t1topzonescale 0.5 def /t1closepathscale 0.4 def /t1hclosepathscale 0.4 def /t1sclosepathscale 0.4 def /t1gridscale 0.5 def % Line dash specifications (stems and zones are not configurable!) /t1linedash { [2 2] 0 } def /t1hlinedash { [] 0 } def /t1slinedash { [] 0 } def /t1movedash { [2 2] 0 } def /t1hmovedash { [2 2] 0 } def /t1smovedash { [2 2] 0 } def /t1curvedash { [2 2] 0 } def /t1hcurvedash { [] 0 } def /t1scurvedash { [] 0 } def /t1sprolongatedash { [3 3] 0 }def /t1closepathdash { [] 0 } def /t1hclosepathdash { [] 0 } def /t1sclosepathdash { [] 0 } def /t1griddash { [3 3] 0 } def % Define a clipping rectangle ROI (in charspace coordinates) /t1ROIxmin 405 def /t1ROIxmax 505 def /t1ROIymin 320 def /t1ROIymax 340 def % /t1ROIxmin 0 def % /t1ROIxmax 600 def % /t1ROIymin -100 def % /t1ROIymax 800 def % Device values (in bp). These must match the Bounding Box Statement! /xmindev 0 neg def /xmaxdev 400 def /ymindev 0 neg def /ymaxdev 280 def /dxdev 1 def /dydev 1 def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % End of Customizable Section % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % logical pixel values /xminpixel t1ROIxmin 1000.0 div size mul def /xmaxpixel t1ROIxmax 1000.0 div size mul def /yminpixel t1ROIymin 1000.0 div size mul def /ymaxpixel t1ROIymax 1000.0 div size mul def /dxpixel 1 def /dypixel 1 def % compute scales and set minimum scale /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse % Fill device page xmindev ymindev moveto xmaxdev 0 rlineto 0 ymaxdev rlineto xmaxdev neg 0 rlineto 0 ymaxdev neg rlineto closepath clip t1fillpage 1 eq { t1pagecolor setrgbcolor fill } if % reassign device values /xmindev xminpixel scale mul def /xmaxdev xmaxpixel scale mul def /ymindev yminpixel scale mul def /ymaxdev ymaxpixel scale mul def /dxdev dxpixel scale mul def /dydev dypixel scale mul def % translate coordinate system xminpixel scale mul neg yminpixel scale mul neg translate % Fill unit square of charspace coordinate system t1fillunitsquare 1 eq { t1unitsquarecolor setrgbcolor 0 0 moveto size scale mul 0 rlineto 0 size scale mul rlineto size scale mul neg 0 rlineto 0 size scale mul neg rlineto closepath fill } if } def /t1FinishPage { t1drawgrid 1 eq { t1gridcolor setrgbcolor t1gridscale setlinewidth t1griddash setdash % draw grid and align to the point (0,0) 0 dxdev xmaxdev { /xval exch def xval ymindev moveto xval ymaxdev lineto stroke } for 0 dxdev neg xmindev { /xval exch def xval ymindev moveto xval ymaxdev lineto stroke } for 0 dydev ymaxdev { /yval exch def xmindev yval moveto xmaxdev yval lineto stroke } for 0 dydev neg ymindev { /yval exch def xmindev yval moveto xmaxdev yval lineto stroke } for } if } def % Define three arrow routines available for later providing the output with directions /t1arrowhead { /tmpy exch def /tmpx exch def gsave t1arrowcolor setrgbcolor currx curry translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1harrowhead { /tmpy exch def /tmpx exch def gsave t1harrowcolor setrgbcolor currhx currhy translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1sarrowhead { /tmpy exch def /tmpx exch def gsave t1sarrowcolor setrgbcolor currsx currsy translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale t1dumpstdlinewidth neg mul mul rlineto 6 arrowscale t1dumpstdlinewidth mul mul 2 arrowscale t1dumpstdlinewidth mul mul rlineto 6 arrowscale t1dumpstdlinewidth mul mul neg 2 arrowscale t1dumpstdlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1rlineto { /y2 exch scale mul def /x2 exch scale mul def t1linecolor setrgbcolor t1linedash setdash t1linescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currx curry moveto x2 y2 rlineto stroke /currx currx x2 add def /curry curry y2 add def } def /t1srlineto { /y2 exch scale mul def /x2 exch scale mul def t1slinecolor setrgbcolor t1slinedash setdash t1slinescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def } def /t1sprolongate { /y2 exch scale mul def /x2 exch scale mul def t1sprolongatecolor setrgbcolor t1sprolongatedash setdash t1sprolongatescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def } def /t1hintedrlineto { /y2 exch scale mul def /x2 exch scale mul def t1hlinecolor setrgbcolor t1hlinedash setdash t1hlinescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currhx currhy moveto x2 y2 rlineto stroke /currhx currhx x2 add def /currhy currhy y2 add def } def /t1rmoveto { /y2 exch scale mul def /x2 exch scale mul def t1movecolor setrgbcolor t1movedash setdash t1movescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currx curry moveto x2 y2 rlineto stroke /currx currx x2 add def /curry curry y2 add def /startx currx def /starty curry def } def /t1srmoveto { /y2 exch scale mul def /x2 exch scale mul def t1smovecolor setrgbcolor t1smovedash setdash t1smovescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def /startsx currsx def /startsy currsy def } def /t1hintedrmoveto { /y2 exch scale mul def /x2 exch scale mul def t1hmovecolor setrgbcolor t1hmovedash setdash t1hmovescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currhx currhy moveto x2 y2 rlineto stroke /currhx currhx x2 add def /currhy currhy y2 add def /starthx currhx def /starthy currhy def } def /t1rrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1curvecolor setrgbcolor t1curvedash setdash t1curvescale t1dumpstdlinewidth mul setlinewidth t1showoffcurvepoints 1 eq { newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currx curry moveto currx x2 add curry y2 add lineto stroke currx x2 x3 add add curry y2 y3 add add moveto currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto stroke } if t1curvedash setdash t1curvescale t1dumpstdlinewidth mul setlinewidth currx curry moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currx currx x2 x3 x4 add add add def /curry curry y2 y3 y4 add add add def } def /t1srrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1scurvecolor setrgbcolor t1scurvedash setdash t1scurvescale t1dumpstdlinewidth mul setlinewidth t1showoffcurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currsx currsy moveto currsx x2 add currsy y2 add lineto stroke currsx x2 x3 add add currsy y2 y3 add add moveto currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto stroke } if t1scurvedash setdash t1scurvescale t1dumpstdlinewidth mul setlinewidth currsx currsy moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currsx currsx x2 x3 x4 add add add def /currsy currsy y2 y3 y4 add add add def } def /t1hintedrrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1hcurvecolor setrgbcolor t1hcurvedash setdash t1hcurvescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currhx currhy moveto currhx x2 add currhy y2 add lineto stroke currhx x2 x3 add add currhy y2 y3 add add moveto currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto stroke } if t1hcurvedash setdash t1hcurvescale t1dumpstdlinewidth mul setlinewidth currhx currhy moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currhx currhx x2 x3 x4 add add add def /currhy currhy y2 y3 y4 add add add def } def /t1sbw { /wy exch scale mul def /wx exch scale mul def /sby exch scale mul def /sbx exch scale mul def t1sbwcolor setrgbcolor newpath sbx sby 3 0 360 arc closepath fill newpath wx wy 3 0 360 arc closepath fill /currx sbx def /curry sby def /currhx sbx def /currhy sby def /currsx sbx def /currsy sby def } def /t1closepath { t1closepathdash setdash t1closepathscale t1dumpstdlinewidth mul setlinewidth t1closepathcolor setrgbcolor currx curry moveto startx starty lineto stroke } def /t1sclosepath { t1sclosepathdash setdash t1sclosepathscale t1dumpstdlinewidth mul setlinewidth t1sclosepathcolor setrgbcolor currsx currsy moveto startsx startsy lineto stroke } def /t1hintedclosepath { t1hclosepathdash setdash t1hclosepathscale t1dumpstdlinewidth mul setlinewidth t1hclosepathcolor setrgbcolor currhx currhy moveto starthx starthy lineto stroke } def /t1vstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1stemscale t1dumpstdlinewidth mul setlinewidth t1stemcolor setrgbcolor [] 0 setdash stemstart ymindev moveto stemstart ymaxdev lineto stroke [2 2] 0 setdash stemwidth stemstart add ymindev moveto stemwidth stemstart add ymaxdev lineto stroke } if } def /t1alignedvstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1alignedstemscale t1dumpstdlinewidth mul setlinewidth t1alignedstemcolor setrgbcolor [] 0 setdash stemstart ymindev moveto stemstart ymaxdev lineto stroke [2 2] 0 setdash stemwidth stemstart add ymindev moveto stemwidth stemstart add ymaxdev lineto stroke } if } def /t1hstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1stemscale t1dumpstdlinewidth mul setlinewidth t1stemcolor setrgbcolor [] 0 setdash xmindev stemstart moveto xmaxdev stemstart lineto stroke [2 2] 0 setdash xmindev stemwidth stemstart add moveto xmaxdev stemwidth stemstart add lineto stroke } if } def /t1alignedhstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1alignedstemscale t1dumpstdlinewidth mul setlinewidth t1alignedstemcolor setrgbcolor [] 0 setdash xmindev stemstart moveto xmaxdev stemstart lineto stroke [2 2] 0 setdash xmindev stemwidth stemstart add moveto xmaxdev stemwidth stemstart add lineto stroke } if } def /t1bottomzone { t1drawzones 1 eq { /bottom exch scale mul def /top exch scale mul def t1bottomzonescale t1dumpstdlinewidth mul setlinewidth t1bottomzonecolor setrgbcolor [] 0 setdash xmindev bottom moveto xmaxdev bottom lineto stroke [2 2] 0 setdash xmindev top moveto xmaxdev top lineto stroke } if } def /t1topzone { t1drawzones 1 eq { /bottom exch scale mul def /top exch scale mul def t1topzonescale t1dumpstdlinewidth mul setlinewidth t1topzonecolor setrgbcolor [2 2] 0 setdash xmindev bottom moveto xmaxdev bottom lineto stroke [] 0 setdash xmindev top moveto xmaxdev top lineto stroke } if } def end % Next follows drawing code from charstring commands: T1LibDict begin gsave 15.000001 t1SetupSize t1PreparePage -0.329987 0.000000 t1bottomzone 10.244583 10.574570 t1topzone 6.464737 6.719727 t1topzone 9.989594 10.154587 t1topzone -3.089874 -2.909882 t1bottomzone 0.539978 0.000000 0.539978 0.000000 t1sbw 2.789886 5.489777 t1srmoveto 0.112495 -0.000000 t1sprolongate 0.000000 3.689850 t1srlineto 0.000000 0.426294 -0.027113 0.061186 0.649588 0.000000 t1srrcurveto 1.859924 0.000000 t1srlineto 1.370460 0.000000 0.496964 -1.199817 0.000000 -0.757604 t1srrcurveto 0.000000 -0.906489 -0.692951 -1.200926 -1.594456 0.000000 t1srrcurveto -2.174911 0.000000 t1srlineto -0.000000 -0.112495 t1sprolongate t1sclosepath -0.112495 -0.112495 t1srmoveto 0.112495 -0.000000 t1sprolongate 2.174911 0.000000 t1srlineto 1.735409 0.000000 0.776989 1.318972 0.000000 1.013433 t1srrcurveto 0.000000 0.832331 -0.552993 1.350080 -1.539422 0.000000 t1srrcurveto -1.859924 0.000000 t1srlineto -0.760355 0.000000 -0.087111 -0.148805 0.000000 -0.563666 t1srrcurveto 0.000000 -3.689850 t1srlineto -0.000000 -0.112495 t1sprolongate t1sclosepath 2.287407 0.112495 t1srmoveto 1.364944 -0.134995 t1srmoveto 0.021624 -0.110398 t1sarrowhead t1sprolongate 1.486204 0.291112 t1sarrowhead 1.094566 0.991078 0.000000 1.183112 t1srrcurveto 0.000000 1.384597 -1.449269 1.262795 -1.993091 0.000000 t1srrcurveto -5.489777 0.000000 t1srlineto -0.112495 0.000000 t1sprolongate 0.000000 -0.112495 t1sprolongate 0.000000 -0.464981 t1srlineto 0.000000 -0.112495 t1sprolongate 0.112495 0.000000 t1sprolongate 0.359985 0.000000 t1srlineto 1.121659 0.000000 -0.049202 -0.140224 0.000000 -0.452251 t1srrcurveto 0.000000 -7.904678 t1srlineto 0.000000 -0.452251 0.049202 -0.140224 -1.121659 0.000000 t1srrcurveto -0.359985 0.000000 t1srlineto -0.112495 0.000000 t1sprolongate 0.000000 -0.112495 t1sprolongate 0.000000 -0.464981 t1srlineto 0.000000 -0.112495 t1sprolongate 0.112495 0.000000 t1sprolongate 5.879761 0.000000 t1srlineto 2.045333 0.000000 1.412026 1.374159 0.000000 1.483225 t1srrcurveto 0.000000 1.378456 -1.290667 1.158998 -1.704620 0.184283 t1srrcurveto -0.012091 -0.111844 t1sarrowhead t1sprolongate t1sclosepath -0.749328 -0.032142 t1srmoveto 0.737237 -0.079701 t1sprolongate 1.625245 -0.175702 t1sarrowhead 1.169233 -1.090910 0.000000 -1.231438 t1srrcurveto 0.000000 -1.336660 -1.287864 -1.295733 -1.944504 0.000000 t1srrcurveto -5.879761 0.000000 t1srlineto 0.000000 -0.112495 t1sprolongate 0.112495 0.000000 t1sprolongate 0.000000 0.464981 t1srlineto -0.112495 -0.000000 t1sprolongate -0.000000 -0.112495 t1sprolongate 0.359985 0.000000 t1srlineto 1.188247 0.000000 0.109200 0.189762 0.000000 0.627705 t1srrcurveto 0.000000 7.904678 t1srlineto 0.000000 0.627705 -0.109200 0.189762 -1.188247 0.000000 t1srrcurveto -0.359985 0.000000 t1srlineto 0.000000 -0.112495 t1sprolongate 0.112495 0.000000 t1sprolongate 0.000000 0.464981 t1srlineto -0.112495 -0.000000 t1sprolongate -0.000000 -0.112495 t1sprolongate 5.489777 0.000000 t1srlineto 1.906750 0.000000 1.310619 -1.197105 0.000000 -1.225297 t1srrcurveto 0.000000 -1.036798 -0.975350 -0.928844 -1.423677 -0.278865 t1srrcurveto -0.727704 -0.142540 t1sarrowhead t1sprolongate t1sclosepath 0.749328 0.032142 t1srmoveto -0.929962 -4.777306 t1srmoveto -1.874924 0.000000 t1srlineto -0.649588 0.000000 0.027113 0.061186 0.000000 0.426294 t1srrcurveto 0.000000 4.094833 t1srlineto -0.112495 0.000000 t1sprolongate 0.000000 -0.112495 t1sprolongate 2.819885 0.000000 t1srlineto 1.397939 0.000000 0.604479 -1.316665 0.000000 -0.970742 t1srrcurveto 0.000000 -1.013388 -0.739705 -1.169023 -1.472705 0.000000 t1srrcurveto t1sclosepath -0.000000 -0.224991 t1srmoveto 1.617169 0.000000 0.820232 1.290877 0.000000 1.116525 t1srrcurveto 0.000000 1.039176 -0.655469 1.473221 -1.571940 0.000000 t1srrcurveto -2.819885 0.000000 t1srlineto -0.112495 -0.000000 t1sprolongate -0.000000 -0.112495 t1sprolongate 0.000000 -4.094833 t1srlineto 0.000000 -0.563666 0.087111 -0.148805 0.760355 0.000000 t1srrcurveto 1.874924 0.000000 t1srlineto t1sclosepath 0.000000 0.112495 t1srmoveto t1FinishPage 0.539978 0.000000 0.539978 0.000000 t1sbw 2.789886 5.489777 t1rmoveto 0.000000 3.689850 t1rlineto 0.000000 0.494980 0.029999 0.104996 0.704971 0.000000 t1rrcurveto 1.859924 0.000000 t1rlineto 1.454941 0.000000 0.524979 -1.274948 0.000000 -0.794968 t1rrcurveto 0.000000 -0.959961 -0.734970 -1.259949 -1.664932 0.000000 t1rrcurveto t1closepath 1.364944 -0.134995 t1rmoveto 1.454941 0.284988 1.034958 0.959961 0.000000 1.109955 t1rrcurveto 0.000000 1.304947 -1.379944 1.229950 -1.949921 0.000000 t1rrcurveto -5.489777 0.000000 t1rlineto 0.000000 -0.464981 t1rlineto 0.359985 0.000000 t1rlineto 1.154953 0.000000 0.029999 -0.164993 0.000000 -0.539978 t1rrcurveto 0.000000 -7.904678 t1rlineto 0.000000 -0.539978 -0.029999 -0.164993 -1.154953 0.000000 t1rrcurveto -0.359985 0.000000 t1rlineto 0.000000 -0.464981 t1rlineto 5.879761 0.000000 t1rlineto 1.994919 0.000000 1.349945 1.334946 0.000000 1.409943 t1rrcurveto 0.000000 1.304947 -1.229950 1.124954 -1.664932 0.179993 t1rrcurveto t1closepath -0.929962 -4.889801 t1rmoveto -1.874924 0.000000 t1rlineto -0.704971 0.000000 -0.029999 0.104996 0.000000 0.494980 t1rrcurveto 0.000000 4.094833 t1rlineto 2.819885 0.000000 t1rlineto 1.484940 0.000000 0.629974 -1.394943 0.000000 -1.004959 t1rrcurveto 0.000000 -1.064957 -0.779968 -1.229950 -1.544937 0.000000 t1rrcurveto t1closepath t1FinishPage grestore end t1lib-5.1.2/doc/t1dump/t1dump_B.pdf0000644000175000001440000000461510733501626015417 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœåYË®$' Ý÷WÔ4óþ‚¬£,GYu4R¤[‹¬òû9† Tßy,3š‘Z>eó²9ؾZ™Có¿ë÷u>þy˜ãïÇÓ¸h}JZç„Äd•;qVù‚D]äÐ4 ¿ŠM *H¼‘Å<Õ¦#¦Q’ça¹Ú´•4 »a§y¾þ{4Ço/iþÿ'ü×c¹î:ZÒʆÃ$›•3ÇÇã‡.†˜Ç6Ãpü»«²µf(MÖ_ÚdëG©oBÌE{¤¶æU:dR §·Ø‚s—øâ1fc8­UpáÊ<3t>,y«²¹dçcVÆ9â#59FßP¦Y±³#Þ:£R8(Z£(d°c‹µ½„.—Å.˜ðAƒê)ÊóßT6ÏMGO7‡½óö&úq`ÄÆ;TU9µ¿ •åãÙIª¯œhtdW4Ävˆ=¼ö¸±ËÒ+vv$ç˜T4‡Ú)‡€³ÜXc'và5j€§ˆÃ ú˜‚sèE›’ÒaLÐÏËšD|?;PnE™o†¤?dÌQ3kl>¤Û¨YTÞxþ]ØìÖÍkc™ t>Ș¬V.öe­ki£|bÄ« E¸½*X ª.H(×Úá SòõMÞ«­I^é¶Šc­„ÆâŽYÌIXE}Ù lÀý™4ˆ+—5ôCÞÆ Æ’é09eéÈÚ'Þ ˆB“»,cxÅÎŽã¼Á*¼É®î.™b†Oè{÷_ß&í’®|â|‘Æuƒ^WR°i§]ks|×ÎLÙKå …¡,î¼§€©lñ}vÖ+à\GÕïx,ã˜kCÈxâ8·wq¡ÉðýFtÅù‰{’š1&)‹åi )9_²¨HÈ{rAB.‰XDEwÑ”<Þ»qyãn"êùýX5îÉýþõØm ¥91°ÙòÓü>çX51¯NÌÒÉ(+—K |"·œµ•3ÒLØÆàD,AÞpÌí™u'*Ÿ‡ dŠƒ¤…do‹é“ÀìÊ @†ÀžÊÚ9顸˜ رWÄ×Žš¼ Ÿ^ä›Ô¯ÎV1çöKÙÇtoµÅ…_ÖáÖk?(¦Ù¬Ø¬•6*™¿Ý¥>æŒ2 Ö”²­ íE®HÕœ+Scï=VýCª ’¿«#Õ‡¢NßóÂþ¶ÈÄsåC&Ïwö‰çl…çGxqßþôÈß:]>õ=«ðf_ÍݤËÇSæ8$Æ]@Ôr9¸.&ÇÙ&.¯›\ó­Jº+vvÄeä^ VŸ|Ió éPó׈·"ÕàY1¦%Xq>³á*„IH§Jæ *W2L@]XoDƒô†º·q A:3QéLÝUC0èûÞ3÷fú}ý“k£àçÄ¡ò»¨&«ÒœHÔªj±ÜÑÒO¨íƒ‘µ jÎÉ™U®iCEw"{îÐ]l¯*½ø“Õ ½ÀwEòøÿàQ²8P©^± ´l¦R$7Äsi†Ý<)áyÇéwÀ;ð‘­Uò‚I¸%¸<‡õ!pj3¶:ÊΙæUVnßÎÇ~RX¾··’Ôß$o3vš¸¡¢!&‡K‡,ÎbÅÎÒ3>[gqY¹A|È(H/Ï4ùÕ=30áï½íüÄÉªÕØÂj…Þ«Ko@FßõxŸžnAÃPnròtô–F{9ÅMdùµÜÎë½-ÎqY:P†‹K«îììÏBe·­ˆÌ(þïà_eßÙÓÆCù¦Ý Ñ–ž ©C9ó‹A®^Ë+ím>©Ú ÊÖ´LºV,Åo$uÀ%nQº#ó/ˆ§É2!Y±³#ž©‡âA¥N ¾õ¹Wézé.?ÖCތﲂî™==ð8jx–¨6½Säü ›¼ÔeÙ[±³#x70†×µ×ÛÊš r~£/&ÀŸIO¿•T÷,žnzIBµ‘ÀEÂÕMJVв›ÖB#ÌʇT›Ë–Ð >ƒÒMªó_Ô)‹&߈}Á~¢„û¤à䘵zRª ÀRš^È©UÐ|K˵¹+½WðRnͯhð¾ÔýˆrÑÐct¿1«Æ÷?– ;+rPÙòQüBžû‚ñ.äºOÛ•æÜ*Õ¹!sB¼¢‚jágö¬`OU¹»}!=UËTêjˆgæàL•cÂu±äa—WììH*{I‡-Tûnë©yÁ é-÷nøýñ°mendstream endobj 5 0 obj 1809 endobj 3 0 obj << /Type /Page /MediaBox [0 0 400 280] /Parent 2 0 R /Resources << /ProcSet [/PDF] >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 6 0 obj << /CreationDate (D:20030302172803) /Producer (GNU Ghostscript 5.50) >> endobj xref 0 7 0000000000 65535 f 0000002093 00000 n 0000002034 00000 n 0000001914 00000 n 0000000015 00000 n 0000001894 00000 n 0000002142 00000 n trailer << /Size 7 /Root 1 0 R /Info 6 0 R >> startxref 2229 %%EOF t1lib-5.1.2/doc/t1dump/t1dump_o.eps0000644000175000001440000005153510733501626015515 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%Creator: t1lib (edited manually by RMz, 2003-03-01) %%Title: Type1Char Character Dump %%Pages: 1 %%PageOrder: Ascend %%BoundingBox: 0 0 280 400 %%EndComments %! /T1LibDict 100 dict def T1LibDict begin % Setup the size from the type1 module /t1SetupSize { /size exch def } def % Prepare the page. Compute scales and fill the charspace unit square % background /t1PreparePage { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Start of Customizable Section % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Setup a standard linewidth /t1dumpstdlinewidth 1.0 def % Setup a scale for drawing direction arrows /arrowscale 1.2 def % Should we draw the device pixel grid? (1=yes, otherwise no) /t1drawgrid 0 def % Should we draw stems? (1=yes, otherwise no) /t1drawstems 0 def % Should we draw alignment zones? (1=yes, otherwise no) /t1drawzones 0 def % Should we fill the charspace unit square? (1=yes, otherwise no) /t1fillunitsquare 0 def % Should we fill the device page? (1=yes, otherwise no) /t1fillpage 0 def % Should we show path segment On-Curve points? (1=yes, otherwise no) /t1showoncurvepoints 0 def % Should we show path segment Off Curve points? (1=yes, otherwise no) /t1showoffcurvepoints 0 def % Should we show Bezier tangets and their defining points? (1=yes, otherwise no) /t1showbeziertangents 0 def % Define a few colors /t1linecolor { 0.0 0.0 0.0 } def /t1hlinecolor { 1.0 0.0 0.0 } def /t1slinecolor { 1.0 1.0 1.0 } def /t1movecolor { 0.0 0.0 0.0 } def /t1hmovecolor { 1.0 0.0 0.0 } def /t1smovecolor { 0.0 0.0 0.0 } def /t1curvecolor { 0.0 0.0 0.0 } def /t1hcurvecolor { 1.0 0.0 0.0 } def /t1scurvecolor { 0.0 0.0 0.0 } def /t1sprolongatecolor { 1.0 0.0 1.0 } def /t1stemcolor { 0.0 0.0 1.0 } def /t1alignedstemcolor { 1.0 0.0 1.0 } def /t1bottomzonecolor { 1.0 1.0 0.0 } def /t1topzonecolor { 1.0 1.0 0.0 } def /t1arrowcolor { 0.0 0.0 0.0 } def /t1harrowcolor { 1.0 0.0 0.0 } def /t1sarrowcolor { 0.0 0.0 0.0 } def /t1sbwcolor { 0.0 0.0 0.0 } def /t1closepathcolor { 0.0 0.0 0.0 } def /t1hclosepathcolor { 1.0 0.0 0.0 } def /t1sclosepathcolor { 0.0 0.0 1.0 } def /t1pagecolor { 0.7 0.7 0.7 } def /t1unitsquarecolor { 0.4 0.4 0.4 } def /t1gridcolor { 0.0 0.0 0.0 } def % Line scale relative to the standard linewidth /t1linescale 0.4 def /t1hlinescale 0.4 def /t1slinescale 0.4 def /t1movescale 0.1 def /t1hmovescale 0.4 def /t1smovescale 0.1 def /t1curvescale 0.4 def /t1hcurvescale 0.4 def /t1scurvescale 0.4 def /t1curvetangentscale 0.5 def /t1sprolongatescale 0.4 def /t1stemscale 0.5 def /t1alignedstemscale 0.5 def /t1bottomzonescale 0.5 def /t1topzonescale 0.5 def /t1closepathscale 0.4 def /t1hclosepathscale 0.4 def /t1sclosepathscale 0.4 def /t1gridscale 0.5 def % Line dash specifications (stems and zones are not configurable!) /t1linedash { [4 4] 0 } def /t1hlinedash { [] 0 } def /t1slinedash { [] 0 } def /t1movedash { [2 2] 0 } def /t1hmovedash { [2 2] 0 } def /t1smovedash { [2 2] 0 } def /t1curvedash { [4 4] 0 } def /t1hcurvedash { [] 0 } def /t1scurvedash { [] 0 } def /t1sprolongatedash { [1 1] 0 }def /t1closepathdash { [] 0 } def /t1hclosepathdash { [] 0 } def /t1sclosepathdash { [] 0 } def /t1griddash { [3 3] 0 } def % Define a clipping rectangle ROI (in charspace coordinates) /t1ROIxmin 0 def /t1ROIxmax 400 def /t1ROIymin -50 def /t1ROIymax 700 def % Device values (in bp). These must match the Bounding Box Statement! /xmindev 0 neg def /xmaxdev 280 def /ymindev 0 neg def /ymaxdev 400 def /dxdev 1 def /dydev 1 def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % End of Customizable Section % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % logical pixel values /xminpixel t1ROIxmin 1000.0 div size mul def /xmaxpixel t1ROIxmax 1000.0 div size mul def /yminpixel t1ROIymin 1000.0 div size mul def /ymaxpixel t1ROIymax 1000.0 div size mul def /dxpixel 1 def /dypixel 1 def % compute scales and set minimum scale /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse % Fill device page xmindev ymindev moveto xmaxdev 0 rlineto 0 ymaxdev rlineto xmaxdev neg 0 rlineto 0 ymaxdev neg rlineto closepath clip t1fillpage 1 eq { t1pagecolor setrgbcolor fill } if % reassign device values /xmindev xminpixel scale mul def /xmaxdev xmaxpixel scale mul def /ymindev yminpixel scale mul def /ymaxdev ymaxpixel scale mul def /dxdev dxpixel scale mul def /dydev dypixel scale mul def % translate coordinate system xminpixel scale mul neg yminpixel scale mul neg translate % Fill unit square of charspace coordinate system t1fillunitsquare 1 eq { t1unitsquarecolor setrgbcolor 0 0 moveto size scale mul 0 rlineto 0 size scale mul rlineto size scale mul neg 0 rlineto 0 size scale mul neg rlineto closepath fill } if } def /t1FinishPage { t1drawgrid 1 eq { t1gridcolor setrgbcolor t1gridscale setlinewidth t1griddash setdash % draw grid and align to the point (0,0) 0 dxdev xmaxdev { /xval exch def xval ymindev moveto xval ymaxdev lineto stroke } for 0 dxdev neg xmindev { /xval exch def xval ymindev moveto xval ymaxdev lineto stroke } for 0 dydev ymaxdev { /yval exch def xmindev yval moveto xmaxdev yval lineto stroke } for 0 dydev neg ymindev { /yval exch def xmindev yval moveto xmaxdev yval lineto stroke } for } if } def % Define three arrow routines available for later providing the output with directions /t1arrowhead { /tmpy exch def /tmpx exch def gsave t1arrowcolor setrgbcolor currx curry translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale t1dumpstdlinewidth neg mul mul rlineto 6 arrowscale t1dumpstdlinewidth mul mul 2 arrowscale t1dumpstdlinewidth mul mul rlineto 6 arrowscale t1dumpstdlinewidth mul mul neg 2 arrowscale t1dumpstdlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1harrowhead { /tmpy exch def /tmpx exch def gsave t1harrowcolor setrgbcolor currhx currhy translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale currentlinewidth neg mul mul rlineto 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1sarrowhead { /tmpy exch def /tmpx exch def gsave t1sarrowcolor setrgbcolor currsx currsy translate tmpy tmpx atan rotate newpath 0 0 moveto 0 2 arrowscale t1dumpstdlinewidth neg mul mul rlineto 6 arrowscale t1dumpstdlinewidth mul mul 2 arrowscale t1dumpstdlinewidth mul mul rlineto 6 arrowscale t1dumpstdlinewidth mul mul neg 2 arrowscale t1dumpstdlinewidth mul mul rlineto closepath fill grestore tmpx tmpy } def /t1rlineto { /y2 exch scale mul def /x2 exch scale mul def t1linecolor setrgbcolor t1linedash setdash t1linescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currx curry moveto x2 y2 rlineto stroke /currx currx x2 add def /curry curry y2 add def } def /t1srlineto { /y2 exch scale mul def /x2 exch scale mul def t1slinecolor setrgbcolor t1slinedash setdash t1slinescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def } def /t1sprolongate { /y2 exch scale mul def /x2 exch scale mul def t1sprolongatecolor setrgbcolor t1sprolongatedash setdash t1sprolongatescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def } def /t1hintedrlineto { /y2 exch scale mul def /x2 exch scale mul def t1hlinecolor setrgbcolor t1hlinedash setdash t1hlinescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currhx currhy moveto x2 y2 rlineto stroke /currhx currhx x2 add def /currhy currhy y2 add def } def /t1rmoveto { /y2 exch scale mul def /x2 exch scale mul def t1movecolor setrgbcolor t1movedash setdash t1movescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currx curry moveto x2 y2 rlineto stroke /currx currx x2 add def /curry curry y2 add def /startx currx def /starty curry def } def /t1srmoveto { /y2 exch scale mul def /x2 exch scale mul def t1smovecolor setrgbcolor t1smovedash setdash t1smovescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currsx currsy moveto x2 y2 rlineto stroke /currsx currsx x2 add def /currsy currsy y2 add def /startsx currsx def /startsy currsy def } def /t1hintedrmoveto { /y2 exch scale mul def /x2 exch scale mul def t1hmovecolor setrgbcolor t1hmovedash setdash t1hmovescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill } if currhx currhy moveto x2 y2 rlineto stroke /currhx currhx x2 add def /currhy currhy y2 add def /starthx currhx def /starthy currhy def } def /t1rrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1curvecolor setrgbcolor t1curvedash setdash t1curvescale t1dumpstdlinewidth mul setlinewidth t1showoffcurvepoints 1 eq { newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currx curry moveto currx x2 add curry y2 add lineto stroke currx x2 x3 add add curry y2 y3 add add moveto currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto stroke } if t1curvedash setdash t1curvescale t1dumpstdlinewidth mul setlinewidth currx curry moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currx currx x2 x3 x4 add add add def /curry curry y2 y3 y4 add add add def } def /t1srrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1scurvecolor setrgbcolor t1scurvedash setdash t1scurvescale t1dumpstdlinewidth mul setlinewidth t1showoffcurvepoints 1 eq { newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currsx currsy moveto currsx x2 add currsy y2 add lineto stroke currsx x2 x3 add add currsy y2 y3 add add moveto currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto stroke } if t1scurvedash setdash t1scurvescale t1dumpstdlinewidth mul setlinewidth currsx currsy moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currsx currsx x2 x3 x4 add add add def /currsy currsy y2 y3 y4 add add add def } def /t1hintedrrcurveto { /y4 exch scale mul def /x4 exch scale mul def /y3 exch scale mul def /x3 exch scale mul def /y2 exch scale mul def /x2 exch scale mul def t1hcurvecolor setrgbcolor t1hcurvedash setdash t1hcurvescale t1dumpstdlinewidth mul setlinewidth t1showoncurvepoints 1 eq { newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill } if t1showoncurvepoints 1 eq { newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill } if t1showbeziertangents 1 eq { [2 2] 0 setdash t1curvetangentscale currentlinewidth mul setlinewidth currhx currhy moveto currhx x2 add currhy y2 add lineto stroke currhx x2 x3 add add currhy y2 y3 add add moveto currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto stroke } if t1hcurvedash setdash t1hcurvescale t1dumpstdlinewidth mul setlinewidth currhx currhy moveto x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto stroke /currhx currhx x2 x3 x4 add add add def /currhy currhy y2 y3 y4 add add add def } def /t1sbw { /wy exch scale mul def /wx exch scale mul def /sby exch scale mul def /sbx exch scale mul def t1sbwcolor setrgbcolor newpath sbx sby 3 0 360 arc closepath fill newpath wx wy 3 0 360 arc closepath fill /currx sbx def /curry sby def /currhx sbx def /currhy sby def /currsx sbx def /currsy sby def } def /t1closepath { t1closepathdash setdash t1closepathscale t1dumpstdlinewidth mul setlinewidth t1closepathcolor setrgbcolor currx curry moveto startx starty lineto stroke } def /t1sclosepath { t1sclosepathdash setdash t1sclosepathscale t1dumpstdlinewidth mul setlinewidth t1sclosepathcolor setrgbcolor currsx currsy moveto startsx startsy lineto stroke } def /t1hintedclosepath { t1hclosepathdash setdash t1hclosepathscale t1dumpstdlinewidth mul setlinewidth t1hclosepathcolor setrgbcolor currhx currhy moveto starthx starthy lineto stroke } def /t1vstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1stemscale t1dumpstdlinewidth mul setlinewidth t1stemcolor setrgbcolor [] 0 setdash stemstart ymindev moveto stemstart ymaxdev lineto stroke [2 2] 0 setdash stemwidth stemstart add ymindev moveto stemwidth stemstart add ymaxdev lineto stroke } if } def /t1alignedvstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1alignedstemscale t1dumpstdlinewidth mul setlinewidth t1alignedstemcolor setrgbcolor [] 0 setdash stemstart ymindev moveto stemstart ymaxdev lineto stroke [2 2] 0 setdash stemwidth stemstart add ymindev moveto stemwidth stemstart add ymaxdev lineto stroke } if } def /t1hstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1stemscale t1dumpstdlinewidth mul setlinewidth t1stemcolor setrgbcolor [] 0 setdash xmindev stemstart moveto xmaxdev stemstart lineto stroke [2 2] 0 setdash xmindev stemwidth stemstart add moveto xmaxdev stemwidth stemstart add lineto stroke } if } def /t1alignedhstem { t1drawstems 1 eq { /stemwidth exch scale mul def /stemstart exch scale mul def t1alignedstemscale t1dumpstdlinewidth mul setlinewidth t1alignedstemcolor setrgbcolor [] 0 setdash xmindev stemstart moveto xmaxdev stemstart lineto stroke [2 2] 0 setdash xmindev stemwidth stemstart add moveto xmaxdev stemwidth stemstart add lineto stroke } if } def /t1bottomzone { t1drawzones 1 eq { /bottom exch scale mul def /top exch scale mul def t1bottomzonescale t1dumpstdlinewidth mul setlinewidth t1bottomzonecolor setrgbcolor [] 0 setdash xmindev bottom moveto xmaxdev bottom lineto stroke [2 2] 0 setdash xmindev top moveto xmaxdev top lineto stroke } if } def /t1topzone { t1drawzones 1 eq { /bottom exch scale mul def /top exch scale mul def t1topzonescale t1dumpstdlinewidth mul setlinewidth t1topzonecolor setrgbcolor [2 2] 0 setdash xmindev bottom moveto xmaxdev bottom lineto stroke [] 0 setdash xmindev top moveto xmaxdev top lineto stroke } if } def end % Next follows drawing code from charstring commands: T1LibDict begin gsave 20.000001 t1SetupSize t1PreparePage -0.439758 0.000000 t1bottomzone 13.652496 14.092255 t1topzone 8.615265 8.955078 t1topzone 13.312683 13.532562 t1topzone -4.117737 -3.877869 t1bottomzone 0.559692 0.000000 0.559692 0.000000 t1sbw 9.005051 4.277649 t1srmoveto 0.000000 2.635088 -2.059844 2.192259 -2.507646 0.000000 t1srrcurveto -2.589196 0.000000 t1sarrowhead -1.998282 -2.253895 0.000000 -2.573452 t1srrcurveto 0.000000 -2.662721 2.147325 -1.984725 2.420165 0.000000 t1srrcurveto 2.501468 0.000000 t1sarrowhead 2.086011 2.026044 0.000000 2.621402 t1srrcurveto t1sclosepath -0.299835 0.000000 t1srmoveto 0.000000 -2.455808 -1.951770 -1.891803 -2.335873 0.000000 t1srrcurveto -2.257264 0.000000 t1sarrowhead -2.010390 1.853166 0.000000 2.494445 t1srrcurveto 0.000000 2.423801 1.879586 2.103710 2.408057 0.000000 t1srrcurveto 2.329696 0.000000 t1sarrowhead 1.937959 -2.045412 0.000000 -2.482100 t1srrcurveto t1sclosepath 0.149918 -0.000000 t1srmoveto -4.417572 -3.847885 t1srmoveto -0.808825 0.000000 -0.829075 0.393694 -0.511556 0.871540 t1srrcurveto -0.129291 -0.075888 t1sprolongate 0.130347 0.074061 t1sprolongate -0.475605 0.837065 t1sarrowhead -0.004550 1.172020 0.000000 0.735306 t1srrcurveto 0.000000 0.791693 0.003844 1.036104 0.457587 0.838909 t1srrcurveto -0.131612 0.071788 t1sprolongate 0.129291 -0.075888 t1sprolongate 0.510742 0.870153 t1sarrowhead 0.888167 0.395081 0.750547 0.000000 t1srrcurveto 0.828025 0.000000 0.810390 -0.413156 0.492055 -0.813783 t1srrcurveto 0.493212 -0.815696 t1sarrowhead 0.004874 -1.109989 0.000000 -0.775217 t1srrcurveto 0.000000 -0.730684 -0.003321 -1.039578 -0.420610 -0.841221 t1srrcurveto -0.000299 -0.000599 t1sprolongate -0.000294 -0.000601 t1sprolongate -0.415892 -0.850688 t1sarrowhead -0.828838 -0.544427 -0.939312 0.000000 t1srrcurveto t1sclosepath -0.000000 -0.299835 t1srmoveto 1.059589 0.000000 0.930195 0.614936 0.463625 0.948323 t1srrcurveto -0.134684 0.065845 t1sprolongate 0.134090 -0.067045 t1sprolongate 0.458906 0.917812 t1sarrowhead -0.003321 1.119235 0.000000 0.708525 t1srrcurveto 0.000000 0.743948 0.004874 1.208737 -0.546217 0.903359 t1srrcurveto -0.547374 0.905273 t1sarrowhead -0.908665 0.466361 -0.931008 0.000000 t1srrcurveto -0.848574 0.000000 -0.990800 -0.444457 -0.568665 -0.968836 t1srrcurveto -0.001193 -0.002032 t1sprolongate -0.001128 -0.002068 t1sprolongate -0.501886 -0.920124 t1sarrowhead 0.003844 -1.122710 0.000000 -0.767450 t1srrcurveto 0.000000 -0.703903 -0.004550 -1.266640 0.523846 -0.921968 t1srrcurveto 0.000521 -0.000918 t1sprolongate 0.000534 -0.000910 t1sprolongate 0.567850 -0.967449 t1sarrowhead 0.929958 -0.445844 0.910231 0.000000 t1srrcurveto t1sclosepath 0.000000 0.149918 t1srmoveto t1FinishPage 0.559692 0.000000 0.559692 0.000000 t1sbw 8.855133 4.277649 t1rmoveto 0.000000 2.558594 t1arrowhead -1.998901 2.118835 -2.418671 0.000000 t1rrcurveto -2.498627 0.000000 -1.938934 -2.178802 0.000000 -2.498627 t1rrcurveto 0.000000 -2.578583 t1arrowhead 2.078857 -1.918945 2.338715 0.000000 t1rrcurveto 2.418671 0.000000 2.018890 1.958923 0.000000 2.538605 t1rrcurveto t1closepath -4.417572 -3.997803 t1rmoveto -0.859528 0.000000 t1arrowhead -0.879517 0.419769 -0.539703 0.919495 t1rrcurveto -0.499725 0.879517 0.000000 1.219330 0.000000 0.719604 t1rrcurveto 0.000000 0.779572 t1arrowhead 0.000000 1.079407 0.479736 0.879517 t1rrcurveto 0.539703 0.919495 0.939484 0.419769 0.799561 0.000000 t1rrcurveto 0.879517 0.000000 t1arrowhead 0.859528 -0.439758 0.519714 -0.859528 t1rrcurveto 0.519714 -0.859528 0.000000 -1.159363 0.000000 -0.759583 t1rrcurveto 0.000000 -0.719604 t1arrowhead 0.000000 -1.079407 -0.439758 -0.879517 t1rrcurveto -0.439758 -0.899506 -0.879517 -0.579681 -0.999451 0.000000 t1rrcurveto t1closepath t1FinishPage grestore end t1lib-5.1.2/doc/t1dump/t1dump_o.pdf0000644000175000001440000000445010733501626015471 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœÝXK®Ü6ÜÏ)t‚M6'ð:ÎÒÈê0Zd•ë§Š”(’šyöÚö,5[ì«»el–ÿßýñïC¶’ŠqA6£‰1mû…doœ›Ä`²”Í•&!zïZ¢:#š¯7[˜–àB[¼‰¾¯Ï£×£,ØÞ‘Xˆn1‹É1”IèëfÐŒí¢ZZPÊ(ó¼dŠ;ÏWš ¬ñ×ûw'›ºm OÛ*Û÷ooC5†Önß^dÅ}§Òñú>+–ç׎œÑ"°*%mNa‡t7ËÑ‹t9Ñ%G€i q¹Ð9mÀç]KržÒþâŒ0ø-1Yr>—SNÌÐ~Îo’CfX£®¢&É•ám9exƒ® Ø›êÉÕê 1d¸Ï ø|¡¥à9täô±³±4›ç(ÌÙð6D¿÷½×=ºiïŠu³=î»'ÍüÒ"Ñ U œË›æŠ ȤbT:²D Íѧu?p½ù×´Ï¢±fšâ#‚—ºRϲb{ÝK¨û$å&µ`ÊÖØ™<ÏóâR8kã“”¨=!Œ<|²Ñxçj<›o¯ÎZ#œ‘A[EÁŸ§òb" Ç!è  ¾V¼«æ¯Ø~!1Šî‚‹¡_ŠOFᑀ̤>ׯ8‹Âp©h‘;ÝážÛë>ËÒ% q«‡g R Ú3rX4™ê1\€(8üãëèCo<Ó]@R^øpUš ÏÀ*IN…Õ2˜ `sÕuÚz¦†!©"_»RDx±ö’‘œŒòX–˃3Fˆœû2ËbH&Wº/ ­udžH`dá:׫ڪÈY‡KáÈŸÎ$Þu—  å?Në!-Vl¿2(YØÂhT•’à|…I< ð„\‹î«¬X$÷ØRhb´蔑 øAäD*ÇB÷!‚á´bF³ä 0Ü%±y0š*wãþÜòá®+²xª%@!ÂzÐËÌ>UÞˆéFc¯iòݾÚé[þ«ë#}{!’á '›¢ÕC+‰( ‘L•4òOÂ4ŠúV<,³-ù€¼‘# 3¶·}¡¤m> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 6 0 obj << /CreationDate (D:20030302172814) /Producer (GNU Ghostscript 5.50) >> endobj xref 0 7 0000000000 65535 f 0000001992 00000 n 0000001933 00000 n 0000001813 00000 n 0000000015 00000 n 0000001793 00000 n 0000002041 00000 n trailer << /Size 7 /Root 1 0 R /Info 6 0 R >> startxref 2128 %%EOF t1lib-5.1.2/doc/concatoutlines.eps0000644000175000001440000044216110733501626015604 0ustar rmzusers%!PS-Adobe-3.0 EPSF-3.0 %%Creator: tiff2ps %%Title: concatoutlines.tif %%CreationDate: Wed May 5 18:26:33 1999 %%DocumentData: Clean7Bit %%Origin: 0 0 %%BoundingBox: 0 0 177 137 %%LanguageLevel: 1 %%Pages: (atend) %%EndComments %%BeginSetup %%EndSetup %%Page: 1 1 gsave 100 dict begin 177.000000 137.000000 scale /bwproc { rgbproc dup length 3 idiv string 0 3 0 5 -1 roll { add 2 1 roll 1 sub dup 0 eq { pop 3 idiv 3 -1 roll dup 4 -1 roll dup 3 1 roll 5 -1 roll put 1 add 3 0 } { 2 1 roll } ifelse } forall pop pop pop } def /colorimage where {pop} { /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def } ifelse %ImageData: 177 137 8 3 0 1 2 "false 3 colorimage" /line 531 string def 177 137 8 [177 0 0 -137 0 137] {currentfile line readhexstring pop} bind false 3 colorimage ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000ffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffff000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000ffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff end grestore showpage %%Trailer %%Pages: 1 %%EOF t1lib-5.1.2/doc/concatoutlines.pdf0000644000175000001440000021772010733501626015567 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ3Ð3T0A(œËU„†ææ`QCcCÏ ,LA*ôƒÌ\ò¹ˆÆ iendstream endobj 5 0 obj 50 endobj 3 0 obj << /Type /Page /MediaBox [0 0 177 137] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageC] /XObject<> >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 8 0 obj << /CreationDate (D:20010110083044) /Producer (GNU Ghostscript 5.10) >> endobj 6 0 obj << /Type /XObject /Name /R6 /Subtype /Image /Length 7 0 R /ColorSpace /DeviceRGB/Width 177/Height 137/BitsPerComponent 8 >> stream ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ endstream endobj 7 0 obj 72748 endobj xref 0 9 0000000000 65535 f 0000000362 00000 n 0000000303 00000 n 0000000153 00000 n 0000000015 00000 n 0000000135 00000 n 0000000498 00000 n 0000073402 00000 n 0000000411 00000 n trailer << /Size 9 /Root 1 0 R /Info 8 0 R >> startxref 73423 %%EOF t1lib-5.1.2/doc/concatglyphs.eps0000644000175000001440000044215710733501626015255 0ustar rmzusers%!PS-Adobe-3.0 EPSF-3.0 %%Creator: tiff2ps %%Title: concatglyphs.tif %%CreationDate: Wed May 5 18:26:15 1999 %%DocumentData: Clean7Bit %%Origin: 0 0 %%BoundingBox: 0 0 177 137 %%LanguageLevel: 1 %%Pages: (atend) %%EndComments %%BeginSetup %%EndSetup %%Page: 1 1 gsave 100 dict begin 177.000000 137.000000 scale /bwproc { rgbproc dup length 3 idiv string 0 3 0 5 -1 roll { add 2 1 roll 1 sub dup 0 eq { pop 3 idiv 3 -1 roll dup 4 -1 roll dup 3 1 roll 5 -1 roll put 1 add 3 0 } { 2 1 roll } ifelse } forall pop pop pop } def /colorimage where {pop} { /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def } ifelse %ImageData: 177 137 8 3 0 1 2 "false 3 colorimage" /line 531 string def 177 137 8 [177 0 0 -137 0 137] {currentfile line readhexstring pop} bind false 3 colorimage ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000ffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000ffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000000000000000000000000000ffffffffffff 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000ffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000ffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000ffffffffffffffffffffffffffffffffffff000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 000000000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000000000000000000000000000ffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000000000000000ffffffffffffffffffffffff000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffff000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffff000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000000000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff end grestore showpage %%Trailer %%Pages: 1 %%EOF t1lib-5.1.2/doc/concatglyphs.pdf0000644000175000001440000021772010733501626015233 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœ3Ð3T0A(œËU„†ææ`QCcCÏ ,LA*ôƒÌ\ò¹ˆÆ iendstream endobj 5 0 obj 50 endobj 3 0 obj << /Type /Page /MediaBox [0 0 177 137] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageC] /XObject<> >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 8 0 obj << /CreationDate (D:20010110083040) /Producer (GNU Ghostscript 5.10) >> endobj 6 0 obj << /Type /XObject /Name /R6 /Subtype /Image /Length 7 0 R /ColorSpace /DeviceRGB/Width 177/Height 137/BitsPerComponent 8 >> stream ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ endstream endobj 7 0 obj 72748 endobj xref 0 9 0000000000 65535 f 0000000362 00000 n 0000000303 00000 n 0000000153 00000 n 0000000015 00000 n 0000000135 00000 n 0000000498 00000 n 0000073402 00000 n 0000000411 00000 n trailer << /Size 9 /Root 1 0 R /Info 8 0 R >> startxref 73423 %%EOF t1lib-5.1.2/doc/Tee.eps0000644000175000001440000001020410733501626013254 0ustar rmzusers%!PS-Adobe-3.0 EPSF-3.0 %%Creator: tiff2ps %%Title: Tee.tif %%CreationDate: Sat May 1 18:58:31 1999 %%DocumentData: Clean7Bit %%Origin: 0 0 %%BoundingBox: 0 0 29 19 %%LanguageLevel: 1 %%Pages: (atend) %%EndComments %%BeginSetup %%EndSetup %%Page: 1 1 gsave 100 dict begin 29.000000 19.000000 scale /bwproc { rgbproc dup length 3 idiv string 0 3 0 5 -1 roll { add 2 1 roll 1 sub dup 0 eq { pop 3 idiv 3 -1 roll dup 4 -1 roll dup 3 1 roll 5 -1 roll put 1 add 3 0 } { 2 1 roll } ifelse } forall pop pop pop } def /colorimage where {pop} { /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def } ifelse %ImageData: 29 19 8 3 0 1 2 "false 3 colorimage" /line 87 string def 29 19 8 [29 0 0 -19 0 19] {currentfile line readhexstring pop} bind false 3 colorimage ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff707070707070808080606060 606060808080606060a0a0a0ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff404040ffffffffffff808080808080ffffffc0c0c0808080 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0d0d0 ffffffffffff808080808080fffffff0f0f0e0e0e0e0e0e0909090909090f0f0f0 ffffffffffffffffffb0b0b0808080c0c0c0ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff808080808080 ffffffffffffd0d0d0404040f0f0f0d0d0d0303030ffffffffffff606060a0a0a0 ffffff505050b0b0b0ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff808080808080ffffffffffff505050b0b0b0 ffffffffffff404040d0d0d0d0d0d0303030ffffffffffffc0c0c0505050ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff808080808080ffffffffffff000000808080808080808080808080e0e0e0 808080404040808080808080808080a0a0a0ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff808080808080ffffff ffffff000000f0f0f0ffffffffffffffffffffffff808080707070ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff808080808080ffffffffffff606060808080ffffff ffffffffffffe0e0e0e0e0e0101010f0f0f0ffffffffffffe0e0e0ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0a0a0 202020303030c0c0c0fffffff0f0f0404040707070808080606060e0e0e0ffffff a0a0a0404040808080707070909090ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff end grestore showpage %%Trailer %%Pages: 1 %%EOF t1lib-5.1.2/doc/Tee.pdf0000644000175000001440000000160210733501626013240 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœí“Á ‚0†9÷Äo)r# QnU^M<›èÁ¡#8èOŸi‰ ‹&üMèëëë×öõ…mûô—«¸£Å‰uRdûE„­¢eÜd…ù‘äa›ÉʼnÜ!Nf*§•(ÖôšõçºYi­ÏVl”e9›¦)Ú F]×lL‘1¦‡mšæiõ°ÂÐWU…ì;œï°¼n üìtÉQJ?Û]¾±r|œ#°žçéŽ|ÁwžáoÚÃvSʳ(˜¨oX®47Å/èû¾Û Ã!L\Šˆ=~e,Ç•]=31œøQ!#N>ë§$6…Ø£½{)Äendstream endobj 5 0 obj 258 endobj 3 0 obj << /Type /Page /MediaBox [0 0 29 19] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageC] >> /Contents 4 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 6 0 obj << /CreationDate (D:20010110083014) /Producer (GNU Ghostscript 5.10) >> endobj xref 0 7 0000000000 65535 f 0000000547 00000 n 0000000488 00000 n 0000000362 00000 n 0000000015 00000 n 0000000343 00000 n 0000000596 00000 n trailer << /Size 7 /Root 1 0 R /Info 6 0 R >> startxref 683 %%EOF t1lib-5.1.2/doc/outlines.eps0000644000175000001440000001773710733501626014423 0ustar rmzusers%!PS-Adobe-2.0 EPSF-2.0 %%Title: outlines.eps %%Creator: fig2dev Version 3.2 Patchlevel 1 %%CreationDate: Fri Apr 23 17:07:56 1999 %%For: rainer@mman2 (Rainer Menzner) %%Orientation: Portrait %%BoundingBox: 0 0 252 156 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -22.0 156.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 3475 m -1000 -1000 l 5342 -1000 l 5342 3475 l cp clip 0.06299 0.06299 sc 7.500 slw % Ellipse n 450 2250 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 1350 2250 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 900 1800 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 900 900 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 1350 450 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 1620 180 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 2880 180 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 3150 450 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 3600 900 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 3600 1800 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 3150 2250 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 4050 2250 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Polyline n 3150 2250 m 1350 2250 l gs col0 s gr % Polyline [60] 0 sd n 450 2250 m 1350 2250 l gs col0 s gr [] 0 sd % Polyline [60] 0 sd n 1350 2250 m 4050 2250 l gs col0 s gr [] 0 sd % Polyline [15 45] 45 sd n 1350 2250 m 900 1800 l gs col0 s gr [] 0 sd % Polyline [15 45] 45 sd n 1350 450 m 900 900 l gs col0 s gr [] 0 sd % Polyline [15 45] 45 sd n 1350 450 m 1620 180 l gs col0 s gr [] 0 sd % Polyline [15 45] 45 sd n 3150 450 m 2880 180 l gs col0 s gr [] 0 sd % Polyline [15 45] 45 sd n 3150 450 m 3600 900 l gs col0 s gr [] 0 sd % Polyline [15 45] 45 sd n 3150 2250 m 3600 1800 l gs col0 s gr [] 0 sd % Polyline n 1350 2250 m 1348 2248 l 1344 2243 l 1336 2235 l 1325 2222 l 1309 2205 l 1290 2184 l 1268 2159 l 1244 2132 l 1218 2102 l 1192 2072 l 1167 2041 l 1142 2011 l 1119 1981 l 1098 1953 l 1078 1925 l 1060 1899 l 1044 1873 l 1030 1849 l 1016 1824 l 1005 1800 l 994 1775 l 984 1750 l 975 1725 l 967 1701 l 960 1676 l 954 1650 l 948 1624 l 942 1596 l 937 1568 l 933 1539 l 929 1509 l 926 1478 l 924 1447 l 922 1415 l 921 1382 l 921 1350 l 921 1318 l 922 1285 l 924 1253 l 926 1222 l 929 1191 l 933 1161 l 937 1132 l 942 1104 l 948 1076 l 954 1050 l 960 1024 l 967 999 l 975 975 l 984 950 l 994 925 l 1005 900 l 1016 876 l 1030 851 l 1044 827 l 1060 801 l 1078 775 l 1098 747 l 1119 719 l 1142 689 l 1167 659 l 1192 628 l 1218 598 l 1244 568 l 1268 541 l 1290 516 l 1309 495 l 1325 478 l 1336 465 l 1344 457 l 1348 452 l 1350 450 l gs col0 s gr % Polyline n 1350 450 m 1352 449 l 1356 445 l 1363 439 l 1373 431 l 1387 419 l 1405 406 l 1425 390 l 1448 374 l 1471 357 l 1496 340 l 1521 324 l 1546 309 l 1571 295 l 1595 283 l 1620 272 l 1645 262 l 1671 253 l 1697 245 l 1725 237 l 1754 231 l 1785 225 l 1809 221 l 1834 217 l 1860 214 l 1887 211 l 1915 208 l 1945 205 l 1975 202 l 2007 200 l 2040 198 l 2073 196 l 2108 195 l 2143 194 l 2178 193 l 2214 193 l 2250 192 l 2286 193 l 2322 193 l 2357 194 l 2392 195 l 2427 196 l 2460 198 l 2493 200 l 2525 202 l 2555 205 l 2585 208 l 2613 211 l 2640 214 l 2666 217 l 2691 221 l 2715 225 l 2746 231 l 2775 237 l 2803 245 l 2829 253 l 2855 262 l 2880 272 l 2905 283 l 2929 295 l 2954 309 l 2979 324 l 3004 340 l 3029 357 l 3052 374 l 3075 390 l 3095 406 l 3113 419 l 3127 431 l 3137 439 l 3144 445 l 3148 449 l 3150 450 l gs col0 s gr % Polyline n 3150 450 m 3152 452 l 3156 457 l 3164 465 l 3175 478 l 3191 495 l 3210 516 l 3232 541 l 3256 568 l 3282 598 l 3308 628 l 3333 659 l 3358 689 l 3381 719 l 3402 747 l 3422 775 l 3440 801 l 3456 827 l 3470 851 l 3484 876 l 3495 900 l 3506 925 l 3516 950 l 3525 975 l 3533 999 l 3540 1024 l 3546 1050 l 3552 1076 l 3558 1104 l 3563 1132 l 3567 1161 l 3571 1191 l 3574 1222 l 3576 1253 l 3578 1285 l 3579 1318 l 3579 1350 l 3579 1382 l 3578 1415 l 3576 1447 l 3574 1478 l 3571 1509 l 3567 1539 l 3563 1568 l 3558 1596 l 3552 1624 l 3546 1650 l 3540 1676 l 3533 1701 l 3525 1725 l 3516 1750 l 3506 1775 l 3495 1800 l 3484 1824 l 3470 1849 l 3456 1873 l 3440 1899 l 3422 1925 l 3402 1953 l 3381 1981 l 3358 2011 l 3333 2041 l 3308 2072 l 3282 2102 l 3256 2132 l 3232 2159 l 3210 2184 l 3191 2205 l 3175 2222 l 3164 2235 l 3156 2243 l 3152 2248 l 3150 2250 l gs col0 s gr /Helvetica-Narrow ff 150.00 scf sf 360 2160 m gs 1 -1 sc (P1) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 1440 2430 m gs 1 -1 sc (P2) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 630 1800 m gs 1 -1 sc (P3) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 630 900 m gs 1 -1 sc (P4) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 1080 450 m gs 1 -1 sc (P5) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 1710 135 m gs 1 -1 sc (P6) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 2970 180 m gs 1 -1 sc (P7) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 3285 450 m gs 1 -1 sc (P8) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 3690 945 m gs 1 -1 sc (P9) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 3690 1890 m gs 1 -1 sc (P10) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 3060 2475 m gs 1 -1 sc (P11) col0 sh gr /Helvetica-Narrow ff 150.00 scf sf 4050 2475 m gs 1 -1 sc (P12) col0 sh gr $F2psEnd rs t1lib-5.1.2/doc/outlines.fig0000644000175000001440000000446310733501626014371 0ustar rmzusers#FIG 3.2 Landscape Center Metric A4 100.00 Single -2 1200 2 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 450 2250 45 45 450 2250 495 2250 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 1350 2250 45 45 1350 2250 1395 2250 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 900 1800 45 45 900 1800 945 1800 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 900 900 45 45 900 900 945 900 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 1350 450 45 45 1350 450 1395 450 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 1620 180 45 45 1620 180 1665 180 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 2880 180 45 45 2880 180 2925 180 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 3150 450 45 45 3150 450 3195 450 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 3600 900 45 45 3600 900 3645 900 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 3600 1800 45 45 3600 1800 3645 1800 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 3150 2250 45 45 3150 2250 3195 2250 1 3 0 1 0 7 100 0 0 0.000 1 0.0000 4050 2250 45 45 4050 2250 4095 2250 2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2 3150 2250 1350 2250 2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 0 0 2 450 2250 1350 2250 2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 0 0 2 1350 2250 4050 2250 2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2 1350 2250 900 1800 2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2 1350 450 900 900 2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2 1350 450 1620 180 2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2 3150 450 2880 180 2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2 3150 450 3600 900 2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2 3150 2250 3600 1800 3 0 0 1 0 7 100 0 -1 0.000 0 0 0 4 1350 2250 900 1800 900 900 1350 450 0.000 1.000 1.000 0.000 3 0 0 1 0 7 100 0 -1 0.000 0 0 0 4 1350 450 1620 180 2880 180 3150 450 0.000 1.000 1.000 0.000 3 0 0 1 0 7 100 0 -1 0.000 0 0 0 4 3150 450 3600 900 3600 1800 3150 2250 0.000 1.000 1.000 0.000 4 0 0 100 0 20 10 0.0000 4 120 195 360 2160 P1\001 4 0 0 100 0 20 10 0.0000 4 120 195 1440 2430 P2\001 4 0 0 100 0 20 10 0.0000 4 120 195 630 1800 P3\001 4 0 0 100 0 20 10 0.0000 4 120 195 630 900 P4\001 4 0 0 100 0 20 10 0.0000 4 120 195 1080 450 P5\001 4 0 0 100 0 20 10 0.0000 4 120 195 1710 135 P6\001 4 0 0 100 0 20 10 0.0000 4 120 195 2970 180 P7\001 4 0 0 100 0 20 10 0.0000 4 120 195 3285 450 P8\001 4 0 0 100 0 20 10 0.0000 4 120 195 3690 945 P9\001 4 0 0 100 0 20 10 0.0000 4 120 285 3690 1890 P10\001 4 0 0 100 0 20 10 0.0000 4 120 285 3060 2475 P11\001 4 0 0 100 0 20 10 0.0000 4 120 285 4050 2475 P12\001 t1lib-5.1.2/doc/outlines.pdf0000644000175000001440000001721710733501626014376 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœÝZÍŽv7 îWJKná,K¥9ÄùÏ$. bvmWSU*âC*³àöyìÄvδˆÒ]_ÍbÞøMÿ>¶3.:ÿ¬ß/ïï:¿;]=„tRŽW‹å|ï”Ø®ÐÎ6. #ŸDùJmœ5]¹änë—#·u`QRY'&[®^£”.ŒA#>`7ÌåËa"L‚ ¸Ž¿Uáåøöó#ãcÆâß©áëQñ]£M+%L™j®Wˆ›NáJµl:U|âíº!DÙ¿N¯•ݧ„%VusUG/__/Áôì]pñÖã(óz¤V®XÊ™c½¨C#P¸ 6¥¯Ró™¢"á7.dKDO"9`¨Ëc ëy(!Ó<° Èæyƒ.q`‰`TDep×A|ôz¹»ÆHW›Z£µ+'WkT„I6µtéjÙ†%µ1Ðõ¼ÁÕ¢=®…H—ß KWË6,Á]‡›»J¯× êUòŽ5\}TÄܯèÉ<—ëkʼnuÖ`Cx;PÄy÷:›B–ÝÊ{­)tƒJ6Oß¿ÁÞ/_™×£G:×(¬Ê8ÌG=;ãà5â$¶% qÔm2Øó:1)­Åubrðõ¼'Œ‚PâÆ¡e¹Óî˜ë—Ã¥X;LÊÉá­â¨ÇUîõ ã•릛S¦dTøZ3É©Œ|mºQi}žÐµÌ‹ƒ­õ^§LɜÔÜïPÝ\ŠµÃ¤\Þè!Ž{\åฆ\,iƒ§L  †Æ²gEj@r ÔðAö¯ïÑ·Êv=®kMs§ Øùv¡ˆI`;TÂÅà®ÂôÙ#êõzÄ€j6†d#¬zæ‚8¬ÞÆ€±a+Ð/8Š:ö4ä„qXk­—JЂª ´àê^’Uß1…t7-Äaª™»ÌZ^#¬ŽUyjG«·zÏ«rùŽ)·sXkíH°ZVe -­^áM¯ á;–Æá¦ÅÍe¦ÙŠ6Jn¹Èœeîš-·m˜´ì·“ÁZÚÌg”5ƒ92Ú :QšúýÐŽßU¸ƒâ#é… Kep2ºZF™REšÏú‘‡Š°«9`;Ðèò e°–v«Q–\Æ`Šm7¨Z&‚~¿´ãwf~=¢^œ]ËåþP£ƒÃ¢üãøÛñ%·«|~}†ó›Ã^»þ¿C÷-lÀ%ÿí‹Ø 9cRüÚ>ý }/˜pñÓH߬ñ3xË>û¸ÿÉÂ{eáÍãÏfaõ÷'êñC·Vï¦üož«‘Ÿ7™’®ÑÙsÇJgJ»@ÎB£Ä­q¼€3LAÜWâÖ—ù±ž½VIÁJaDáA“Q,wÚJC¸ø‚ø+Šòð n~ §@äžéŒ¨3=7¦ uxŠ“ÅÉcÀõŒ°Y”Ë3.í¥Ÿ‰ råË3«éLзfœ‘B!Å3áÆœùîÌvC”'HÕY©Œ°¯TÎÔLÌwgÒð)r!…™‚Â9ZGi…âbŠLð\nÿð!’”Æ™M‚À=FO\ЊPàÅJCFF–&uxÖʽs›Êô_!Ÿ¦Ž½ CÜXb¸j6èÉ(ƒÉCŽBIpQ= ì'†H-À `‚M$ÒTÖ»e ;èrf$TŒ“'ŸÜI(0möCS&~³èg•Â#—#ƒ_\BJUè’[ß( œ« 87;Å|ZÜ­øÍªòäÜéµ ˜ BeùÑŠ:Äá,®é‰ß…¹SÄæ*§à#ù [(ëP…ÀóÙ&\ÇCKú¨™Ù~#0xûS(ÄX#… §dô‰ù Òóž!é{ŠÄÅ`¨‰òGž6fôzÅ"l «‰ÔÝÖ«RoBmgÑC¬B÷„<¢P¤N²“I/[8§:áXÒd¾2"J„-qqé“"‡¨0â3¡_’ß„úyÕ#Z”+$¨ˆÂy1ʾ'¢\‹É‚Œ«m»)BíwaÎm˜k_¹)•€°)ïZ3BÞ ÃÀÆ™èÆËŒD7³7äeS€\‰3&–Ÿˆñ'ÑæJ´…vwS–SßB‚ c9maDm‡ZT•¶ð£RçsƒE¨¼ñ¥=Š­Q³H—W>‰tͪ‘Ñ}Kà\+[RQ-•Óßj óäDÿ1e¶ü¥0Ì{Ž£mªb0ÃâzXò† áep ì³!µR7HBoˆ„¦ ¶@‰â*ƒ¶·(Câ4¶­–5!-(¥Ék¨Á-Šor8–SnRÄ&®ÕÔ©îS§5öjm@! ×­~ Ÿl‚~VcPiþ‰Yëõ&EÍJõÁ¸* ö°JGˆÊ‰jÅ|Ê^/i iౚJÎg­îÒàÇå²Õf¤7JYÛê7 Xñ µdµ74œ°¥7 è˜áÈ­—ˆŒið‡µ |ËÖ‘Ä€^¨á] (hu·Æ&òs¢À›ŸÈÈãzƒJeÆÞD‚\Þ-y-‚e½%²ù¼a%1€zSJæèôÆÏ(Ö*ÅHåãM¦Þå¨ÊãͪÊì ­êåM¯êî±ÚÇzçeAï®ÕÈÞ«#¼KW_Y#¿¼é­¾:ÜÇ VØØP¡ås‡ŸÏ& >¿hÛˆ£qîSæ‚OJš.>L­tòyKÎg2MJŸÛ4qm´ÓÜöéOóß'DÛ" FlÒ4¨±itB‘«†U6ÒžÙØûvŽfüi+ÿ’µ~½¼?ÿò|üéÏ'ÏßúÿZOüŠ¢ŸÏï?ûàÃw|þûQ;޵p>óÙýŠ)OlžüÀ´Í4J„>a°û|Š0~Ã$>ñ÷ÏcŸ2‰ßbâ$|øÕ?™ÂßëuÿV8ñsPœ”ßÍË Œ ëw¿ÿê_"3Ouñ~÷‡)zÌgÐ}"ú_ŸÏ/Ž/Žÿ9x}endstream endobj 5 0 obj 2542 endobj 3 0 obj << /Type /Page /MediaBox [0 0 252 156] /Parent 2 0 R /Resources << /ProcSet [/PDF /ImageB /Text] /Font << /A 7 0 R >> >> /Contents 4 0 R >> endobj 7 0 obj <>/FontBBox[0 -3 46 68]/FontMatrix[1 0 0 1 0 0]/Widths[ 0 0 51 0 44 0 52 0 0 0 0 0 0 0 35 43]>> endobj endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 24 0 obj << /CreationDate (D:20010110083156) /Producer (GNU Ghostscript 5.10) >> endobj 6 0 obj <> endobj 8 0 obj <> stream 0 0 0 0 45 68 d1 45 0 0 68 0 0 cm BI /IM true/W 45/H 68/BPC 1/F/CCF/DP<> ID 0/ÿÿÿÿÿÿÿÿÿÿäƒÞ÷÷‘F>ß·ßþ÷ÿÿÿÿׯõéuáqZúÖ°P EI endstream endobj 9 0 obj <> stream 0 0 0 2 25 68 d1 25 0 0 66 0 2 cm BI /IM true/W 25/H 66/BPC 1/F/CCF/DP<> ID 5‹ÿÿÿÿÿÿÿÿÿÿÿçGÿ“†ûïïà EI endstream endobj 10 0 obj <> stream 51 0 0 0 0 0 d1 endstream endobj 11 0 obj <> stream 0 0 0 1 45 68 d1 45 0 0 67 0 1 cm BI /IM true/W 45/H 67/BPC 1/F/CCF/DP<> ID >ßûò0?Ûû¾íî݇»v»°íÃÜ7nÜ=»w·}ßÛ3ïßÿÿkÕý¯«kµ¶°a,v­XPÔ0¥A@@ EI endstream endobj 12 0 obj <> stream 44 0 0 0 0 0 d1 endstream endobj 13 0 obj <> stream 0 0 0 1 38 70 d1 38 0 0 69 0 1 cm BI /IM true/W 38/H 69/BPC 1/F/CCF/DP<> ID :ŽP„ éÓ§D?< z ½7Þ“êûþ“ÿþ?®—­*Á)Ð4k ZÞäHnÝïíÈãÿÿÿöÿõÝ]wí+alK«V¬(aN£€€ EI endstream endobj 14 0 obj <> stream 52 0 0 0 0 0 d1 endstream endobj 15 0 obj <> stream 0 0 0 2 46 68 d1 46 0 0 66 0 2 cm BI /IM true/W 46/H 66/BPC 1/F/CCF/DP<> ID #Cÿÿÿÿÿüøkÿü’r9ßoý¿öûûíÿ·þßoý¿öûûíÿ·ßßoý¾þ;ûßßÞþþ  EI endstream endobj 16 0 obj <> stream 0 0 0 3 45 70 d1 45 0 0 67 0 3 cm BI /IM true/W 45/H 67/BPC 1/F/CCF/DP<> ID Ç)Äè:tò4ÓtŸMë«êûÿÚ¸ÿÿë^h5½mv»K ,0¸­ZÉŽ¶\ì. ý÷ÿÿîù ØÿÿÞ  EI endstream endobj 17 0 obj <> stream 0 0 0 1 37 70 d1 37 0 0 69 0 1 cm BI /IM true/W 37/H 69/BPC 1/F/CCF/DP<> ID 5AÂtéÓÈ\t=&ôô›Óû¤ÿÿ´Ÿÿýÿ¿^·õÚ_Úá„°ÂäcŠízípÕØ[ þßüˆ¿û[Öý­ëka¥a‚â­Zµ C @ EI endstream endobj 18 0 obj <> stream 0 0 0 3 38 68 d1 38 0 0 65 0 3 cm BI /IM true/W 38/H 65/BPC 1/F/CCF/DP<> ID 3ßþÿßïßîÿ~ÿwöþïíÿoÛöý¿oÛöíû~Ý¿nÜš†®ÿü@ EI endstream endobj 19 0 obj <> stream 0 0 0 1 37 70 d1 37 0 0 69 0 1 cm BI /IM true/W 37/H 69/BPC 1/F/CCF/DP<> ID :Žƒ táN¹ŽtŸMéêÞ¿Õõÿÿÿö¯_ÚÛK}°–[jÔ0­Bœè ÞƒÒoúzÞŸÿÿÿÿÛ_[_ÛKalJÇ«V¡… (0P EI endstream endobj 20 0 obj <> stream 0 0 0 1 37 70 d1 37 0 0 69 0 1 cm BI /IM true/W 37/H 69/BPC 1/F/CCF/DP<> ID !Ž éÓ§Nˆ\x@Ý'Ózzß}}¿þ-ÿíù ^O„W§iòºè:OZ½{ú^ÿÿÿ×ÿý÷KûúÞ¶¶ÒÚÛK b­Zµ XS©@@ EI endstream endobj 21 0 obj <> stream 0 0 0 1 46 70 d1 46 0 0 69 0 1 cm BI /IM true/W 46/H 69/BPC 1/F/CCF/DP<> ID !téÓ§D.:>›¤ún¾›ý&ÿÿÒoÿÿÿI¿ÿÿÿÿÿÿÿÿöÒÿÿÿÛKÿ·ô¿m/Û]¥m,0¶*Õ«PÕ…*  EI endstream endobj 22 0 obj <> stream 35 0 0 0 0 0 d1 endstream endobj 23 0 obj <> stream 43 0 0 0 0 0 d1 endstream endobj xref 0 25 0000000000 65535 f 0000003227 00000 n 0000003168 00000 n 0000002647 00000 n 0000000015 00000 n 0000002627 00000 n 0000003364 00000 n 0000002802 00000 n 0000004601 00000 n 0000004797 00000 n 0000004972 00000 n 0000005036 00000 n 0000005249 00000 n 0000005313 00000 n 0000005537 00000 n 0000005601 00000 n 0000005801 00000 n 0000006016 00000 n 0000006246 00000 n 0000006436 00000 n 0000006669 00000 n 0000006898 00000 n 0000007116 00000 n 0000007180 00000 n 0000003276 00000 n trailer << /Size 25 /Root 1 0 R /Info 24 0 R >> startxref 7244 %%EOF t1lib-5.1.2/doc/arbitrary.eps0000644000175000001440000000055610733501626014547 0ustar rmzusers%!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox: 0 0 200 200 %%EndComments /TimesRoman findfont 150 scalefont setfont 100 100 translate gsave [ 1.1 0.2 -0.3 -0.8 0 0] concat 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) show grestore [ 3 3 ] 2 setdash 0 0 moveto 100 0 rlineto 0 0 moveto 0 100 rlineto stroke 0 0 moveto (g) true charpath stroke t1lib-5.1.2/doc/arbitrary.pdf0000644000175000001440000000253610733501626014531 0ustar rmzusers%PDF-1.2 %Çì¢ 4 0 obj <> stream xœmT¹ŽÜ0 íý*“b¢Ž6@>`3Ó©&ȱØ)¶Úß) ã±ôHñÓÎ…ð¬ýþØ^7.ü}Û^ s‘rÑrÇi£}vkåÂ4w€ÇÆÁ{ÇzùŸÔÉ »Ðµ<ÁE¸?¶û£|¾mŸ¾¶ÂÍÊí§Çá¡ <åB»t<@ÔÕ(ÞÛãï·çíËÍ~+Jø/BåÇæ¦ß|IIòPäÄ/ÿðc“ä_7îd…mN·Š°5÷w”›v ÛšÂÌOï×^jÝ)Wªª¡4›N¿H›‡ZMäÂ5dÀg ysàZ—åE«y\àL7#U±Ô”qU‘b,.Ã}€ÁcI¹&ŒÀŵüwbœþ’ªÃOÄ EÊid"‘œ– <ÓU)×Àc 8Ñî Ii(¦†6 2~‚oa¨“K·émB¤5uƒHótË­e¾Ä·t‚‰³B»2®92FÝG‡˜r¨ÒDﲨ%…àæJCè”.󞥺‚0–ìQNë©°­|A½Z‹‚8ê–—–¾/ŠëhY@èB¯ÿ }A« %ÚÇBÕç ·œ±e¾\½¢}èè¢ûö=zÎŽ—Á9Zv$•Ù#”Úû$ÂöyÒÌáê~@o(8Œš˜§q”nˆ°¡¿Ñ‰*‹ðNëeìJ¼ˆ6"¯'eÊ[Ä(‘”#ÜýÈ!{xFݤ†ÐŠöB†å˜:¿JN–HRÌ€7¬ÁÃaÅ\VË4ëŒü&æ5†þ=s§þEs9}-Ê~4N">µ‘µ¸%¼ù=º ëö´ý¨Tˆendstream endobj 5 0 obj 618 endobj 3 0 obj << /Type /Page /MediaBox [0 0 200 200] /Parent 2 0 R /Resources << /ProcSet [/PDF /Text] /Font << /R6 6 0 R >> >> /Contents 4 0 R >> endobj 6 0 obj <> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 7 0 obj << /CreationDate (D:20010110083032) /Producer (GNU Ghostscript 5.10) >> endobj xref 0 8 0000000000 65535 f 0000001002 00000 n 0000000943 00000 n 0000000722 00000 n 0000000015 00000 n 0000000703 00000 n 0000000870 00000 n 0000001051 00000 n trailer << /Size 8 /Root 1 0 R /Info 7 0 R >> startxref 1138 %%EOF t1lib-5.1.2/doc/xglyph.tex0000644000175000001440000006530310733501626014075 0ustar rmzusers%---------------------------------------------------------------------------- % ----- File: xglyph.tex % ----- Author: Rainer Menzner (Rainer.Menzner@web.de) % ----- Date: 2003-01-04 % ----- Description: This file is part of the t1lib-documentation. % ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002. % As of version 0.5, t1lib is distributed under the % GNU General Public Library License. The % conditions can be found in the files LICENSE and % LGPL, which should reside in the toplevel % directory of the distribution. Please note that % there are parts of t1lib that are subject to % other licenses: % The parseAFM-package is copyrighted by Adobe Systems % Inc. % The type1 rasterizer is copyrighted by IBM and the % X11-consortium. % ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) % ----- Credits: I want to thank IBM and the X11-consortium for making % their rasterizer freely available. % Also thanks to Piet Tutelaers for his ps2pk, from % which I took the rasterizer sources in a format % independent from X11. % Thanks to all people who make free software living! %---------------------------------------------------------------------------- \newpage \section{The Program {\ttfamily xglyph}} \label{xglyph}% \verb+xglyph+ is a tool which makes most of the functionality of \tonelib\ visible to the user without the need of having to write an own program and without the need of having to understand most of the library before. This program---as the name indicates---needs X11. It is thus only build if X11 is installed on the target system and if X11 support has not explicitly been disabled. All necessary resources are set internally to default values so that the program can be run out of the box without any installation. In case the user did not already create a custom configuration file and an associated font database file, the program should be started from the subdirectory \verb+xglyph+ of the distribution. When starting, \verb+xglyph+ checks for the environment entry \verb+T1LIB_CONFIG+ and if it does not exist it adds the association \verb+T1LIB_CONFIG=./t1lib.config+ to the environment. In other words it expects a valid configuration file in the current directory. There are several widgets which may be categorized into 5 types. \subsection{Common Parameter Dialogs and Toggle Buttons} These buttons modify the internal state of the program by setting some global variables. These variables affect the execution of all rastering functions in contrast to the buttons described in the next subsection which only take influence on the X11 rastering functions. When changing one of the following parameters nothing seems to happen at first. All actions are deferred to the time when an action button is clicked. Here is a list of the dialogs and toggles: \begin{itemize} \item \fbox{{\bfseries FontID}}\\ This dialog allows to specify the font ID that will be used when the next action takes place. The allowed IDs range from 0 to $n-1$, where $n$ is the number of fonts declared in the font database file. If using the default configuration file together with the default font database file, 8 fonts are declared. If an invalid ID is specified, the next action generates an error message. \item \fbox{{\bfseries Font-Size}}\\ Here, the size of the font is specified. The value is interpreted in bigpoints, the default PostScript unit. If the size specified is invalid, an appropriate error message is generated at the time of the next action. \item \fbox{{\bfseries Slant-Factor}}\\ A slant factor $s$ may be specified. It is interpreted the following way. A point described by the coordinate-pair $(x,y)$ is transformed to the point with the coordinates $(x+sy,y)$. For instance, specifying a slant factor $s=1$ will generate a font slanted by $45^\circ$. Since version 0.3-beta slanted are nearly fully supported. For a discussion of the remaining problems see \ref{transformations} on page \pageref{transformations}. \item \fbox{{\bfseries Extension-Factor}}\\ Horizontal extension of a font may be realized using this dialog. The default value is 1 which means the characters are presented at their natural width. Specification of an invalid value will generate an error message at the time of the next action. \item \fbox{{\bfseries Transformation-Matrix}}\\ This dialog gives complete Control over the transformation matrix that will be used in consequent rasterizations. The values have to be specified separated by commas. A specified rotation is still applied after this matrix. \item \fbox{{\bfseries Res [DPI]}}\\ The resolution of the output device (screen) may be specified in this dialog. Using the default value of 72 dpi means one bp in size corresponds to exactly one device pixel. \item \fbox{{\bfseries S-Width}}\\ This dialog field allows to setup the penwidth used for stroking characters. If this field is zero, which is the default, the characters are filled, unless, the font under consideration is a stroked font, that is, it has \verb+PaintType = 1+. \item \fbox{{\bfseries Encoding-File}}\\ The name of an encoding file may be specified. Included in the distribution is only one file, \verb+IsoLatin1.enc+. It contains the standard X11 encoding in a format acceptable by \tonelib. If no name is given here, or the file with the name given here cannot not be parsed as an encoding file, the encoding is switched back to the fonts internal encoding. Again, this is done at the time of the next action. \item \fbox{{\bfseries Angle}}\\ The angle at which the next character or string is rastered is specified here. There are no restrictions concerning the angle. Rotation is applied after setting the transformation matrix (see above). \item \fbox{{\bfseries Space-Off}}\\ The value specified here represents an offset added to the spacewidth when rastering the next string. For this, it is interpreted in PostScript charspace units and thus subject to scaling. \item \fbox{{\bfseries Character}}\\ A number between 0 and 255 inclusive should be specified here. It is used as the index into the current encoding vector when rasterizing a character. This gives the user access to all currently encoded characters, regardless of the current X11 keyboard mapping. If an index is given whose encoding entry would produce no black pixels, an error message is generated at the next character-rastering time. The default value is 65, which corresponds to the character ``A'' in most encoding vectors. \item \fbox{{\bfseries Test-String}}\\ In this dialog, a complete string may be specified. It will be rastered when the next string-rastering button is pressed. It can be of arbitrary length (well, almost). If this field is left empty, the standard string ``Test'' will be used for rastering. \item \fbox{{\bfseries Kerning}}\\ This is a toggle button. Its state determines whether pairwise kerning information from the AFM file will be used to correct the horizontal spacing during string rastering or not. A typical example is the word ``Test''; enabling kerning should---at least in fonts of good quality---move the ``T'' and the ``e'' significantly closer together. \item \fbox{{\bfseries Ligature}}\\ This is a toggle button. Its state specifies whether the string is checked for ligatures prior to rastering it. Suitable character sequences are replaced with the corresponding ligature. For a good example, you should switch to font ID 4 and type in the string \verb+--difficult---+. If ligature detection is switched on, the two hyphens should be converted to an en-dash ``--'', the three hyphens should be converted to an em-dash ``---'' and the character series ``\verb+ffi+'' should be replaced with the ligature ``ffi'', rather than to be displayed as ``f{}f{}i''. \item \fbox{$|\longrightarrow$} / \fbox{$\longleftarrow|$} This button allows to change the writing direction that \tonelib\ will use in subsequent calls to the string rastering functions, the default being {\em Left To Right} as used in most European languages. This item is simply meant to demonstrate the capabilities of \tonelib. The package does not come with fonts that are intended to be used for {\em Right To Left} typesetting. \item \fbox{{\bfseries Underline}}\\ This toggle button determines whether strings are underlined or not. \item \fbox{{\bfseries Overline}}\\ Same as above for overlining. \item \fbox{{\bfseries Overstrike}}\\ Same as above for overstriking. \item \fbox{{\bfseries AA-Low}}/\fbox{{\bfseries AA-High}}\\ This button allows to select the subsampling factor for antialiasing in subsequent rastering operations. {\em AA-Low} means subsampling by factor 2 which gives 5 gray values including black and white, whereas {\em AA-High} means subsampling by 4 which yields 17 gray values including black and white. \end{itemize} Notice that, aside from the latter, the toggle buttons only affect the string rastering functions. \subsection{Buttons that Influence the X11 Rastering Functions} The X11 rastering functions introduced in version 0.3-beta provide a considerably higher level of abstraction than the standard rastering functions. To show the effect in \verb+xglyph+, a few additional buttons are provided. \begin{itemize} \item \fbox{{\bfseries Transparent}}/\fbox{{\bfseries Opaque}}\\ This button allows to switch between transparent and opaque mode in the X11 rastering functions. In transparent mode, only non-background pixels are drawn and all other pixels are left untouched. In opaque mode the entire area that the bitmap will require is first filled with the background color and then the bitmap is placed on this area. \item \fbox{{\bfseries Foreground}}\\ This is a label field with six color fields to the right and one color field to the left. Clicking on one of the color fields located on the right side will set the foreground color to the respective value (white, black, gray, red, green or blue). The color field on the left side always shows the current color selection. \item \fbox{{\bfseries Background}}\\ This also is a label field with six color fields to the right and one color field to the left. It works in analogy to the above and sets the current background color. Note that in order make the background color active, the drawing mode must be set to ``opaque''. \end{itemize} \subsection{Buttons that Generate Actions} There are 10 buttons generating actions visible to the user. \begin{itemize} \item \fbox{{\bfseries Char}}\\ This button generates a bitmap of the character specified in the \fbox{{\bfseries Character}}-dialog box. All parameters changed earlier become effective at this time. The resulting bitmap is then shown in the output window of \verb+xglyph+. Some information about the generated bitmap and elapsed time etc.\ is given in the message window. If an error occurred, the old contents of the output window are kept and a message is given to the user. \item \fbox{{\bfseries String}}\\ This button generates a bitmap of the string specified in the \fbox{{\bfseries Test-String}}-dialog box. In addition to rastering characters, kerning and ligature settings may now take influence on the result of the operation (see \ref{fonts}). If no error occurs, the bitmap is shown in the output window and additional information is shown in the message area. Otherwise, an appropriate error message is given. \item \fbox{{\bfseries AAChar}} \item \fbox{{\bfseries AAString}}\\ Both of these buttons do exactly the same as their non-antialiased counterparts. The only difference consists in the generation of an antialiased bitmap. The result is not a bitmap in fact. There are at least 8 bits per pixel and at most 32 bits per pixel in the resulting glyph. This depends on the depth of the X11-visual you use when starting xglyph. The result may consume quite a bit of memory if a {\ttfamily TrueColor} or {\tt DirectColor} visual is active. \item \fbox{{\bfseries CharX}} \item \fbox{{\bfseries StringX}} \item \fbox{{\bfseries AACharX}} \item \fbox{{\bfseries AAStringX}}\\ These functions basically do the same as the counterparts lacking the ``X'' in the name. But internally the X11 rastering functions are called to produce the output bitmap/pixmap. As a consequence the current foreground color, background color and drawing mode are taken into account. For a more complete discussion of the X11 rastering functions see \ref{x11interface} on page \pageref{x11interface}. \item \fbox{{\bfseries Font Table}}\\ A character table of size $16 \times 16$ is shown in the output window. Each cell contains an antialiased representation of the character indexed by the field number. The function \verb+T1_AASetCharX()+ is used for drawing these characters. Current foreground and background colors are respected as well as are most other parameters accepted by the character rastering functions. Only the angle specification is ignored since I assume that it is not very useful to have an overview over a font at any angle different from 0. Notice that the default size (100) is probably too large to make the output window fit on the screen. No care is taken about this. The recommended size for viewing a font's character map is between 20 and 30 points at 72 dpi resolution. \item \fbox{{\bfseries About}}\\ Shows an `about' message telling you that you are using \verb+xglyph+ and \tonelib\ in the current version. \item \fbox{{\bfseries Exit Program}}\\ This button does what it says and exits the program. \end{itemize} \subsection{The Message Window} This area is located below the dialog box for the test string. Information potentially useful to the user is given here. There should be nothing needed to be said about the info---it is self-explaining. But two things should be noted: \begin{itemize} \item The elapsed time that is displayed is exactly the time spent in the respective rastering function. There might have been other actions in force which might make the user believe the time value given as being incorrect.\footnote{For example, there might have been size-dependent data to be deleted and recreated, or an encoding file might have needed to be loaded before rastering.} Moreover, the transfer to the X-server may become significant if 32 bits per pixel are used, the image is large and the program is running on a remote machine. \item The message \verb+t1lib: Couldn't generate Bitmap, T1_errno=...!+ simply tells the user that no bitmap could be generated. There may be several reasons. E.g., the \verb+FontID+-value given might have been out of range. Another possibility is that you have specified a character index which has no encoded character associated. The value of \verb+T1_errno+ might give a hint of what the problem was. \end{itemize} If a character map is displayed, the message window is giving no information apart from the font name and the final value of \verb+T1_errno+ because there have been executed up to 256 rastering operation and it would be impossible to keep track of all single operations. \subsection{The Output Window} The output window shows the output of the rastering operations. Its type is different for the standard and the X11 rastering functions. For the standard rastering functions, it is always adapted to the size of the glyph which is displayed plus a margin of 5 pixels on each side. For this reason, leading and trailing white space is not shown in the output window, it only shows up in the glyph's metrics in the message windows. The X11 rastering functions generate an output window of constant size (\hbox{600 $\times $ 400} pixels) with a logical origin in its center. This center is marked by a cross-hair of color cyan. The glyph is placed with respect to this origin. If it is too large to fit, the glyph simply is clipped. A second cross-hair is shown at the place where the origin of the next glyph would be located in color magenta. If a character map of a font is displayed, the output window contains a map of $16\times 16$ cells whose size depends on the metrics of the font that is displayed. \subsection{{\tt xglyph} Commandline Parameters} The syntax of the \verb+xglyph+ commandline is \begin{verbatim} xglyph [options] [fontfile1 [fontfile2 [...]]] \end{verbatim} If no options and no font files are specified on the commandline \verb+xglyph+ reads the fonts from the font database file. The details depend on which configuration file is found and on this file's contents. If at least one font file is specified on the commandline, the font database---being existent and accessible or not---is ignored and the database is built using the fonts from the commandline. \verb+fontfile1+ is assigned the font ID 0, \verb+fontfile2+ is assigned the ID 1 and so forth. Files that cannot be opened for some reason are simply skipped. \verb+xglyph+ also recognizes a few options. Notice that these options are not intended for an average user. Rather, they provide a means of (a) controlling debugging output from the rasterizer, (b) controlling generation and verbosity of the \tonelib-logfile, (c) disabling certain features of the rasterizer and (d) checking some \tonelib\ functions which otherwise would not be required because of the limited functionality of \verb+xglyph+. All commandline arguments that start with ``\verb+--+'' are considered to be options to \verb+xglyph+. The following is a complete list of valid options and a brief description of their effect: \begin{itemize} \item\verb+--help+: Display the commandline syntax of \verb+xglyph+ as well as a brief list of the available options for an average user and exit. \item\verb+--Help+: Display the commandline syntax of \verb+xglyph+ as well as a brief list of all available options. \item\verb+--noGrid+: The cross-hairs marking start and end position of a glyph in the output of one of the X11 rastering functions will be suppressed. This might be useful at small sizes because the grid overwrites the glyphs' pixels. \item\verb+--setPad+: The padding value \verb+xglyph+ should use can be specified here. This has to be followed by either ``8'', ``16'' or ``32'', separated by a space. Notice that the value ``32'' might be rejected as described in \ref{queryconfiguration}. The value actually used can be found by writing a logfile and examining this after a session. \item\verb+--logError+: \item\verb+--logWarning+: \item\verb+--logStatistic+: \item\verb+--logDebug+: These options firstly instruct \verb+xglyph+ to create a \tonelib\ logfile and secondly set the loglevel to the respective value (see \ref{logfile}). Without specifying one of these options, no logfile will be generated. \item\verb+--ignoreForceBold+: Instructs the rasterizer to ignore a {\tt ForceBold} hint in the Type 1 font file. \item\verb+--ignoreFamilyAlignment+: Instructs the rasterizer always to compute font level alignment according to \verb+BlueValues+ and \verb+OtherBlues+, even if \verb+FamilyBlues+ and \\ \verb+FamilyOtherBlues+ exist and all conditions for substitution are fulfilled for that combination of font and size. \item\verb+--ignoreHinting+: Instructs the rasterizer to omit hinting completely. \item\verb+--ignoreAFM+: The use of AFM information is ignored, no matter whether it could be accessed via an appropriate AFM file or self-generated. When using this option the string functions would not work. It may, however, be useful because self-generation of AFM data fails as soon as at least one character of all defined characters can not be processed and thus, the font will refuse to load. Using this option, consequently, one has access to all character that are processible, e.g., for generating a font table. characters that can be rasterized \item\verb+--debugLine+: \item\verb+--debugRegion+: \item\verb+--debugPath+: \item\verb+--debugFont+: \item\verb+--debugHint+: All these instruct the rasterizer to write particular debug messages from intermediate steps of rasterization to the terminal. In order to understand and interprete them, a thorough understanding of the Type 1 font format specification and this special rasterizer implementation is crucial. \item\verb+--checkPerformance+: This option affects the X11 string rastering functions. An additional output window is created and the output of before-mentioned functions is directly written into this window. Note that this window is not managed as might be expected. Text is only drawn at the visible parts and after partially or completely hiding and again raising the respective areas are lost. This mechanism should simply give an idea of how fast the X11 rastering function work, admittedly a critical topic in \tonelib. \item\verb+--checkCopyFont+: This option is used to check the proper functioning of the \verb+T1_CopyFont()+ function. It copies all fonts from the database to new logical fonts and slants these fonts by 0.3. Finally an additional fontfile is added to the database. For each step the new font ID is printed to the terminal and the initial and final number of fonts are printed. \item\verb+--checkConcatGlyphs+: This option affects the buttons \fbox{\bf String} and \fbox{\bf AAString}. The requested string glyph is generated twice, first time using the current value of font ID and second time using this values plus 1. Both resulting glyphs are concatenated and the result is shown in the output window. \item\verb+--checkConcatOutlines+: This option, too, affects the standard string rastering functions. The current test string will be fetched as an outline using the current font ID. The result is then concatenated with a horizontal movement of 1000 charspace unit which is followed by the identical string using a font ID advanced by 1. The result of the concatenated outlines is then filled and converted to a \tonelib-glyph. For details on outline handling and what it is meant for see \ref{outlines}. When \verb+--checkConcatGlyphs+ and \verb+--checkConcatOutlines+ both are specified on commandline, the \verb+--checkConcatGlyphs+ is respected. \item\verb+--checkBadCharHandling+: This option provides a means of examining the effects of problematic/bad characters on string handling in \tonelib with \verb+xglyph+. It affects only the \fbox{\bf String} button. The character to be specified in the test character field is inserted in the middle of the test string. This enables the user to insert arbitrary character codes in the middle of a test string and to watch the effect in \verb+T1_SetString()+. For example, starting \verb+xglyph+ with this option exclusively and immediately clicking \fbox{\bf String} will show the string {\em TeAt} in the output window because the character `s' has been overwritten by character $65_{10}$ (`A'), the default test character. \item\verb+--checkDefaultEncoding+: This option proves that the default encoding feature works correct. If set, all fonts should be encoded in IsoLatin1 encoding immediately after startup and without any slow down at startup. \item\verb+--checkSmartAntialiasing+: Enables smart antialiasing as described in \ref{antialiasing}. The effect is that \tonelib\ will determine the antialiasing level by itself. For sizes below 20~bp, $4\times$ antialiasing will be used and up to 60~bp $2\times$ antialiasing is used. For size of 60~bp and larger a ``bytemap'' is created which in fact consists only of pure background and foreground pixels. When this options has been specified, toggling the antialiasing level has no effect. \item\verb+--checkAACaching+: This option enables caching of antialiased character glyphs. For a discussion of this issue see \ref{aacaching}. The string rastering functions are not affected by this option. \item \verb+--checkSetRect+: This option allows to check the rectangle drawing functions of \tonelib. If specified, the character drawing buttons will produce an em unit square of the current font instead of the expected character. \item \verb+--cacheStrokedGlyphs+: If this option is specified, \verb+xglyph+ will cache stroked glyphs whereas filled ones are not cached. \end{itemize} For those who are wondering about special X11 options like ``\verb+-display+'', \verb+xglyph+ does not support these. The widgets are built straight ahead and the layout is fixed. \verb+xglyph+ is meant to be a tool for testing some of the functionalities of \tonelib\ and nothing more. Of course, a display other than \verb+localhost:0.0+ may be specified by environment variable \verb+DISPLAY+. \subsection{Fonts Included in the \tonelib-Package} \label{fonts}% Included in the \tonelib-package are 8 fonts of two families which are freely available. \begin{enumerate} \item The CharterBT-fonts in Roman, Italic, Bold and BoldItalic variants. These are good quality fonts containing kerning information. Notable kerning pairs are ``T''--``e'', ``A''--``V'' and ``A''--``T''. \item The ComputerModern-fonts by Donald E.~Knuth in the variants Roman, Italic, BoldExtended and BoldExtendedItalic. In addition to kerning information, there are many ligatures in these fonts. Most people will know about the present ligatures from using \TeX, the typesetting system. Notable examples are: \verb+--+ $\rightarrow$ ``--'', \verb+---+ $\rightarrow$ ``---'', \verb+fi+ $\rightarrow$ ``fi'' and \verb+ffi+ $\rightarrow$ ``ffi''. These fonts have the disadvantage that no ordinary space character is included, only a visible space. \TeX\ itself does not need a dedicated space character. \end{enumerate} Note that working with ligatures requires the ligatures to be encoded at the positions they are expected. Thus, if you reencode one of the dc-fonts with the IsoLatin1-encoding funny effects may occur. \subsection{Some General Remarks on {\tt xglyph}} The program \verb+xglyph+ is just intended to check whether \tonelib\ works on a particular system. It is written straight forward and does not care much on performance and such. Especially, it is not a typical application for a rasterizer library. The bitmaps are generated and then the output window is adapted to the size of the bitmap/pixmap generated by the rastering function. This contradicts the X11 principle of ``drawing into a drawable'' and requires some overhead if one wants a fitted output window. In that sense, the performance of the X11 rastering functions is not directly comparable to the performance of the standard rastering functions. This should always be kept in mind. %%% Local Variables: %%% mode: latex %%% TeX-master: "t1lib_doc" %%% End: t1lib-5.1.2/doc/xinterface.tex0000644000175000001440000003461110733501626014710 0ustar rmzusers%---------------------------------------------------------------------------- % ----- File: xinterface.tex % ----- Author: Rainer Menzner (Rainer.Menzner@web.de) % ----- Date: 2003-01-04 % ----- Description: This file is part of the t1lib-documentation. % ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003. % As of version 0.5, t1lib is distributed under the % GNU General Public Library Lincense. The % conditions can be found in the files LICENSE and % LGPL, which should reside in the toplevel % directory of the distribution. Please note that % there are parts of t1lib that are subject to % other licenses: % The parseAFM-package is copyrighted by Adobe Systems % Inc. % The type1 rasterizer is copyrighted by IBM and the % X11-consortium. % ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) % ----- Credits: I want to thank IBM and the X11-consortium for making % their rasterizer freely available. % Also thanks to Piet Tutelaers for his ps2pk, from % which I took the rasterizer sources in a format % independ from X11. % Thanks to all people who make free software living! %---------------------------------------------------------------------------- \newpage \section{The X11-Interface} \label{x11interface} As of V.\ 0.3-beta \tonelib\ incorporates some special functions that can make life easier for X11 programmers. Prior to further discussions it should be noted that these functions, which itself use functions \verb+Xlib+ are fully optional so that \tonelib\ can still be compiled and used on systems without X11. \subsection{Why a Special X11-Interface?} Although it initially was an explicit goal to make the library independent of X11, there are some strong arguments voting for a subset of functions adapted to X11 features. Here are some of them. \begin{itemize} \item X11 can be considered a standard under UNIX and graphical applications under UNIX would to a high probability rely on X11. For this reason it would not degrade portability much when using X11 features. \item The standard rastering functions of \tonelib\ strictly use the principle of {\em generating bitmaps}. The rastering functions return bitmaps of a specific size with reference point at upper left corner and additional geometric information to tell the user how to position the bitmap correctly with respect to the current point. A more natural approach would be to have functions that draw on some existent {\em area} at a position and orientation to be specified with the logical origin of the text taken into account. \item The standard functions do not deal with color at all. This is especially complicated in the case of antialiased fonts. If some application wanted to use an existent (already cached) font, all characters would have to be removed from memory and recreated using the new color values. \item In case of antialiasing the user has to make a decision on the depth of the bitmaps. But what if an X-application uses drawables of different depths? Such configurations could raise the programming effort up infinity (well, alomst). \item The standard functions cache their bitmaps locally, i.e., on the machine where the X11-client runs. Every characters bitmap has thus to be transferred to the X11 server again and again. This might cause an performance degradation, especially if the client runs on a remote machine with a slow or heavy-loaded network connection. \end{itemize} Taken these arguments into account I decided to create an additional ``special'' set of functions that allow uncomplicated usage under the X11 window system, similar to the \verb+Xlib+-function \verb+X11DrawText()+. The approach used in V.~0.3-beta has been a quite elegant solution to the problems considered above. Unfortunately, it has been too slow to be usable in practice. Furthermore, caching in the X11-server produced some overhead and difficulties. According to my experiences server caching would only be advantageous for very large characters such as 500 bp and more. As a consequence, the X11 interface is redesigned and reduced to a {\em simple wrapper} which deals with all but the last of the above items, from \tonelib\ V.~0.4-beta up. \subsection{Initialization of the X11-Interface} There are a few things \tonelib\ must know in order to be able to do its job properly. These parameters are defined by a functioncall to \precorr \begin{verbatim} int T1_SetX11Params( Display *display, Visual *visual, unsigned int depth, Colormap colormap) \end{verbatim}\index{\verb+T1_SetX11Params()+}\postcorr \verb+display+ is the pointer to the structure of the display the application is connected to. It is once specified here because this avoids the need of repeatedly having to specify this pointer. \verb+visual+ is the pointer to the structure of the visual on which \tonelib\ should create the XImages that will be transferred to the X server when using antialiasing. In most cases it should be safe to specify \verb+DefaultVisual(...)+. The \verb+depth+-argument specifies the depth that \tonelib\ will use when creating antialiased pixmaps. It is thus identical to the value \verb+bpp+ supplied to \verb+T1_AASetBitsPerPixel()+ (see \ref{antialiasing}). The depth must be one of the depth supported by the visual as specified above. \verb+colormap+ is the specification of an X11 colomap. It is needed because \tonelib\ might need to allocate some more colors for antialiasing purposes. The same colormap that the application uses should be specified here. If the application uses no special color handling, \verb+DefaultColormap(...)+ is probably the right value. As mentioned before, the X11 rastering functions put the characters with their origin at the specified point. This behavior, being the default, can be switched by calling \precorr \begin{verbatim} void T1_LogicalPositionX( int pos_switch) \end{verbatim}\index{\verb+T1_LogicalPositionX()+}\postcorr Specifying \verb+pos_switch+=0 has the effect that in subsequent calls to X11 rastering functions the result will be placed with the upper left corner at the specified position. The default behavior can be restored by calling this function again with some non-zero value. \subsection{Rastering Functions} In analogy to the standard rastering functions the \tonelib\ X11 interface provides six functions for generating character and string bitmaps, rectangles as well as their antialiased equivalents: \precorr \begin{verbatim} GLYPH *T1_SetCharX( Drawable d, GC gc, int mode, int x, int y, int FontID, char charcode, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_SetCharX()+}\postcorr \precorr \begin{verbatim} GLYPH *T1_SetStringX( Drawable d, GC gc, int mode, int x, int y, int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_SetStringX()+}\postcorr \precorr \begin{verbatim} GLYPH *T1_SetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, float size, float width, float height, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_SetRectX()+}\postcorr \precorr \begin{verbatim} GLYPH *T1_AASetCharX( Drawable d, GC gc, int mode, int x, int y, int FontID, char charcode, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_AASetCharX()+}\postcorr \precorr \begin{verbatim} GLYPH *T1_AASetStringX( Drawable d, GC gc, int mode, int x, int y, int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_AASetStringX()+}\postcorr \precorr \begin{verbatim} GLYPH *T1_AASetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, float size, float width, float height, T1_TMATRIX *transform) \end{verbatim}\index{\verb+T1_AASetRectX()+}\postcorr Instead of explaining everything in detail, we will discuss only those items that are different from the standard rastering. For discussion of the parameters \verb+FontID+, \verb+charcode+, \verb+string+, \verb+len+, \verb+spaceoff+, \verb+modflag+, \verb+size+ and \verb+transform+ see \ref{generatingbitmaps}. The \verb+drawable+ parameter specifies the X11 drawable into which the text will be drawn. It may be either a pixmap or a window. \verb+gc+ is the graphics context in which the operation should take place. Obviously, the most importamt components of the graphics context are the current foreground and background color. \tonelib\ uses these colors to draw the text/background. The value of \verb+mode+ determines whether {\em opaque} or {\em transparent} mode is used. In opaque mode all pixels including background pixels are drawn. This means the whole area of the bounding box of the character/string is painted. In transparent mode, only non-background pixels are drawn so that underlying graphics are minimum affected. One could imagine that as drawing the text on a transparent slide and overlay the result with the existent graphics. Using transparent mode should be somewhat slower, especially for the antialiasing functions since the information which pixels are background and which not has to be generated first. Moreover, the clipmask of the current graphics context is modified when drawing text in transparent mode. \verb+x+ and \verb+y+ define the position coordinates where the origin of the text will be located in the drawable. \tonelib\ does no checking of this position so that bad positioned text might not appear at all in the drawable without getting an error---it is simply clipped to the limits of the drawable. The non-antialiasing functions will take the fore- and background color from the specified graphics context. The antialiasing rastering functions work a little different. They also respect the current foreground and background color. The ``graylevel'' colors are computed on the fly and allocated in the colormap specified by the user in the call to \verb+T1_SetX11Params()+. The term graylevel has been quoted since these are in fact no graylevels at all. They are just discrete colors from a smooth bleed between the foreground and the background color. The colors are computed the following according to the following scheme: \begin{enumerate} \item The current foreground and background color are split into their respective RGB components, lets call them $f_R$, $f_G$, $f_B$, $b_R$, $b_G$ and $b_B$. \item Intermediate values are computed between each pair of color components $f_R$--$b_R$, $f_G$--$b_G$ and $f_B$--$b_B$ by making a linear interpolation. \item For each newly created RGB-triple (currently 3) a pixel color is allocated in the colormap specified by the user in a way that the pixel colors match the theoretical values best. \end{enumerate} A general comment on antialiasing: If using transparent mode antialiasing may produce the opposite effect of what is wanted, depending on the color of the underlying graphics. You can use the program \verb+xglyph+ to check the effect: Start \verb+xglyph+ and prior to doing anything else click on button \fbox{AAStringX}. The resulting glyph is antialiased against the background color white but the real background due to transparency is quite different from white. Consequently the glyph seems to be surrounded by a thin light gray border. \subsection{Creating XPM-Files from \tonelib-Glyphs} \label{xpmfiles} The creation XPM files is not supported directly in \tonelib. Rather, there is a utility function which prepares what is necessary and leaves the creation of the Pixmap file to the one and only authority, to the Pixmap library. The required function is: \precorr \begin{verbatim} XImage *T1_XImageFromGlyph( GLYPH *glyph) \end{verbatim}\index{\verb+T1_XImageFromGlyph()+}\postcorr It creates an X11 image from a valid \tonelib-glyph of arbitrary depth, padding and antialiasing configuration and returns the pointer to the newly created structure. This image can later be dumped into an XPM file using the XPM library function \verb+XpmWriteFileFromImage()+. The following code fragment shows how easy this really is. It assumes that the program containing that code is additionally linked with the XPM library. \begin{verbatim} . . . ximage=T1_XImageFromGlyph( glyph); /* generate ximage containg the glyph */ /* write pixmap file */ XpmWriteFileFromImage( display, "glyphtest.xpm", ximage, NULL, NULL); ximage->data=NULL; XDestroyImage( ximage); . . . \end{verbatim} As already shown in this example code, the user has to take care for that \verb+XDestroyImage()+ does not free the glyph's bitmap. This achieved by setting \verb+ximage->data+ to \verb+NULL+. Having an XPM file from a \tonelib-glyph it should easily be possible to create graphic files of arbitrary formats, e.g., by using \verb+xv+. \subsection{Limits of the X11 Interface} A few words about what the X11 interface can do and cannot do are appropriate, I think. Except for that a few global variables of \tonelib\ are accessible, the whole code of the X11 interface could as well be part of an application instead of being part of \tonelib. In other words, \tonelib\ is not able to do anything an application program could not do. This applies especially to performance improvements. Unfortunately---but consequently, the X11 rastering functions are not faster than the standard rastering functions. To come to a conclusion, this is what the X rastering functions offer to the user: \begin{itemize} \item Save the user entirely from thinking about color. \item Offers a set functions comparable to \verb+XDrawText()+. \item Frees the user from having to think about transparency and opacity. \item Implements antialiasing between any given pair of foreground/background colours. \end{itemize} And here is what they not provide: \begin{itemize} \item Functions that perform as if the rasterizer would be part of the X server. \end{itemize} That's life, folks. %%% Local Variables: %%% mode: latex %%% TeX-master: "t1lib_doc" %%% End: t1lib-5.1.2/etc/0000755000175000001440000000000010733501626012037 5ustar rmzuserst1lib-5.1.2/etc/README0000644000175000001440000000030710733501626012717 0ustar rmzusersThis directory is intended as a container for files which have turned to be handy during development. It is not for using t1lib. 2002-12-08, RMz t1lib-5.1.2/etc/charpath2.ps0000644000175000001440000002675510733501626014276 0ustar rmzusers% 3. /xa 100 def /ya 100 def /xb 100 def /yb 400 def /xc 500 def /yc 750 def /xd 500 def /yd 100 def % 4. /xa 100 def /ya 300 def /xb 100 def /y5 400 def /xc 500 def /yc 300 def /xd 300 def /yd 300 def % 1. /xa 100 def /ya 100 def /xb 300 def /yb 150 def /xc 300 def /yc 500 def /xd 550 def /yd 600 def % 2. /xa 100 def /ya 100 def /xb 100 def /yb 400 def /xc 300 def /yc 550 def /xd 500 def /yd 600 def %% t1lib test %100 100 translate /TimesRoman findfont 25 scalefont setfont /line1 20 string def % t1lib test . segment 1 /xa 139.000000 def /ya 118.000000 def /xb 104.000000 def /yb 118.000000 def /xc 75.000000 def /yc 90.000000 def /xd 75.000000 def /yd 54.000000 def % t1lib test . segment 2 /xa 75.000000 def /ya 54.000000 def /xb 75.000000 def /yb 18.000000 def /xc 104.000000 def /yc -9.000000 def /xd 139.000000 def /yd -9.000000 def % t1lib test Bitstream Charter BT Roman Character R: curve ppoints 19 ... 22 /xa 404.000000 def /ya 192.000000 def /xb 425.000000 def /yb 128.000000 def /xc 429.000000 def /yc 63.000000 def /xd 477.000000 def /yd 21.000000 def % test a straight line, slope 45 degrees /xa 100.0 def /ya 100.0 def /xb 150.0 def /yb 125.0001 def /xc 200.0 def /yc 150.0 def /xd 250.0 def /yd 175.0 def % t1lib test Bitstream Charter BT Roman Character R: curve ppoints 29 ... 32 /xa 656.000000 def /ya 39.000000 def /xb 653.000000 def /yb 39.000000 def /xc 650.000000 def /yc 39.000000 def /xd 647.000000 def /yd 39.000000 def % t1lib test Bitstream Charter BT Roman Character R: curve ppoints 29 ... 32 /xa 656.000000 def /ya 39.000000 def /xb 653.000000 def /yb 39.000000 def /xc 650.000000 def /yc 39.000000 def /xd 647.000000 def /yd 39.000000 def % t1lib test Bitstream Charter BT Roman Character R: curve ppoints 19 ... 22 /xa 404.000000 def /ya 192.000000 def /xb 425.000000 def /yb 128.000000 def /xc 429.000000 def /yc 63.000000 def /xd 477.000000 def /yd 21.000000 def /xa 404.000000 def /ya 192.000000 def %/xb 424.90100 def % critical location where tmp2 approx. equals btmp3 /xb 424.90666 def % critical location where tmp2 approx. equals btmp3 /yb 128.000000 def /xc 429.000000 def /yc 63.000000 def /xd 477.000000 def /yd 21.000000 def /xa 305.000000 def /ya 652.000000 def /xb 395.000000 def /yb 652.000000 def /xc 507.000000 def /yc 648.000000 def /xd 507.000000 def /yd 503.000000 def /xa 435.000000 00 sub def /ya 340.000000 def /xb 532.000000 00 sub def /yb 364.000000 def /xc 610.000000 00 sub def /yc 425.000000 def /xd 610.000000 00 sub def /yd 503.000000 def /xa 458.000000 def /ya 357.000000 def /xb 555.000000 def /yb 376.000000 def /xc 624.000000 def /yc 440.000000 def /xd 624.000000 def /yd 514.000000 def /xa 327.000000 def /ya 89.000000 def /xb 335.000000 def /yb 78.000000 def /xc 348.000000 def /yc 62.000000 def /xd 348.000000 def /yd 56.000000 def /linewidth 30 def % compute distance from Bezier_A to Bezier_B /dista xb xa sub dup mul yb ya sub dup mul add sqrt def % compute distance from Bezier_C to Bezier_D /distd xd xc sub dup mul yd yc sub dup mul add sqrt def /diameter linewidth 2 div def % compute resulting limit values of thick curve at end points /dxa yb ya sub diameter mul dista div def /dya xb xa sub diameter mul dista div neg def /dxd yd yc sub diameter mul distd div def /dyd xd xc sub diameter mul distd div neg def % draw curve as rendered by ghostscript xa ya moveto xb yb xc yc xd yd curveto %linewidth 40 div setlinewidth linewidth setlinewidth 0 setlinecap stroke % correct right path end points /xar xa dxa add def /yar ya dya add def /xdr xd dxd add def /ydr yd dyd add def % correct left path end points /xal xa dxa sub def /yal ya dya sub def /xdl xd dxd sub def /ydl yd dyd sub def /x1 xa xb add 0.5 mul def /y1 ya yb add 0.5 mul def /x2 xb xc add 0.5 mul def /y2 yb yc add 0.5 mul def /x3 xc xd add 0.5 mul def /y3 yc yd add 0.5 mul def /x4 xa xb 2 mul add xc add 4 div def /y4 ya yb 2 mul add yc add 4 div def /x5 xd xc 2 mul add xb add 4 div def /y5 yd yc 2 mul add yb add 4 div def /x6 xa xb 3 mul add xc 3 mul add xd add 8 div def /y6 ya yb 3 mul add yc 3 mul add yd add 8 div def 0 0 0 setrgbcolor newpath xa ya 2.0 0 360 arc closepath fill newpath xb yb 2.0 0 360 arc closepath fill newpath xc yc 2.0 0 360 arc closepath fill newpath xd yd 2.0 0 360 arc closepath fill 1 0 0 setrgbcolor newpath x1 y1 2.0 0 360 arc closepath fill newpath x2 y2 2.0 0 360 arc closepath fill newpath x3 y3 2.0 0 360 arc closepath fill 0 1 0 setrgbcolor newpath x4 y4 2.0 0 360 arc closepath fill newpath x5 y5 2.0 0 360 arc closepath fill 0 0 1 setrgbcolor newpath x6 y6 2.0 0 360 arc closepath fill % compute right-side normal vector /nabs diameter x5 x4 sub dup mul y5 y4 sub dup mul add sqrt div def /nxr y5 y4 sub nabs mul def /nyr x4 x5 sub nabs mul def % calculate location and direction vectors of lines to intersect /bloc1x 4 nxr x6 add mul xar 2 mul sub xdr add 3 div def /bloc1y 4 nyr y6 add mul yar 2 mul sub ydr add 3 div def /bdir1x xc xd add xa sub xb sub def /bdir1y yc yd add ya sub yb sub def /bloc2x xar def /bloc2y yar def /bdir2x xb xa sub def /bdir2y yb ya sub def % calculate determinant and inverse /bdet bdir2x bdir1y mul bdir2y bdir1x mul sub def %bdet 0.0 eq bdet abs 0.001 le { /xbr xb nxr add def /ybr yb nyr add def /bnu 0.0 def /bmu 0.0 def } { /binvdet 1 bdet div def % calculate inverse of dir matrix /binvdir2x bdir1y binvdet mul def /binvdir2y bdir2y binvdet mul neg def /binvdir1x bdir1x binvdet mul neg def /binvdir1y bdir2x binvdet mul def % calculate mu and nu value (nu actually is not required) /bmu binvdir2x bloc1x bloc2x sub mul binvdir1x bloc1y bloc2y sub mul add def /bnu binvdir2y bloc1x bloc2x sub mul binvdir1y bloc1y bloc2y sub mul add def /xbr bloc2x bmu bdir2x mul add def /ybr bloc2y bmu bdir2y mul add def } ifelse % calculate location and direction vectors of lines to intersect /cloc1x 4 nxr x6 add mul xar add xdr 2 mul sub 3 div def /cloc1y 4 nyr y6 add mul yar add ydr 2 mul sub 3 div def /cdir1x xc xd add xa sub xb sub def /cdir1y yc yd add ya sub yb sub def /cloc2x xdr def /cloc2y ydr def /cdir2x xc xd sub def /cdir2y yc yd sub def % calculate determinant and inverse /cdet cdir2x cdir1y mul cdir2y cdir1x mul sub def %cdet 0.0 eq cdet abs 0.001 le { % curve is just a straight line /xcr xc nxr add def /ycr yc nyr add def /cmu 0.0 def } { /cinvdet 1 cdet div def % calculate inverse of dir matrix /cinvdir2x cdir1y cinvdet mul def /cinvdir2y cdir2y cinvdet mul neg def /cinvdir1x cdir1x cinvdet mul neg def /cinvdir1y cdir2x cinvdet mul def % calculate mu and nu value (mu actually is not required) /cmu cinvdir2x cloc1x cloc2x sub mul cinvdir1x cloc1y cloc2y sub mul add def /cnu cinvdir2y cloc1x cloc2x sub mul cinvdir1y cloc1y cloc2y sub mul add def /xcr cloc2x cmu cdir2x mul add def /ycr cloc2y cmu cdir2y mul add def } ifelse % Analyse coefficients and decide how to compute displacements bmu 0.1 le { /xbr 8 nxr x6 add mul xar sub xdr sub 3 div xcr sub def /ybr 8 nyr y6 add mul yar sub ydr sub 3 div ycr sub def } if cmu 0.1 le { /xcr 8 nxr x6 add mul xar sub xdr sub 3 div xbr sub def /ycr 8 nyr y6 add mul yar sub ydr sub 3 div ybr sub def } if % % display debug info on page 10 625 moveto (xa = ) show xa line1 cvs show 10 600 moveto (ya = ) show ya line1 cvs show 10 575 moveto (xb = ) show xb line1 cvs show 10 550 moveto (yb = ) show yb line1 cvs show 10 525 moveto (xc = ) show xc line1 cvs show 10 500 moveto (yc = ) show yc line1 cvs show 10 475 moveto (xd = ) show xd line1 cvs show 10 450 moveto (yd = ) show yd line1 cvs show % display debug info on page 10 425 moveto (xar = ) show xar line1 cvs show 10 400 moveto (yar = ) show yar line1 cvs show 10 375 moveto (xbr = ) show xbr line1 cvs show 10 350 moveto (ybr = ) show ybr line1 cvs show 10 325 moveto (xcr = ) show xcr line1 cvs show 10 300 moveto (ycr = ) show ycr line1 cvs show 10 275 moveto (xdr = ) show xdr line1 cvs show 10 250 moveto (ydr = ) show ydr line1 cvs show 10 1150 moveto (bdir1x = ) show bdir1x line1 cvs show 10 1125 moveto (bdir1y = ) show bdir1y line1 cvs show 10 1100 moveto (bdir2x = ) show bdir2x line1 cvs show 10 1075 moveto (bdir2y = ) show bdir2y line1 cvs show 10 1050 moveto (cdir1x = ) show cdir1x line1 cvs show 10 1025 moveto (cdir1y = ) show cdir1y line1 cvs show 10 1000 moveto (cdir2x = ) show cdir2x line1 cvs show 10 975 moveto (cdir2y = ) show cdir2y line1 cvs show 210 1150 moveto (bloc1x = ) show bloc1x line1 cvs show 210 1125 moveto (bloc1y = ) show bloc1y line1 cvs show 210 1100 moveto (bloc2x = ) show bloc2x line1 cvs show 210 1075 moveto (bloc2y = ) show bloc2y line1 cvs show 210 1050 moveto (cloc1x = ) show cloc1x line1 cvs show 210 1025 moveto (cloc1y = ) show cloc1y line1 cvs show 210 1000 moveto (cloc2x = ) show cloc2x line1 cvs show 210 975 moveto (cloc2y = ) show cloc2y line1 cvs show 10 925 moveto (bdet = ) show bdet line1 cvs show 10 900 moveto (cdet = ) show cdet line1 cvs show 10 850 moveto (bmu = ) show bmu line1 cvs show 10 825 moveto (cmu = ) show cmu line1 cvs show 10 800 moveto (bnu = ) show bnu line1 cvs show 10 775 moveto (cnu = ) show cnu line1 cvs show 210 850 moveto (nabs = ) show nabs line1 cvs show 210 825 moveto (nxr = ) show nxr line1 cvs show 210 800 moveto (nyr = ) show nyr line1 cvs show 10 700 moveto (P1 = \( ) show x1 line1 cvs show ( , ) show y1 line1 cvs show ( \)) show 10 675 moveto (P2 = \( ) show x2 line1 cvs show ( , ) show y2 line1 cvs show ( \)) show 10 650 moveto (P3 = \( ) show x3 line1 cvs show ( , ) show y3 line1 cvs show ( \)) show 310 700 moveto (P4 = \( ) show x4 line1 cvs show ( , ) show y4 line1 cvs show ( \)) show 310 675 moveto (P5 = \( ) show x5 line1 cvs show ( , ) show y5 line1 cvs show ( \)) show 310 650 moveto (P6 = \( ) show x6 line1 cvs show ( , ) show y6 line1 cvs show ( \)) show % define delta values /dxb xbr xb sub def /dyb ybr yb sub def /dxc xcr xc sub def /dyc ycr yc sub def 2 setlinewidth % show shifted line x4 nxr add y4 nyr add moveto x5 nxr add y5 nyr add lineto x4 nxr sub y4 nyr sub moveto x5 nxr sub y5 nyr sub lineto stroke 1 0 0 setrgbcolor 0.5 setlinewidth % stroke right curve xar yar moveto xb dxb add yb dyb add xc dxc add yc dyc add xdr ydr curveto stroke % stroke left curve xal yal moveto xb dxb sub yb dyb sub xc dxc sub yc dyc sub xdl ydl curveto stroke %0.2 0.5 0.8 setrgbcolor %newpath bloc2x bloc2y 5.0 0 360 arc closepath fill %bloc2x 10 bdir2x mul sub bloc2y 10 bdir2y mul sub moveto %bloc2x 10 bdir2x mul add bloc2y 10 bdir2y mul add lineto stroke %0.5 0.5 0.5 setrgbcolor %newpath bloc1x bloc1y 5.0 0 360 arc closepath fill %bloc1x 10 bdir1x mul sub bloc1y 10 bdir1y mul sub moveto %bloc1x 10 bdir1x mul add bloc1y 10 bdir1y mul add lineto stroke 0 0 1 setrgbcolor %1 setlinewidth %[5 5] 0 setdash 0.1 setlinewidth [1 0] 0 setdash xa ya moveto xb yb lineto stroke xd yd moveto xc yc lineto stroke xar yar moveto xb dxb add yb dyb add lineto stroke xdr ydr moveto xc dxc add yc dyc add lineto stroke xal yal moveto xb dxb sub yb dyb sub lineto stroke xdl ydl moveto xc dxc sub yc dyc sub lineto stroke %xa diameter add ya moveto %xa diameter add yb diameter 2 div sub xc diameter 2 div add yc diameter sub xd yd diameter sub curveto %stroke %xa diameter sub ya moveto %xa diameter sub yb diameter 2 div add xc diameter 2 div sub yc diameter add xd yd diameter add curveto %stroke %/TimesItalic findfont 500 scalefont setfont %/Hershey-Gothic-English findfont 500 scalefont setfont %100 400 moveto %(a) true charpath stroke %0 0 0 setrgbcolor %0.5 setlinewidth %100 400 moveto %(a) true charpath stroke %(T) show showpage t1lib-5.1.2/lib/0000755000175000001440000000000010733501626012032 5ustar rmzuserst1lib-5.1.2/lib/t1lib/0000755000175000001440000000000010733501626013045 5ustar rmzuserst1lib-5.1.2/lib/t1lib/parseAFM.c0000644000175000001440000012736010733501626014660 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: parseAFM.c ----- Author: Adobe Systems Inc., modifications by Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2002-10-26 ----- Description: This file is part of the t1-library. It is the original parseAFM.h modified at a few points, especially for reading MSDOS-style AFM files. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ /* * (C) 1988, 1989, 1990 by Adobe Systems Incorporated. All rights reserved. * * This file may be freely copied and redistributed as long as: * 1) This entire notice continues to be included in the file, * 2) If the file has been modified in any way, a notice of such * modification is conspicuously indicated. * * PostScript, Display PostScript, and Adobe are registered trademarks of * Adobe Systems Incorporated. * * ************************************************************************ * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION, * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. * ************************************************************************ */ /* parseAFM.c * * This file is used in conjuction with the parseAFM.h header file. * This file contains several procedures that are used to parse AFM * files. It is intended to work with an application program that needs * font metric information. The program can be used as is by making a * procedure call to "parseFile" (passing in the expected parameters) * and having it fill in a data structure with the data from the * AFM file, or an application developer may wish to customize this * code. * * There is also a file, parseAFMclient.c, that is a sample application * showing how to call the "parseFile" procedure and how to use the data * after "parseFile" has returned. * * Please read the comments in parseAFM.h and parseAFMclient.c. * * History: * original: DSM Thu Oct 20 17:39:59 PDT 1988 * modified: DSM Mon Jul 3 14:17:50 PDT 1989 * - added 'storageProblem' return code * - fixed bug of not allocating extra byte for string duplication * - fixed typos * modified: DSM Tue Apr 3 11:18:34 PDT 1990 * - added free(ident) at end of parseFile routine * modified: DSM Tue Jun 19 10:16:29 PDT 1990 * - changed (width == 250) to (width = 250) in initializeArray */ #include #include #include #include /* this seems to be necessary on some SCO-systems */ #if !defined(_MSC_VER) # include #endif #include #include #include "parseAFM.h" #include "t1base.h" #include "t1misc.h" #define lineterm EOL /* line terminating character */ #define normalEOF 1 /* return code from parsing routines used only */ /* in this module */ #define Space "space" /* used in string comparison to look for the width */ /* of the space character to init the widths array */ #define False "false" /* used in string comparison to check the value of */ /* boolean keys (e.g. IsFixedPitch) */ #define MATCH(A,B) (strncmp((A),(B), MAX_NAME) == 0) /* Note: The functions token and linetoken are extended to be able to parse AFM files with DOS-style line-ends under UNIX. I don't know why AFM files which according to Adobe are explicitly intended to be used under UNIX have MSDOS-style line ends. However, we parse the tokens based on the following atoms. This should work on any system. */ #define CR '\r' /* a carriage return */ #define LF '\n' /* a linefeed, which is a newline under UNIX */ #define CTRL_Z 0x1A /* some AFM files have this characters as an end of file indicator. Who know why :) ? */ /*************************** GLOBALS ***********************/ static char *ident = NULL; /* storage buffer for keywords */ /* "shorts" for fast case statement * The values of each of these enumerated items correspond to an entry in the * table of strings defined below. Therefore, if you add a new string as * new keyword into the keyStrings table, you must also add a corresponding * parseKey AND it MUST be in the same position! * * IMPORTANT: since the sorting algorithm is a binary search, the strings of * keywords must be placed in lexicographical order, below. [Therefore, the * enumerated items are not necessarily in lexicographical order, depending * on the name chosen. BUT, they must be placed in the same position as the * corresponding key string.] The NOPE shall remain in the last position, * since it does not correspond to any key string, and it is used in the * "recognize" procedure to calculate how many possible keys there are. */ typedef enum { ASCENDER, CHARBBOX, CODE, COMPCHAR, CAPHEIGHT, CHARACTERSET, COMMENT, DESCENDER, ENCODINGSCHEME, ENDCHARMETRICS, ENDCOMPOSITES, ENDFONTMETRICS, ENDKERNDATA, ENDKERNPAIRS, ENDTRACKKERN, FAMILYNAME, FONTBBOX, FONTNAME, FULLNAME, ISFIXEDPITCH, ITALICANGLE, KERNPAIR, KERNPAIRXAMT, LIGATURE, CHARNAME, NOTICE, COMPCHARPIECE, STARTCHARMETRICS, STARTCOMPOSITES, STARTFONTMETRICS, STARTKERNDATA, STARTKERNPAIRS, STARTTRACKKERN, STDHW, STDVW, TRACKKERN, UNDERLINEPOSITION, UNDERLINETHICKNESS, VERSION, XYWIDTH, XWIDTH, WEIGHT, XHEIGHT, NOPE} PARSEKEY; /* keywords for the system: * This a table of all of the current strings that are vaild AFM keys. * Each entry can be referenced by the appropriate parseKey value (an * enumerated data type defined above). If you add a new keyword here, * a corresponding parseKey MUST be added to the enumerated data type * defined above, AND it MUST be added in the same position as the * string is in this table. * * IMPORTANT: since the sorting algorithm is a binary search, the keywords * must be placed in lexicographical order. And, NULL should remain at the * end. */ static char *keyStrings[] = { "Ascender", "B", "C", "CC", "CapHeight", "CharacterSet", "Comment", "Descender", "EncodingScheme", "EndCharMetrics", "EndComposites", "EndFontMetrics", "EndKernData", "EndKernPairs", "EndTrackKern", "FamilyName", "FontBBox", "FontName", "FullName", "IsFixedPitch", "ItalicAngle", "KP", "KPX", "L", "N", "Notice", "PCC", "StartCharMetrics", "StartComposites", "StartFontMetrics", "StartKernData", "StartKernPairs", "StartTrackKern", "StdHW", "StdVW", "TrackKern", "UnderlinePosition", "UnderlineThickness", "Version", "W", "WX", "Weight", "XHeight", NULL }; /*************************** PARSING ROUTINES **************/ /*************************** token *************************/ /* A "AFM File Conventions" tokenizer. That means that it will * return the next token delimited by white space. See also * the `linetoken' routine, which does a similar thing but * reads all tokens until the next end-of-line. */ static char *token(stream) FILE *stream; { int ch, idx; /* skip over white space, instead of the systems EOL-character we check explicitly for CR and LF as well as for ^Z. */ while ((ch = fgetc(stream)) == ' ' || ch == CR || ch == LF || ch == CTRL_Z || ch == ',' || ch == '\t' || ch == ';'); idx = 0; while (ch != EOF && ch != ' ' && ch != CR && ch != LF && ch != CTRL_Z && ch != '\t' && ch != ':' && ch != ';'){ ident[idx++] = ch; ch = fgetc(stream); } /* while */ if (ch == EOF && idx < 1) { return ((char *)NULL); } if (idx >= 1 && ch != ':' ) { ungetc(ch, stream); } if (idx < 1 ) { ident[idx++] = ch; /* single-character token */ } ident[idx] = 0; return(ident); /* returns pointer to the token */ } /* token */ /*************************** linetoken *************************/ /* "linetoken" will get read all tokens until the EOL character from * the given stream. This is used to get any arguments that can be * more than one word (like Comment lines and FullName). */ static char *linetoken(stream) FILE *stream; { int ch, idx; while ((ch = fgetc(stream)) == ' ' || ch == '\t' ); idx = 0; while (ch != EOF && ch != CR && ch != LF && ch != CTRL_Z) { ident[idx++] = ch; ch = fgetc(stream); } /* while */ ungetc(ch, stream); ident[idx] = 0; return(ident); /* returns pointer to the token */ } /* linetoken */ /*************************** recognize *************************/ /* This function tries to match a string to a known list of * valid AFM entries (check the keyStrings array above). * "ident" contains everything from white space through the * next space, tab, or ":" character. * * The algorithm is a standard Knuth binary search. */ static PARSEKEY recognize(ident) register char *ident; { int lower = 0, upper = (int) NOPE, midpoint=NOPE, cmpvalue; BOOL found = T1LIB_FALSE; while ((upper >= lower) && !found) { midpoint = (lower + upper)/2; if (keyStrings[midpoint] == NULL) break; cmpvalue = strncmp(ident, keyStrings[midpoint], MAX_NAME); if (cmpvalue == 0) found = T1LIB_TRUE; else if (cmpvalue < 0) upper = midpoint - 1; else lower = midpoint + 1; } /* while */ if (found) return (PARSEKEY) midpoint; else return NOPE; } /* recognize */ /************************* parseGlobals *****************************/ /* This function is called by "parseFile". It will parse the AFM File * up to the "StartCharMetrics" keyword, which essentially marks the * end of the Global Font Information and the beginning of the character * metrics information. * * If the caller of "parseFile" specified that it wanted the Global * Font Information (as defined by the "AFM File Specification" * document), then that information will be stored in the returned * data structure. * * Any Global Font Information entries that are not found in a * given file, will have the usual default initialization value * for its type (i.e. entries of type int will be 0, etc). * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static BOOL parseGlobals(fp, gfi) FILE *fp; register GlobalFontInfo *gfi; { BOOL cont = T1LIB_TRUE, save = (gfi != NULL); int error = ok; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) /* Have reached an early and unexpected EOF. */ /* Set flag and stop parsing */ { error = earlyEOF; break; /* get out of loop */ } if (!save) /* get tokens until the end of the Global Font info section */ /* without saving any of the data */ switch (recognize(keyword)) { case STARTCHARMETRICS: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; default: break; } /* switch */ else /* otherwise parse entire global font info section, */ /* saving the data */ switch(recognize(keyword)) { case STARTFONTMETRICS: keyword = token(fp); gfi->afmVersion = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->afmVersion, keyword); break; case COMMENT: /* We ignore the following keywords. They are only listed here in order to prevent from "Unknown Keyword" errors. */ case CHARACTERSET: case STDHW: case STDVW: keyword = linetoken(fp); break; case FONTNAME: keyword = linetoken(fp); gfi->fontName = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->fontName, keyword); break; case ENCODINGSCHEME: keyword = linetoken(fp); gfi->encodingScheme = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->encodingScheme, keyword); break; case FULLNAME: keyword = linetoken(fp); gfi->fullName = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->fullName, keyword); break; case FAMILYNAME: keyword = linetoken(fp); gfi->familyName = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->familyName, keyword); break; case WEIGHT: keyword = linetoken(fp); gfi->weight = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->weight, keyword); break; case ITALICANGLE: keyword = token(fp); gfi->italicAngle = atof(keyword); if (errno == ERANGE) error = parseError; break; case ISFIXEDPITCH: keyword = token(fp); if (MATCH(keyword, False)) gfi->isFixedPitch = 0; else gfi->isFixedPitch = 1; break; case UNDERLINEPOSITION: keyword = token(fp); gfi->underlinePosition = atoi(keyword); break; case UNDERLINETHICKNESS: keyword = token(fp); gfi->underlineThickness = atoi(keyword); break; case VERSION: keyword = linetoken(fp); gfi->version = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->version, keyword); break; case NOTICE: keyword = linetoken(fp); gfi->notice = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->notice, keyword); break; case FONTBBOX: keyword = token(fp); gfi->fontBBox.llx = atoi(keyword); keyword = token(fp); gfi->fontBBox.lly = atoi(keyword); keyword = token(fp); gfi->fontBBox.urx = atoi(keyword); keyword = token(fp); gfi->fontBBox.ury = atoi(keyword); break; case CAPHEIGHT: keyword = token(fp); gfi->capHeight = atoi(keyword); break; case XHEIGHT: keyword = token(fp); gfi->xHeight = atoi(keyword); break; case DESCENDER: keyword = token(fp); gfi->descender = atoi(keyword); break; case ASCENDER: keyword = token(fp); gfi->ascender = atoi(keyword); break; case STARTCHARMETRICS: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; case NOPE: default: error = parseError; T1_PrintLog( "parseGlobals()", "Unknown Keyword: %s", T1LOG_WARNING, keyword); break; } /* switch */ } /* while */ return(error); } /* parseGlobals */ /************************* initializeArray ************************/ /* Unmapped character codes are (at Adobe Systems) assigned the * width of the space character (if one exists) else they get the * value of 250 ems. This function initializes all entries in the * char widths array to have this value. Then any mapped character * codes will be replaced with the width of the appropriate character * when parsing the character metric section. * This function parses the Character Metrics Section looking * for a space character (by comparing character names). If found, * the width of the space character will be used to initialize the * values in the array of character widths. * * Before returning, the position of the read/write pointer of the * file is reset to be where it was upon entering this function. */ /* We comment out the following function since it is not needed in t1lib and we don't want compiler warnings */ /* static int initializeArray(fp, cwi) FILE *fp; register int *cwi; { BOOL cont = T1LIB_TRUE, found = T1LIB_FALSE; long opos = ftell(fp); int code = 0, width = 0, i = 0, error = 0; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) { error = earlyEOF; break; } switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case CODE: code = atoi(token(fp)); break; case XWIDTH: width = atoi(token(fp)); break; case CHARNAME: keyword = token(fp); if (MATCH(keyword, Space)) { cont = T1LIB_FALSE; found = T1LIB_TRUE; } break; case ENDCHARMETRICS: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } } if (!found) width = 250; for (i = 0; i < 256; ++i) cwi[i] = width; fseek(fp, opos, 0); return(error); } */ /************************* parseCharWidths **************************/ /* This function is called by "parseFile". It will parse the AFM File * up to the "EndCharMetrics" keyword. It will save the character * width info (as opposed to all of the character metric information) * if requested by the caller of parseFile. Otherwise, it will just * parse through the section without saving any information. * * If data is to be saved, parseCharWidths is passed in a pointer * to an array of widths that has already been initialized by the * standard value for unmapped character codes. This function parses * the Character Metrics section only storing the width information * for the encoded characters into the array using the character code * as the index into that array. * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static int parseCharWidths(fp, cwi) FILE *fp; register int *cwi; { BOOL cont = T1LIB_TRUE, save = (cwi != NULL); int pos = 0, error = ok; register char *keyword; while (cont) { keyword = token(fp); /* Have reached an early and unexpected EOF. */ /* Set flag and stop parsing */ if (keyword == NULL) { error = earlyEOF; break; /* get out of loop */ } if (!save) /* get tokens until the end of the Char Metrics section without */ /* saving any of the data*/ switch (recognize(keyword)) { case ENDCHARMETRICS: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; default: break; } /* switch */ else /* otherwise parse entire char metrics section, saving */ /* only the char x-width info */ switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case CODE: keyword = token(fp); pos = atoi(keyword); break; case XYWIDTH: /* PROBLEM: Should be no Y-WIDTH when doing "quick & dirty" */ keyword = token(fp); keyword = token(fp); /* eat values */ error = parseError; break; case XWIDTH: keyword = token(fp); if (pos >= 0) /* ignore unmapped chars */ cwi[pos] = atoi(keyword); break; case ENDCHARMETRICS: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; case CHARNAME: /* eat values (so doesn't cause parseError) */ keyword = token(fp); break; case CHARBBOX: keyword = token(fp); keyword = token(fp); keyword = token(fp); keyword = token(fp); break; case LIGATURE: keyword = token(fp); keyword = token(fp); break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ return(error); } /* parseCharWidths */ /************************* parseCharMetrics ************************/ /* This function is called by parseFile if the caller of parseFile * requested that all character metric information be saved * (as opposed to only the character width information). * * parseCharMetrics is passed in a pointer to an array of records * to hold information on a per character basis. This function * parses the Character Metrics section storing all character * metric information for the ALL characters (mapped and unmapped) * into the array. * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static int parseCharMetrics(fp, fi) FILE *fp; register FontInfo *fi; { BOOL cont = T1LIB_TRUE, firstTime = T1LIB_TRUE; int error = ok, count = 0; register CharMetricInfo *temp = fi->cmi; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) { error = earlyEOF; break; /* get out of loop */ } switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case CODE: if (count < fi->numOfChars) { if (firstTime) firstTime = T1LIB_FALSE; else temp++; temp->code = atoi(token(fp)); count++; } else { error = parseError; cont = T1LIB_FALSE; } break; case XYWIDTH: temp->wx = atoi(token(fp)); temp->wy = atoi(token(fp)); break; case XWIDTH: temp->wx = atoi(token(fp)); break; case CHARNAME: keyword = token(fp); temp->name = (char *) malloc(strlen(keyword) + 1); strcpy(temp->name, keyword); break; case CHARBBOX: temp->charBBox.llx = atoi(token(fp)); temp->charBBox.lly = atoi(token(fp)); temp->charBBox.urx = atoi(token(fp)); temp->charBBox.ury = atoi(token(fp)); break; case LIGATURE: { Ligature **tail = &(temp->ligs); Ligature *node = *tail; if (*tail != NULL) { while (node->next != NULL) node = node->next; tail = &(node->next); } *tail = (Ligature *) calloc(1, sizeof(Ligature)); keyword = token(fp); (*tail)->succ = (char *) malloc(strlen(keyword) + 1); strcpy((*tail)->succ, keyword); keyword = token(fp); (*tail)->lig = (char *) malloc(strlen(keyword) + 1); strcpy((*tail)->lig, keyword); break; } case ENDCHARMETRICS: cont = T1LIB_FALSE;; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ if ((error == ok) && (count != fi->numOfChars)) error = parseError; return(error); } /* parseCharMetrics */ /************************* parseTrackKernData ***********************/ /* This function is called by "parseFile". It will parse the AFM File * up to the "EndTrackKern" or "EndKernData" keywords. It will save the * track kerning data if requested by the caller of parseFile. * * parseTrackKernData is passed in a pointer to the FontInfo record. * If data is to be saved, the FontInfo record will already contain * a valid pointer to storage for the track kerning data. * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static int parseTrackKernData(fp, fi) FILE *fp; register FontInfo *fi; { BOOL cont = T1LIB_TRUE, save = (fi->tkd != NULL); int pos = 0, error = ok, tcount = 0; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) { error = earlyEOF; break; /* get out of loop */ } if (!save) /* get tokens until the end of the Track Kerning Data */ /* section without saving any of the data */ switch(recognize(keyword)) { case ENDTRACKKERN: case ENDKERNDATA: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; default: break; } /* switch */ else /* otherwise parse entire Track Kerning Data section, */ /* saving the data */ switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case TRACKKERN: if (tcount < fi->numOfTracks) { keyword = token(fp); fi->tkd[pos].degree = atoi(keyword); keyword = token(fp); fi->tkd[pos].minPtSize = atof(keyword); if (errno == ERANGE) error = parseError; keyword = token(fp); fi->tkd[pos].minKernAmt = atof(keyword); if (errno == ERANGE) error = parseError; keyword = token(fp); fi->tkd[pos].maxPtSize = atof(keyword); if (errno == ERANGE) error = parseError; keyword = token(fp); fi->tkd[pos++].maxKernAmt = atof(keyword); if (errno == ERANGE) error = parseError; tcount++; } else { error = parseError; cont = T1LIB_FALSE; } break; case ENDTRACKKERN: case ENDKERNDATA: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ if (error == ok && tcount != fi->numOfTracks) error = parseError; return(error); } /* parseTrackKernData */ /************************* parsePairKernData ************************/ /* This function is called by "parseFile". It will parse the AFM File * up to the "EndKernPairs" or "EndKernData" keywords. It will save * the pair kerning data if requested by the caller of parseFile. * * parsePairKernData is passed in a pointer to the FontInfo record. * If data is to be saved, the FontInfo record will already contain * a valid pointer to storage for the pair kerning data. * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static int parsePairKernData(fp, fi) FILE *fp; register FontInfo *fi; { BOOL cont = T1LIB_TRUE, save = (fi->pkd != NULL); int pos = 0, error = ok, pcount = 0; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) { error = earlyEOF; break; /* get out of loop */ } if (!save) /* get tokens until the end of the Pair Kerning Data */ /* section without saving any of the data */ switch(recognize(keyword)) { case ENDKERNPAIRS: case ENDKERNDATA: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; default: break; } /* switch */ else /* otherwise parse entire Pair Kerning Data section, */ /* saving the data */ switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case KERNPAIR: if (pcount < fi->numOfPairs) { keyword = token(fp); fi->pkd[pos].name1 = (char *) malloc(strlen(keyword) + 1); strcpy(fi->pkd[pos].name1, keyword); keyword = token(fp); fi->pkd[pos].name2 = (char *) malloc(strlen(keyword) + 1); strcpy(fi->pkd[pos].name2, keyword); keyword = token(fp); fi->pkd[pos].xamt = atoi(keyword); keyword = token(fp); fi->pkd[pos++].yamt = atoi(keyword); pcount++; } else { error = parseError; cont = T1LIB_FALSE; } break; case KERNPAIRXAMT: if (pcount < fi->numOfPairs) { keyword = token(fp); fi->pkd[pos].name1 = (char *) malloc(strlen(keyword) + 1); strcpy(fi->pkd[pos].name1, keyword); keyword = token(fp); fi->pkd[pos].name2 = (char *) malloc(strlen(keyword) + 1); strcpy(fi->pkd[pos].name2, keyword); keyword = token(fp); fi->pkd[pos++].xamt = atoi(keyword); pcount++; } else { error = parseError; cont = T1LIB_FALSE; } break; case ENDKERNPAIRS: case ENDKERNDATA: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ if (error == ok && pcount != fi->numOfPairs) error = parseError; return(error); } /* parsePairKernData */ /************************* parseCompCharData **************************/ /* This function is called by "parseFile". It will parse the AFM File * up to the "EndComposites" keyword. It will save the composite * character data if requested by the caller of parseFile. * * parseCompCharData is passed in a pointer to the FontInfo record, and * a boolean representing if the data should be saved. * * This function will create the appropriate amount of storage for * the composite character data and store a pointer to the storage * in the FontInfo record. * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static int parseCompCharData(fp, fi) FILE *fp; register FontInfo *fi; { BOOL cont = T1LIB_TRUE, firstTime = T1LIB_TRUE, save = (fi->ccd != NULL); int pos = 0, j = 0, error = ok, ccount = 0, pcount = 0; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) /* Have reached an early and unexpected EOF. */ /* Set flag and stop parsing */ { error = earlyEOF; break; /* get out of loop */ } if (ccount > fi->numOfComps) { error = parseError; break; /* get out of loop */ } if (!save) /* get tokens until the end of the Composite Character info */ /* section without saving any of the data */ switch(recognize(keyword)) { case ENDCOMPOSITES: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; default: break; } /* switch */ else /* otherwise parse entire Composite Character info section, */ /* saving the data */ switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case COMPCHAR: if (ccount < fi->numOfComps) { keyword = token(fp); if (pcount != fi->ccd[pos].numOfPieces) error = parseError; pcount = 0; if (firstTime) firstTime = T1LIB_FALSE; else pos++; fi->ccd[pos].ccName = (char *) malloc(strlen(keyword) + 1); strcpy(fi->ccd[pos].ccName, keyword); keyword = token(fp); fi->ccd[pos].numOfPieces = atoi(keyword); fi->ccd[pos].pieces = (Pcc *) calloc(fi->ccd[pos].numOfPieces, sizeof(Pcc)); j = 0; ccount++; } else { error = parseError; cont = T1LIB_FALSE; } break; case COMPCHARPIECE: if (pcount < fi->ccd[pos].numOfPieces) { keyword = token(fp); fi->ccd[pos].pieces[j].pccName = (char *) malloc(strlen(keyword) + 1); strcpy(fi->ccd[pos].pieces[j].pccName, keyword); keyword = token(fp); fi->ccd[pos].pieces[j].deltax = atoi(keyword); keyword = token(fp); fi->ccd[pos].pieces[j++].deltay = atoi(keyword); pcount++; } else error = parseError; break; case ENDCOMPOSITES: cont = T1LIB_FALSE; break; case ENDFONTMETRICS: cont = T1LIB_FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ if (error == ok && ccount != fi->numOfComps) error = parseError; return(error); } /* parseCompCharData */ /*************************** 'PUBLIC' FUNCTION ********************/ /*************************** parseFile *****************************/ /* parseFile is the only 'public' procedure available. It is called * from an application wishing to get information from an AFM file. * The caller of this function is responsible for locating and opening * an AFM file and handling all errors associated with that task. * * parseFile expects 3 parameters: a vaild file pointer, a pointer * to a (FontInfo *) variable (for which storage will be allocated and * the data requested filled in), and a mask specifying which * data from the AFM File should be saved in the FontInfo structure. * * The file will be parsed and the requested data will be stored in * a record of type FontInfo (refer to ParseAFM.h). * * parseFile returns an error code as defined in parseAFM.h. * * The position of the read/write pointer associated with the file * pointer upon return of this function is undefined. */ /* Note: function renamed to T1lib_parseFile in order to avoid name clushes with other libraries that also use the Adobe parseAFM-package (RMz) */ int T1lib_parseFile (fp, fi, flags) FILE *fp; FontInfo **fi; FLAGS flags; { int code = ok; /* return code from each of the parsing routines */ int error = ok; /* used as the return code from this function */ register char *keyword; /* used to store a token */ /* storage data for the global variable ident */ ident = (char *) calloc(MAX_NAME, sizeof(char)); if (ident == NULL) {error = storageProblem; return(error);} (*fi) = (FontInfo *) calloc(1, sizeof(FontInfo)); if ((*fi) == NULL) {error = storageProblem; return(error);} if (flags & P_G) { (*fi)->gfi = (GlobalFontInfo *) calloc(1, sizeof(GlobalFontInfo)); if ((*fi)->gfi == NULL) {error = storageProblem; return(error);} } /* The AFM File begins with Global Font Information. This section */ /* will be parsed whether or not information should be saved. */ code = parseGlobals(fp, (*fi)->gfi); if (code < 0) error = code; /* The Global Font Information is followed by the Character Metrics */ /* section. Which procedure is used to parse this section depends on */ /* how much information should be saved. If all of the metrics info */ /* is wanted, parseCharMetrics is called. If only the character widths */ /* is wanted, parseCharWidths is called. parseCharWidths will also */ /* be called in the case that no character data is to be saved, just */ /* to parse through the section. */ if ((code != normalEOF) && (code != earlyEOF)) { (*fi)->numOfChars = atoi(token(fp)); if (flags & (P_M ^ P_W)) { (*fi)->cmi = (CharMetricInfo *) calloc((*fi)->numOfChars, sizeof(CharMetricInfo)); if ((*fi)->cmi == NULL) {error = storageProblem; return(error);} code = parseCharMetrics(fp, *fi); } else { if (flags & P_W) { (*fi)->cwi = (int *) calloc(256, sizeof(int)); if ((*fi)->cwi == NULL) { error = storageProblem; return(error); } } /* parse section regardless */ code = parseCharWidths(fp, (*fi)->cwi); } /* else */ } /* if */ if ((error != earlyEOF) && (code < 0)) error = code; /* The remaining sections of the AFM are optional. This code will */ /* look at the next keyword in the file to determine what section */ /* is next, and then allocate the appropriate amount of storage */ /* for the data (if the data is to be saved) and call the */ /* appropriate parsing routine to parse the section. */ while ((code != normalEOF) && (code != earlyEOF)) { keyword = token(fp); if (keyword == NULL) /* Have reached an early and unexpected EOF. */ /* Set flag and stop parsing */ { code = earlyEOF; break; /* get out of loop */ } switch(recognize(keyword)) { /* this case has been added for t1lib because otherwise comment line between (i.e., outside) the main sections would lead to parse errors. The Adobe spec does not seem to forbid comments at such locations (2001-05-14, RMz) */ case COMMENT: keyword = linetoken(fp); break; case STARTKERNDATA: break; case ENDKERNDATA: break; case STARTTRACKKERN: keyword = token(fp); if (flags & P_T) { (*fi)->numOfTracks = atoi(keyword); (*fi)->tkd = (TrackKernData *) calloc((*fi)->numOfTracks, sizeof(TrackKernData)); if ((*fi)->tkd == NULL) { error = storageProblem; return(error); } } /* if */ code = parseTrackKernData(fp, *fi); break; case STARTKERNPAIRS: keyword = token(fp); if (flags & P_P) { (*fi)->numOfPairs = atoi(keyword); (*fi)->pkd = (PairKernData *) calloc((*fi)->numOfPairs, sizeof(PairKernData)); if ((*fi)->pkd == NULL) { error = storageProblem; return(error); } } /* if */ code = parsePairKernData(fp, *fi); break; case STARTCOMPOSITES: keyword = token(fp); if (flags & P_C) { (*fi)->numOfComps = atoi(keyword); (*fi)->ccd = (CompCharData *) calloc((*fi)->numOfComps, sizeof(CompCharData)); if ((*fi)->ccd == NULL) { error = storageProblem; return(error); } } /* if */ code = parseCompCharData(fp, *fi); break; case ENDFONTMETRICS: code = normalEOF; break; case NOPE: default: code = parseError; break; } /* switch */ if ((error != earlyEOF) && (code < 0)) error = code; } /* while */ if ((error != earlyEOF) && (code < 0)) error = code; if (ident != NULL) { free(ident); ident = NULL; } return(error); } /* parseFile */ t1lib-5.1.2/lib/t1lib/parseAFM.h0000644000175000001440000003161110733501626014656 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: parseAFM.h ----- Author: Adobe Systems Inc., modifications by Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2001-04-01 ----- Description: This file is part of the t1-library. It is the original parseAFM.h modified at a few points. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ /* * (C) 1988, 1989 by Adobe Systems Incorporated. All rights reserved. * * This file may be freely copied and redistributed as long as: * 1) This entire notice continues to be included in the file, * 2) If the file has been modified in any way, a notice of such * modification is conspicuously indicated. * * PostScript, Display PostScript, and Adobe are registered trademarks of * Adobe Systems Incorporated. * * ************************************************************************ * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION, * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. * ************************************************************************ */ /* ParseAFM.h * * This header file is used in conjuction with the parseAFM.c file. * Together these files provide the functionality to parse Adobe Font * Metrics files and store the information in predefined data structures. * It is intended to work with an application program that needs font metric * information. The program can be used as is by making a procedure call to * parse an AFM file and have the data stored, or an application developer * may wish to customize the code. * * This header file defines the data structures used as well as the key * strings that are currently recognized by this version of the AFM parser. * This program is based on the document "Adobe Font Metrics Files, * Specification Version 2.0". * * AFM files are separated into distinct sections of different data. Because * of this, the parseAFM program can parse a specified file to only save * certain sections of information based on the application's needs. A record * containing the requested information will be returned to the application. * * AFM files are divided into five sections of data: * 1) The Global Font Information * 2) The Character Metrics Information * 3) The Track Kerning Data * 4) The Pair-Wise Kerning Data * 5) The Composite Character Data * * Basically, the application can request any of these sections independent * of what other sections are requested. In addition, in recognizing that * many applications will want ONLY the x-width of characters and not all * of the other character metrics information, there is a way to receive * only the width information so as not to pay the storage cost for the * unwanted data. An application should never request both the * "quick and dirty" char metrics (widths only) and the Character Metrics * Information since the Character Metrics Information will contain all * of the character widths as well. * * There is a procedure in parseAFM.c, called parseFile, that can be * called from any application wishing to get information from the AFM File. * This procedure expects 3 parameters: a vaild file descriptor, a pointer * to a (FontInfo *) variable (for which space will be allocated and then * will be filled in with the data requested), and a mask specifying * which data from the AFM File should be saved in the FontInfo structure. * * The flags that can be used to set the appropriate mask are defined below. * In addition, several commonly used masks have already been defined. * * History: * original: DSM Thu Oct 20 17:39:59 PDT 1988 * modified: DSM Mon Jul 3 14:17:50 PDT 1989 * - added 'storageProblem' return code * - fixed typos */ #include /* your basic constants */ #define T1LIB_TRUE 1 #define T1LIB_FALSE 0 #define EOL '\n' /* end-of-line indicator */ #define MAX_NAME 4096 /* max length for identifiers */ #define BOOL int #define FLAGS int /* Flags that can be AND'ed together to specify exactly what * information from the AFM file should be saved. */ #define P_G 0x01 /* 0000 0001 */ /* Global Font Info */ #define P_W 0x02 /* 0000 0010 */ /* Character Widths ONLY */ #define P_M 0x06 /* 0000 0110 */ /* All Char Metric Info */ #define P_P 0x08 /* 0000 1000 */ /* Pair Kerning Info */ #define P_T 0x10 /* 0001 0000 */ /* Track Kerning Info */ #define P_C 0x20 /* 0010 0000 */ /* Composite Char Info */ /* Commonly used flags */ #define P_GW (P_G | P_W) #define P_GM (P_G | P_M) #define P_GMP (P_G | P_M | P_P) #define P_GMK (P_G | P_M | P_P | P_T) #define P_ALL (P_G | P_M | P_P | P_T | P_C) /* Possible return codes from the parseFile procedure. * * ok means there were no problems parsing the file. * * parseError means that there was some kind of parsing error, but the * parser went on. This could include problems like the count for any given * section does not add up to how many entries there actually were, or * there was a key that was not recognized. The return record may contain * vaild data or it may not. * * earlyEOF means that an End of File was encountered before expected. This * may mean that the AFM file had been truncated, or improperly formed. * * storageProblem means that there were problems allocating storage for * the data structures that would have contained the AFM data. */ #define ok 0 #define parseError -1 #define earlyEOF -2 #define storageProblem -3 /************************* TYPES *********************************/ /* Below are all of the data structure definitions. These structures * try to map as closely as possible to grouping and naming of data * in the AFM Files. */ /* Bounding box definition. Used for the Font BBox as well as the * Character BBox. */ typedef struct { int llx; /* lower left x-position */ int lly; /* lower left y-position */ int urx; /* upper right x-position */ int ury; /* upper right y-position */ } BBox; /* Global Font information. * The key that each field is associated with is in comments. For an * explanation about each key and its value please refer to the AFM * documentation (full title & version given above). */ typedef struct { char *afmVersion; /* key: StartFontMetrics */ char *fontName; /* key: FontName */ char *fullName; /* key: FullName */ char *familyName; /* key: FamilyName */ char *weight; /* key: Weight */ float italicAngle; /* key: ItalicAngle */ BOOL isFixedPitch; /* key: IsFixedPitch */ BBox fontBBox; /* key: FontBBox */ int underlinePosition; /* key: UnderlinePosition */ int underlineThickness; /* key: UnderlineThickness */ char *version; /* key: Version */ char *notice; /* key: Notice */ char *encodingScheme; /* key: EncodingScheme */ int capHeight; /* key: CapHeight */ int xHeight; /* key: XHeight */ int ascender; /* key: Ascender */ int descender; /* key: Descender */ } GlobalFontInfo; /* Ligature definition is a linked list since any character can have * any number of ligatures. */ typedef struct _t_ligature { char *succ, *lig; struct _t_ligature *next; } Ligature; /* Character Metric Information. This structure is used only if ALL * character metric information is requested. If only the character * widths is requested, then only an array of the character x-widths * is returned. * * The key that each field is associated with is in comments. For an * explanation about each key and its value please refer to the * Character Metrics section of the AFM documentation (full title * & version given above). */ typedef struct { int code, /* key: C */ wx, /* key: WX */ wy; /* together wx and wy are associated with key: W */ char *name; /* key: N */ BBox charBBox; /* key: B */ Ligature *ligs; /* key: L (linked list; not a fixed number of Ls */ } CharMetricInfo; /* Track kerning data structure. * The fields of this record are the five values associated with every * TrackKern entry. * * For an explanation about each value please refer to the * Track Kerning section of the AFM documentation (full title * & version given above). */ typedef struct { int degree; float minPtSize, minKernAmt, maxPtSize, maxKernAmt; } TrackKernData; /* Pair Kerning data structure. * The fields of this record are the four values associated with every * KP entry. For KPX entries, the yamt will be zero. * * For an explanation about each value please refer to the * Pair Kerning section of the AFM documentation (full title * & version given above). */ typedef struct { char *name1; char *name2; int xamt, yamt; } PairKernData; /* PCC is a piece of a composite character. This is a sub structure of a * compCharData described below. * These fields will be filled in with the values from the key PCC. * * For an explanation about each key and its value please refer to the * Composite Character section of the AFM documentation (full title * & version given above). */ typedef struct { char *pccName; int deltax, deltay; } Pcc; /* Composite Character Information data structure. * The fields ccName and numOfPieces are filled with the values associated * with the key CC. The field pieces points to an array (size = numOfPieces) * of information about each of the parts of the composite character. That * array is filled in with the values from the key PCC. * * For an explanation about each key and its value please refer to the * Composite Character section of the AFM documentation (full title * & version given above). structure extended for use with t1lib. The fields "width" and bbox store the composite characters escapement and its bounding box (2001-05-027, RMz) */ typedef struct { int wx; /* these two will be filled by T1_LoadFont() */ BBox charBBox; char *ccName; int numOfPieces; Pcc *pieces; } CompCharData; /* FontInfo * Record type containing pointers to all of the other data * structures containing information about a font. * A a record of this type is filled with data by the * parseFile function. */ typedef struct { GlobalFontInfo *gfi; /* ptr to a GlobalFontInfo record */ int *cwi; /* ptr to 256 element array of just char widths */ int numOfChars; /* number of entries in char metrics array */ CharMetricInfo *cmi; /* ptr to char metrics array */ int numOfTracks; /* number to entries in track kerning array */ TrackKernData *tkd; /* ptr to track kerning array */ int numOfPairs; /* number to entries in pair kerning array */ PairKernData *pkd; /* ptr to pair kerning array */ int numOfComps; /* number to entries in comp char array */ CompCharData *ccd; /* ptr to comp char array */ } FontInfo; /************************* PROCEDURES ****************************/ /* Call this procedure to do the grunt work of parsing an AFM file. * * "fp" should be a valid file pointer to an AFM file. * * "fi" is a pointer to a pointer to a FontInfo record sturcture * (defined above). Storage for the FontInfo structure will be * allocated in parseFile and the structure will be filled in * with the requested data from the AFM File. * * "flags" is a mask with bits set representing what data should * be saved. Defined above are valid flags that can be used to set * the mask, as well as a few commonly used masks. * * The possible return codes from parseFile are defined above. */ extern int T1lib_parseFile ( FILE *fp, FontInfo **fi, FLAGS flags ); t1lib-5.1.2/lib/t1lib/t1delete.c0000644000175000001440000002630310733501626014724 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1delete.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2002-12-02 ----- Description: This file is part of the t1-library. It contains functions for giving free previously allocated memory areas and similar things. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1DELETE_C #include #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "t1types.h" #include "t1extern.h" #include "t1delete.h" #include "t1load.h" #include "t1finfo.h" #include "t1base.h" /* T1_DeleteSize(): Gives back all the memory allocated for size to the system. If size is somewhere in the middle of a linked list of sizes, it further takes care that the remaining list is linked in a proper way. Function returns 0 if successful and otherwise -1*/ int T1_DeleteSize( int FontID, float size) { int i, j; FONTSIZEDEPS *ptr, *next_ptr, *prev_ptr; int jobs=0; int antialias; int level[4]={0,T1_AA_NONE,T1_AA_LOW,T1_AA_HIGH}; for ( j=0; j<4; j++){ antialias=level[j]; /* Check if size exists; if not, return 1 */ if ((ptr=T1int_QueryFontSize( FontID, size, antialias))!=NULL){ /* We have to remove a size-> */ jobs++; /* Get pointers to structure which is before/after the structure to be deleted in the linked list and properly relink structures */ next_ptr=((FONTSIZEDEPS *)ptr)->pNextFontSizeDeps; prev_ptr=((FONTSIZEDEPS *)ptr)->pPrevFontSizeDeps; if ((prev_ptr==NULL)&&(next_ptr==NULL)){ /* There's only one single size, no relink is necessary => reset the initial pointer to indicate that no size dependent data is available */ pFontBase->pFontArray[FontID].pFontSizeDeps=NULL; } else{ if (prev_ptr!=NULL) /* We are at the first size of the linked list and there are still some sizes left after removing the current */ prev_ptr->pNextFontSizeDeps=next_ptr; else pFontBase->pFontArray[FontID].pFontSizeDeps=next_ptr; if (next_ptr!=NULL) /* We are at the end of an list of at least two sizes: */ next_ptr->pPrevFontSizeDeps=prev_ptr; } /* Now, that the list is properly linked, free the memory used by size: */ /* Free the bitmaps memory: */ for (i=0; i<256; i++) if (ptr->pFontCache[i].bits) free(ptr->pFontCache[i].bits); /* Free memory for glyphs: */ free(ptr->pFontCache); /* Free the structure itself: */ free(ptr); /* Print log: */ sprintf( err_warn_msg_buf, "Size %f deleted for FontID %d (antialias=%d)", size, FontID, antialias); T1_PrintLog( "T1_DeleteSize()", err_warn_msg_buf, T1LOG_STATISTIC); } } /* Return the appropriate value */ if (jobs==0) return(-1); else return(0); } /* T1_DeleteAllSizes(): Gives back all the memory allocated for all sizes to the system. Function returns the number of removed sizes or -1 if an error ocurred. */ int T1_DeleteAllSizes( int FontID) { int sizecount; float currsize; FONTSIZEDEPS *ptr; if (T1_CheckForFontID(FontID)!=1) return(-1); /* Start deleting at the end of the linked list: */ sizecount=0; if ((ptr=T1int_GetLastFontSize( FontID))==NULL){ /* There has not been any size dependent data: */ return(0); } while (((ptr=T1int_GetLastFontSize(FontID)) != NULL)){ currsize=ptr->size; T1_DeleteSize( FontID, currsize); sizecount++; } return(sizecount); } /* T1_FreeGlyph(): Gives the memory used by a glyph back to the system. */ int T1_FreeGlyph( GLYPH *glyph) { if (glyph!=NULL) { if (glyph->bits!=NULL) { free(glyph->bits); } free(glyph); } return(0); } /* T1_FreeCompCharData(): Return emory used by a composite character data information structure to the system */ int T1_FreeCompCharData( T1_COMP_CHAR_INFO *cci) { if (cci!=NULL) { if (cci->pieces!=NULL) { free( cci->pieces); } free( cci); } return( 0); } /* T1_DeleteFont(): Gives all memory used by a font back to the system. If the font is successfully deinstalled 0 is returned. A positive value indicates an error. */ int T1_DeleteFont( int FontID) { int result; if (T1_CheckForFontID(FontID)==-1){ /* Invalid ID */ T1_errno=T1ERR_INVALID_FONTID; return(-1); } if (T1_CheckForFontID(FontID)==0) /* Font is not loaded */ return(0); /* Memory freeing must be done hierachical, start with size dependent data: */ result=T1_DeleteAllSizes(FontID); /* Next we delete the AFM-mapping tables */ if (pFontBase->pFontArray[FontID].pEncMap!=NULL) free( pFontBase->pFontArray[FontID].pEncMap); if (pFontBase->pFontArray[FontID].pKernMap!=NULL) free( pFontBase->pFontArray[FontID].pKernMap); /* We do not touch the file name because this is only to be done by T1_CloseLib(): */ /* The Type-1 area and tyhe AFM-area may only be free'ed, if the font is a "physical" font and if its reference counter is 1, or if it is a logical font. Otherwise, other logical font use this physical one and it may not be free'ed. In this case, return the number of logical fonts which refer to this physical font. */ if ((pFontBase->pFontArray[FontID].physical==1)&& (pFontBase->pFontArray[FontID].refcount==1)){ /* Now handle the type 1 data: */ if (pFontBase->pFontArray[FontID].pType1Data!=NULL){ /* First: VM, which includes CharStrings, Private, .... */ free(pFontBase->pFontArray[FontID].vm_base); /* .. then the struct itself: */ free(pFontBase->pFontArray[FontID].pType1Data); pFontBase->pFontArray[FontID].pType1Data=NULL; } /* afm-data is yet there -> */ if (pFontBase->pFontArray[FontID].pAFMData!=NULL){ result=FreeAFMData(pFontBase->pFontArray[FontID].pAFMData); pFontBase->pFontArray[FontID].pAFMData=NULL; } } else{ if (pFontBase->pFontArray[FontID].physical==1){ /* font is physical and is referred to by other fonts -> Do nothing further and return number of references: */ return(pFontBase->pFontArray[FontID].refcount - 1); } } /* If we get here and the font is logical, we have to decrement the refcount of the referred physical font */ if (pFontBase->pFontArray[FontID].physical==0){ pFontBase->pFontArray[pFontBase->pFontArray[FontID].refcount].refcount--; } /* Set remaining area explicitly to 0 (all but pFontFileName and pAfmFileName!) */ pFontBase->pFontArray[FontID].pAFMData=NULL; pFontBase->pFontArray[FontID].pType1Data=NULL; pFontBase->pFontArray[FontID].pEncMap=NULL; pFontBase->pFontArray[FontID].pKernMap=NULL; pFontBase->pFontArray[FontID].pFontEnc=NULL; pFontBase->pFontArray[FontID].pFontSizeDeps=NULL; pFontBase->pFontArray[FontID].vm_base=NULL; pFontBase->pFontArray[FontID].FontMatrix[0]=0.0; pFontBase->pFontArray[FontID].FontMatrix[1]=0.0; pFontBase->pFontArray[FontID].FontMatrix[2]=0.0; pFontBase->pFontArray[FontID].FontMatrix[3]=0.0; pFontBase->pFontArray[FontID].FontTransform[0]=0.0; pFontBase->pFontArray[FontID].FontTransform[1]=0.0; pFontBase->pFontArray[FontID].FontTransform[2]=0.0; pFontBase->pFontArray[FontID].FontTransform[3]=0.0; pFontBase->pFontArray[FontID].slant=0.0; pFontBase->pFontArray[FontID].extend=0.0; pFontBase->pFontArray[FontID].UndrLnPos=0.0; pFontBase->pFontArray[FontID].UndrLnThick=0.0; pFontBase->pFontArray[FontID].OvrLnPos=0.0; pFontBase->pFontArray[FontID].OvrLnThick=0.0; pFontBase->pFontArray[FontID].OvrStrkPos=0.0; pFontBase->pFontArray[FontID].OvrStrkThick=0.0; pFontBase->pFontArray[FontID].physical=0; pFontBase->pFontArray[FontID].refcount=0; pFontBase->pFontArray[FontID].space_position=0; pFontBase->pFontArray[FontID].info_flags=0; return(0); } /* FreeAFMData(): Give all memory used by afm-Information back to the system. */ int FreeAFMData( FontInfo *pAFMData) { if (pAFMData != NULL){ if (pAFMData->gfi != NULL){ free(pAFMData->gfi->afmVersion); pAFMData->gfi->afmVersion = NULL; free(pAFMData->gfi->fontName); pAFMData->gfi->fontName = NULL; free(pAFMData->gfi->fullName); pAFMData->gfi->fullName = NULL; free(pAFMData->gfi->familyName); pAFMData->gfi->familyName = NULL; free(pAFMData->gfi->weight); pAFMData->gfi->weight = NULL; free(pAFMData->gfi->version); pAFMData->gfi->version = NULL; free(pAFMData->gfi->notice); pAFMData->gfi->notice = NULL; free(pAFMData->gfi->encodingScheme); pAFMData->gfi->encodingScheme = NULL; free(pAFMData->gfi); pAFMData->gfi = NULL; } if (pAFMData->cwi != NULL){ free(pAFMData->cwi); pAFMData->cwi = NULL; } if (pAFMData->cmi != NULL){ int i = 0; CharMetricInfo *temp = pAFMData->cmi; Ligature *node = temp->ligs; for (i = 0; i < pAFMData->numOfChars; ++i){ for (node = temp->ligs; node != NULL; node = node->next){ free(node->succ); node->succ = NULL; free(node->lig); node->lig = NULL; } free(temp->name); temp->name = NULL; temp++; } free(pAFMData->cmi); pAFMData->cmi = NULL; } if (pAFMData->tkd != NULL){ free(pAFMData->tkd); pAFMData->tkd = NULL; } if (pAFMData->pkd != NULL){ int i = 0; for (i = 0; i < pAFMData->numOfPairs; ++i){ free(pAFMData->pkd[i].name1); pAFMData->pkd[i].name1 = NULL; free(pAFMData->pkd[i].name2); pAFMData->pkd[i].name2 = NULL; } free(pAFMData->pkd); pAFMData->pkd = NULL; } if (pAFMData->ccd != NULL){ int i = 0, j = 0; CompCharData *ccd = pAFMData->ccd; for (i = 0; i < pAFMData->numOfComps; ++i){ for (j = 0; j < ccd[i].numOfPieces; ++j){ free(ccd[i].pieces[j].pccName); ccd[i].pieces[j].pccName = NULL; } free(ccd[i].ccName); ccd[i].ccName = NULL; } free(pAFMData->ccd); pAFMData->ccd = NULL; } free(pAFMData); } return(0); } t1lib-5.1.2/lib/t1lib/t1delete.h0000644000175000001440000000367210733501626014735 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1delete.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2001-06-03 ----- Description: This file is part of the t1-library. It contains functions for setting characters and strings of characters. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1DELETE_C int T1_DeleteSize( int FontID, float size); int T1_DeleteAllSizes( int FontID); int T1_FreeGlyph( GLYPH *glyph); int T1_FreeCompCharData( T1_COMP_CHAR_INFO *cci); int T1_DeleteFont( int FontID); int FreeAFMData( FontInfo *pAFMData); #else extern int T1_DeleteSize( int FontID, float size); extern int T1_DeleteAllSizes( int FontID); extern int T1_FreeGlyph( GLYPH *glyph); extern int T1_FreeCompCharData( T1_COMP_CHAR_INFO *cci); extern int T1_DeleteFont( int FontID); extern int FreeAFMData( FontInfo *pAFMData); #endif t1lib-5.1.2/lib/t1lib/t1lib.h.in0000644000175000001440000004164310733501626014646 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1lib.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2004-12-19 ----- Description: This file is part of the t1-library. It must be included by the user of the t1lib. It contains function declarations and some basic data types, the user must deal with. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2004. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifndef T1LIB_H_INCLUDED #define T1LIB_H_INCLUDED /* type definitions, needed by the user: */ #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif /* Version information filled in by configure */ #define T1LIB_VERSION @T1LIB_VERSION@ #define T1LIB_REVISION @T1LIB_REVISION@ #define T1LIB_PATCHLEVEL @T1LIB_PATCHLEVEL@ #define T1LIB_VERSIONSTRING @T1LIB_VERSIONSTRING@ /* Data Type information filled in by configure. */ typedef @T1_INT16@ T1_int16; typedef @T1_INT32@ T1_int32; /* the data structure which contains the character bitmap description */ typedef struct { char *bits; /* A pointer to the characters local bitmap */ struct /* A struct containing diverse metric information */ { int ascent; int descent; int leftSideBearing; int rightSideBearing; int advanceX; int advanceY; } metrics; void *pFontCacheInfo; unsigned long bpp; } GLYPH; /* A structure representing a matrix */ typedef struct { double cxx; double cyx; double cxy; double cyy; } T1_TMATRIX; /* the bounding box data structure: */ typedef struct { int llx; /* lower left x-position */ int lly; /* lower left y-position */ int urx; /* upper right x-position */ int ury; /* upper right y-position */ } BBox; /* A data that makes most important information available to user. */ typedef struct { int width; /* The glyph's width */ BBox bbox; /* The glyph's bounding box */ int numchars; /* The number of characters in the glyph (string) */ int *charpos; /* A pointer to an integer array were the horizontal positions in (afm units) of the individual characters in the string are stored */ } METRICSINFO; #define PAD(bits, pad) (((bits)+(pad)-1)&-(pad)) /* def's for T1_InitLib() */ #define NO_LOGFILE 0x0 #define LOGFILE 0x1 #define IGNORE_FONTDATABASE 0x2 /* Default is to read database */ #define IGNORE_CONFIGFILE 0x4 /* Default is to read config file */ #define T1_AA_CACHING 0x8 /* Cache aa-bytes */ #define T1_NO_AFM 0x10 /* Do not load or generate AFM data */ /* common 'yes'/'no' */ #define T1_YES 0x1 #define T1_NO 0x0 /* logfile levels: */ #define T1LOG_ERROR 1 #define T1LOG_WARNING 2 #define T1LOG_STATISTIC 3 #define T1LOG_DEBUG 4 /* #define's for manipulating searchpaths */ #define T1_PFAB_PATH 0x01 #define T1_AFM_PATH 0x02 #define T1_ENC_PATH 0x04 #define T1_FDB_PATH 0x08 #define T1_APPEND_PATH 0x00 #define T1_PREPEND_PATH 0x01 /* #define's for character/string properties (not all implemented) */ #define T1_DEFAULT 0x0000 #define T1_UNDERLINE 0x0001 #define T1_OVERLINE 0x0002 #define T1_OVERSTRIKE 0x0004 #define T1_DOUBLEOVERSTRIKE 0x0008 #define T1_RIGHT_TO_LEFT 0x0010 #define T1_SUBSCRIPT 0x0100 #define T1_SUPERSCRIPT 0x0200 #define T1_STROKED 0x1000 #define T1_KERNING 0x2000 /* Setting the subsampling value */ #define T1_AA_NONE 1 #define T1_AA_LOW 2 #define T1_AA_HIGH 4 /* Error handling: */ extern int T1_errno; /* These are from scanning a font file */ #define T1ERR_SCAN_FONT_FORMAT -5 #define T1ERR_SCAN_FILE_OPEN_ERR -4 #define T1ERR_SCAN_OUT_OF_MEMORY -3 #define T1ERR_SCAN_ERROR -2 #define T1ERR_SCAN_FILE_EOF -1 /* These are from generating paths */ #define T1ERR_PATH_ERROR 1 #define T1ERR_PARSE_ERROR 2 #define T1ERR_TYPE1_ABORT 3 /* These are from t1lib */ #define T1ERR_INVALID_FONTID 10 #define T1ERR_INVALID_PARAMETER 11 #define T1ERR_OP_NOT_PERMITTED 12 #define T1ERR_ALLOC_MEM 13 #define T1ERR_FILE_OPEN_ERR 14 #define T1ERR_UNSPECIFIED 15 #define T1ERR_NO_AFM_DATA 16 #define T1ERR_X11 17 #define T1ERR_COMPOSITE_CHAR 18 #define T1ERR_SCAN_ENCODING 19 /* Flags to control the rasterizer */ #define T1_IGNORE_FORCEBOLD 0x0001 #define T1_IGNORE_FAMILYALIGNMENT 0x0002 #define T1_IGNORE_HINTING 0x0004 #define T1_DEBUG_LINE 0x0100 #define T1_DEBUG_REGION 0x0200 #define T1_DEBUG_PATH 0x0400 #define T1_DEBUG_FONT 0x0800 #define T1_DEBUG_HINT 0x1000 /* definitions for outline handling */ #define FRACTBITS 16 /* number of fractional bits in 'fractpel' */ /* From/to conversion of pels/fractpels */ #define T1_TOPATHPOINT(p) (((T1_int32)p)<>FRACTBITS) /* A fractional point */ typedef struct { T1_int32 x; T1_int32 y; } T1_PATHPOINT; /* A straight outline segment, stroked or not stroked */ typedef struct pathsegment { char type; /* type of segment (line or move) */ unsigned char flag; /* type1 rasterizer internal stuff */ short references; /* type1 rasterizer internal stuff */ unsigned char size; /* size of the structure */ unsigned char context; /* index to device context */ struct pathsegment *link; /* pointer to next structure in linked list */ struct pathsegment *last; /* pointer to last structure in list */ T1_PATHPOINT dest; /* relative ending location of path segment */ } T1_PATHSEGMENT; /* A third order bezier segment */ typedef struct bezierpathsegment { char type; /* type of segment (bezier) */ unsigned char flag; /* type1 rasterizer internal stuff */ short references; /* type1 rasterizer internal stuff */ unsigned char size; /* as with any 'segment' type */ unsigned char context; /* as with any 'segment' type */ T1_PATHSEGMENT *link; /* as with any 'segment' type */ T1_PATHSEGMENT *last; /* as with any 'segment' type */ T1_PATHPOINT dest; /* ending point (D) */ T1_PATHPOINT B; /* control point B */ T1_PATHPOINT C; /* control point C */ } T1_BEZIERSEGMENT; typedef T1_PATHSEGMENT T1_OUTLINE; #define T1_PATHTYPE_LINE 0x10 #define T1_PATHTYPE_BEZIER 0x12 #define T1_PATHTYPE_MOVE 0x15 /* Definitions for font subsetting */ #define T1_SUBSET_DEFAULT 0x00 #define T1_SUBSET_FORCE_REENCODE 0x01 #define T1_SUBSET_SKIP_REENCODE 0x02 #define T1_SUBSET_ENCRYPT_BINARY 0x04 /* This is only for debugging, it does not produce valid font-files! This flag is not in the documented API!. */ #define T1_SUBSET_ENCRYPT_NONE 0x08 /* Two structures for handling composite character data */ /* One structure for each symbol of the composite character */ typedef struct { int piece; /* the index of the current symbol */ int deltax; /* horizontal displacement of current symbol in CS */ int deltay; /* vertical displacement of current symbol in CS */ } T1_COMP_PIECE; /* This one defines the composite character, the number of pieces and how to access their data. */ typedef struct { int compchar; /* the base character in the current encoding */ int numPieces; /* the number of defined pieces including the base char */ T1_COMP_PIECE *pieces; /* a pointer to the pieces' information */ } T1_COMP_CHAR_INFO; /* function declarations: */ /* from t1base.c */ extern void *T1_InitLib( int log); extern int T1_CloseLib( void); extern int T1_AddFont( char *fontfilename); extern void T1_PrintLog( char *func_ident, char *msg_txt, int level, ...); extern void T1_SetLogLevel( int level); extern int T1_CheckForInit(void); extern int T1_CheckForFontID( int FontID); extern char *T1_GetFontFileName( int FontID); extern int T1_GetNoFonts(void); extern int T1_SetDeviceResolutions( float x_res, float y_res); extern int T1_CopyFont( int FontID); extern int T1_QueryX11Support( void); extern int T1_CheckEndian(void); extern int T1_SetBitmapPad( int pad); extern int T1_GetBitmapPad( void); extern char *T1_GetLibIdent( void); extern void T1_SetRasterFlags( int flags); extern char *T1_GetAfmFileName( int FontID); extern int T1_SetAfmFileName( int FontId, char *afm_name); extern char *T1_GetFontFilePath( int FontID); extern char *T1_GetAfmFilePath( int FontID); extern const char *T1_StrError( int t1err); /* from t1delete.c */ extern int T1_DeleteSize( int FontID, float size); extern int T1_DeleteAllSizes( int FontID); extern int T1_FreeGlyph( GLYPH *glyph); extern int T1_FreeCompCharData( T1_COMP_CHAR_INFO *cci); extern int T1_DeleteFont( int FontID); /* from t1enc.c */ extern char **T1_LoadEncoding( char *FileName); extern int T1_DeleteEncoding( char **encoding); extern int T1_ReencodeFont( int FontID, char **Encoding); extern int T1_SetDefaultEncoding( char **encoding); extern char *T1_GetEncodingScheme( int FontID); /* from t1env.c */ extern int T1_SetFileSearchPath( int type, char *pathname); extern int T1_AddToFileSearchPath( int pathtype, int mode, char *pathname); extern char *T1_GetFileSearchPath( int type); extern int T1_SetFontDataBase( char *filename); extern int T1_AddFontDataBase( int mode, char *filename); /* from t1finfo.c */ extern int T1_GetKerning( int FontID, char char1, char char2); extern int T1_GetCharWidth( int FontID, char char1); extern BBox T1_GetCharBBox( int FontID, char char1); extern float T1_GetUnderlinePosition( int FontID); extern float T1_GetUnderlineThickness( int FontID); extern float T1_GetItalicAngle( int FontID); extern int T1_GetIsFixedPitch( int FontID); extern char *T1_GetFontName( int FontID); extern char *T1_GetFullName( int FontID); extern char *T1_GetFamilyName( int FontID); extern char *T1_GetWeight( int FontID); extern char *T1_GetVersion( int FontID); extern char *T1_GetNotice( int FontID); extern char *T1_GetCharName( int FontID, char char1); extern int T1_QueryLigs( int FontID, char char1, char **successors, char **ligatures); extern int T1_GetEncodingIndex( int FontID, char *char1); extern int *T1_GetEncodingIndices( int FontID, char *char1); extern int T1_GetStringWidth( int FontID, char *string, int len, long spaceoff, int kerning); extern BBox T1_GetStringBBox( int FontID, char *string, int len, long spaceoff, int kerning); extern METRICSINFO T1_GetMetricsInfo( int FontID, char *string, int len, long spaceoff, int kerning); extern BBox T1_GetFontBBox( int FontID); extern char **T1_GetAllCharNames( int FontID); extern int T1_GetNoKernPairs( int FontID); extern int T1_GetNoCompositeChars( int FontID); extern int T1_QueryCompositeChar( int FontID, char char1); extern T1_COMP_CHAR_INFO *T1_GetCompCharData( int FontID, char char1); extern T1_COMP_CHAR_INFO *T1_GetCompCharDataByIndex( int FontID, int index); extern int T1_IsInternalChar( int FontID, char char1); /* from t1load.c */ extern int T1_LoadFont( int FontID); extern void *T1_QueryFontSize( int FontID, float size, int aa); /* from t1set.c */ extern GLYPH *T1_SetChar( int FontID, char charcode, float size, T1_TMATRIX *transform); extern GLYPH *T1_SetString( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern GLYPH* T1_SetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform); extern GLYPH *T1_CopyGlyph(GLYPH *glyph); extern void T1_DumpGlyph( GLYPH *glyph); extern GLYPH *T1_ConcatGlyphs( GLYPH *glyph1, GLYPH *glyph2, int x_off, int y_off, int modflag); extern void T1_DumpPixmap( GLYPH *glyph); extern GLYPH *T1_FillOutline( T1_OUTLINE *path, int modflag); /* from t1trans.c */ extern int T1_ExtendFont( int FontID, double extend); extern int T1_SlantFont( int FontID, double slant); extern int T1_TransformFont( int FontID, T1_TMATRIX *matrix); extern double T1_GetExtend( int FontID); extern double T1_GetSlant( int FontID); extern T1_TMATRIX T1_GetTransform( int FontID); extern int T1_SetLinePosition( int FontID, int linetype, float value); extern int T1_SetLineThickness( int FontID, int linetype, float value); extern float T1_GetLinePosition( int FontID, int linetype); extern float T1_GetLineThickness( int FontID, int linetype); extern T1_TMATRIX *T1_RotateMatrix( T1_TMATRIX *matrix, double angle); extern T1_TMATRIX *T1_MirrorHMatrix( T1_TMATRIX *matrix); extern T1_TMATRIX *T1_MirrorVMatrix( T1_TMATRIX *matrix); extern T1_TMATRIX *T1_ShearHMatrix( T1_TMATRIX *matrix, double shear); extern T1_TMATRIX *T1_ShearVMatrix( T1_TMATRIX *matrix, double shear); extern T1_TMATRIX *T1_ExtendHMatrix( T1_TMATRIX *matrix, double extent); extern T1_TMATRIX *T1_ExtendVMatrix( T1_TMATRIX *matrix, double extent); extern T1_TMATRIX *T1_TransformMatrix( T1_TMATRIX *matrix, double cxx, double cyx, double cxy, double cyy); extern int T1_StrokeFont( int FontID, int dostroke); extern int T1_SetStrokeFlag( int FontID); extern int T1_ClearStrokeFlag( int FontID); extern int T1_GetStrokeMode( int FontID); extern int T1_SetStrokeWidth( int FontID, float strokewidth); extern float T1_GetStrokeWidth( int FontID); /* from t1aaset.c */ extern GLYPH *T1_AASetChar( int FontID, char charcode, float size, T1_TMATRIX *transform); extern GLYPH *T1_AASetString( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern GLYPH* T1_AASetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform); extern int T1_AASetGrayValues(unsigned long white, unsigned long gray75, unsigned long gray50, unsigned long gray25, unsigned long black); extern int T1_AAHSetGrayValues( unsigned long *grayvals); extern int T1_AANSetGrayValues( unsigned long bg, unsigned long fg); extern int T1_AAGetGrayValues( long *pgrayvals); extern int T1_AAHGetGrayValues( long *pgrayvals); extern int T1_AANGetGrayValues( long *pgrayvals); extern int T1_AASetBitsPerPixel( int bpp); extern int T1_AAGetBitsPerPixel( void); extern int T1_AASetLevel( int level); extern int T1_AAGetLevel( void); extern GLYPH *T1_AAFillOutline( T1_OUTLINE *path, int modflag); extern int T1_AASetSmartLimits( float limit1, float limit2); extern int T1_AASetSmartMode( int smart); /* from t1afmtool.c */ extern int T1_WriteAFMFallbackFile( int FontID); /* from t1outline.c */ extern T1_OUTLINE *T1_GetCharOutline( int FontID, char charcode, float size, T1_TMATRIX *transform); extern T1_OUTLINE *T1_GetStringOutline( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern T1_OUTLINE *T1_ConcatOutlines( T1_OUTLINE *path1, T1_OUTLINE *path2); extern T1_OUTLINE *T1_ScaleOutline( T1_OUTLINE *path, float scale); extern T1_OUTLINE *T1_GetMoveOutline( int FontID, int deltax, int deltay, int modflag, float size, T1_TMATRIX *transform); extern void T1_DumpPath( T1_OUTLINE *path); extern void T1_AbsolutePath( T1_OUTLINE *rpath); extern void T1_RelativePath( T1_OUTLINE *apath); extern void T1_ManipulatePath( T1_OUTLINE *path, void (*manipulate)(long *x,long *y,int type)); extern T1_OUTLINE *T1_CopyOutline( T1_OUTLINE *path); extern void T1_FreeOutline( T1_OUTLINE *path); /* from t1subset.c */ extern char *T1_SubsetFont( int FontID, char *mask, unsigned int flags, int linewidth, unsigned long maxblocksize, unsigned long *bufsize); extern char *T1_GetCharString( int FontID, char *charname, int *len); extern int T1_GetlenIV( int FontID); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* T1LIB_H_INCLUDED */ t1lib-5.1.2/lib/t1lib/t1subset.c0000644000175000001440000007327010733501626014774 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1subset.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-01 ----- Description: This file is part of the t1-library. It contains functions for subsetting type 1 fonts. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1SUBSET_C #include #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include "../type1/ffilest.h" #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "t1types.h" #include "t1extern.h" #include "t1finfo.h" #include "t1misc.h" #include "t1base.h" #include "t1delete.h" #include "t1subset.h" /* Segment header for pfb-files (reminder): Segment-header: Byte 1: always 128 (0x80) Byte 2: 1 = ASCII text 2 = Binary text 3 = End of file indicator (EOF) Byte 3: least significant byte \ Byte 4: \ Length of Byte 5: / data segment in bytes Byte 6: most significant byte / */ #define SEGMENT_ASCII 1 #define SEGMENT_BINARY 2 #define SEGMENT_EOF 3 extern psobj *StdEncArrayP; /* For accessing StandardEncoding */ static char *charstringP; static int charstringL; /* We define two lookup tables to make a fast conversion from binary bytes to ASCII-hex bytes. */ static unsigned char highHexByte[256]={ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46 }; static unsigned char lowHexByte[256]={ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46 }; /* parameters for eexec encryption */ static unsigned short int eexec_r; static unsigned short int eexec_c1=52845; static unsigned short int eexec_c2=22719; /* Eexec-encrption according to the Adobe Black Book */ static unsigned char EexecEncrypt( unsigned char plain) { unsigned char cipher; cipher = (plain ^ (eexec_r>>8)); eexec_r = (cipher + eexec_r) * eexec_c1 + eexec_c2; return( cipher); } static int locateCharString( int FontID, char *charname) { int namelen; int dictlen; int i; psdict *CharStringsP; namelen=strlen( charname); CharStringsP=pFontBase->pFontArray[FontID].pType1Data->CharStringsP; dictlen=CharStringsP[0].key.len; for ( i=1; i<=dictlen; i++) { if (namelen==CharStringsP[i].key.len) { /* This could be the charstring in question */ if (strncmp( charname, CharStringsP[i].key.data.nameP, namelen)==0) { /* It is the the desired charstring */ charstringP=CharStringsP[i].value.data.valueP; charstringL=CharStringsP[i].value.len; return( i); } } } /* charstring not found ??? */ return( 0); } static int make_pfb_segment_header( char *ptr, int type, unsigned long size) { ptr[0]=(char) 0x80; ptr[1]=type; if (type==3) return( 2); ptr[2]=(char)(size & 0xFF); ptr[3]=(char)((size>>8) & 0xFF); ptr[4]=(char)((size>>16) & 0xFF); ptr[5]=(char)((size>>24) & 0xFF); return( 6); } char *T1_SubsetFont( int FontID, char *mask, unsigned int flags, int linewidth, unsigned long maxblocksize, unsigned long *bufsize) { FILE *ifp; static char *filebuf=NULL; unsigned long filesize=0; int filesegs=0; char *outbuf=NULL; unsigned long outsize=0; char *encryptbuf=NULL; unsigned long encryptsize=0; int encryptsegs=0; char *trailerbuf=NULL; unsigned long trailersize=0; int trailersegs=0; char linebuf[1025]; char *csdone; /* stores which charstrings already have been written */ int currstring_no=0; char *charnameP; char charnamebuf[257]; unsigned char cipher; char rdstring[3]; char ndstring[3]; int retval=1; /* Indices. Could save a few but debugging becomes easier this way */ int i=0; int j=0; int k=0; int l=0; int m=0; int n=0; int o=0; int p=0; int notdefencoded=0; int stdenc=0; int reencode=0; int colcount=0; int tr_len=-1; int encrypt=1; /* 1=ASCII-hex, 2=Binary, 0=None (for debugging) */ int dindex=0; int nocharstrings=0; char encmask[256]; /* Mask after resolving composite characters */ T1_COMP_CHAR_INFO* cci = NULL; /* variables for checking SEAC's */ int qs_num = 0; unsigned char qs_piece1 = 0; unsigned char qs_piece2 = 0; /* Otherwise we would get invalid accesses later */ if (T1_CheckForFontID(FontID)!=1) { T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* Check parameters */ if ( (mask==NULL) || (bufsize==NULL) || (linewidth < 8) || (linewidth > 1024) || (maxblocksize < 4) ) { T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } /* Reset resulting encoding mask */ for ( j=0; j<256; j++) { encmask[j] = 0; } /* Build encmask, a mask, where all required elementary character definitions required are tagged. Font internal SEAC definitions are evaluated at first priority, and as a fallback, also user specified composite character data is taken into account. */ for ( j=0; j<256; j++) { if ( mask[j] != 0 ) { /* In any case, tag slot j itself */ encmask[j] |= 0x01; /* Now check against correctly defined SEAC (Standard Encoding Accented Character). */ if ( (qs_num = T1int_QuerySEAC( FontID, j, &qs_piece1, &qs_piece2 )) > 1 ) { /* We have a SEAC --> reserve 2 additional slots, the basechar and the accent. The index numbers in this case always refer to to StandardEncoding, which is not necessarily the font's current encoding. We indicate this by using bit 2 0x2 inverse sign. */ encmask[qs_piece1] |= 0x2; encmask[qs_piece2] |= 0x2; } else { /* OK, it is no a SEAC, but we still check against AFM composite character data definition. This is non-standard, but we give the user the chance to access all single character definitions in order construct arbitrary composite characters. */ if ( cci != NULL ) { T1_FreeCompCharData( cci); } cci = T1_GetCompCharData( FontID, j); if ( (cci != NULL) && (cci->numPieces > 1) ) { /* Tag all components that are required to construct the composite character j. */ for ( p=0; pnumPieces; p++) { encmask[cci->pieces[p].piece] |= 0x1; } } } } /* if ( mask[j] != 0 ) */ } /* for ... mask */ /* Inspect encmask, get number of atomic charstrings and check for ".notdef" being encoded. */ for ( j=0; j<256; j++) { if ( (encmask[j] & 0x01) != 0 ) { ++nocharstrings; /* Obtain name from current encoding */ charnameP=T1_GetCharName( FontID, j); } if ( (encmask[j] & 0x02) != 0 ) { ++nocharstrings; /* Obtain name from StandardEncoding */ strncpy( charnamebuf, (StdEncArrayP[j]).data.nameP, (StdEncArrayP[j]).len); charnamebuf[StdEncArrayP[j].len] = '\0'; charnameP=charnamebuf; } if ( encmask[j] != 0 ) { if ( strcmp(charnameP, ".notdef") == 0 ) { notdefencoded=1; } } } /* adjust encrypting type according to flags. Default is ASCII-hex encryption because the output may be verbatim inserted into a PostScript-file. */ if (flags & T1_SUBSET_ENCRYPT_BINARY) encrypt=2; else if (flags & T1_SUBSET_ENCRYPT_NONE) encrypt=0; /* Open and initialize scanning machinery */ T1io_reset(); if ((ifp = (FILE *)T1Open(T1_GetFontFilePath( FontID), "rb"))==NULL) { T1_errno=T1ERR_FILE_OPEN_ERR; return(NULL); } if (encrypt==0) sprintf( err_warn_msg_buf, "Subsetting Font %d, flags=0x%X, non-encrypted debug output", FontID, flags); else if (encrypt==1) sprintf( err_warn_msg_buf, "Subsetting Font %d, flags=0x%X, ASCII-hex output with linelength %d", FontID, flags, linewidth); else if (encrypt==2) sprintf( err_warn_msg_buf, "Subsetting Font %d, flags=0x%X, Binary output with maximum blocksize %lu", FontID, flags, maxblocksize); T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf, T1LOG_DEBUG); /* Get size of file */ filesize=T1GetFileSize( ifp); sprintf( err_warn_msg_buf, "Source file %s is %lu bytes long", T1_GetFontFilePath( FontID), filesize); T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf, T1LOG_DEBUG); if ((filebuf=(char *)calloc( filesize, sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return( NULL); } while (retval>0) { /* get a line from the file. We have to read enough characters to ensure that "eexec" does not get split between two reads. Otherwise, decryption would not be started. */ retval=T1Gets(&(filebuf[i]), 1025, ifp); i+=retval; if ( (dindex==0) && (T1GetDecrypt()>0) ) { dindex=i-retval; /* from this point on we have decrypted bytes */ sprintf( err_warn_msg_buf, "Human-readable header finished (%d data bytes)", dindex); T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf, T1LOG_DEBUG); } /* Encoding handling follows. Note: If the font file defines StandardEncoding (as we will check shortly), but the font has been reencoded by t1lib, we enforce reencoding in any case so that all characters are accessible eventually in the subset. */ if ( pFontBase->pFontArray[FontID].pFontEnc != NULL ) { T1_PrintLog( "T1_SubsetFont()", "Font is reencoded by t1lib, enforcing Reencoding of subset", T1LOG_DEBUG); /* Set flag to enforce reenocde in case of StandardEncoding */ flags |= T1_SUBSET_FORCE_REENCODE; /* Reset flag to enforce reenocde in case of StandardEncoding */ flags &= ~T1_SUBSET_SKIP_REENCODE; } if (strstr( &(filebuf[i-retval]), "/Encoding")!=NULL) { if (strstr( &(filebuf[i-retval]), "StandardEncoding")!=NULL) { stdenc=1; if ((flags & T1_SUBSET_FORCE_REENCODE)!=0) { /* we ignore the current line ... */ i-=retval; /* and put the encoding header into the buffer */ i+=sprintf( &(filebuf[i]), "/Encoding 256 array\n0 1 255 {1 index exch /.notdef put} for\n" ); reencode=1; } else { T1_PrintLog( "T1_SubsetFont()", "Leaving StandardEncoding untouched", T1LOG_DEBUG); reencode=0; } } else { /* The encoding is explicitly defined in the font file. We skip copying the whole definition because we will reencode the subset later, unless reencoding should be skipped by means of the flag settings. If the font has been reencoded by t1lib, we enforce reencoding in order to ensure that all characters in the subset will be accessible (see above). */ stdenc=0; retval=T1Gets(&(filebuf[i]), 1025, ifp); i+=retval; while (retval>0) { /* get a line and check for end of encoding definition. */ retval=T1Gets(&(filebuf[i]), 1025, ifp); if ((flags & T1_SUBSET_SKIP_REENCODE)!=0) { /* we store the encoding defined here */ i+=retval; reencode=0; } else { reencode=1; } if ( (dindex==0) && (T1GetDecrypt()>0) ) { dindex=i; /* from this point we have decrypted bytes */ } if (strstr( &(filebuf[i-retval]), "readonly def")!=NULL) { break; } } if (reencode==0) T1_PrintLog( "T1_SubsetFont()", "Preserving FontSpecific Encoding", T1LOG_DEBUG); } /* At this point, if required, the actual encoding definition follows. */ if ( reencode!=0) { k=0; /* Write actually required encoding slots. We only encode the characters required from the current fonts encoding. Characters from StandardEncoding required by composite chars are not encoded. */ for ( j=0; j<256; j++) { if ( (encmask[j] & 0x01) !=0 ) { charnameP=T1_GetCharName( FontID, j); i+=sprintf( &(filebuf[i]), "dup %d /%s put\n", j, charnameP); k++; } } /* finish encoding definition */ i+=sprintf( &(filebuf[i]), "readonly def\n"); sprintf( err_warn_msg_buf, "Encoded %d characters", k); T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf, T1LOG_DEBUG); k=0; } } /* end of if (...encoding handling...) */ /* Extract the names that are used for the charstring definitions. We will later need them! */ if (strstr( &(filebuf[i-retval]), "/RD")!=NULL) { sprintf( rdstring, "RD"); } if (strstr( &(filebuf[i-retval]), "/ND")!=NULL) { sprintf( ndstring, "ND"); } if (strstr( &(filebuf[i-retval]), "/-|")!=NULL) { sprintf( rdstring, "-|"); } if (strstr( &(filebuf[i-retval]), "/|-")!=NULL) { sprintf( ndstring, "|-"); } if (strstr( &(filebuf[i-retval]), "/CharStrings")!=NULL) { /* replace dictionary with one of an appropriate size: */ i -=retval; sprintf( err_warn_msg_buf, "Private dictionary finished (%u data bytes)", i-dindex); T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf, T1LOG_DEBUG); /* if .notdef is not in the encoding mask, we have to reserve room for the additional charstring .notdef. Note that still nocharstrings is an upper bound estimation, which is reached in cases where no characters are encoded more than one time. */ if ( notdefencoded == 0 ) { nocharstrings++; } i+=sprintf( &(filebuf[i]), "2 index /CharStrings %d dict dup begin\n", nocharstrings); break; } } /* the portion until Charstrings-dict is now read in */ /* We now have to write the CharStrings. Each charstring must be written once, even if the respective character appears more than once in the encoding. So we set up table to remember which charstrings already have been written. Note: The indices returned by locateCharString() range from 1 to n, so that we have to decrement the index when filling the csdone array! */ if (( csdone=(char *)calloc( pFontBase->pFontArray[FontID].pType1Data->CharStringsP[0].key.len, sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; free( filebuf); T1Close( ifp); return( NULL); } /* The .notdef character is in force! */ if ((currstring_no=locateCharString( FontID, ".notdef"))==0) { T1_errno=T1ERR_UNSPECIFIED; free( csdone); T1Close( ifp); return( NULL); } i+=sprintf( &(filebuf[i]), "/.notdef %d %s ", charstringL, rdstring); memcpy(&(filebuf[i]), charstringP, charstringL); i+=charstringL; i+=sprintf( &(filebuf[i]), " %s\n", ndstring); csdone[currstring_no-1]=1; /* Now, step through the specifier matrix and write only the necessary charstrings. */ for ( j=0; j<256; j++) { if (encmask[j]!=0) { if ( (encmask[j] & 0x01) != 0 ) { /* Obtain name from current encoding */ charnameP=T1_GetCharName( FontID, j); } else { /* Obtain name from StandardEncoding */ strncpy( charnamebuf, (StdEncArrayP[j]).data.nameP, (StdEncArrayP[j]).len); charnamebuf[StdEncArrayP[j].len] = '\0'; charnameP=charnamebuf; } if ((currstring_no=locateCharString( FontID, charnameP))==0) { /* Atomic character not found. This is mysterious, but causes no harm because .notdef will be substituted */ sprintf( err_warn_msg_buf, "Could not locate CS ""%s"" for index %d", charnameP, j); T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf, T1LOG_WARNING); continue; } /* Process charstring only if it has not already been done */ if (csdone[currstring_no-1]==0) { k=i; i+=sprintf( &(filebuf[i]), "/%s %d %s ", charnameP, charstringL, rdstring); memcpy(&(filebuf[i]), charstringP, charstringL); i+=charstringL; i+=sprintf( &(filebuf[i]), " %s\n", ndstring); csdone[currstring_no-1]=1; sprintf( err_warn_msg_buf, "Processing of CS ""%s"" for index %d (EncMaskFlag=0x%X) successful (len=%d bytes, line=%d bytes)", charnameP, j, encmask[j], charstringL, i-k); T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf, T1LOG_DEBUG); } else { sprintf( err_warn_msg_buf, "Skipped multiple processing of CS ""%s"" (index %d)", charnameP, j); T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf, T1LOG_DEBUG); } } } /* Get rid of temporary data */ if (csdone!=NULL) { free( csdone); csdone = NULL; } if ( cci != NULL ) { free( cci); cci = NULL; } /* All charstrings are written. Some PostScript code follows */ i+=sprintf( &(filebuf[i]), "end\nend\nreadonly put\nnoaccess put\ndup /FontName get exch definefont pop\nmark currentfile closefile\n"); sprintf( err_warn_msg_buf, "Charstrings and Font definition finished (%d data bytes, from which %d bytes will be encrypted)", i, i-dindex); T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf, T1LOG_DEBUG); /* we compute the size of the encrypted area. */ if (encrypt==1) { encryptsize=i-dindex; encryptsize+=4; /* the four random bytes */ encryptsize*=2; /* since we use ASCII-hex output */ encryptsize+=(int)ceil((double)encryptsize/linewidth); /* we need a few newline characters to adjust the output format */ } else if (encrypt==2) { /* binary encryption. The whole data is contiguous and only at the end of the data a newline is added. */ encryptsize=i-dindex+1; encryptsize+=4; /* the four random bytes */ } else { /*The case of no encryption does not produce valid fonts, it is for debugging purposes only */ encryptsize=i-dindex+1; } /* we add the size of the 512 zeros and the cleartomark */ trailersize+=ZEROS; trailersize+=(int)ceil((double)ZEROS/linewidth); trailersize+=12; /* cleartomark */ /* Search for remaining PostScript code in the last 1024 bytes. This should suffice for any font. */ tr_len=T1GetTrailer( linebuf, 1025, ifp); T1Close(ifp); /* we do not need the file any longer */ /* And we add the size of the trailer. A trailer only consisting of a newline is ignored because the newline has already been included in the cleartomark-string. */ if ( !((tr_len==1) && ((linebuf[0]=='\n') || (linebuf[0]=='\r')) ) ) { trailersize+=tr_len; } if ((encryptbuf=(char *)calloc( encryptsize, 1))==NULL) { T1_errno=T1ERR_ALLOC_MEM; free( filebuf); return( NULL); } /* Allocate one byte in orer to be able to use sprintf() (which appends an ASCII-\0).*/ if ((trailerbuf=(char *)calloc( trailersize+1, 1))==NULL) { T1_errno=T1ERR_ALLOC_MEM; free( filebuf); free( encryptbuf); return( NULL); } k=0; colcount=0; /* perform eexec-encryption */ eexec_r=55665; if (encrypt==0) { for (j=dindex; jpFontArray[FontID].pType1Data->Private[LENIV].value.data.integer); } t1lib-5.1.2/lib/t1lib/t1subset.h0000644000175000001440000000557410733501626015003 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1subset.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2004-12-02 ----- Description: This file is part of the t1-library. It contains declarations and definitions for t1subset.c. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2004. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independ from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1SUBSET_C #define T1_SUBSET_DEFAULT 0x00 #define T1_SUBSET_FORCE_REENCODE 0x01 #define T1_SUBSET_SKIP_REENCODE 0x02 #define T1_SUBSET_ENCRYPT_BINARY 0x04 /* This is only for debugging, it does not produce valid font-files! */ #define T1_SUBSET_ENCRYPT_NONE 0x08 /* Functions used from the t1io-module, partially written and added for font-subsetting. We don't care about the special F_FILE-type defined in that module because all accesses are done via pointers. */ extern unsigned long T1GetFileSize( FILE *f); extern FILE *T1Open( char *fn, char *mode); extern int T1Gets(char *string, int size, FILE *f); extern int T1GetDecrypt( void); extern int T1GetTrailer(char *string, int size, FILE *f); extern int T1Close( FILE *f); extern void T1io_reset( void); extern int T1int_QuerySEAC( int FontID, unsigned char index, unsigned char* piece1, unsigned char* piece2 ); char *T1_SubsetFont( int FontID, char *mask, unsigned int flags, int linewidth, unsigned long maxblocksize, unsigned long *bufsize); char *T1_GetCharString( int FontID, char *charname, int *len); int T1_GetlenIV( int FontID); #define ZEROS 512 #else extern char *T1_SubsetFont( int FontID, char *mask, unsigned int flags, int linewidth, unsigned long maxblocksize, unsigned long *bufsize); extern char *T1_GetCharString( int FontID, char *charname, int *len); extern int T1_GetlenIV( int FontID); #endif t1lib-5.1.2/lib/t1lib/Makefile.in0000644000175000001440000000417710733501626015123 0ustar rmzusers# Makefile.in # # This file is part of the t1lib-package! See documentation and Readme files # of the t1lib-package for copyright restrictions. # # Targets provided: # all (default) # install # clean # # Author: Rainer Menzner (Rainer.Menzner@web.de) # Date: 06/20/1997 # Last modified: 2001-04-01 # # Modified by H.Kakugawa to use libtool LIBTOOL = ../../libtool SHELL = /bin/sh CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ OPTIONS = @OPTIONS@ X_LIBS = @X_LIBS@ TOPSRC = @top_srcdir@ XPM_LIB = -lXpm XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@ LDFLAGS = @LDFLAGS@ LDLIBS = @LDLIBS@ AR = ar rc RANLIB = @RANLIB@ RM = rm -f X_CFLAGS = @X_CFLAGS@ YACC = @YACC@ LEX = @LEX@ LEXLIB = @LEXLIB@ ALLCFLAGS = $(CFLAGS) INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ bindir = @bindir@ datadir = @datadir@ libdir = @libdir@ mandir = @mandir@/man1 manext = .1 no_x = @no_x@ T1_AA_TYPE16 = @T1_AA_TYPE16@ T1_AA_TYPE32 = @T1_AA_TYPE32@ T1_AA_TYPE64 = @T1_AA_TYPE64@ SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS) $(T1_AA_TYPE16) $(T1_AA_TYPE32) $(T1_AA_TYPE64)' 'OPTIONS=$(OPTIONS)' @SET_MAKE@ OBJS = \ t1finfo.lo \ t1base.lo \ t1delete.lo \ t1enc.lo \ t1env.lo \ t1load.lo \ t1set.lo \ t1trans.lo \ t1aaset.lo \ t1afmtool.lo \ t1outline.lo \ t1subset.lo \ parseAFM.lo XOBJS = @XOBJS@ .SUFFIXES: .c .o .lo .c.lo: $(LIBTOOL) --mode=compile \ $(CC) -c $(CPPFLAGS) $(CFLAGS) $< .c.o: $(LIBTOOL) --mode=compile \ $(CC) -c $(CPPFLAGS) $(CFLAGS) $< all: $(OBJS) $(XOBJS) .PHONY: clean dependencies: dummy gcc -MM *.c | sed 's/\.o:/.lo:/g' > .dependencies clean: dummy -$(RM) *.lo *.o .libs/* -$(RM) *~ *.bak \#*\# -rmdir .libs install: dummy dummy: # Dependencies of object files include .dependencies t1lib-5.1.2/lib/t1lib/t1base.c0000644000175000001440000012464510733501626014404 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1base.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-17 ----- Description: This file is part of the t1-library. It contains basic routines to initialize the data structures used by the t1-library. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independ from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1BASE_C #include #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include #include #include #include "../type1/ffilest.h" #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "sysconf.h" #include "t1base.h" #include "t1types.h" #include "t1global.h" #include "t1env.h" #include "t1delete.h" static int test_for_t1_file( char *buffer ); static int T1_pad=0; /* A fix for Encoding Vector problem. Initialization / Deinitialization is now done in T1_InitLib() / T1-CloseLib. */ extern boolean Init_BuiltInEncoding( void); extern psobj *StdEncArrayP; static const char* T1errmsg[] = { "", /* -10 */ "", /* -9 */ "", /* -8 */ "", /* -7 */ "", /* -6 */ "Attempt to Load Multiple Master Font", /* T1ERR_SCAN_FONT_FORMAT -5 */ "Type 1 Font File Open Error", /* T1ERR_SCAN_FILE_OPEN_ERR -4 */ "Virtual Memory Exceeded", /* T1ERR_SCAN_OUT_OF_MEMORY -3 */ "Syntactical Error Scanning Font File", /* T1ERR_SCAN_ERROR -2 */ "Premature End of Font File Encountered", /* T1ERR_SCAN_FILE_EOF -1 */ "", /* 0 */ "Path Construction Error", /* T1ERR_PATH_ERROR 1 */ "Font is Corrupt", /* T1ERR_PARSE_ERROR 2 */ "Rasterization Aborted", /* T1ERR_TYPE1_ABORT 3 */ "", /* 4 */ "", /* 5 */ "", /* 6 */ "", /* 7 */ "", /* 8 */ "", /* 9 */ "Font ID Invalid in this Context", /* T1ERR_INVALID_FONTID 10 */ "Invalid Argument in Function Call", /* T1ERR_INVALID_PARAMETER 11 */ "Operation not Permitted", /* T1ERR_OP_NOT_PERMITTED 12 */ "Memory Allocation Error", /* T1ERR_ALLOC_MEM 13 */ "Error Opening File", /* T1ERR_FILE_OPEN_ERR 14 */ "Unspecified T1Lib Error", /* T1ERR_UNSPECIFIED 15 */ "Missing AFM Data", /* T1ERR_NO_AFM_DATA 16 */ "X11 Interface Error", /* T1ERR_X11 17 */ "Missing Component of Composite Character" /* T1ERR_COMPOSITE_CHAR 18 */ "Error Scanning Encoding File", /* T1ERR_SCAN_ENCODING 19 */ "", /* 20 */ }; /* T1_StrError(): Return an error message corresponding to the value of t1err. */ const char *T1_StrError( int t1err) { int errind; errind = t1err + 10; if ( errind < 0 ) errind = 0; if ( errind > 29 ) errind = 0; return T1errmsg[errind]; } /* This function is to be called by the user to initialize the font mechanism */ void *T1_InitLib( int log) { int result; int i; char *usershome=NULL; char *logfilepath=NULL; char *envlogreq=NULL; int usrforcelog=0; /* Check against multiple initialization. */ if ( T1_Up != 0 ) { T1_errno=T1ERR_OP_NOT_PERMITTED; return NULL; } /* Reset T1_errno */ T1_errno=0; /* Assign pointer to global struct and set entry padding: */ pFontBase=&FontBase; if (T1_pad) pFontBase->bitmap_pad=T1_pad; else pFontBase->bitmap_pad=T1GLYPH_PAD; pFontBase->pFontArray = NULL; pFontBase->t1lib_flags=0; /* Check for AA-caching */ if ((log & T1_AA_CACHING)){ pFontBase->t1lib_flags |= T1_AA_CACHING; } /* Check for AFM disable */ if ((log & T1_NO_AFM)) { pFontBase->t1lib_flags |= T1_NO_AFM; } /* Check environment variable ENV_LOG_STRING. By this means, a user may generate a log file even if at compile time log file creation has been suppressed. Of course, if the loglevel is reduced after initialization by the programmer, this environment variable takes no effect! */ if ((envlogreq=getenv(ENV_LOG_STRING))!=NULL) { if (strcmp( envlogreq, "logDebug")==0) T1_SetLogLevel( T1LOG_DEBUG); else if (strcmp( envlogreq, "logStatistic")==0) T1_SetLogLevel( T1LOG_STATISTIC); else if (strcmp( envlogreq, "logWarning")==0) T1_SetLogLevel( T1LOG_WARNING); else if (strcmp( envlogreq, "logError")==0) T1_SetLogLevel( T1LOG_ERROR); usrforcelog=1; } /* Open log-file: */ t1lib_log_file=NULL; if ((log & LOGFILE) || (usrforcelog!=0)) { pFontBase->t1lib_flags |= LOGFILE; /* Try first opening in current directory: */ if ((t1lib_log_file=fopen( T1_LOG_FILE, "wb"))==NULL) { if ((usershome=getenv("HOME"))!=NULL) { logfilepath=(char *)malloc((strlen(usershome) + strlen(T1_LOG_FILE) + 2 ) * sizeof(char)); strcpy( logfilepath, usershome); strcat( logfilepath, DIRECTORY_SEP); strcat( logfilepath, T1_LOG_FILE); if ((t1lib_log_file=fopen( logfilepath, "wb"))==NULL){ t1lib_log_file=stderr; } free( logfilepath); } else { t1lib_log_file=stderr; } } if (t1lib_log_file==stderr) { T1_PrintLog( "T1_InitLib()", "Unable to open a logfile, using stderr", T1LOG_ERROR); } } T1_PrintLog( "T1_InitLib()", "Initialization started", T1LOG_STATISTIC); /* Check for representation of data in memory: */ if ((pFontBase->endian=T1_CheckEndian())){ T1_PrintLog( "T1_InitLib()", "Using Big Endian data presentation (MSBFirst)", T1LOG_DEBUG); pFontBase->endian=1; } else{ T1_PrintLog( "T1_InitLib()", "Using Little Endian data presentation (LSBFirst)", T1LOG_DEBUG); pFontBase->endian=0; } /* Save version identifier */ sprintf( err_warn_msg_buf, "Version Identifier: %s", T1LIB_IDENT); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); /* Save how t1lib is initialized */ sprintf( err_warn_msg_buf, "Initialization flags: 0x%X", log); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); /* Save padding value in log file */ sprintf( err_warn_msg_buf, "Glyphs are padded to %d bits", pFontBase->bitmap_pad); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); #ifdef __CHAR_UNSIGNED__ T1_PrintLog( "T1_InitLib()", "System-Info: char is unsigned", T1LOG_DEBUG); #else T1_PrintLog( "T1_InitLib()", "System-Info: char is signed", T1LOG_DEBUG); #endif sprintf( err_warn_msg_buf, "System-Info: sizeof(char): %d", SIZEOF_CHAR); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "System-Info: sizeof(short): %d", SIZEOF_SHORT); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "System-Info: sizeof(int): %d", SIZEOF_INT); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "System-Info: sizeof(long): %d", SIZEOF_LONG); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "System-Info: sizeof(long long): %d", SIZEOF_LONG_LONG); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "System-Info: sizeof(float): %d", SIZEOF_FLOAT); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "System-Info: sizeof(double): %d", SIZEOF_DOUBLE); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "System-Info: sizeof(long double): %d", SIZEOF_LONG_DOUBLE); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "System-Info: sizeof(void *): %d", SIZEOF_VOID_P); T1_PrintLog( "T1_InitLib()", err_warn_msg_buf, T1LOG_DEBUG); intT1_SetupDefaultSearchPaths(); if (log & IGNORE_CONFIGFILE) { pFontBase->t1lib_flags |= IGNORE_CONFIGFILE; T1_PrintLog( "T1_InitLib()", "Skipping configuration file search!", T1LOG_STATISTIC); } else { if ((result=intT1_ScanConfigFile())==0) T1_PrintLog( "T1_InitLib()", "Warning t1lib configuration file not found!", T1LOG_WARNING); } /* Initialize builtin Standard Encoding */ if ( !(Init_BuiltInEncoding()) ) { T1_PrintLog( "T1_InitLib()", "Unable initialize internal StandardEncoding!", T1LOG_ERROR); } /* Set the default encoding to the fonts' internal encoding */ pFontBase->default_enc=NULL; /* Initialize the no_fonts... values */ pFontBase->no_fonts=0; pFontBase->no_fonts_ini=pFontBase->no_fonts; pFontBase->no_fonts_limit=pFontBase->no_fonts; /* Check whether to read font database */ if ((log & IGNORE_FONTDATABASE)){ pFontBase->t1lib_flags |= IGNORE_FONTDATABASE; T1_Up=1; /* System has been initialized ! */ T1_PrintLog( "T1_InitLib()", "Initialization successfully finished (Database empty)", T1LOG_STATISTIC); return((void *) pFontBase); } result=0; /* Read fontdatabase(s) */ i=0; while (T1_FDB_ptr[i]!=NULL) { if ((result=intT1_scanFontDBase(T1_FDB_ptr[i]))==-1){ T1_PrintLog( "T1_InitLib()", "Fatal error scanning Font Database File %s", T1LOG_WARNING, T1_FDB_ptr[i]); } if (result>-1) pFontBase->no_fonts+=result; i++; } if ( (result == 0) && (i != 0)){ T1_PrintLog( "T1_InitLib()", "No fonts from Font Database File(s) found (T1_errno=%d)", T1LOG_ERROR, T1_errno); return(NULL); } result=0; /* Read XLFD fontdatabase(s) */ i=0; while (T1_FDBXLFD_ptr[i]!=NULL) { if ((result=intT1_scanFontDBaseXLFD(T1_FDBXLFD_ptr[i]))==-1){ T1_PrintLog( "T1_InitLib()", "Fatal error scanning XLFD Font Database File %s", T1LOG_WARNING, T1_FDB_ptr[i]); } if (result>-1) pFontBase->no_fonts+=result; i++; } if ( (result == 0) && (i != 0)){ T1_PrintLog( "T1_InitLib()", "No fonts from XLFD Font Database File(s) found (T1_errno=%d)", T1LOG_ERROR, T1_errno); return(NULL); } /* Initialize the no_fonts... values */ pFontBase->no_fonts_ini=pFontBase->no_fonts; pFontBase->no_fonts_limit=pFontBase->no_fonts; T1_Up=1; /* System has been initialized ! */ T1_PrintLog( "T1_InitLib()", "Initialization successfully finished", T1LOG_STATISTIC); return((void *) pFontBase); } /* intT1_scanFontDBase(): - opens the file with the font definitions, - reads the number of fonts defined and saves this in FontBase, - allocates memory for all the filenames of the Type1 files - tests for .pfa und .pfb files and saves the name found - initializes an array that allows to acces these names by an index number, the font_ID - returns -1 on fatal error and the number of fonts located successfully */ int intT1_scanFontDBase( char *filename) { int fd; int filesize, i, j, k, m; int found=0, located=0; char *filebuffer; int nofonts=0; FONTPRIVATE* fontarrayP=NULL; #ifndef O_BINARY # define O_BINARY 0x0 #endif if ((fd=open( filename, O_RDONLY | O_BINARY))<3){ T1_PrintLog( "intT1_scanFontDBase()", "Font Database File %s not found!", T1LOG_WARNING, filename); T1_errno=T1ERR_FILE_OPEN_ERR; return(-1); } /* Get the file size */ filesize=lseek( fd, 0, 2); /* Reset fileposition to start */ lseek (fd, 0, 0); if ((filebuffer=(char *)malloc(filesize*sizeof(char) )) == NULL){ T1_PrintLog( "intT1_scanFontDBase()", "Couldn't allocate memory for loading font database file %s", T1LOG_ERROR, filename); T1_errno=T1ERR_ALLOC_MEM; return(-1); } i=read( fd, filebuffer, filesize); close(fd); /* Close font database file */ i=j=m=0; while (inofonts) /* to ignore especially white space at end */ break; i++; /* Step further in file position */ } /* Return the memory for file reading */ free(filebuffer); return( found); } /* intT1_scanFontDBaseXLFD(): - opens the file with the font definitions, - reads the number of fonts defined and saves this in FontBase, - allocates memory for all the filenames of the Type1 files - tests for .pfa und .pfb files and saves the name found - initializes an array that allows to acces these names by an index number, the font_ID - returns -1 on fatal error and the number of fonts located successfully. This function is identical to intT1_scanFontDBase() with the difference that it expects the database file to be in XLFD format, that is, the font's name comes in the first place stead of in the last. */ int intT1_scanFontDBaseXLFD( char *filename) { int fd; int filesize, i, j, l, m; int found=0, located=0; char *filebuffer; int nofonts=0; FONTPRIVATE* fontarrayP=NULL; #ifndef O_BINARY # define O_BINARY 0x0 #endif if ((fd=open( filename, O_RDONLY | O_BINARY))<3){ T1_PrintLog( "intT1_scanFontDBaseXLFD()", "XLFD Font Database File %s not found!", T1LOG_WARNING, filename); T1_errno=T1ERR_FILE_OPEN_ERR; return(-1); } /* Get the file size */ filesize=lseek( fd, 0, 2); /* Reset fileposition to start */ lseek (fd, 0, 0); if ((filebuffer=(char *)malloc(filesize*sizeof(char) )) == NULL){ T1_PrintLog( "intT1_scanFontDBaseXLFD()", "Couldn't allocate memory for loading XLFD font database file %s", T1LOG_ERROR, filename); T1_errno=T1ERR_ALLOC_MEM; return(-1); } i=read( fd, filebuffer, filesize); close(fd); /* Close XLFD font database file */ i=j=l=m=0; while (inofonts) /* to ignore especially white space at end */ break; i++; /* Step further in file position */ } /* Return the memory for file reading */ free(filebuffer); return( found); } /* T1_CloseLib(): Close the library and free all associated memory */ int T1_CloseLib( void) { int i, j, error=0; if ( T1_Up != 0 ) { for (i=pFontBase->no_fonts; i; i--){ /* Free filename only if not NULL and if the font is physical! Do it before removing the font since the physical information is no more available afterwards. If necessary, an explicitly specified AFM filename is also freed. */ if ((pFontBase->pFontArray[i-1].pFontFileName!=NULL) && (pFontBase->pFontArray[i-1].physical==1)){ free( pFontBase->pFontArray[i-1].pFontFileName); pFontBase->pFontArray[i-1].pFontFileName=NULL; if (pFontBase->pFontArray[i-1].pAfmFileName!=NULL){ free( pFontBase->pFontArray[i-1].pAfmFileName); pFontBase->pFontArray[i-1].pAfmFileName=NULL; } } /* Now, remove font: */ if ((j=T1_DeleteFont( i-1))){ error=1; sprintf( err_warn_msg_buf, "T1_DeleteFont() returned %d for Font %d", j, i-1); T1_PrintLog( "T1_CloseLib()", err_warn_msg_buf, T1LOG_ERROR); } } /* Free the FONTPRIVATE area */ if (pFontBase->pFontArray) free( pFontBase->pFontArray); else error=1; /* Get rid of internal StandardEncoding vector */ if ( StdEncArrayP != NULL ) { free( StdEncArrayP); StdEncArrayP = NULL; } /* Free search paths */ intT1_FreeSearchPaths(); /* Reset the flags */ pFontBase->t1lib_flags=0; /* Indicate Library is no longer initialized */ pFontBase=NULL; T1_Up=0; T1_PrintLog( "T1_CloseLib()", "Library closed", T1LOG_STATISTIC); if ((t1lib_log_file!=NULL) && (t1lib_log_file!=stderr)) fclose(t1lib_log_file); t1lib_log_file=NULL; } return( error); } /* T1_AddFont(): Add a new fontfile to the fontdatabase. Return values: >0: Assigned FontID -1: Fontfile not found -2: Error allocating memory for FONTPRIVATE-area -3: No memory for saving font filename */ int T1_AddFont( char *fontfilename) { char *FullName; FONTPRIVATE *save_ptr; int i; int new_ID; if (fontfilename==NULL){ T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } /* Check for existence of fontfile */ if ((FullName=intT1_Env_GetCompletePath(fontfilename,T1_PFAB_ptr))==NULL) { T1_errno=T1ERR_FILE_OPEN_ERR; return(-1); } free(FullName); /* Check if free space for a new FONTPRIVATE is available; if not, realloc memory some amount larger */ save_ptr=pFontBase->pFontArray; if (pFontBase->no_fonts==pFontBase->no_fonts_limit){ if (pFontBase->pFontArray == NULL) { /* In case this is the first font */ pFontBase->pFontArray=(FONTPRIVATE *)calloc(pFontBase->no_fonts_limit + ADVANCE_FONTPRIVATE, sizeof(FONTPRIVATE)); } else { /* We already have some fonts */ pFontBase->pFontArray=(FONTPRIVATE *)realloc(pFontBase->pFontArray, (pFontBase->no_fonts_limit + ADVANCE_FONTPRIVATE) * sizeof(FONTPRIVATE)); if (pFontBase->pFontArray==NULL){ /* Restore pointer */ pFontBase->pFontArray=save_ptr; T1_errno=T1ERR_ALLOC_MEM; return(-2); /* No memory available */ } } pFontBase->no_fonts_limit += ADVANCE_FONTPRIVATE; /* First, initialize newly allocated to be not used */ for ( i=pFontBase->no_fonts; ino_fonts+ADVANCE_FONTPRIVATE; i++){ pFontBase->pFontArray[i].pFontFileName=NULL; pFontBase->pFontArray[i].pAfmFileName=NULL; pFontBase->pFontArray[i].pAFMData=NULL; pFontBase->pFontArray[i].pType1Data=NULL; pFontBase->pFontArray[i].pEncMap=NULL; pFontBase->pFontArray[i].pKernMap=NULL; pFontBase->pFontArray[i].pFontEnc=NULL; pFontBase->pFontArray[i].pFontSizeDeps=NULL; pFontBase->pFontArray[i].vm_base=NULL; pFontBase->pFontArray[i].FontMatrix[0]=0.0; pFontBase->pFontArray[i].FontMatrix[1]=0.0; pFontBase->pFontArray[i].FontMatrix[2]=0.0; pFontBase->pFontArray[i].FontMatrix[3]=0.0; pFontBase->pFontArray[i].FontTransform[0]=0.0; pFontBase->pFontArray[i].FontTransform[1]=0.0; pFontBase->pFontArray[i].FontTransform[2]=0.0; pFontBase->pFontArray[i].FontTransform[3]=0.0; pFontBase->pFontArray[i].slant=0.0; pFontBase->pFontArray[i].extend=0.0; pFontBase->pFontArray[i].physical=0; pFontBase->pFontArray[i].refcount=0; pFontBase->pFontArray[i].space_position=0; pFontBase->pFontArray[i].info_flags=0; } } /* no_fonts-1 was the largest allowed font ID */ new_ID=pFontBase->no_fonts; pFontBase->no_fonts++; if ((FontBase.pFontArray[new_ID].pFontFileName=(char *) calloc( strlen( fontfilename)+1, sizeof(char))) == NULL){ T1_PrintLog( "T1_AddFont()", "Failed to allocate memory for Filename %s (FontID=%d)", T1LOG_ERROR, fontfilename, new_ID); T1_errno=T1ERR_ALLOC_MEM; return(-3); } strcpy( FontBase.pFontArray[new_ID].pFontFileName, fontfilename); /* Generate logfile entry */ sprintf( err_warn_msg_buf, "Assigned FontID %d to fontfile %s", new_ID, FontBase.pFontArray[new_ID].pFontFileName); T1_PrintLog( "T1_AddFont()", err_warn_msg_buf, T1LOG_STATISTIC); /* Return FontID of newly declared font */ return( new_ID); } /* T1_PrintLog() generates entries in the log file. msg_txt is subject to scan conversion and ... signifies a accordingly lrge variable list. */ void T1_PrintLog( char *func_ident, char *msg_txt, int level, ...) { va_list vararg; static char levelid[4]={ 'E', 'W', 'S', 'D'}; time_t s_clock, *tp; if (t1lib_log_file==NULL) return; if ((level>t1lib_log_level) || (level<1)){ return; } else{ /* initialize argument list */ va_start( vararg, level); tp=&s_clock; s_clock=time( tp); /* fprintf( t1lib_log_file, "(%c) (%.24s) %s: ", levelid[level-1], ctime(&s_clock), func_ident); */ /* Don't print the time stamp */ fprintf( t1lib_log_file, "(%c) %s: ", levelid[level-1], func_ident ); vfprintf( t1lib_log_file, msg_txt, vararg ); fprintf( t1lib_log_file, "\n"); fflush( t1lib_log_file); /* cleanup variable list */ va_end( vararg); return; } } /* T1_SetLogLevel(): Set the level which a message must have so that it is printed into the logfile. This function may be called before T1_InitLib(). */ void T1_SetLogLevel( int level) { if ((level>0) && (level<5)) t1lib_log_level=level; return; } /* T1_CheckForInit(): If no initialization of font mechanism has been done, return -1, indicating an error. */ int T1_CheckForInit(void) { if(T1_Up) return(0); else return(-1); } /* T1_CheckForFontID(): Checks the font mechanism concerning the specified ID. It returns: 0 if font belonging to FontID has not yet been loaded 1 if font belonging to FontID has already been loaded -1 if FontID is an invalid specification or t1lib not initialized */ int T1_CheckForFontID( int FontID) { /* FontID is invalid */ if ((FontID<0)||(FontID>(pFontBase->no_fonts - 1))||(T1_Up==0)) return(-1); if (pFontBase->pFontArray[FontID].pType1Data==NULL) return(0); /* has not yet been loaded */ else return(1); /* has already been loaded */ } /* test_for_t1_file returns 0 if a file "name.pfa" or "name.pfb" was found. Else, -1 is returned. If successful, buffer contains the found filename string */ static int test_for_t1_file( char *buffer ) { int i=0; char *FullName; /* First case: A PostScript Font ASCII File without extension (according to some UNIX-conventions) */ if ((FullName=intT1_Env_GetCompletePath(buffer,T1_PFAB_ptr))!=NULL) { free(FullName); return(0); } while (buffer[i]!=0){ i++; } buffer[i]='.'; buffer[i+1]='p'; buffer[i+2]='f'; buffer[i+4]=0; /* Second case: A PostScript Font ASCII File */ buffer[i+3]='a'; if ((FullName=intT1_Env_GetCompletePath(buffer,T1_PFAB_ptr))!=NULL) { free(FullName); return(0); } /* Third case: A PostScript Font Binary File */ buffer[i+3]='b'; if ((FullName=intT1_Env_GetCompletePath(buffer,T1_PFAB_ptr))!=NULL) { free(FullName); return(0); } /* If we get here no file was found => Set buffer to an empty string and return -1 */ buffer[0]=0; return(-1); } /* T1_GetFontFileName() returns a pointer to the filename of the font, associated with FontID. This filename does not contain a full path. */ char *T1_GetFontFileName( int FontID) { static char filename[MAXPATHLEN+1]; if (T1_CheckForInit())return(NULL); /* Check first for valid FontID */ if ((FontID<0) || (FontID>FontBase.no_fonts)){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } strcpy( filename, pFontBase->pFontArray[FontID].pFontFileName); return( filename); } /* As suggested by Nicolai Langfeldt, we make it possible to specify a completely independent path for the afm filename. This should make t1lib usable in context with using the kpathsearch-library. We allow setting those path´s after initialization, but before a font is loaded. returns 0: OK -1: Operation could not be performed */ int T1_SetAfmFileName( int FontID, char *afm_name) { if (T1_CheckForFontID(FontID)!=0){ /* Operation may not be applied because FontID is invalid or font is loaded */ T1_errno=T1ERR_INVALID_FONTID; return(-1); } if (afm_name==NULL) { T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } if (pFontBase->pFontArray[FontID].pAfmFileName!=NULL){ /* we first free the current name */ free( pFontBase->pFontArray[FontID].pAfmFileName); pFontBase->pFontArray[FontID].pAfmFileName=NULL; } if ((pFontBase->pFontArray[FontID].pAfmFileName= (char *)malloc( (strlen(afm_name)+1)*sizeof( char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return( -1); } strcpy( pFontBase->pFontArray[FontID].pAfmFileName, afm_name); return(0); } /* We have a function for querying the name. Returns a pointer to the string or NULL if name was not explicitly set .*/ char *T1_GetAfmFileName( int FontID) { static char filename[MAXPATHLEN+1]; if (T1_CheckForInit())return(NULL); /* Check first for valid FontID */ if ((FontID<0) || (FontID>FontBase.no_fonts)){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } if (pFontBase->pFontArray[FontID].pAfmFileName==NULL) { return( NULL); } strcpy( filename, pFontBase->pFontArray[FontID].pAfmFileName); return( filename); } /* T1_GetNoFonts(): Return the number of declared fonts */ int T1_GetNoFonts(void) { if (T1_CheckForInit()) return(-1); return(FontBase.no_fonts); } /* T1_SetDeviceResolutions( x_res, y_res): Set the device's physical resolution in horizontal and vertical direction, mesured in DPI (Dots Per Inch). This should be done before the first font is loaded! */ int T1_SetDeviceResolutions( float x_res, float y_res) { int i; if (T1_CheckForInit()) ; /* Not initialized -> no size dependent data -> OK */ else /* Check if size-dependent data is existent */ for ( i=T1_GetNoFonts(); i; i--) if (pFontBase->pFontArray[i-1].pFontSizeDeps!=NULL){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); /* There's is size dependent data for a font */ } /* Save resolutions and calculate horizontal and vertical scale factors to map desired bp to device pixel */ DeviceSpecifics.x_resolution=(float) x_res; DeviceSpecifics.y_resolution=(float) y_res; DeviceSpecifics.scale_x=(float)(((float)x_res)/BIGPOINTSPERINCH); DeviceSpecifics.scale_y=(float)(((float)y_res)/BIGPOINTSPERINCH); return(0); } /* T1_QueryX11Support(): Check at runtime to see if t1lib was compiled with X11 interface: */ int T1_QueryX11Support( void) { #ifndef T1LIB_NO_X11_SUPPORT return(1); #else return(0); #endif } /* int T1_CopyFont(): Copies the font associated with FontID to another location. The pointers to type1- , afm- and encoding data as well as the matrices remain completely untouched. However, size dependent data is not copied. The produced font is marked as a "logical" font. If no memory is available in the FONTPRIVATE-array, there's realloc'ed some more memory. The FontID which is assigned to the newly generated font is given as the return value, or < 0 if an error occurs. Also, the refcount entry of the source font is incremented by one. Return value -1: invalid FontID specified -2: source font is not a "physical" font -3: no memory for reallocation of FONTPRIVATEs -4: no memory for one of the mapping tables */ int T1_CopyFont( int FontID) { FONTPRIVATE *save_ptr; int k; int new_ID; /* Check for a valid source font */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(-1); } /* Check if the font in question is a "physical" font, otherwise it may not be copied */ if (pFontBase->pFontArray[FontID].physical==0){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-2); } /* Check if free space for a new FONTPRIVATE is available; if not, realloc memory some amount larger */ save_ptr=pFontBase->pFontArray; if (pFontBase->no_fonts==pFontBase->no_fonts_limit){ pFontBase->pFontArray=(FONTPRIVATE *)realloc(pFontBase->pFontArray, (pFontBase->no_fonts_limit + ADVANCE_FONTPRIVATE) * sizeof(FONTPRIVATE)); if (pFontBase->pFontArray==NULL){ /* Restore pointer */ pFontBase->pFontArray=save_ptr; T1_errno=T1ERR_ALLOC_MEM; return(-3); } /* We zero the newly allocated memory */ if (pFontBase->pFontArray != NULL) { memset( pFontBase->pFontArray + pFontBase->no_fonts_limit, 0, ADVANCE_FONTPRIVATE * sizeof(FONTPRIVATE)); } pFontBase->no_fonts_limit += ADVANCE_FONTPRIVATE; } /* no_fonts-1 was the largest allowed font ID */ new_ID=pFontBase->no_fonts; /* Copy FONTPRIVATE-structure: */ pFontBase->pFontArray[new_ID]=pFontBase->pFontArray[FontID]; /* (Re)Set some values explicitly, others remain untouched: */ pFontBase->pFontArray[new_ID].pFontSizeDeps=NULL; pFontBase->pFontArray[new_ID].physical=0; /* AFM-mapping tables are to be setup for logical fonts separately (if AFM data is there) */ /* first, kerning map */ if (pFontBase->pFontArray[new_ID].pAFMData) { k=pFontBase->pFontArray[new_ID].pAFMData->numOfPairs; if (k>0){ /* kern map exists only if kerning pairs exist! */ if ((pFontBase->pFontArray[new_ID].pKernMap= (METRICS_ENTRY *)malloc( k*sizeof( METRICS_ENTRY)))==NULL){ sprintf( err_warn_msg_buf, "Error allocating memory for kerning map (new_ID=%d)", new_ID); T1_PrintLog( "T1_CopyFont()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_ALLOC_MEM; return(-4); } memcpy( pFontBase->pFontArray[new_ID].pKernMap, pFontBase->pFontArray[FontID].pKernMap, k*sizeof( METRICS_ENTRY)); } else { /* no kerning pairs, bu AFM data present */ pFontBase->pFontArray[new_ID].pKernMap=NULL; } } else { /* AFM data not present at all */ pFontBase->pFontArray[new_ID].pKernMap=NULL; } /* second, encoding map */ if (pFontBase->pFontArray[FontID].pEncMap!=NULL) { if ((pFontBase->pFontArray[new_ID].pEncMap= (int *)calloc(256,sizeof(int)))==NULL){ sprintf( err_warn_msg_buf, "Error allocating memory for encoding map (new_ID=%d)", new_ID); T1_PrintLog( "T1_CopyFont()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_ALLOC_MEM; return(-4); } memcpy( pFontBase->pFontArray[new_ID].pEncMap, pFontBase->pFontArray[FontID].pEncMap, 256*sizeof( int)); } /* New font is logical --> indicate to which physical font it refers by setting refcount: */ pFontBase->pFontArray[new_ID].refcount=FontID; /* Now the struct is setup; increment no_fonts by 1 because new_ID is a valid font specification from now on. */ pFontBase->no_fonts++; /* Increment refcount in source font */ pFontBase->pFontArray[FontID].refcount++; /* Generate logfile entry */ sprintf( err_warn_msg_buf, "Assigned FontID %d to fontfile %s", new_ID, FontBase.pFontArray[new_ID].pFontFileName); T1_PrintLog( "T1_CopyFont()", err_warn_msg_buf, T1LOG_STATISTIC); return(new_ID); } /* T1_SetBitmapPad(): Set the value to which bitmap-scanlines are padded. This has to be done before initialization because it is a very rudimentary operation. */ int T1_SetBitmapPad( int pad) { if (T1_Up){ /* Library is initialized --> return error */ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } else{ switch (pad){ case 8: T1_pad=8; return(0); case 16: T1_pad=16; return(0); #ifdef T1_AA_TYPE64 case 32: T1_pad=32; return(0); #endif default: T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } } } /* T1_GetBitmapPad(): Read the value to which scanlines of bitmap are padded. This can be done before or after initialization. */ int T1_GetBitmapPad( void) { if (pFontBase) /* T1lib initialized --> return value from struct */ return( pFontBase->bitmap_pad); else{ if (T1_pad) return(T1_pad); /* pad is explicitly set --> return that value */ else return( T1GLYPH_PAD); /* not expl. set --> return compilation default */ } } /* CheckEndian(): Checks whether the current machine is of little or big endian architecture. This is important for concatenating bitmaps. Function returns 0 if LittleEndian and 1 if BigEndian representation is used on the current hardware. */ int T1_CheckEndian() { unsigned char *charptr; /* Generate test value */ unsigned short test=0x0001; /* Read out memory as unsigned char */ charptr=(unsigned char *)(&test)+1; /* Return value will be 1 if Big- and 0 if Little Endian */ return((int) *charptr); } /* T1_GetLibIdent(): Return the identifier string for the current version of t1lib */ char *T1_GetLibIdent( void) { static char buf[15]; sprintf( buf, "%s", T1LIB_IDENT); return( (char *)buf); } /* T1_SetRasterFlags(): Enable/Disable certain features in the rasterizer */ extern void T1_SetRasterFlags( int flags) { T1_Type1OperatorFlags=flags; return; } /* T1_GetFontFileName(): returns a pointer to the complete path filename of the font, associated with FontID as it is in use by t1lib. */ char *T1_GetFontFilePath( int FontID) { static char filepath[MAXPATHLEN+1]; char *FileNamePath=NULL; /* is initialzed? */ if (T1_CheckForInit()) { T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* Check first for valid FontID */ if ((FontID<0) || (FontID>FontBase.no_fonts)){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* lib is initialized and FontID is valid -> we can really expect a name */ if ((FileNamePath=intT1_Env_GetCompletePath( pFontBase->pFontArray[FontID].pFontFileName, T1_PFAB_ptr))==NULL) { T1_PrintLog( "T1_GetFontFilePath()", "Couldn't locate font file for font %d in %s", T1LOG_WARNING, FontID, T1_GetFileSearchPath(T1_PFAB_PATH)); T1_errno=T1ERR_FILE_OPEN_ERR; return(NULL); } strcpy( filepath, FileNamePath); free( FileNamePath); return( filepath); } /* We have a function for querying the name. Returns a pointer to the string or NULL if name was not explicitly set .*/ char *T1_GetAfmFilePath( int FontID) { static char filepath[MAXPATHLEN+1]; char *FontFileName; char *AFMFilePath; int i, j; /* is initialized? */ if ((T1_CheckForInit())) { T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* Check first for valid FontID */ if ((FontID<0) || (FontID>FontBase.no_fonts)){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* Check wether AFM-file loading was suppressed on user's request */ if ((pFontBase->t1lib_flags & T1_NO_AFM)!=0) { /* this is no error condition, we simply return (NULL) */ return( NULL); } /* Check for explicitly associated metrics filename (via "T1_SetAfmFileName()"). If it exists, we return it! */ if (pFontBase->pFontArray[FontID].pAfmFileName!=NULL) { strcpy( filepath, pFontBase->pFontArray[FontID].pAfmFileName); sprintf( err_warn_msg_buf, "Returning explicitly specified path %s for Font %d", filepath, FontID); T1_PrintLog( "T1_GetAfmFilePath()", err_warn_msg_buf, T1LOG_DEBUG); return( filepath); } /* we have the usual case that the name of the metrics file has to be deduced from the font file name */ FontFileName=T1_GetFontFileName( FontID); i=strlen(FontFileName); j=i; strcpy( filepath, FontFileName); while ( filepath[i] != '.'){ if (i==0) break; else i--; } if (i==0){ /* We have a filename without extension -> append extension */ filepath[j]='.'; filepath[j+1]='a'; filepath[j+2]='f'; filepath[j+3]='m'; filepath[j+4]='\0'; } else{ /* we found a '.' -> replace extension */ filepath[i+1]='a'; filepath[i+2]='f'; filepath[i+3]='m'; filepath[i+4]='\0'; } /* Get full path of the afm file (The case of a full path name name specification is valid) */ if ((AFMFilePath=intT1_Env_GetCompletePath( filepath, T1_AFM_ptr)) == NULL) { return NULL; } strcpy( filepath, AFMFilePath); free( AFMFilePath); return( filepath); } t1lib-5.1.2/lib/t1lib/t1base.h0000644000175000001440000000650210733501626014400 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1base.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2002-05-16 ----- Description: This file is part of the t1-library. It contains declarations and definitions for t1base.c ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independ from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1BASE_C void *T1_InitLib( int log); int intT1_scanFontDBase( char *filename); int intT1_scanFontDBaseXLFD( char *filename); int T1_CloseLib( void); int T1_AddFont( char *fontfilename); void T1_PrintLog( char *func_ident, char *msg_txt, int level, ...); void T1_SetLogLevel( int level); int T1_CheckForInit(void); int T1_CheckForFontID( int FontID); char *T1_GetFontFileName( int FontID); int T1_GetNoFonts(void); int T1_SetDeviceResolutions( float x_res, float y_res); int T1_CopyFont( int FontID); int T1_QueryX11Support( void); int T1_CheckEndian(void); int T1_SetBitmapPad( int pad); int T1_GetBitmapPad( void); char *T1_GetLibIdent( void); void T1_SetRasterFlags( int flags); char *T1_GetAfmFileName( int FontID); int T1_SetAfmFileName( int FontId, char *afm_name); char *T1_GetFontFilePath( int FontID); char *T1_GetAfmFilePath( int FontID); const char *T1_StrError( int t1err); extern int T1_Type1OperatorFlags; #else extern void *T1_InitLib( int log); extern int intT1_scanFontDBase( char *filename); extern int intT1_scanFontDBaseXLFD( char *filename); extern int T1_CloseLib( void); extern int T1_AddFont( char *fontfilename); extern void T1_PrintLog( char *func_ident, char *msg_txt, int level, ...); extern void T1_SetLogLevel( int level); extern int T1_CheckForInit(void); extern int T1_CheckForFontID( int FontID); extern char *T1_GetFontFileName( int FontID); extern int T1_GetNoFonts(void); extern int T1_SetDeviceResolutions( float x_res, float y_res); extern int T1_QueryX11Support( void); extern int T1_CopyFont( int FontID); extern int T1_CheckEndian(void); extern int T1_SetBitmapPad( int pad); extern int T1_GetBitmapPad( void); extern char *T1_GetLibIdent( void); extern void T1_SetRasterFlags( int flags); extern char *T1_GetAfmFileName( int FontID); extern int T1_SetAfmFileName( int FontId, char *afm_name); extern char *T1_GetFontFilePath( int FontID); extern char *T1_GetAfmFilePath( int FontID); extern const char *T1_StrError( int t1err); #endif t1lib-5.1.2/lib/t1lib/t1finfo.c0000644000175000001440000011542610733501626014570 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1finfo.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-01 ----- Description: This file is part of the t1-library. It contains functions for accessing afm-data and some other fontinformation data. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1FINFO_C #include #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include "../type1/ffilest.h" #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "t1types.h" #include "t1extern.h" #include "t1finfo.h" #include "t1base.h" #include "t1misc.h" #include "t1set.h" #include "t1load.h" /* The following variable controls the computation of the bbox internal to T1_GetMetricsInfo(). Its influence may be overridden by the global variable ForceAFMBBox: */ static int ForceAFMBBoxInternal=0; extern int ForceAFMBBox; extern char *t1_get_abort_message( int number); /* int T1_GetKerning(): This function returns the amount of kerning that is specified in the afm-file for the supplied character-pair. If an an extension has been applied to the font in question, this is taken into account. If for whatever reason there's no afm information available (that's not deadly), simply 0 is returned, indicating that no kerning should be used. The value returned is meant to be in character space coordinates. Thus, it must be transformed to be applicable in device space. */ int T1_GetKerning( int FontID, char char1, char char2) { METRICS_ENTRY entry; METRICS_ENTRY *target_pair=NULL; /* Check whether font is loaded: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0); } /* If no AFM info is present, we return an error */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( 0); } /* if there's no kerning info, return immediately */ if (pFontBase->pFontArray[FontID].KernMapSize==0) return( 0); entry.chars=(char1<<8) | char2; if ((target_pair=(METRICS_ENTRY *) bsearch( &entry, pFontBase->pFontArray[FontID].pKernMap, (size_t) pFontBase->pFontArray[FontID].KernMapSize, sizeof(METRICS_ENTRY), &cmp_METRICS_ENTRY))==NULL) return(0); else return( target_pair->hkern * pFontBase->pFontArray[FontID].extend); } /* int T1_GetCharWidth(): This function returns the characterwidth specified in the .afm-file. If no .afm-file is loaded for that font, 0 is returned. Note that if one tries to raster strings, afm data must always be available. The returned character width is corrected using a possibly applied font extension! */ int T1_GetCharWidth( int FontID, char char1) { unsigned char uchar1; uchar1=(unsigned char) char1; /* Check whether font is loaded: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0); } /* If no AFM info is present, we return an error */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( 0); } /* return appriate value */ if (pFontBase->pFontArray[FontID].pEncMap[(int) uchar1]>0) { /* ordinary character */ return((int) ((pFontBase->pFontArray[FontID].pAFMData->cmi[pFontBase->pFontArray[FontID].pEncMap[(int) uchar1]-1].wx) * pFontBase->pFontArray[FontID].extend)); } else if (pFontBase->pFontArray[FontID].pEncMap[(int) uchar1]<0) { /* composite character */ return((int) ((pFontBase->pFontArray[FontID].pAFMData->ccd[-(pFontBase->pFontArray[FontID].pEncMap[(int) uchar1]+1)].wx) * pFontBase->pFontArray[FontID].extend)); } else { /* undefined or .notdef */ return(0); } } /* T1_GetCharBBox(): Get the BoundingBox of specified character. If an extension factor has been applied to the font in question, this is taken into account. However, a slant factor which has been applied to the font, also affects the bounding box of a character. The only way to determine its influence on the character bounding box is to compute the exact shape of that slanted character. There's no simple way to extract the new bounding box from the former bounding box. Thus, if a font has been slanted, the characters outline itself is examined. Since this must be done at 1000 bp it takes considerably longer than reading afm data. */ BBox T1_GetCharBBox( int FontID, char char1) { struct region *area; struct XYspace *S; int mode=0; int i; BBox NullBBox= { 0, 0, 0, 0}; /* A bounding box containing all 0's. */ BBox ResultBox= { 0, 0, 0, 0}; /* The Box returned if char is found */ unsigned char uchar1; /* We return to this if something goes wrong deep in the rasterizer */ if ((i=setjmp( stck_state))!=0) { T1_errno=T1ERR_TYPE1_ABORT; sprintf( err_warn_msg_buf, "t1_abort: Reason: %s", t1_get_abort_message( i)); T1_PrintLog( "T1_GetCharBBox()", err_warn_msg_buf, T1LOG_ERROR); return( NullBBox); } uchar1=(unsigned char) char1; /* Check whether font is loaded: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(NullBBox); } /* If no AFM info is present, we return an error */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( NullBBox); } /* Check for a font slant */ if ((pFontBase->pFontArray[FontID].slant!=0.0) &&(ForceAFMBBox==0) &&(ForceAFMBBoxInternal==0)){ /* We have a font slant -> character outline must be examined in order to determine bounding box */ /* Set up an identity charspace matrix and take a slant and an extension into account */ /* And make it permanent, to plug a memory leak */ S=(struct XYspace *)IDENTITY; S=(struct XYspace *)Permanent (Transform(S, pFontBase->pFontArray[FontID].FontTransform[0], pFontBase->pFontArray[FontID].FontTransform[1], pFontBase->pFontArray[FontID].FontTransform[2], pFontBase->pFontArray[FontID].FontTransform[3])); /* Genrate an edgelist for the current character at size 1000bp using current transformation and encoding: */ area=fontfcnB( FontID, 0, S, pFontBase->pFontArray[FontID].pFontEnc, (int) uchar1, &mode, pFontBase->pFontArray[FontID].pType1Data, DO_RASTER,0.0f); /* Read out bounding box */ ResultBox.llx =area->xmin; ResultBox.urx =area->xmax; ResultBox.lly =area->ymin; ResultBox.ury =area->ymax; /* Reset AFM-switch and return BBox */ ForceAFMBBoxInternal=0; /* make sure to destroy 'area' before leaving! */ KillRegion (area); /* make sure to free S */ if (S) { KillSpace (S); } return(ResultBox); } else{ /* Assign bounding box for the different cases: */ /* Check if character is */ if (pFontBase->pFontArray[FontID].pEncMap[(int) uchar1]>0) { /* ordinary char */ ResultBox=(pFontBase->pFontArray[FontID].pAFMData->cmi[pFontBase->pFontArray[FontID].pEncMap[(int) uchar1]-1].charBBox); } else if (pFontBase->pFontArray[FontID].pEncMap[(int) uchar1]<0) { /* composite char */ ResultBox=(pFontBase->pFontArray[FontID].pAFMData->ccd[-(pFontBase->pFontArray[FontID].pEncMap[(int) uchar1]+1)].charBBox); } else { /* undefined char */ return(NullBBox); } /* .. and apply transformations: */ ResultBox.llx *=pFontBase->pFontArray[FontID].extend; ResultBox.urx *=pFontBase->pFontArray[FontID].extend; return(ResultBox); } } /* int T1_GetUnderlinePosition(): Return underline position of specified font in charspace units. If 0 is returned, it indicated that the font is not yet loaded into memory. or an invalid ID has been specified. */ float T1_GetUnderlinePosition( int FontID) { if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0.0); } return((float)(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[UNDERLINEPOSITION].value.data.real)); } /* int T1_GetUnderlineThickness(): Return underline thickness of specified font in charspace units. If 0 is returned, it indicated that the font is not yet loaded into memory. or an invalid ID has been specified. */ float T1_GetUnderlineThickness( int FontID) { if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0.0); } return((float)(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[UNDERLINETHICKNESS].value.data.real)); } /* int T1_ItalicAngle(): Return underline position of specified font in charspace units. If 0.0 is returned, it indicated that the font is not yet loaded into memory. or an invalid ID has been specified. */ float T1_GetItalicAngle( int FontID) { if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0.0); } return((float)(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ITALICANGLE].value.data.real)); } /* int T1_GetUnderlinePosition(): Return underline position of specified font in charspace units. If 0 is returned, it indicated that the font is not yet loaded into memory. or an invalid ID has been specified. */ int T1_GetIsFixedPitch( int FontID) { if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0.0); } return((int)(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ISFIXEDPITCH].value.data.boolean)); } /* char *T1_GetFontName( FontID): Get the PostScript FontName of the font dictionary associated with the specified font, or NULL if an error occurs. */ char *T1_GetFontName( int FontID) { static char fontname[MAXPSNAMELEN]; if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } strncpy(fontname, (char *)(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTNAME].value.data.nameP), pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTNAME].value.len); fontname[pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTNAME].value.len]=0; return(fontname); } /* char *T1_GetFullName( FontID): Get the Full Name from the font dictionary associated with the specified font, or NULL if an error occurs. */ char *T1_GetFullName( int FontID) { static char fullname[MAXPSNAMELEN]; if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } strncpy(fullname, (char *)(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FULLNAME].value.data.nameP), pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FULLNAME].value.len); fullname[pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FULLNAME].value.len]=0; return(fullname); } /* char *T1_GetFamilyName( FontID): Get the Family Name of the font dictionary associated with the specified font, or NULL if an error occurs. */ char *T1_GetFamilyName( int FontID) { static char familyname[MAXPSNAMELEN]; if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } strncpy(familyname, (char *)(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FAMILYNAME].value.data.nameP), pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FAMILYNAME].value.len); familyname[pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FAMILYNAME].value.len]=0; return(familyname); } /* char *T1_GetWeight( FontID): Get the Weight entry from the font dictionary associated with the specified font, or NULL if an error occurs. */ char *T1_GetWeight( int FontID) { static char weight[128]; if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } strncpy(weight, (char *)(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[WEIGHT].value.data.nameP), pFontBase->pFontArray[FontID].pType1Data->fontInfoP[WEIGHT].value.len); weight[pFontBase->pFontArray[FontID].pType1Data->fontInfoP[WEIGHT].value.len]=0; return(weight); } /* char *T1_GetFontName( FontID): Get the Version entry from the font dictionary associated with the specified font, or NULL if an error occurs. */ char *T1_GetVersion( int FontID) { static char version[2048]; if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } strncpy(version, (char *)(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[VERSION].value.data.nameP), pFontBase->pFontArray[FontID].pType1Data->fontInfoP[VERSION].value.len); version[pFontBase->pFontArray[FontID].pType1Data->fontInfoP[VERSION].value.len]=0; return(version); } /* char *T1_GetNotice( FontID): Get the Notice entry from the font dictionary associated with the specified font, or NULL if an error occurs. */ char *T1_GetNotice( int FontID) { static char notice[2048]; if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } strncpy(notice, (char *)(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[NOTICE].value.data.nameP), pFontBase->pFontArray[FontID].pType1Data->fontInfoP[NOTICE].value.len); notice[pFontBase->pFontArray[FontID].pType1Data->fontInfoP[NOTICE].value.len]=0; return(notice); } /* char *T1_GetCharName(): Get the PostScript character name of the character indexed by char1. */ char *T1_GetCharName( int FontID, char char1) { static char cc_name1[256]; char *c1; if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } if (pFontBase->pFontArray[FontID].pFontEnc==NULL){ /* We have to get the names from the fonts internal encoding */ c1= (char *)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[(unsigned char)char1].data.arrayP; strncpy(cc_name1, (char *)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[(unsigned char)char1].data.arrayP, pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[(unsigned char)char1].len); cc_name1[pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[(unsigned char)char1].len]=0; } else{ /* Take names from explicitly loaded and assigned encoding */ c1=pFontBase->pFontArray[FontID].pFontEnc[(unsigned char)char1]; strcpy(cc_name1,c1); } /* Return address of charname */ return(cc_name1); } /* T1_QueryLigs(): Get the number of ligatures defined in the font FontID for the character which is located at position char1 in the current encoding vector! Function returns the number of defined ligs (including 0) or -1 if an error occured. */ int T1_QueryLigs( int FontID, char char1, char **successors, char **ligatures) { FontInfo *afm_ptr; CharMetricInfo *m_ptr; char *c_name; char cc_name[128]; static char succ[MAX_LIGS]; int succ_index; static char lig[MAX_LIGS]; int lig_index; Ligature *ligs; int i,j; /* Check whether font is loaded: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(-1); } /* If no AFM info is present, we return an error */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( -1); } /* All OK, ... */ afm_ptr=pFontBase->pFontArray[FontID].pAFMData; m_ptr=afm_ptr->cmi; /* Get the name of the character: */ if (pFontBase->pFontArray[FontID].pFontEnc==NULL){ /* We have to get the name from the fonts internal encoding */ c_name=(char *)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[(unsigned char)char1].data.arrayP; strncpy(cc_name, (char *)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[(unsigned char)char1].data.arrayP, pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[(unsigned char)char1].len); cc_name[pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[(unsigned char)char1].len]=0; } else{ /* Take name from explicitly loaded and assigned encoding */ c_name=pFontBase->pFontArray[FontID].pFontEnc[(unsigned char)char1]; strcpy(cc_name,c_name); } for (i=0; inumOfChars; i++){ if (strcmp(m_ptr[i].name,cc_name)==0) break; } if (i==afm_ptr->numOfChars) /* we didn't find the characters name */ return(-1); ligs=m_ptr[i].ligs; j=0; if (ligs==NULL) return(0); while (ligs!=NULL) { /* Get indices of the two characters: */ if ((succ_index=T1_GetEncodingIndex( FontID, (char*) ligs->succ))==-1) { /* successor is not current encoding */ ligs=ligs->next; continue; } if ((lig_index=T1_GetEncodingIndex( FontID, (char*) ligs->lig))==-1) { /* Specified ligature is not in current encoding */ ligs=ligs->next; continue; } succ[j]=(char)succ_index; lig[j]=(char)lig_index; j++; ligs=ligs->next; } *successors=succ; *ligatures=lig; return(j); } /* T1_GetEncodingIndex(): Return the Index of char1 in the current encoding vector of font FontID */ int T1_GetEncodingIndex( int FontID, char *char1) { int i; int len1; int result_index; char **extern_enc; psobj *objptr; if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(-1); } extern_enc=pFontBase->pFontArray[FontID].pFontEnc; len1=strlen( char1); /* The default return-value if character is not found: */ result_index=-1; if (extern_enc==NULL) { objptr=&(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[0]); /* We have to search the fonts internal encoding */ for (i=0;i<256;i++){ if (len1==objptr[i].len){ if (strncmp((char *)objptr[i].data.arrayP, char1, objptr[i].len)==0){ result_index=i; break; } } } } else { /* Take name from explicitly loaded and assigned encoding */ for (i=0;i<256;i++){ if (strcmp(extern_enc[i], char1)==0){ result_index=i; break; } } } return(result_index); } /* T1_GetEncodingIndices(): Return all indices of char1 in the current encoding vector of font FontID. */ int *T1_GetEncodingIndices( int FontID, char *char1) { int i; int endmark=0; int len1; char **extern_enc; psobj *objptr; /* the following array suffices for the extreme unlikely case of a font where one single fillsthe whole encoding vector */ static int indices[257]; if (T1_CheckForFontID(FontID)!=1) { T1_errno=T1ERR_INVALID_FONTID; return(NULL); } extern_enc=pFontBase->pFontArray[FontID].pFontEnc; len1=strlen( char1); if (extern_enc==NULL) { objptr=&(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[0]); /* We have to search the fonts internal encoding */ for (i=0;i<256;i++){ if (len1==objptr[i].len){ if (strncmp((char *)objptr[i].data.arrayP, char1, objptr[i].len)==0){ indices[endmark++]=i; } } } } else { /* Take name from explicitly loaded and assigned encoding */ for (i=0;i<256;i++){ if (strcmp(extern_enc[i], char1)==0){ indices[endmark++]=i; } } } indices[endmark]=-1; return((int *)indices); } /* int T1_GetStringWidth(): This function returns the width of string in .afm-file units. If no .afm-file is loaded for font FontID, 0 is returned. Note that if one tries to raster strings, afm data should always be available. The returned character width is corrected using a possibly applied font extension! */ int T1_GetStringWidth( int FontID, char *string, int len, long spaceoff, int kerning) { int no_chars; /* Number of chars in string */ int i; int *kern_pairs; int *charwidths; int spacewidth; int stringwidth; unsigned char *ustring; ustring=(unsigned char *) string; /* First, check for a correct ID */ i=T1_CheckForFontID(FontID); if (i!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0); } /* If no AFM info is present, we return an error */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( 0); } /* Get length of string: */ if (len<0 || ustring == NULL){ /* invalid length or NULL-pointer */ T1_errno=T1ERR_INVALID_PARAMETER; return(0); } if (len==0) /* should be computed assuming "normal" 0-terminated string */ no_chars=strlen(string); else /* use value given on command line */ no_chars=len; switch (no_chars) { case 0: /* Empty string has width 0 */ stringwidth=0; break; case 1: /* Width of string with 1 character is the width of that character. If the character is a space, adjust by the value of spaceoff. */ stringwidth=T1_GetCharWidth(FontID,ustring[0]); if (ustring[0]==pFontBase->pFontArray[FontID].space_position) stringwidth+=spaceoff; break; default: /* Two or more characters. Add widths of characters and adjust by the adjustment widths for any kerning pairs. For spaces, use the width of the space character in the font adjusted by the value of spaceoff. */ /* Allocate room for temporary arrays of kerning and width arrays: */ kern_pairs=(int *)calloc(no_chars -1, sizeof(int)); if (kern_pairs==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(0); } charwidths=(int *)calloc(no_chars, sizeof(int)); if (charwidths==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(0); } /* If kerning is requested, get kerning amounts and fill the array: */ if (kerning){ for (i=0; ipFontArray[FontID].space_position)+spaceoff; /* Fill the width-array: */ for (i=0; ipFontArray[FontID].space_position) charwidths[i]=(int)spacewidth; else charwidths[i]=T1_GetCharWidth(FontID,ustring[i]); } /* Accumulate width: */ stringwidth=0; for (i=0; ipFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( NullBBox); } /* Get length of string: */ if (len<0 || string==NULL) { /* invalid length or NULL-pointer */ T1_errno=T1ERR_INVALID_PARAMETER; return(NullBBox); } if (len==0) /* should be computed assuming "normal" 0-terminated string */ no_chars=strlen(string); else /* use value given on command line */ no_chars=len; spacewidth= T1_GetCharWidth(FontID,pFontBase->pFontArray[FontID].space_position)+spaceoff; /* Accumulate metrics: */ for (i=0; ipFontArray[FontID].space_position) curr_width +=spacewidth; else{ tmp_BBox=T1_GetCharBBox( FontID, string[i]); if (curr_width+tmp_BBox.llx < lsb_min) lsb_min=curr_width+tmp_BBox.llx; if (curr_width+tmp_BBox.urx > rsb_max) rsb_max=curr_width+tmp_BBox.urx; if (tmp_BBox.lly < overalldescent) overalldescent=tmp_BBox.lly; if (tmp_BBox.ury > overallascent) overallascent=tmp_BBox.ury; curr_width +=T1_GetCharWidth( FontID, string[i]); if ((ipFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( metrics); } /* Get length of string: */ if (len<0 || ustring==NULL ) { /* invalid length or NULL_pointer */ T1_errno=T1ERR_INVALID_PARAMETER; return(metrics); } if (len==0) /* should be computed assuming "normal" 0-terminated string */ no_chars=strlen(string); else /* use value given on command line */ no_chars=len; /* Compute the correct spacewidth value (in charspace units): */ spacewidth=T1_GetCharWidth(FontID,pFontBase->pFontArray[FontID].space_position)+spaceoff; /* Allocate memory for character positions array: */ metrics.charpos=(int *)calloc(no_chars, sizeof(int)); metrics.numchars=no_chars; /* Accumulate metrics: */ for (i=0; ipFontArray[FontID].space_position) curr_width +=spacewidth; else{ tmp_BBox=T1_GetCharBBox( FontID, string[i]); if (curr_width+tmp_BBox.llx < lsb_min) lsb_min=curr_width+tmp_BBox.llx; if (curr_width+tmp_BBox.urx > rsb_max) rsb_max=curr_width+tmp_BBox.urx; if (tmp_BBox.lly < overalldescent) overalldescent=tmp_BBox.lly; if (tmp_BBox.ury > overallascent) overallascent=tmp_BBox.ury; curr_width +=T1_GetCharWidth( FontID, string[i]); if ((ipFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[0]); outbox.llx = objPIsInteger(obj) ? obj->data.integer : obj->data.real > 0 ? (int) ceil(obj->data.real) : (int) floor(obj->data.real); obj = &(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[1]); outbox.lly = objPIsInteger(obj) ? obj->data.integer : obj->data.real > 0 ? (int) ceil(obj->data.real) : (int) floor(obj->data.real); obj = &(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[2]); outbox.urx = objPIsInteger(obj) ? obj->data.integer : obj->data.real > 0 ? (int) ceil(obj->data.real) : (int) floor(obj->data.real); obj = &(pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[3]); outbox.ury = objPIsInteger(obj) ? obj->data.integer : obj->data.real > 0 ? (int) ceil(obj->data.real) : (int) floor(obj->data.real); return( outbox); } /* T1_GetAllCharNames(): Get a list of all defined character names in in the font FontID: */ char **T1_GetAllCharNames( int FontID) { static char **bufmem=NULL; register char *namedest; psdict *pCharStrings; int len, i, j; long nameoffset; int bufmemsize=0; /* return NULL if font not loaded */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return( NULL); } pCharStrings=pFontBase->pFontArray[FontID].pType1Data->CharStringsP; /* First, get number of charstrings: */ len=pCharStrings[0].key.len; /* We must be careful here: size of the charstrings dict might be larger than the actual number of charstrings. We correct for this by reducing the value of len appropriately */ for ( i=1; i<=len; i++){ /* calculate room for each characters name plus the prepending \0 */ if ((j=pCharStrings[i].key.len)){ bufmemsize += j + 1; } else{ /* we skip this (the remaining) entries */ len--; i--; } } /* Now we reserve memory for the pointers (including final NULL) */ nameoffset=(len+1)*sizeof( char *); bufmemsize += nameoffset; /* Now allocate memory, copy strings and initialize pointers */ if (bufmem!=NULL) free(bufmem); if ((bufmem=(char **)malloc( bufmemsize))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } namedest=(char *)((long)bufmem + nameoffset); j=0; for ( i=0; ipFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( -1); } return( pFontBase->pFontArray[FontID].pAFMData->numOfPairs); } /* A function for comparing METRICS_ENTRY structs */ static int cmp_METRICS_ENTRY( const void *entry1, const void *entry2) { if (((METRICS_ENTRY *)entry1)->chars < ((METRICS_ENTRY *)entry2)->chars) return(-1); if (((METRICS_ENTRY *)entry1)->chars > ((METRICS_ENTRY *)entry2)->chars) return(1); return(0); /* This should not happen */ } /* A few functions for accessing composite character data: */ /* T1_GetNoCompositeChars(): Return the number of characters for for which composite character information is available for font FontID */ int T1_GetNoCompositeChars( int FontID) { /* Check whether font is loaded: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return( -1); } /* If no AFM info is present, we return an error */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( -1); } return( pFontBase->pFontArray[FontID].pAFMData->numOfComps); } /* T1_QueryCompositeChar(): Query whether char1 from font FontID is a composite character. If so, the index of the composite character data within the afm array is returned. The index can be used to retrieve the retrieve the composite character data. retval>=0: index into AFM-array where the corresponding composite char data is located retval=-1: No composite character, but result is valid, retval=-2: No composite character, but result is invalid. T1_errno indicated the reason. */ int T1_QueryCompositeChar( int FontID, char char1) { unsigned char uchar1; uchar1=char1; /* Check whether font is loaded: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return( -2); } /* If no AFM info is present, we return -2 */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( -2); } if (pFontBase->pFontArray[FontID].pEncMap[ uchar1]<0) { /* composite char */ return( -(pFontBase->pFontArray[FontID].pEncMap[(int) uchar1]+1)); } return(-1); } /* T1_GetCompCharData(): Retrieve data to construct composite character char1 from font FontID. In case of an error NULL is returned and T1_errno is set appropriately. */ T1_COMP_CHAR_INFO *T1_GetCompCharData( int FontID, char char1) { T1_COMP_CHAR_INFO *cci=NULL; CompCharData *ccd=NULL; int afmind=-1; int i; unsigned char uchar1; /* Check whether font is loaded: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return( cci); } /* If no AFM info is present, we return -2 */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( cci); } if ((cci=(T1_COMP_CHAR_INFO*)malloc( sizeof(T1_COMP_CHAR_INFO)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return( cci); } uchar1=(unsigned char)char1; /* set default values */ cci->compchar=uchar1; cci->numPieces=1; cci->pieces=NULL; /* check char1 */ if ((afmind=pFontBase->pFontArray[FontID].pEncMap[uchar1]) >= 0) { /* char is no composite char */ return(cci); } /* character is a composite char-> retrieve index and pointer into AFM data */ afmind=-(afmind+1); ccd=&(pFontBase->pFontArray[FontID].pAFMData->ccd[afmind]); /* cci->compchar is already setup correctly because char1 is a composite character */ cci->numPieces=ccd->numOfPieces; /* we expect numPieces to be >1 */ if ((cci->pieces=(T1_COMP_PIECE *)malloc( sizeof(T1_COMP_PIECE)* cci->numPieces))==NULL) { T1_errno=T1ERR_ALLOC_MEM; free( cci); return( NULL); } /* Copy information */ for (i=0; inumPieces; i++) { cci->pieces[i].piece=T1_GetEncodingIndex( FontID, ccd->pieces[i].pccName); cci->pieces[i].deltax=ccd->pieces[i].deltax; cci->pieces[i].deltay=ccd->pieces[i].deltay; } return( cci); } /* T1_GetCompCharDataByIndex(): Retrieve data to construct composite characters form font FontID. The data is addressed by index which may, for example, have been obtained by a call to T1_QueryCompositeChar(). In case of error NULL is returned and T1_errno is set appropriately. */ T1_COMP_CHAR_INFO *T1_GetCompCharDataByIndex( int FontID, int index) { T1_COMP_CHAR_INFO *cci=NULL; CompCharData *ccd=NULL; int i; /* Check whether font is loaded: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return( cci); } /* If no AFM info is present, we return -2 */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return( cci); } /* range check for index */ if ((index < 0) || (index >= pFontBase->pFontArray[FontID].pAFMData->numOfComps)) { T1_errno=T1ERR_INVALID_PARAMETER; return( cci); } /* Alloc mem */ if ((cci=(T1_COMP_CHAR_INFO*)malloc( sizeof(T1_COMP_CHAR_INFO)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return( cci); } /* set source pointer */ ccd=&(pFontBase->pFontArray[FontID].pAFMData->ccd[index]); /* and copy information */ cci->compchar=T1_GetEncodingIndex( FontID, ccd->ccName); cci->numPieces=ccd->numOfPieces; /* we expect numPieces to be >1 */ if ((cci->pieces=(T1_COMP_PIECE *)malloc( sizeof(T1_COMP_PIECE)* cci->numPieces))==NULL) { T1_errno=T1ERR_ALLOC_MEM; free( cci); return( NULL); } /* Copy information */ for (i=0; inumPieces; i++) { cci->pieces[i].piece=T1_GetEncodingIndex( FontID, ccd->pieces[i].pccName); cci->pieces[i].deltax=ccd->pieces[i].deltax; cci->pieces[i].deltay=ccd->pieces[i].deltay; } return( cci); } /* T1_IsInternalChar(): Query whether the character in encoding slot char1 of font FontID has an internal definition (CharString) or whether it is constructed by t1lib from elementary units */ int T1_IsInternalChar( int FontID, char char1) { unsigned char uchar1; char *charname; psdict *pCharStrings; int len, i, j; /* return NULL if font not loaded */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return( -1); } pCharStrings=pFontBase->pFontArray[FontID].pType1Data->CharStringsP; uchar1=(unsigned char)char1; charname=T1_GetCharName( FontID, uchar1); /* First, get the maximum number of charstrings: */ len=pCharStrings[0].key.len; /* Check all CharString definitions */ for ( i=1; i<=len; i++) { /* if len=0, then the CharStrings dict is larger that required which is valid and allowed by the spec.*/ if ((j=pCharStrings[i].key.len)!=0) { if ( (j==strlen(charname)) && (strncmp( charname, pCharStrings[i].key.data.nameP, j)==0) ) { /* we have found an internal definition */ return( 1); } } } return( 0); } t1lib-5.1.2/lib/t1lib/t1finfo.h0000644000175000001440000001076110733501626014571 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1finfo.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2001-06-03 ----- Description: This file is part of the t1-library. It contains declarations and definitions for t1finfo.c. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1FINFO_C int T1_GetKerning( int FontID, char char1, char char2); int T1_GetCharWidth( int FontID, char char1); BBox T1_GetCharBBox( int FontID, char char1); float T1_GetUnderlinePosition( int FontID); float T1_GetUnderlineThickness( int FontID); float T1_GetItalicAngle( int FontID); int T1_GetIsFixedPitch( int FontID); char *T1_GetFontName( int FontID); char *T1_GetFullName( int FontID); char *T1_GetFamilyName( int FontID); char *T1_GetWeight( int FontID); char *T1_GetVersion( int FontID); char *T1_GetNotice( int FontID); char *T1_GetCharName( int FontID, char char1); int T1_QueryLigs( int FontID, char char1, char **successors, char **ligatures); int T1_GetEncodingIndex( int FontID, char *char1); int *T1_GetEncodingIndices( int FontID, char *char1); int T1_GetStringWidth( int FontID, char *string, int len, long spaceoff,int kerning); BBox T1_GetStringBBox( int FontID, char *string, int len, long spaceoff, int kerning); METRICSINFO T1_GetMetricsInfo( int FontID, char *string, int len, long spaceoff, int kerning); BBox T1_GetFontBBox( int FontID); char **T1_GetAllCharNames( int FontID); int T1_GetNoKernPairs( int FontID); static int cmp_METRICS_ENTRY( const void *entry1, const void *entry2); int T1_GetNoCompositeChars( int FontID); int T1_QueryCompositeChar( int FontID, char char1); T1_COMP_CHAR_INFO *T1_GetCompCharData( int FontID, char char1); T1_COMP_CHAR_INFO *T1_GetCompCharDataByIndex( int FontID, int index); int T1_IsInternalChar( int FontID, char char1); #else extern int T1_GetKerning( int FontID, char char1, char char2); extern int T1_GetCharWidth( int FontID, char char1); extern BBox T1_GetCharBBox( int FontID, char char1); extern float T1_GetUnderlinePosition( int FontID); extern float T1_GetUnderlineThickness( int FontID); extern float T1_GetItalicAngle( int FontID); extern int T1_GetIsFixedPitch( int FontID); extern char *T1_GetFontName( int FontID); extern char *T1_GetFullName( int FontID); extern char *T1_GetFamilyName( int FontID); extern char *T1_GetWeight( int FontID); extern char *T1_GetVersion( int FontID); extern char *T1_GetNotice( int FontID); extern char *T1_GetCharName( int FontID, char char1); extern int T1_QueryLigs( int FontID, char char1, char **successors, char **ligatures); extern int T1_GetEncodingIndex( int FontID, char *char1); extern int *T1_GetEncodingIndices( int FontID, char *char1); extern int T1_GetStringWidth( int FontID, char *string, int len, long spaceoff,int kerning); extern BBox T1_GetStringBBox( int FontID, char *string, int len, long spaceoff, int kerning); extern METRICSINFO T1_GetMetricsInfo( int FontID, char *string, int len, long spaceoff, int kerning); extern BBox T1_GetFontBBox( int FontID); extern int T1_GetNoKernPairs( int FontID); extern char **T1_GetAllCharNames( int FontID); extern int T1_GetNoCompositeChars( int FontID); extern int T1_QueryCompositeChar( int FontID, char char1); extern T1_COMP_CHAR_INFO *T1_GetCompCharData( int FontID, char char1); extern T1_COMP_CHAR_INFO *T1_GetCompCharDataByIndex( int FontID, int index); extern int T1_IsInternalChar( int FontID, char char1); #endif t1lib-5.1.2/lib/t1lib/t1extern.h0000644000175000001440000000765310733501626015003 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1extern.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-16 ----- Description: This file is part of the t1-library. It contains external declarations used by the t1-library. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #include "t1misc.h" /* Following struct will allow all accesses to font data! */ extern struct FONTBASE { int t1lib_flags; /* Global library flags */ int no_fonts_ini; /* The number of fonts initially declared in Font database file. */ int no_fonts; /* The number of currently allocated fonts including logical fonts produced by T1_CopyFont() */ int no_fonts_limit; /* The maximum number of font for which is memory currently available. */ int bitmap_pad; /* The value to which bitmap-scanlines are padded */ int endian; /* 1 if little endian representation and 0 otherwise */ char **default_enc; /* The default encoding vector */ FONTPRIVATE *pFontArray; /* Points to first element of font pointer array */ } FontBase; extern struct FONTBASE *pFontBase; /* Further we need a struct where to save device dependent data such as resolution. The values in this struct may be altered using T1_SetDeviceRes(x_res,y_res). Generally, the fontsize is to be specified in BigPoints ("bp")---this is the default PostScript unit. It is 1in=72bp. */ extern struct { float x_resolution; /* Value must be specified in DPI */ float y_resolution; /* Value must be specified in DPI */ float scale_x; /* horizontal scale-value to get a matrix scaled to 1b */ float scale_y; /* vertical scale-value to get a matrix scaled to 1b */ } DeviceSpecifics; extern struct stat filestats; /* A structure where fileinfo is stored */ extern char linebuf[BUF_SIZE]; /* A buffer for reading files line by line */ extern int T1_Up; /* This one is for initialization-checking */ /* The width of AA-pixels */ extern int T1aa_bpp; /* The follwoing variable allows the primary rastering functions to check for the caller */ extern int SetFuncRequestID; /* The following variable allows to suppress rastering at 1000 bp for getting a correct bounding box for slanted characters --> should only internally be used */ extern int ForceAFMBBox; extern struct XYspace *IDENTITY; extern int errornumber; /* for debugging purposes */ extern char **T1_PFAB_ptr; extern char **T1_AFM_ptr; extern char **T1_ENC_ptr; extern char **T1_FDB_ptr; extern char **T1_FDBXLFD_ptr; /* We use a uchar buffer for error and warning messages: */ extern char err_warn_msg_buf[1024]; /* file pointer for log-file */ extern FILE *t1lib_log_file; extern int t1lib_log_level; /* The errno for t1lib */ extern int T1_errno; /* A variable for saving stack info */ extern jmp_buf stck_state; t1lib-5.1.2/lib/t1lib/.dependencies0000644000175000001440000001136610733501626015503 0ustar rmzusersparseAFM.lo: parseAFM.c parseAFM.h t1base.h t1misc.h t1aaset.lo: t1aaset.c ../type1/ffilest.h ../type1/types.h \ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1aaset.h \ t1set.h t1load.h t1finfo.h t1base.h t1outline.h t1afmtool.lo: t1afmtool.c ../type1/ffilest.h ../type1/types.h \ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \ ../type1/regions.h ../type1/blues.h t1types.h sysconf.h t1extern.h \ t1misc.h t1finfo.h t1base.h t1set.h t1load.h t1afmtool.h t1base.lo: t1base.c ../type1/ffilest.h ../type1/types.h \ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \ ../type1/regions.h sysconf.h t1base.h t1types.h t1global.h t1misc.h \ t1env.h t1delete.h t1delete.lo: t1delete.c ../type1/types.h parseAFM.h ../type1/objects.h \ ../type1/spaces.h ../type1/util.h ../type1/fontfcn.h t1types.h \ sysconf.h t1extern.h t1misc.h t1delete.h t1load.h t1finfo.h t1base.h t1enc.lo: t1enc.c ../type1/ffilest.h ../type1/types.h ../type1/Xstuff.h \ ../type1/fontmisc.h ../type1/fontstruct.h ../type1/font.h \ ../type1/fsmasks.h ../type1/fontfile.h ../type1/fontxlfd.h parseAFM.h \ ../type1/objects.h ../type1/spaces.h ../type1/util.h \ ../type1/fontfcn.h ../type1/paths.h ../type1/regions.h t1types.h \ sysconf.h t1extern.h t1misc.h t1enc.h t1env.h t1base.h t1finfo.h t1env.lo: t1env.c ../type1/types.h parseAFM.h ../type1/objects.h \ ../type1/spaces.h ../type1/util.h ../type1/fontfcn.h \ ../type1/fontmisc.h sysconf.h t1types.h t1extern.h t1misc.h t1env.h \ t1base.h t1finfo.lo: t1finfo.c ../type1/ffilest.h ../type1/types.h \ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1finfo.h \ t1base.h t1set.h t1load.h t1load.lo: t1load.c ../type1/ffilest.h ../type1/types.h \ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \ ../type1/util.h ../type1/fontfcn.h ../type1/blues.h ../type1/paths.h \ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1load.h \ t1env.h t1set.h t1base.h t1finfo.h t1afmtool.h t1outline.lo: t1outline.c ../type1/ffilest.h ../type1/types.h \ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1set.h \ t1load.h t1finfo.h t1base.h t1outline.h t1set.lo: t1set.c ../type1/ffilest.h ../type1/types.h ../type1/Xstuff.h \ ../type1/fontmisc.h ../type1/fontstruct.h ../type1/font.h \ ../type1/fsmasks.h ../type1/fontfile.h ../type1/fontxlfd.h parseAFM.h \ ../type1/objects.h ../type1/spaces.h ../type1/util.h \ ../type1/fontfcn.h ../type1/paths.h ../type1/regions.h t1types.h \ sysconf.h t1extern.h t1misc.h t1set.h t1load.h t1finfo.h t1base.h t1subset.lo: t1subset.c ../type1/ffilest.h ../type1/types.h \ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1finfo.h \ t1base.h t1delete.h t1subset.h t1trans.lo: t1trans.c ../type1/ffilest.h ../type1/types.h \ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1trans.h \ t1base.h t1x11.lo: t1x11.c ../type1/types.h parseAFM.h ../type1/objects.h \ ../type1/spaces.h ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1set.h \ t1aaset.h t1load.h t1finfo.h t1x11.h t1base.h t1lib-5.1.2/lib/t1lib/t1libx.h0000644000175000001440000000643010733501626014424 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1libx.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2003-01-02 ----- Description: This file is part of the t1-library. It must be included by the user of the t1lib. It contains function declarations for the X11 wrapper. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifndef T1LIBX_H_INCLUDED #define T1LIBX_H_INCLUDED #ifndef _XLIB_H_ #include #endif #define T1LIB_X11_SUPPORT /* For paint mode of X-rastering functions */ #define T1_OPAQUE 0x1 #define T1_TRANSPARENT 0x0 /* type definitions, needed by the user: */ #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif /* from t1x11.c */ extern int T1_SetX11Params( Display *display, Visual *visual, unsigned int depth, Colormap colormap); extern GLYPH *T1_SetCharX( Drawable d, GC gc, int mode, int x, int y, int FontID, char charcode, float size, T1_TMATRIX *transform); extern GLYPH *T1_SetStringX( Drawable d, GC gc, int mode, int x, int y, int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern GLYPH *T1_SetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, float size, float width, float height, T1_TMATRIX *transform); extern GLYPH *T1_AASetCharX( Drawable d, GC gc, int mode, int x, int y, int FontID, char charcode, float size, T1_TMATRIX *transform); extern GLYPH *T1_AASetStringX( Drawable d, GC gc, int mode, int x, int y, int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern GLYPH *T1_AASetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, float size, float width, float height, T1_TMATRIX *transform); extern int T1_ComputeAAColorsX( unsigned long fg, unsigned long bg, int nolevels); extern int T1_GetDepthOfDrawable( Drawable drawable); extern void T1_LogicalPositionX( int pos_switch); extern XImage *T1_XImageFromGlyph( GLYPH *pglyph); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* T1LIBX_H_INCLUDED */ t1lib-5.1.2/lib/t1lib/t1load.c0000644000175000001440000012437510733501626014411 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1load.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2007-12-23 ----- Description: This file is part of the t1-library. It contains functions for loading fonts and for managing size dependent data. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1LOAD_C #define ANSI_REALLOC_VM /* Note: On some systems, like e.g. my Linux box, realloc() frequently returns the identical pointer, if the memory chunk is *decreased* in size. As a consequence, pointer shifting (as implemented below) would never actually appear. The following definition enforces pointer shifting, and hence allows to check pointer shifting on every system. Do not activate this, it is meant for testing only! */ /* #define ANSI_REALLOC_ENFORCE_POINTERSHIFTING */ #include #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include "../type1/ffilest.h" #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/blues.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "t1types.h" #include "t1extern.h" #include "t1load.h" #include "t1env.h" #include "t1set.h" #include "t1base.h" #include "t1finfo.h" #include "t1afmtool.h" extern psobj *StdEncArrayP; /* For checking of a fonts encoding */ extern char not_def[]; /* for checking the ".notdef"-string */ /* T1_LoadFont(FontID): Loads a Type1 font into memory and allocates all memory, necessary for this. */ int T1_LoadFont( int FontID) { int i, j, k, l, m, n; char *FileName, *FileNamePath; int mode; /* This is used by the type1-library for error reporting */ char *charname; /* The following vars are used for reallocation of VM */ long tmp_size; float ascender; #ifdef ANSI_REALLOC_VM unsigned long shift; unsigned long ldummy; char *tmp_ptr; #endif struct region *area; struct XYspace *S; /* These are for constructing the kerning lookup table: */ PairKernData *pkd; METRICS_ENTRY *kern_tbl; int char1, char2; if (T1_CheckForInit()){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } i=T1_CheckForFontID(FontID); if (i==1) return(0); /* Font already loaded */ if (i==-1){ T1_errno=T1ERR_INVALID_FONTID; return(-1); /* illegal FontID */ } /* Allocate memory for ps_font structure: */ if ((pFontBase->pFontArray[FontID].pType1Data=(psfont *)malloc(sizeof(psfont)))==NULL){ T1_PrintLog( "T1_LoadFont()", "Failed to allocate memory for psfont-struct (FontID=%d)", T1LOG_ERROR, FontID); T1_errno=T1ERR_ALLOC_MEM; return(-1); } /* Check for valid filename */ if ((FileName=T1_GetFontFileName(FontID))==NULL){ T1_PrintLog( "T1_LoadFont()", "No font file name for font %d", T1LOG_ERROR, FontID); return(-1); } /* Fetch the full path of type1 font file */ if ((FileNamePath=intT1_Env_GetCompletePath( FileName, T1_PFAB_ptr))==NULL){ T1_PrintLog( "T1_LoadFont()", "Couldn't locate font file for font %d in %s", T1LOG_ERROR, FontID, T1_GetFileSearchPath(T1_PFAB_PATH)); T1_errno=T1ERR_FILE_OPEN_ERR; return(-1); } /* And load all PostScript information into memory */ if (fontfcnA( FileNamePath, &mode, pFontBase->pFontArray[FontID].pType1Data) == FALSE){ T1_PrintLog( "T1_LoadFont()", "Loading font with ID = %d failed! (mode = %d)", T1LOG_ERROR, FontID, mode); free(FileNamePath); pFontBase->pFontArray[FontID].pType1Data=NULL; T1_errno=mode; return(-1); } free(FileNamePath); /* Set some default for FontBBox and Encoding if the font does not provide correct data. Strictly taken, these fonts do not adhere to the Type1 specification. However, it is easy to work around and find reasonable defaults. This solution has been proposed by the Debian community (see http://bugs.debian.org/313236). */ /* 1. FontBBox. We set default values of 0 which is recommended by Adobe in cases where the font does not make use of the SEAC primitive. Later on, if AFM fallback info is computed, these settings might be overwritten with meaningful values. */ if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP == NULL) { if ((pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP = (psobj *)vm_alloc(4 * sizeof(psobj))) == NULL) { T1_PrintLog( "T1_LoadFont()", "Error allocating memory for fontbbox objects (FontID=%d)", T1LOG_ERROR, FontID); T1_errno=T1ERR_ALLOC_MEM; return(-1); } for (n = 0; n < 4; n++) { pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[n].type = OBJ_INTEGER; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[n].len = 0; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[n].data.integer = 0; } T1_PrintLog( "T1_LoadFont()", "Missing FontBBox, adding a trivial one in order to avoid crashes (FontID=%d)", T1LOG_WARNING, FontID); } /* 2. Encoding. In this case, we simply fallback to Standard Encoding. */ if (pFontBase->pFontArray[FontID].pFontEnc == NULL && pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP == NULL) { pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.valueP = (char *) StdEncArrayP; T1_PrintLog( "T1_LoadFont()", "Missing, invalid or undefined Encoding, setting up Standard Encoding in order to avoid crashes (FontID=%d)", T1LOG_WARNING, FontID); } /* Store the base address of virtual memory and realloc in order not to waste too much memory: */ pFontBase->pFontArray[FontID].vm_base=vm_base; #ifdef ANSI_REALLOC_VM /* We first get the size of pointers on the current system */ /* Get size of VM, ... */ tmp_size=((unsigned long)vm_used - (unsigned long)vm_base); /* ... realloc to that size ... */ #ifdef ANSI_REALLOC_ENFORCE_POINTERSHIFTING tmp_ptr=(char *)malloc( tmp_size); memcpy( tmp_ptr, vm_base, tmp_size); #else tmp_ptr=(char *)realloc(vm_base, tmp_size); #endif /* ... and shift all pointers refering to that area */ if (tmp_ptr > vm_base){ shift= (unsigned long)tmp_ptr - (unsigned long)vm_base; sprintf( err_warn_msg_buf, "Old VM at 0x%lX, new VM at 0x%lX, shifting up by %lu", (unsigned long)vm_base, (unsigned long)tmp_ptr, tmp_size); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG); /* We start by shifting the topmost pointers: */ pFontBase->pFontArray[FontID].vm_base=tmp_ptr; ldummy=(long)(pFontBase->pFontArray[FontID].pType1Data->vm_start); ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->vm_start=(char *)ldummy; ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->CharStringsP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->CharStringsP=(psdict *)ldummy; ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->Private; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->Private=(psdict *)ldummy; ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->fontInfoP=(psdict *)ldummy; ldummy=(long)(pFontBase->pFontArray[FontID].pType1Data->BluesP); ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->BluesP=(struct blues_struct *)ldummy; /* We now have to care for correcting all pointers which are in the VM and refer to some place in the VM! Note: Instead of selecting the appropriate pointer-elements of the union we simply shift the unspecified pointer "valueP". Note: The filename entry does not need to be modified since it does not need to be shifted since it points to memory managed by t1lib. */ /* FontInfo-dictionary: All name-pointers and the pointers to all array types have to be shifted: */ i=pFontBase->pFontArray[FontID].pType1Data->fontInfoP[0].key.len; for (j=1; j<=i; j++){ if ((pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_ARRAY) || (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_STRING) || (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_NAME) || (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_FILE)){ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP=(char *)ldummy; } /* The encoding needs special treatment: */ if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_ENCODING){ /* If builtin StandardEncoding is used, we do nothing here. Standard Encoding is now located once for all fonts on the heap. For font-specific encodings we have to move all pointers appropriately, because this is entirely located in VM */ if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.arrayP == StdEncArrayP){ /* Font uses builtin StandardEncoding */ ; } else{ /* Font-specific encoding */ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP=(char *)ldummy; for (k=0; k<256; k++){ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.arrayP[k].data.arrayP; /* The ".notdef" is also static and may not be shifted (Thanks, Derek ;) */ if (ldummy != (unsigned long)not_def) { ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.arrayP[k].data.arrayP=(struct ps_obj *)ldummy; } } } } /* end of encoding-handling */ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].key.data.valueP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].key.data.valueP=(char *)ldummy; } /* fontinfo-dict done */ /* Private-dictionary: All name-pointers and the pointers to all array types have to be shifted: */ i=pFontBase->pFontArray[FontID].pType1Data->Private[0].key.len; for (j=1; j<=i; j++){ if ((pFontBase->pFontArray[FontID].pType1Data->Private[j].value.type==OBJ_ARRAY) || (pFontBase->pFontArray[FontID].pType1Data->Private[j].value.type==OBJ_STRING) || (pFontBase->pFontArray[FontID].pType1Data->Private[j].value.type==OBJ_NAME) || (pFontBase->pFontArray[FontID].pType1Data->Private[j].value.type==OBJ_FILE)){ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->Private[j].value.data.valueP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->Private[j].value.data.valueP=(char *)ldummy; } ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->Private[j].key.data.valueP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->Private[j].key.data.valueP=(char *)ldummy; } /* BluesP: The entry "next" is the only pointer in blues_struct. Although it is not used anywhere we should shift it for correctness reasons (in case its not NULL)! */ if (pFontBase->pFontArray[FontID].pType1Data->BluesP->next != NULL){ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->BluesP->next; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->BluesP->next=(struct blues_struct *)ldummy; } /* The CharStrings-dictionary: Every namepointer and its corresponding charstring has to be shifted: */ i=pFontBase->pFontArray[FontID].pType1Data->CharStringsP[0].key.len; for (j=1; j<=i; j++){ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->CharStringsP[j].value.data.valueP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->CharStringsP[j].value.data.valueP=(char *)ldummy; ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->CharStringsP[j].key.data.valueP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->CharStringsP[j].key.data.valueP=(char *)ldummy; } /* The Subroutines have also to be reorganized: */ i=pFontBase->pFontArray[FontID].pType1Data->Subrs.len; /* First, shift pointer to array-start and after that the pointers to each command string: */ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->Subrs.data.arrayP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->Subrs.data.arrayP=(struct ps_obj *)ldummy; for (j=0; jpFontArray[FontID].pType1Data->Subrs.data.arrayP[j].data.valueP; ldummy +=shift; pFontBase->pFontArray[FontID].pType1Data->Subrs.data.arrayP[j].data.valueP=(char *)ldummy; } } /* end of if( tmp_ptr > vm_base ) */ else if ( vm_base > tmp_ptr){ shift= (unsigned long)vm_base - (unsigned long)tmp_ptr; sprintf( err_warn_msg_buf, "Old VM at 0x%lX, new VM at 0x%lX, shifting down by %lu", (unsigned long)vm_base, (unsigned long)tmp_ptr, tmp_size); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG); /* We start by shifting the topmost pointers: */ pFontBase->pFontArray[FontID].vm_base=tmp_ptr; ldummy=(long)(pFontBase->pFontArray[FontID].pType1Data->vm_start); ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->vm_start=(char *)ldummy; ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->CharStringsP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->CharStringsP=(psdict *)ldummy; ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->Private; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->Private=(psdict *)ldummy; ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->fontInfoP=(psdict *)ldummy; ldummy=(long)(pFontBase->pFontArray[FontID].pType1Data->BluesP); ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->BluesP=(struct blues_struct *)ldummy; /* We now have to care for correcting all pointers which are in the VM and refer to some place in the VM! Note: Instead of selecting the appropriate pointer-elements of the union we simply shift the unspecified pointer "valueP". Note: The filename entry does not need to be modified since it does not need to be shifted since it points to memory managed by t1lib. */ /* FontInfo-dictionary: All name-pointers and the pointers to all array types have to be shifted: */ i=pFontBase->pFontArray[FontID].pType1Data->fontInfoP[0].key.len; for (j=1; j<=i; j++){ if ((pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_ARRAY) || (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_STRING) || (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_NAME) || (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_FILE)){ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP=(char *)ldummy; } /* The encoding needs special treatment: */ if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_ENCODING){ /* If builtin StandardEncoding is used, we do nothing here. Standard Encoding is now located once for all fonts on the heap. For font-specific encodings we have to move all pointers appropriately, because this is entirely located in VM */ if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.arrayP == StdEncArrayP){ /* Font uses builtin StandardEncoding */ ; } else{ /* Font-specific encoding */ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP=(char *)ldummy; for (k=0; k<256; k++){ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.arrayP[k].data.arrayP; /* The ".notdef" is also static and may not be shifted (Thanks, Derek ;) */ if (ldummy != (unsigned long)not_def) { ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.arrayP[k].data.arrayP=(struct ps_obj *)ldummy; } } } } /* end of encoding-handling */ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].key.data.valueP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].key.data.valueP=(char *)ldummy; } /* fontinfo-dict done */ /* Private-dictionary: All name-pointers and the pointers to all array types have to be shifted: */ i=pFontBase->pFontArray[FontID].pType1Data->Private[0].key.len; for (j=1; j<=i; j++){ if ((pFontBase->pFontArray[FontID].pType1Data->Private[j].value.type==OBJ_ARRAY) || (pFontBase->pFontArray[FontID].pType1Data->Private[j].value.type==OBJ_STRING) || (pFontBase->pFontArray[FontID].pType1Data->Private[j].value.type==OBJ_NAME) || (pFontBase->pFontArray[FontID].pType1Data->Private[j].value.type==OBJ_FILE)){ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->Private[j].value.data.valueP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->Private[j].value.data.valueP=(char *)ldummy; } ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->Private[j].key.data.valueP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->Private[j].key.data.valueP=(char *)ldummy; } /* BluesP: The entry "next" is the only pointer in blues_struct. Although it is not used anywhere we should shift it for correctness reasons (in case its not NULL)! */ if (pFontBase->pFontArray[FontID].pType1Data->BluesP->next != NULL){ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->BluesP->next; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->BluesP->next=(struct blues_struct *)ldummy; } /* The CharStrings-dictionary: Every namepointer and its corresponding charstring has to be shifted: */ i=pFontBase->pFontArray[FontID].pType1Data->CharStringsP[0].key.len; for (j=1; j<=i; j++){ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->CharStringsP[j].value.data.valueP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->CharStringsP[j].value.data.valueP=(char *)ldummy; ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->CharStringsP[j].key.data.valueP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->CharStringsP[j].key.data.valueP=(char *)ldummy; } /* The Subroutines have also to be reorganized: */ i=pFontBase->pFontArray[FontID].pType1Data->Subrs.len; /* First, shift pointer to array-start and after that the pointers to each command string: */ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->Subrs.data.arrayP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->Subrs.data.arrayP=(struct ps_obj *)ldummy; for (j=0; jpFontArray[FontID].pType1Data->Subrs.data.arrayP[j].data.valueP; ldummy -=shift; pFontBase->pFontArray[FontID].pType1Data->Subrs.data.arrayP[j].data.valueP=(char *)ldummy; } } /* end of if( vm_base > tmp_ptr ) */ else{ /* VM addess has not changed during reallocation */ sprintf( err_warn_msg_buf, "Old VM and new VM at 0x%lX, no pointer-shifting", (unsigned long)vm_base); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG); } #ifdef ANSI_REALLOC_ENFORCE_POINTERSHIFTING /* If pointer shifting had been enforced by allocating from scratch using malloc() free the previous vm. */ free( vm_base); #endif #endif /* Generate a message how much VM the current font consumes */ sprintf( err_warn_msg_buf, "VM for Font %d: %d bytes", FontID, (int) tmp_size); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_STATISTIC); /* Set the matrix for common transformations to "no transformations" */ pFontBase->pFontArray[FontID].FontTransform[0]=1.0; pFontBase->pFontArray[FontID].FontTransform[1]=0.0; pFontBase->pFontArray[FontID].FontTransform[2]=0.0; pFontBase->pFontArray[FontID].FontTransform[3]=1.0; /* Now, that the font has been loaded into memory, try to find the FontMatrix in the font info dictionary. If it exists, load it into our local fontmatrix, otherwise use a default matrix which scales to 1/1000 (since font outlines are defined in a 1000 point space) and does no further transformations. */ if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTMATRIX].value.data.arrayP == NULL){ pFontBase->pFontArray[FontID].FontMatrix[0]=0.001; pFontBase->pFontArray[FontID].FontMatrix[1]=0.0; pFontBase->pFontArray[FontID].FontMatrix[2]=0.0; pFontBase->pFontArray[FontID].FontMatrix[3]=0.001; } else{ pFontBase->pFontArray[FontID].FontMatrix[0]= (double)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTMATRIX].value.data.arrayP[0].data.real; pFontBase->pFontArray[FontID].FontMatrix[1]= (double)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTMATRIX].value.data.arrayP[1].data.real; pFontBase->pFontArray[FontID].FontMatrix[2]= (double)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTMATRIX].value.data.arrayP[2].data.real; pFontBase->pFontArray[FontID].FontMatrix[3]= (double)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTMATRIX].value.data.arrayP[3].data.real; } /* Set the default values for transformation: */ pFontBase->pFontArray[FontID].slant=0.0; pFontBase->pFontArray[FontID].extend=1.0; /* Now try to load afm-structures from corresponding .afm-file (if not suppressed by the user). */ if ((pFontBase->t1lib_flags & T1_NO_AFM)!=0) { pFontBase->pFontArray[FontID].pAFMData = NULL; T1_PrintLog( "T1_LoadFont()", "Suppressing AFM data handling on user request", T1LOG_STATISTIC); } else { if ((i=openFontMetricsFile( FontID, 0))){ /* Try a fallback, opening sloppy: */ if ((i=openFontMetricsFile( FontID, 1))) { sprintf( err_warn_msg_buf, "Alert: Error (%d) sloppy-processing afm-file for Font %d!", i ,FontID); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_STATISTIC); if ((pFontBase->pFontArray[FontID].pAFMData= T1_GenerateAFMFallbackInfo(FontID))==NULL){ sprintf( err_warn_msg_buf, "Ultimately failed to generate metrics information Font %d!", FontID); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_WARNING); } else { pFontBase->pFontArray[FontID].info_flags |=AFM_SELFGEN_SUCCESS; T1_PrintLog( "T1_LoadFont()", "Generating AFM-information from fontfile successful!", T1LOG_STATISTIC); } } else { pFontBase->pFontArray[FontID].info_flags |=AFM_SLOPPY_SUCCESS; sprintf( err_warn_msg_buf, "Alert: Limited afm-information for Font %d",FontID); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_STATISTIC); } } else { pFontBase->pFontArray[FontID].info_flags |=AFM_SUCCESS; } } /* Now, set Encodingvector entry to default if the font's internal encoding is "StandardEncoding". */ if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP == StdEncArrayP) { pFontBase->pFontArray[FontID].info_flags |=USES_STANDARD_ENCODING; pFontBase->pFontArray[FontID].pFontEnc=pFontBase->default_enc; sprintf( err_warn_msg_buf, "Font %d reencoded to default",FontID); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG); } else { sprintf( err_warn_msg_buf, "Font %d not reencoded to default",FontID); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG); pFontBase->pFontArray[FontID].pFontEnc = NULL; } /* If AFM-Info available we try to speed up some things: */ if (pFontBase->pFontArray[FontID].pAFMData != NULL) { /* We have to fill the array that maps the current encodings' indices to the indices used in afm file. The interpretation has been changed in in t1lib-1.2. We now use positive values for indexing into the charmetrics array and negative values for indexing into the composite character array. an index of zero indicates that no metrics are defined for this character. This may happen because (a) not all AFM-files define metrics for the .notdef character, and (b) because font and AFM-file do not match. */ if ((pFontBase->pFontArray[FontID].pEncMap= (int *)calloc(256,sizeof(int)))==NULL) { sprintf( err_warn_msg_buf, "Error allocating memory for encoding map (FontID=%d)", FontID); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_ALLOC_MEM; return(-1); } for (i=0; i<256; i++) { charname=T1_GetCharName( FontID, i); /* in a first loop check for ordinary characters */ for ( j=0; jpFontArray[FontID].pAFMData->numOfChars; j++) { if (strcmp( charname, pFontBase->pFontArray[FontID].pAFMData->cmi[j].name)==0) { pFontBase->pFontArray[FontID].pEncMap[i]=j+1; /* index 0 is reserved! */ continue; } } /* if nothing has been found, check for composite characters */ for ( j=0; jpFontArray[FontID].pAFMData->numOfComps; j++) { if (strcmp( charname, pFontBase->pFontArray[FontID].pAFMData->ccd[j].ccName)==0) { pFontBase->pFontArray[FontID].pEncMap[i]=-(j+1); /* index 0 is reserved! */ continue; } } } /* For composite characters, we still have to compute the width and bbox */ for ( j=0; jpFontArray[FontID].pAFMData->numOfComps; j++) { /*and bounding box by ourselves. First, set up an identity charspace matrix and then generate an edgelist for the composite character at size 1000bp using no transformation and current encoding. Note: This action is only required when loading a font at first time, but not when reencoding a font. */ S=(struct XYspace *)IDENTITY; S=(struct XYspace *)Permanent (Transform(S, pFontBase->pFontArray[FontID].FontTransform[0], pFontBase->pFontArray[FontID].FontTransform[1], pFontBase->pFontArray[FontID].FontTransform[2], pFontBase->pFontArray[FontID].FontTransform[3])); area=fontfcnB_ByName( FontID, 0, S, pFontBase->pFontArray[FontID].pAFMData->ccd[j].ccName, &mode, pFontBase->pFontArray[FontID].pType1Data, DO_RASTER); /* Store bounding box ... */ pFontBase->pFontArray[FontID].pAFMData->ccd[j].charBBox.llx=area->xmin; pFontBase->pFontArray[FontID].pAFMData->ccd[j].charBBox.urx=area->xmax; pFontBase->pFontArray[FontID].pAFMData->ccd[j].charBBox.lly=area->ymin; pFontBase->pFontArray[FontID].pAFMData->ccd[j].charBBox.ury=area->ymax; /* ... and character width. This should be the width of the base character of the composite! */ pFontBase->pFontArray[FontID].pAFMData->ccd[j].wx=NEARESTPEL(area->ending.x); /* clean up. */ KillRegion (area); if (S!=NULL) { KillSpace (S); S=NULL; } } /* We now create an encoding-specific kerning table which will speed up looking for kerning pairs! */ pFontBase->pFontArray[FontID].KernMapSize=0; /* First, get number of defined kerning pairs: */ k=pFontBase->pFontArray[FontID].pAFMData->numOfPairs; if (k>0){ /* i.e., there are any pairs */ /* OK, it does not suffice to alloc numOfPairs METRICS_ENTRYs, because a given character might be encoded at several locations and kerning should still work. As a worst case estimation, we allocate 256^2 and realloc later. */ if ((pFontBase->pFontArray[FontID].pKernMap= (METRICS_ENTRY *)malloc( (256*256) *sizeof( METRICS_ENTRY)))==NULL){ sprintf( err_warn_msg_buf, "Error allocating memory for metrics map (FontID=%d)", FontID); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_ALLOC_MEM; return(-1); } kern_tbl=pFontBase->pFontArray[FontID].pKernMap; pkd=pFontBase->pFontArray[FontID].pAFMData->pkd; j=0; for ( i=0; i Put char1 in higher byte and char2 in LSB: */ kern_tbl[j].chars=(char1 << 8) | char2; /* We only make use of horizontal kerning */ kern_tbl[j].hkern=pkd[i].xamt; j++; } /* while (char2) */ } /* while (char1) */ } /* for */ /* We are done, realloc memory: */ kern_tbl=(METRICS_ENTRY*) realloc( kern_tbl, j*sizeof(METRICS_ENTRY)); /* We now sort the kerning array with respect to char indices */ qsort( kern_tbl, (size_t) j, sizeof(METRICS_ENTRY), &cmp_METRICS_ENTRY ); /* Finally write back pointer for the case that realloc changed the pointer */ pFontBase->pFontArray[FontID].pKernMap=kern_tbl; pFontBase->pFontArray[FontID].KernMapSize=j; } else pFontBase->pFontArray[FontID].pKernMap=NULL; } else { /* no AFM data */ pFontBase->pFontArray[FontID].pKernMap=NULL; pFontBase->pFontArray[FontID].pEncMap=NULL; } /* End of "if (AFM-info ..)" */ /* We have just loaded a physical font into memory, thus .... */ pFontBase->pFontArray[FontID].physical=1; /* Set reference-counter to 1: */ pFontBase->pFontArray[FontID].refcount=1; /* Get the index into encoding vector where the space character is found. If not encoded, set space_position to -1. */ pFontBase->pFontArray[FontID].space_position=-1; i=0; if (pFontBase->pFontArray[FontID].pFontEnc) { /* external default encoding */ while (i<256) { if (strcmp( (char *)pFontBase->pFontArray[FontID].pFontEnc[i], "space")==0){ /* space found at position i: */ pFontBase->pFontArray[FontID].space_position=i; break; } i++; } } else { /* internal encoding */ while (i<256) { if (strcmp( (char *)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[i].data.arrayP, "space")==0){ /* space found at position i: */ pFontBase->pFontArray[FontID].space_position=i; break; } i++; } } /* Set the lining rule parameters to default values */ pFontBase->pFontArray[FontID].UndrLnPos= pFontBase->pFontArray[FontID].pType1Data->fontInfoP[UNDERLINEPOSITION].value.data.real; pFontBase->pFontArray[FontID].UndrLnThick= pFontBase->pFontArray[FontID].pType1Data->fontInfoP[UNDERLINETHICKNESS].value.data.real; /* We have to set the value for the typographic ascender. If possible, we get it from the afm-File. But be aware this value might be undefined! This value should in any acse explicitly be set later by the user! */ if (pFontBase->pFontArray[FontID].pAFMData!=NULL && pFontBase->pFontArray[FontID].pAFMData->gfi!=NULL) { ascender=(float) pFontBase->pFontArray[FontID].pAFMData->gfi->ascender; } else { ascender=(float) T1_GetCharBBox( FontID, T1_GetEncodingIndex( FontID, "d")).ury; } pFontBase->pFontArray[FontID].OvrLnPos=ascender + (float) abs( (double)pFontBase->pFontArray[FontID].UndrLnPos); pFontBase->pFontArray[FontID].OvrStrkPos=ascender / 2.0; pFontBase->pFontArray[FontID].OvrLnThick=pFontBase->pFontArray[FontID].UndrLnThick; pFontBase->pFontArray[FontID].OvrStrkThick=pFontBase->pFontArray[FontID].UndrLnThick; /* Finally, set the font size dependencies pointer to NULL since we can assume, that at load time of a font, no size specific data of this font is available. */ pFontBase->pFontArray[FontID].pFontSizeDeps=NULL; /* If wanted, some debugging information is put into logfile */ sprintf( err_warn_msg_buf, "Pointer vm_base: 0x%lX", (long)pFontBase->pFontArray[FontID].vm_base); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "Pointer vm_start: 0x%lX", (long)pFontBase->pFontArray[FontID].pType1Data->vm_start); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "Pointer CharStringsP: 0x%lX", (long)pFontBase->pFontArray[FontID].pType1Data->CharStringsP); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "Pointer Private: 0x%lX", (long)pFontBase->pFontArray[FontID].pType1Data->Private); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG); sprintf( err_warn_msg_buf, "Pointer fontInfoP: 0x%lX", (long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG); return(0); } /* openFontMetricsFile( FontID, open_sloppy): Gets the fontfilename corresponding to FontID, opens the corresponding afm-file and fills the data structures. return-value is the value returned by the T1lib_parseFile() function. If open_sloppy is set, the minimum information needed is read from AFM file. This can be considered a fallback for problematic AFM files. */ static int openFontMetricsFile( int FontID, int open_sloppy) { char *FontFileName; char *AFMFileName; char *afm_name; char *AFMFileNamePath; int i, j; FILE *metricsfile; afm_name=T1_GetAfmFileName(FontID); if (afm_name!=NULL) { /* We have name explicitly specified */ /* It needs to be freeable */ if ((AFMFileName= (char *)malloc( (strlen(afm_name)+1)*sizeof( char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return( -6); } strcpy( AFMFileName, afm_name); } else { FontFileName=T1_GetFontFileName( FontID); i=strlen(FontFileName); j=i; AFMFileName=(char *)malloc( i+5); strcpy( AFMFileName, FontFileName); while ( AFMFileName[i] != '.'){ if (i==0) break; else i--; } if (i==0){ /* We have a filename without extension -> append extension */ AFMFileName[j]='.'; AFMFileName[j+1]='a'; AFMFileName[j+2]='f'; AFMFileName[j+3]='m'; AFMFileName[j+4]='\0'; } else{ /* we found a '.' -> replace extension */ AFMFileName[i+1]='a'; AFMFileName[i+2]='f'; AFMFileName[i+3]='m'; AFMFileName[i+4]='\0'; } } /* Get full path of the afm file (The case of a full path name name specification is valid */ AFMFileNamePath=intT1_Env_GetCompletePath( AFMFileName, T1_AFM_ptr); free( AFMFileName); /* open afm-file: */ if (AFMFileNamePath!=NULL){ if ((metricsfile=fopen(AFMFileNamePath,"rb"))==NULL){ free(AFMFileNamePath); return(-4); } else { free(AFMFileNamePath); } } else{ return( -5); } /* Call procedure to read afm-file and store the data formatted. Flags used here: P_M All Metrics Information P_P Pair Kerning Information P_C Composite Character Data (since t1lib V.1.2) The P_G flag to get global font information should not be used if not absolutely needed. When parsing an unknown keyword, which may be harmless, the T1lib_parseFile function returns the error code -1 (parseError). On the other hand, all other really relevant data may habe been parsed and stored correctly. In such a case, There's no way to make a serious decision whether an error has occured or not. */ if (open_sloppy!=0) i=T1lib_parseFile( (FILE *) metricsfile, (FontInfo **) &(FontBase.pFontArray[FontID].pAFMData), P_M ); else i=T1lib_parseFile( (FILE *) metricsfile, (FontInfo **) &(FontBase.pFontArray[FontID].pAFMData), P_G | P_M | P_P | P_C ); fclose(metricsfile); return(i); } /* T1int_CreateNewFontSize( FontID, size): Create a new size "size" of font "FontID" and allocate all data necessary for this. The data structure is connected to the linked list of FontSizeDeps for this font. Returns a pointer to the newly created FontSizeDeps-struct if all went correct and NULL otherwise. Since of version 0.3 a member antialias has been added to the FONTSIZEDEPS structure! This can be: 0: bitmaps are stored in this struct 1: non-antialiased bytemaps are stored in this struct 2: low-antialiased bytemaps are stored in this struct 4: high-antialiased bytemaps are stored in this struct */ FONTSIZEDEPS *T1int_CreateNewFontSize( int FontID, float size, int aa) { FONTSIZEDEPS *pFontSizeDeps, *pPrev; /* First, get to the last font size in the linked list for this font. The following routine returns the address of the last struct in the linked list of FONTSIZEDEPS or NULL if none exists. */ pFontSizeDeps=T1int_GetLastFontSize( FontID); pPrev=pFontSizeDeps; if (pFontSizeDeps==NULL){ /* Allocate memory for first FontSizeDeps-structure: */ if ((pFontBase->pFontArray[FontID].pFontSizeDeps=(FONTSIZEDEPS *)malloc(sizeof(FONTSIZEDEPS)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } pFontSizeDeps=pFontBase->pFontArray[FontID].pFontSizeDeps; } else{ /* A valid address of an existing structure was found */ if ((pFontSizeDeps->pNextFontSizeDeps=(FONTSIZEDEPS *)malloc(sizeof(FONTSIZEDEPS)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } pFontSizeDeps=pFontSizeDeps->pNextFontSizeDeps; } /* The pointer to the previous struct */ pFontSizeDeps->pPrevFontSizeDeps=pPrev; /* Put the size into this structure */ pFontSizeDeps->size=size; /* Set the antialias mark: */ pFontSizeDeps->antialias=aa; /* Just the current becomes now the last item in the linked list: */ pFontSizeDeps->pNextFontSizeDeps=NULL; /* Setup CharSpaceMatrix for this font: */ pFontSizeDeps->pCharSpaceLocal=(struct XYspace *) IDENTITY; /* Apply transformation with font matrix: */ pFontSizeDeps->pCharSpaceLocal=(struct XYspace *) Transform(pFontSizeDeps->pCharSpaceLocal, pFontBase->pFontArray[FontID].FontMatrix[0], pFontBase->pFontArray[FontID].FontMatrix[1], pFontBase->pFontArray[FontID].FontMatrix[2], pFontBase->pFontArray[FontID].FontMatrix[3]); /* Apply a further transformation (optionally): */ pFontSizeDeps->pCharSpaceLocal=(struct XYspace *) Transform(pFontSizeDeps->pCharSpaceLocal, pFontBase->pFontArray[FontID].FontTransform[0], pFontBase->pFontArray[FontID].FontTransform[1], pFontBase->pFontArray[FontID].FontTransform[2], pFontBase->pFontArray[FontID].FontTransform[3]); /* Apply desired scaling factor, and make it Permanent */ pFontSizeDeps->pCharSpaceLocal=(struct XYspace *) Permanent (Scale(pFontSizeDeps->pCharSpaceLocal, size, size)); /* We should now allocate memory for the glyph area of the font cache: */ if ((pFontSizeDeps->pFontCache=(GLYPH *)calloc(256,sizeof(GLYPH))) ==NULL) return(NULL); sprintf( err_warn_msg_buf, "New Size %f created for FontID %d (antialias=%d)", pFontSizeDeps->size, FontID, pFontSizeDeps->antialias); T1_PrintLog( "CreateNewFontSize()", err_warn_msg_buf, T1LOG_STATISTIC); /* We are done */ return(pFontSizeDeps); } /* T1_QueryFontSize( FontID, size, aa): Search if a requested size of font FontID is already existing. If so, it returns a pointer to the respective FontSizeDeps-structure, otherwise NULL is returned: */ FONTSIZEDEPS *T1int_QueryFontSize( int FontID, float size, int aa) { FONTSIZEDEPS *link_ptr; /* There's not yet one size: */ if (pFontBase->pFontArray[FontID].pFontSizeDeps == NULL) return(pFontBase->pFontArray[FontID].pFontSizeDeps); /* There's already existing one or more size */ link_ptr=pFontBase->pFontArray[FontID].pFontSizeDeps; while (((link_ptr->size != size)||(link_ptr->antialias != aa)) &&(link_ptr->pNextFontSizeDeps != NULL)) link_ptr=link_ptr->pNextFontSizeDeps; if ((link_ptr->size != size)||(link_ptr->antialias != aa)) return( NULL); /* requested size/aa-combination was not found */ else return(link_ptr); /* return pointer to requested struct */ } /* FONTSIZEDEPS *T1int_GetLastFontSize( FontID): Get the address of the last struct in the linked list of FontSizeDeps or NULL if there is no existing size dependent data. */ FONTSIZEDEPS *T1int_GetLastFontSize( int FontID) { FONTSIZEDEPS *link_ptr, *result_ptr; /* There's not yet one size: */ if (pFontBase->pFontArray[FontID].pFontSizeDeps == NULL) return((FONTSIZEDEPS *) (pFontBase->pFontArray[FontID].pFontSizeDeps)); /* There's already existing one or more size */ link_ptr=pFontBase->pFontArray[FontID].pFontSizeDeps; while (link_ptr != NULL){ result_ptr=link_ptr; link_ptr=link_ptr->pNextFontSizeDeps; } return((FONTSIZEDEPS *)(result_ptr)); } /* A function for comparing METRICS_ENTRY structs */ static int cmp_METRICS_ENTRY( const void *entry1, const void *entry2) { if (((METRICS_ENTRY *)entry1)->chars < ((METRICS_ENTRY *)entry2)->chars) return(-1); if (((METRICS_ENTRY *)entry1)->chars > ((METRICS_ENTRY *)entry2)->chars) return(1); return(0); /* This should not happen */ } t1lib-5.1.2/lib/t1lib/t1load.h0000644000175000001440000000424410733501626014406 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1load.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2002-12-02 ----- Description: This file is part of the t1-library. It contains declarations and definitions for t1load.c. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independ from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1LOAD_C int T1_LoadFont( int FontID); static int openFontMetricsFile( int FontID, int open_sloppy); FONTSIZEDEPS *T1int_CreateNewFontSize( int FontID, float size, int aa); FONTSIZEDEPS *T1int_GetLastFontSize( int FontID); FONTSIZEDEPS *T1int_QueryFontSize( int FontID, float size, int aa); int fontfcnA( char *env, int *mode, psfont *Font_Ptr); static int cmp_METRICS_ENTRY( const void *entry1, const void *entry2); extern char *vm_base; /* from fontfcn.c in initfont()! */ extern char *vm_used; /* from fontfcn.c in fontfcnA()! */ #else extern int T1_LoadFont( int FontID); extern FONTSIZEDEPS *T1int_CreateNewFontSize( int FontID, float size, int aa); extern FONTSIZEDEPS *T1int_GetLastFontSize( int FontID); extern FONTSIZEDEPS *T1int_QueryFontSize( int FontID, float size, int aa); #endif t1lib-5.1.2/lib/t1lib/t1outline.c0000644000175000001440000005472410733501626015151 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1outline.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-01 ----- Description: This file is part of the t1-library. It contains functions for getting glyph outline descriptions of strings and characters. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1OUTLINE_C #include #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include #include "../type1/ffilest.h" #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "t1types.h" #include "t1extern.h" #include "t1set.h" #include "t1load.h" #include "t1finfo.h" #include "t1misc.h" #include "t1base.h" #include "t1outline.h" /* As a fall back */ #ifndef T1_AA_TYPE16 #define T1_AA_TYPE16 short #endif #ifndef T1_AA_TYPE32 #define T1_AA_TYPE32 int #endif extern char *t1_get_abort_message( int number); extern struct segment *Type1Line(psfont *env, struct XYspace *S, float line_position, float line_thickness, float line_length); extern struct segment *t1_Join( struct segment *path1, struct segment *path2); extern struct segment *CopyPath( struct segment *p); extern void KillPath( struct segment *p); /* T1_SetChar(...): Generate the bitmap for a character */ T1_OUTLINE *T1_GetCharOutline( int FontID, char charcode, float size, T1_TMATRIX *transform) { int i; int mode; T1_PATHSEGMENT *charpath; struct XYspace *Current_S; unsigned char ucharcode; FONTSIZEDEPS *font_ptr; FONTPRIVATE *fontarrayP; /* We don't implement underlining for characters, but the rasterer implements it. Thus, we use a modflag of constant 0 */ int modflag=0; /* We return to this if something goes wrong deep in the rasterizer */ if ((i=setjmp( stck_state))!=0) { T1_errno=T1ERR_TYPE1_ABORT; sprintf( err_warn_msg_buf, "t1_abort: Reason: %s", t1_get_abort_message( i)); T1_PrintLog( "T1_GetCharOutline()", err_warn_msg_buf, T1LOG_ERROR); return( NULL); } ucharcode=(unsigned char)charcode; /* First, check for a correct ID */ i=T1_CheckForFontID(FontID); if (i==-1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* if necessary load font into memory */ if (i==0) if (T1_LoadFont(FontID)) return(NULL); /* Check for valid size */ if (size<=0.0){ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } fontarrayP=&(pFontBase->pFontArray[FontID]); /* font is now loaded into memory => Check for size: */ if ((font_ptr=T1int_QueryFontSize( FontID, size, NO_ANTIALIAS))==NULL){ font_ptr=T1int_CreateNewFontSize( FontID, size, NO_ANTIALIAS); if (font_ptr==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } } /* Setup an appropriate charspace matrix. Note that the rasterizer assumes vertical values with inverted sign! Transformation should create a copy of the local charspace matrix which then still has to be made permanent. */ if (transform!=NULL) { Current_S=(struct XYspace *) Permanent(Scale(Transform (font_ptr->pCharSpaceLocal, transform->cxx, - transform->cxy, transform->cyx, - transform->cyy), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } else{ Current_S=(struct XYspace *) Permanent(Scale(Transform(font_ptr->pCharSpaceLocal, 1.0, 0.0, 0.0, -1.0), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } /* fnt_ptr now points to the correct FontSizeDeps-struct => lets now raster the character */ mode=0; charpath=(T1_PATHSEGMENT *)fontfcnB( FontID, modflag, Current_S, fontarrayP->pFontEnc, ucharcode, &mode, fontarrayP->pType1Data, DO_NOT_RASTER,0.0f); KillSpace (Current_S); return((T1_OUTLINE *)charpath); } /* T1_GetStringOutline(...): Generate the outline for a string of characters */ T1_OUTLINE *T1_GetStringOutline( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform) { int i; int mode; /* initialize this to NULL just to be on the safe side */ T1_PATHSEGMENT *charpath = NULL; struct XYspace *Current_S; int *kern_pairs; /* use for accessing the kern pairs if kerning is requested */ int no_chars=0; /* The number of characters in the string */ static int lastno_chars=0; long spacewidth; /* This is given to fontfcnb_string() */ FONTSIZEDEPS *font_ptr; FONTPRIVATE *fontarrayP; static int *pixel_h_anchor_corr=NULL; static int *flags=NULL; unsigned char *ustring; /* We return to this if something goes wrong deep in the rasterizer */ if ((i=setjmp( stck_state))!=0) { T1_errno=T1ERR_TYPE1_ABORT; sprintf( err_warn_msg_buf, "t1_abort: Reason: %s", t1_get_abort_message( i)); T1_PrintLog( "T1_GetStringOutline()", err_warn_msg_buf, T1LOG_ERROR); return( NULL); } /* force string elements into unsigned */ ustring=(unsigned char*)string; /* First, check for a correct ID */ i=T1_CheckForFontID(FontID); if (i==-1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* if necessary load font into memory */ if (i==0) if (T1_LoadFont(FontID)) return(NULL); /* If no AFM info is present, we return an error */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return(NULL); } /* Check for valid size */ if (size<=0.0){ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } fontarrayP=&(pFontBase->pFontArray[FontID]); /* font is now loaded into memory => Check for size: */ if ((font_ptr=T1int_QueryFontSize( FontID, size, NO_ANTIALIAS))==NULL){ font_ptr=T1int_CreateNewFontSize( FontID, size, NO_ANTIALIAS); if (font_ptr==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } } /* Now comes string specific stuff: Get length of string and create an array of integers where to store the bitmap positioning dimens: */ if (len<0){ /* invalid length */ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } if (len==0) /* should be computed assuming "normal" 0-terminated string */ no_chars=strlen(string); else /* use value given on command line */ no_chars=len; /* If necessary, allocate memory */ if (no_chars>lastno_chars){ if (pixel_h_anchor_corr!=NULL){ free(pixel_h_anchor_corr); } if (flags!=NULL){ free(flags); } pixel_h_anchor_corr=(int *)calloc(no_chars, sizeof(int)); flags=(int *)calloc(no_chars, sizeof(int)); lastno_chars=no_chars; } else{ /* Reset flags and position array */ for (i=0; ipCharSpaceLocal, transform->cxx, - transform->cxy, transform->cyx, - transform->cyy), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } else{ Current_S=(struct XYspace *) Permanent(Scale(Transform(font_ptr->pCharSpaceLocal, 1.0, 0.0, 0.0, -1.0), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } /* Compute the correct spacewidth value (in charspace units). The value supplied by the user is interpreted as an offset in char space units: */ spacewidth=T1_GetCharWidth(FontID,fontarrayP->space_position)+spaceoff; mode=0; kern_pairs=(int *)calloc(no_chars, sizeof(int)); if ((modflag & T1_KERNING)) for (i=0; ipFontEnc, (unsigned char *)string, no_chars, &mode, fontarrayP->pType1Data, kern_pairs, spacewidth, DO_NOT_RASTER,0.0f); KillSpace (Current_S); /* In all cases, free memory for kerning pairs */ free(kern_pairs); /* fill the string_glyph-structure */ if (mode != 0) { sprintf( err_warn_msg_buf, "fontfcnB_string() set mode=%d", mode); T1_PrintLog( "T1_GetStringOutline()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=mode; /* make sure to get rid of path if it's there */ if (charpath){ KillRegion (charpath); } return(NULL); } if (charpath == NULL){ T1_PrintLog( "T1_GetStringOutline()", "path=NULL returned by fontfcnB_string()", T1LOG_WARNING); T1_errno=mode; return(NULL); } return( (T1_OUTLINE *)charpath); } /* T1_GetMoveOutline(...): Generate the "outline" for a movement */ T1_OUTLINE *T1_GetMoveOutline( int FontID, int deltax, int deltay, int modflag, float size, T1_TMATRIX *transform) { int i; FONTSIZEDEPS *font_ptr; struct segment *path, *tmppath; struct XYspace *Current_S; psfont *FontP; float length; /* We return to this if something goes wrong deep in the rasterizer */ if ((i=setjmp( stck_state))!=0) { T1_errno=T1ERR_TYPE1_ABORT; sprintf( err_warn_msg_buf, "t1_abort: Reason: %s", t1_get_abort_message( i)); T1_PrintLog( "T1_GetMoveOutline()", err_warn_msg_buf, T1LOG_ERROR); return( NULL); } /* First, check for a correct ID */ i=T1_CheckForFontID(FontID); if (i==-1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* if necessary load font into memory */ if (i==0) if (T1_LoadFont(FontID)) return(NULL); /* Check for valid size */ if (size<=0.0){ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } FontP=pFontBase->pFontArray[i].pType1Data; /* font is now loaded into memory => Check for size: */ if ((font_ptr=T1int_QueryFontSize( FontID, size, NO_ANTIALIAS))==NULL){ font_ptr=T1int_CreateNewFontSize( FontID, size, NO_ANTIALIAS); if (font_ptr==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } } /* Setup an appropriate charspace matrix. Note that the rasterizer assumes vertical values with inverted sign! Transformation should create a copy of the local charspace matrix which then still has to be made permanent. */ if (transform!=NULL){ Current_S=(struct XYspace *) Permanent(Scale(Transform (font_ptr->pCharSpaceLocal, transform->cxx, - transform->cxy, transform->cyx, - transform->cyy), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } else{ Current_S=(struct XYspace *) Permanent(Scale(Transform(font_ptr->pCharSpaceLocal, 1.0, 0.0, 0.0, -1.0), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } path=(struct segment *)ILoc( Current_S, deltax, deltay); /* Take care for underlining and such */ length=(float) deltax; if (modflag & T1_UNDERLINE){ tmppath=(struct segment *)Type1Line(FontP,Current_S, pFontBase->pFontArray[FontID].UndrLnPos, pFontBase->pFontArray[FontID].UndrLnThick, length); path=(struct segment *)Join(path,tmppath); } if (modflag & T1_OVERLINE){ tmppath=(struct segment *)Type1Line(FontP,Current_S, pFontBase->pFontArray[FontID].OvrLnPos, pFontBase->pFontArray[FontID].OvrLnThick, length); path=(struct segment *)Join(path,tmppath); } if (modflag & T1_OVERSTRIKE){ tmppath=(struct segment *)Type1Line(FontP,Current_S, pFontBase->pFontArray[FontID].OvrStrkPos, pFontBase->pFontArray[FontID].OvrStrkThick, length); path=(struct segment *)Join(path,tmppath); } KillSpace( Current_S); return( (T1_OUTLINE *)path); } /* T1_ConcatOutlines(): Concatenate two outline to one path */ T1_OUTLINE *T1_ConcatOutlines( T1_OUTLINE *path1, T1_OUTLINE *path2) { return( (T1_OUTLINE *) t1_Join( (struct segment *) path1, (struct segment *) path2)); } /* T1_ScaleOutline(): Scale an outline */ T1_OUTLINE *T1_ScaleOutline( T1_OUTLINE *path, float scale) { struct segment *ipath; /* Step through the path list */ ipath=(struct segment *)path; do { if (ipath->type==LINETYPE){ ipath->dest.x = (fractpel) (ipath->dest.x * scale); ipath->dest.y = (fractpel) (ipath->dest.y * scale); } if (ipath->type==CONICTYPE){ ((struct conicsegment *)ipath)->dest.x = (fractpel) ((struct conicsegment *)ipath)->dest.x * scale; ((struct conicsegment *)ipath)->dest.y = (fractpel) ((struct conicsegment *)ipath)->dest.y * scale; ((struct conicsegment *)ipath)->M.x = (fractpel) ((struct conicsegment *)ipath)->M.x * scale; ((struct conicsegment *)ipath)->M.y = (fractpel) ((struct conicsegment *)ipath)->M.y * scale; } if (ipath->type==MOVETYPE){ ipath->dest.x = (fractpel) (ipath->dest.x * scale); ipath->dest.y = (fractpel) (ipath->dest.y * scale); } if (ipath->type==BEZIERTYPE){ ((struct beziersegment *)ipath)->B.x = (fractpel) (((struct beziersegment *)ipath)->B.x * scale); ((struct beziersegment *)ipath)->B.y = (fractpel) (((struct beziersegment *)ipath)->B.y * scale); ((struct beziersegment *)ipath)->C.x = (fractpel) (((struct beziersegment *)ipath)->C.x * scale); ((struct beziersegment *)ipath)->C.y = (fractpel) (((struct beziersegment *)ipath)->C.y * scale); ((struct beziersegment *)ipath)->dest.x = (fractpel) (((struct beziersegment *)ipath)->dest.x * scale); ((struct beziersegment *)ipath)->dest.y = (fractpel) (((struct beziersegment *)ipath)->dest.y * scale); } if (ipath->type==HINTTYPE){ ((struct hintsegment *)ipath)->dest.x = (fractpel) (((struct hintsegment *)ipath)->dest.x * scale); ((struct hintsegment *)ipath)->dest.y = (fractpel) (((struct hintsegment *)ipath)->dest.y * scale); ((struct hintsegment *)ipath)->ref.x = (fractpel) (((struct hintsegment *)ipath)->ref.x * scale); ((struct hintsegment *)ipath)->ref.y = (fractpel) (((struct hintsegment *)ipath)->ref.y * scale); ((struct hintsegment *)ipath)->width.x = (fractpel) (((struct hintsegment *)ipath)->width.x * scale); ((struct hintsegment *)ipath)->width.y = (fractpel) (((struct hintsegment *)ipath)->width.y * scale); } if (ipath->type==TEXTTYPE) ; ipath=ipath->link; } while (ipath!=NULL); return( path); } /* dump a description of path elements to stdout */ void T1_DumpPath( T1_OUTLINE *path) { struct segment *ipath; /* Step through the path list */ ipath=(struct segment *)path; do { if (ipath->type==LINETYPE){ printf("Line-Segment: -> (%f,%f)\n", (ipath->dest.x)/(double)(0xFFFF), -(ipath->dest.y)/(double)(0xFFFF)); } if (ipath->type==MOVETYPE){ printf("Move-Segment: -> (%f,%f)\n", (ipath->dest.x)/(double)(0xFFFF), -(ipath->dest.y)/(double)(0xFFFF)); } if (ipath->type==BEZIERTYPE){ printf("Bezier-Segment: ... (%f,%f) ... (%f,%f) -> (%f,%f)\n", (((struct beziersegment *)ipath)->B.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->B.y)/(double)(0xFFFF), (((struct beziersegment *)ipath)->C.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->C.y)/(double)(0xFFFF), (((struct beziersegment *)ipath)->dest.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->dest.y)/(double)(0xFFFF)); } ipath=ipath->link; } while (ipath!=NULL); } /* convert a relative path to an absolute path */ void T1_AbsolutePath( T1_OUTLINE *rpath) { struct segment *ipath; fractpel xcurr=0, ycurr=0; /* Step through the path list */ ipath=(struct segment *)rpath; do { if (ipath->type==LINETYPE){ ipath->dest.x +=xcurr; ipath->dest.y +=ycurr; #ifdef PRINT_PATHS_TO_STDOUT printf("Line-Segment: -> (%f,%f)\n", (ipath->dest.x)/(double)(0xFFFF), -(ipath->dest.y)/(double)(0xFFFF)); #endif xcurr=ipath->dest.x; ycurr=ipath->dest.y; } if (ipath->type==MOVETYPE){ ipath->dest.x +=xcurr; ipath->dest.y +=ycurr; #ifdef PRINT_PATHS_TO_STDOUT printf("Move-Segment: -> (%f,%f)\n", (ipath->dest.x)/(double)(0xFFFF), -(ipath->dest.y)/(double)(0xFFFF)); #endif xcurr=ipath->dest.x; ycurr=ipath->dest.y; } if (ipath->type==BEZIERTYPE){ ((struct beziersegment *)ipath)->B.x +=xcurr; ((struct beziersegment *)ipath)->B.y +=ycurr; ((struct beziersegment *)ipath)->C.x +=xcurr; ((struct beziersegment *)ipath)->C.y +=ycurr; ipath->dest.x +=xcurr; ipath->dest.y +=ycurr; #ifdef PRINT_PATHS_TO_STDOUT printf("Bezier-Segment: ... (%f,%f) ... (%f,%f) -> (%f,%f)\n", (((struct beziersegment *)ipath)->B.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->B.y)/(double)(0xFFFF), (((struct beziersegment *)ipath)->C.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->C.y)/(double)(0xFFFF), (((struct beziersegment *)ipath)->dest.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->dest.y)/(double)(0xFFFF)); #endif xcurr=ipath->dest.x; ycurr=ipath->dest.y; } ipath=ipath->link; } while (ipath!=NULL); } /* convert path into a relative path as needed by the rasterizer */ void T1_RelativePath( T1_OUTLINE *apath) { struct segment *ipath; fractpel xcurr=0, ycurr=0; /* Step through the path list */ ipath=(struct segment *)apath; do { if (ipath->type==LINETYPE){ ipath->dest.x -=xcurr; ipath->dest.y -=ycurr; xcurr +=ipath->dest.x; ycurr +=ipath->dest.y; #ifdef PRINT_PATHS_TO_STDOUT printf("Line-Segment: -> (%f,%f), curr=(%f,%f)\n", (ipath->dest.x)/(double)(0xFFFF), -(ipath->dest.y)/(double)(0xFFFF), xcurr/(double)(0xFFFF), -ycurr/(double)(0xFFFF)); #endif } if (ipath->type==MOVETYPE){ ipath->dest.x -=xcurr; ipath->dest.y -=ycurr; xcurr +=ipath->dest.x; ycurr +=ipath->dest.y; #ifdef PRINT_PATHS_TO_STDOUT printf("Move-Segment: -> (%f,%f), curr=(%f,%f)\n", (ipath->dest.x)/(double)(0xFFFF), -(ipath->dest.y)/(double)(0xFFFF), xcurr/(double)(0xFFFF), -ycurr/(double)(0xFFFF)); #endif } if (ipath->type==BEZIERTYPE){ ipath->dest.x -=xcurr; ipath->dest.y -=ycurr; ((struct beziersegment *)ipath)->C.x -=xcurr; ((struct beziersegment *)ipath)->C.y -=ycurr; ((struct beziersegment *)ipath)->B.x -=xcurr; ((struct beziersegment *)ipath)->B.y -=ycurr; xcurr +=ipath->dest.x; ycurr +=ipath->dest.y; #ifdef PRINT_PATHS_TO_STDOUT printf("Bezier-Segment: ... (%f,%f) ... (%f,%f) -> (%f,%f)\n", (((struct beziersegment *)ipath)->B.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->B.y)/(double)(0xFFFF), (((struct beziersegment *)ipath)->C.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->C.y)/(double)(0xFFFF), (((struct beziersegment *)ipath)->dest.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->dest.y)/(double)(0xFFFF)); #endif } ipath=ipath->link; } while (ipath!=NULL); } /* maniuplate the coordinata points of a path */ void T1_ManipulatePath( T1_OUTLINE *path, void (*manipulate)(fractpel *x,fractpel *y,int type)) { struct segment *ipath; /* Step through the path list */ ipath=(struct segment *)path; do { if (ipath->type==LINETYPE){ manipulate( &(ipath->dest.x), &ipath->dest.y, LINETYPE); #ifdef PRINT_PATHS_TO_STDOUT printf("Line-Segment: -> (%f,%f)\n", (ipath->dest.x)/(double)(0xFFFF), -(ipath->dest.y)/(double)(0xFFFF)); #endif } if (ipath->type==MOVETYPE){ manipulate( &(ipath->dest.x), &ipath->dest.y, MOVETYPE); #ifdef PRINT_PATHS_TO_STDOUT printf("Move-Segment: -> (%f,%f)\n", (ipath->dest.x)/(double)(0xFFFF), -(ipath->dest.y)/(double)(0xFFFF)); #endif } if (ipath->type==BEZIERTYPE){ manipulate( &((struct beziersegment *)ipath)->B.x, &((struct beziersegment *)ipath)->B.y, BEZIERTYPE); manipulate( &((struct beziersegment *)ipath)->C.x, &((struct beziersegment *)ipath)->C.y, BEZIERTYPE); manipulate( &((struct beziersegment *)ipath)->dest.x, &((struct beziersegment *)ipath)->dest.y, BEZIERTYPE); #ifdef PRINT_PATHS_TO_STDOUT printf("Bezier-Segment: ... (%f,%f) ... (%f,%f) -> (%f,%f)\n", (((struct beziersegment *)ipath)->B.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->B.y)/(double)(0xFFFF), (((struct beziersegment *)ipath)->C.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->C.y)/(double)(0xFFFF), (((struct beziersegment *)ipath)->dest.x)/(double)(0xFFFF), -(((struct beziersegment *)ipath)->dest.y)/(double)(0xFFFF)); #endif } ipath=ipath->link; } while (ipath!=NULL); } /* T1_CopyOutline(): Copy an outline physically. Returns a pointer to the path or NULL */ T1_OUTLINE *T1_CopyOutline( T1_OUTLINE *path) { return( (T1_OUTLINE *) CopyPath( (struct segment *)path)); } /* T1_FreeOutline(): Free an outline. */ void T1_FreeOutline( T1_OUTLINE *path) { KillPath( (struct segment *)path); return; } t1lib-5.1.2/lib/t1lib/t1outline.h0000644000175000001440000000744610733501626015155 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1outline.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2002-10-18 ----- Description: This file is part of the t1-library. It contains definitions and declarations for t1outline.c. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1OUTLINE_C T1_OUTLINE *T1_GetCharOutline( int FontID, char charcode, float size, T1_TMATRIX *transform); T1_OUTLINE *T1_GetStringOutline( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); T1_OUTLINE *T1_ConcatOutlines( T1_OUTLINE *path1, T1_OUTLINE *path2); T1_OUTLINE *T1_ScaleOutline( T1_OUTLINE *path, float scale); T1_OUTLINE *T1_GetMoveOutline( int FontID, int deltax, int deltay, int modflag, float size, T1_TMATRIX *transform); void T1_DumpPath( T1_OUTLINE *path); void T1_AbsolutePath( T1_OUTLINE *rpath); void T1_RelativePath( T1_OUTLINE *apath); void T1_ManipulatePath( T1_OUTLINE *path, void (*manipulate)(fractpel *x,fractpel *y,int type)); T1_OUTLINE *T1_CopyOutline( T1_OUTLINE *path); void T1_FreeOutline( T1_OUTLINE *path); #else extern T1_OUTLINE *T1_GetCharOutline( int FontID, char charcode, float size, T1_TMATRIX *transform); extern T1_OUTLINE *T1_GetStringOutline( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern T1_OUTLINE *T1_ConcatOutlines( T1_OUTLINE *path1, T1_OUTLINE *path2); extern T1_OUTLINE *T1_ScaleOutline( T1_OUTLINE *path, float scale); extern T1_OUTLINE *T1_GetMoveOutline( int FontID, int deltax, int deltay, int modflag, float size, T1_TMATRIX *transform); extern void T1_DumpPath( T1_OUTLINE *path); extern void T1_AbsolutePath( T1_OUTLINE *rpath); extern void T1_RelativePath( T1_OUTLINE *apath); extern void T1_ManipulatePath( T1_OUTLINE *path, void (*manipulate)(fractpel *x,fractpel *y,int type)); extern T1_OUTLINE *T1_CopyOutline( T1_OUTLINE *path); extern void T1_FreeOutline( T1_OUTLINE *path); #endif extern struct region *fontfcnB(int FontID, int modflag, struct XYspace *S, char **ev, unsigned char index, int *mode, psfont *Font_Ptr, int do_raster, float strokewidth); extern struct region *fontfcnB_string( int FontID, int modflag, struct XYspace *S, char **ev, unsigned char *string, int no_chars, int *mode, psfont *Font_Ptr, int *kern_pairs, long spacewidth, int do_raster, float strokewidth); extern struct region *fontfcnB_ByName( int FontID, int modflag, struct XYspace *S, char *charname, int *mode, psfont *Font_Ptr, int do_raster); t1lib-5.1.2/lib/t1lib/t1trans.c0000644000175000001440000004476010733501626014620 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1trans.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-01 ----- Description: This file is part of the t1-library. It contains functions for transforming fonts and setting line-parameters. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1TRANS_C #include #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include "../type1/ffilest.h" #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "t1types.h" #include "t1extern.h" #include "t1trans.h" #include "t1base.h" /* T1_ExtendFont(): Extend the font referenced by FontID by the factor extend. This is only allowed if no size dependent data exists. Of course, the font must already have been loaded. Returns 0 for success and -1 otherwise. */ int T1_ExtendFont( int FontID, double extend) { /* First, check for font residing in memory: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(-1); } /* Second, check whether size-dependent data exists: */ if (pFontBase->pFontArray[FontID].pFontSizeDeps != NULL){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } pFontBase->pFontArray[FontID].extend=extend; pFontBase->pFontArray[FontID].FontTransform[0] = extend; return(0); } /* T1_GetExtend(): Return the current extension factor of the font FontID Return: 0.0 if font not loaded current extent otherwise */ double T1_GetExtend( int FontID) { /* First, check for font residing in memory: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0.0); } return( pFontBase->pFontArray[FontID].extend); } /* T1_SlantFont(): Slant the font referenced by FontID by the factor extend. This is only allowed if no size dependent data exists. Of course, the font must already have been loaded. Returns 0 for success and -1 otherwise. */ int T1_SlantFont( int FontID, double slant) { /* First, check for font residing in memory: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(-1); } /* Second, check whether size-dependent data exists: */ if (pFontBase->pFontArray[FontID].pFontSizeDeps != NULL){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } pFontBase->pFontArray[FontID].slant=slant; pFontBase->pFontArray[FontID].FontTransform[2] = slant; return(0); } /* T1_GetSlant(): Return the current slanting factor of the font FontID Return: 0.0 if font not loaded current slant otherwise (may also be 0.0!) */ double T1_GetSlant( int FontID) { /* First, check for font residing in memory: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0.0); } return( pFontBase->pFontArray[FontID].slant); } /* T1_TransformFont(): Transform the font referenced by FontID according to the transform matrix. This is only allowed if no size dependent data exists. Of course, the font must already have been loaded. Returns 0 for success and -1 otherwise. */ int T1_TransformFont( int FontID, T1_TMATRIX *matrix) { /* First, check for font residing in memory: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(-1); } /* Second, check whether size-dependent data exists: */ if (pFontBase->pFontArray[FontID].pFontSizeDeps != NULL){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } pFontBase->pFontArray[FontID].FontTransform[0] = matrix->cxx; pFontBase->pFontArray[FontID].FontTransform[1] = matrix->cxy; pFontBase->pFontArray[FontID].FontTransform[2] = matrix->cyx; pFontBase->pFontArray[FontID].FontTransform[3] = matrix->cyy; return(0); } /* T1_GetTransform(): Return the current transformation matrix for the font FontID Return: [0.0, 0.0, 0.0, 0.0] if font not loaded current tmatrix otherwise */ T1_TMATRIX T1_GetTransform( int FontID) { T1_TMATRIX tmatrix={0.0, 0.0, 0.0, 0.0}; /* First, check for font residing in memory: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(tmatrix); } tmatrix.cxx=pFontBase->pFontArray[FontID].FontTransform[0]; tmatrix.cxy=pFontBase->pFontArray[FontID].FontTransform[1]; tmatrix.cyx=pFontBase->pFontArray[FontID].FontTransform[2]; tmatrix.cyy=pFontBase->pFontArray[FontID].FontTransform[3]; return( tmatrix); } /* Functions for setting line-parameters: linetypeis expected to be an OR'ed combination of T1_UNDERLINE, T1_OVERLINE and T1_OVERSTRIKE. */ int T1_SetLinePosition( int FontID, int linetype, float value) { if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(-1); } if (linetype & T1_UNDERLINE){ pFontBase->pFontArray[FontID].UndrLnPos=value; return( 0); } if (linetype & T1_OVERLINE){ pFontBase->pFontArray[FontID].OvrLnPos=value; return( 0); } if (linetype & T1_OVERSTRIKE){ pFontBase->pFontArray[FontID].OvrStrkPos=value; return( 0); } /* The linetype was bad */ T1_errno=T1ERR_INVALID_PARAMETER; return( -1); } int T1_SetLineThickness( int FontID, int linetype, float value) { if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(-1); } if (linetype & T1_UNDERLINE){ pFontBase->pFontArray[FontID].UndrLnThick=value; return( 0); } if (linetype & T1_OVERLINE){ pFontBase->pFontArray[FontID].OvrLnThick=value; return( 0); } if (linetype & T1_OVERSTRIKE){ pFontBase->pFontArray[FontID].OvrStrkThick=value; return( 0); } /* The linetype was bad */ T1_errno=T1ERR_INVALID_PARAMETER; return( -1); } float T1_GetLinePosition( int FontID, int linetype) { if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0.0); } if (linetype & T1_UNDERLINE) return( pFontBase->pFontArray[FontID].UndrLnPos); if (linetype & T1_OVERLINE) return( pFontBase->pFontArray[FontID].OvrLnPos); if (linetype & T1_OVERSTRIKE) return( pFontBase->pFontArray[FontID].OvrStrkPos); /* The linetype was bad */ T1_errno=T1ERR_INVALID_PARAMETER; return( 0.0); } float T1_GetLineThickness( int FontID, int linetype) { if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(0.0); } if (linetype & T1_UNDERLINE) return( pFontBase->pFontArray[FontID].UndrLnThick); if (linetype & T1_OVERLINE) return( pFontBase->pFontArray[FontID].OvrLnThick); if (linetype & T1_OVERSTRIKE) return( pFontBase->pFontArray[FontID].OvrStrkThick); /* The linetype was bad */ T1_errno=T1ERR_INVALID_PARAMETER; return( 0.0); } /* Functions for intuitively transforming matrices. All function operate on their original objects. In case NULL is specified, a unity-matrix is allocated by the function and then tranformed appropriately. Note that in order to concatenate transformation in the sense of t1lib the current transformation matrix must be left-multiplied by the trnasformation to be applied! */ /* Rotation: ( x11' x21' ) ( cos(a) -sin(a) ) ( x11 x21 ) ( ) = ( ) * ( ) ( x12' x22' ) ( sin(a) cos(a) ) ( x12 x22 ) */ T1_TMATRIX *T1_RotateMatrix( T1_TMATRIX *matrix, double angle) { T1_TMATRIX tmat; if (matrix==NULL){ if ((matrix=(T1_TMATRIX *)malloc( sizeof(T1_TMATRIX)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return( NULL); } matrix->cxx=1.0; matrix->cyx=0.0; matrix->cxy=0.0; matrix->cyy=1.0; } memcpy( &tmat, matrix, sizeof(T1_TMATRIX)); /* Convert angle to radians: */ angle=angle*PI/180.0; /* multiply matrices */ matrix->cxx=cos((double)angle) * tmat.cxx - sin((double)angle) * tmat.cxy; matrix->cyx=cos((double)angle) * tmat.cyx - sin((double)angle) * tmat.cyy; matrix->cxy=sin((double)angle) * tmat.cxx + cos((double)angle) * tmat.cxy; matrix->cyy=sin((double)angle) * tmat.cyx + cos((double)angle) * tmat.cyy; return( matrix); } /* Horizontal mirroring */ /* H-Mirror: ( x11' x21' ) ( -1 0 ) ( x11 x21 ) ( -x11 -x21 ) ( ) = ( ) * ( ) = ( ) ( x12' x22' ) ( 0 1 ) ( x12 x22 ) ( x12 x22 ) */ T1_TMATRIX *T1_MirrorHMatrix( T1_TMATRIX *matrix) { if (matrix==NULL){ if ((matrix=(T1_TMATRIX *)malloc( sizeof(T1_TMATRIX)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return( NULL); } matrix->cxx=1.0; matrix->cyx=0.0; matrix->cxy=0.0; matrix->cyy=1.0; } matrix->cxx *=-1.0; matrix->cyx *=-1.0; return( matrix); } /* Vertical mirroring */ /* V-Mirror: ( x11' x21' ) ( 1 0 ) ( x11 x21 ) ( x11 x21 ) ( ) = ( ) * ( ) = ( ) ( x12' x22' ) ( 0 -1 ) ( x12 x22 ) ( -x12 -x22 ) */ T1_TMATRIX *T1_MirrorVMatrix( T1_TMATRIX *matrix) { if (matrix==NULL){ if ((matrix=(T1_TMATRIX *)malloc( sizeof(T1_TMATRIX)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return( NULL); } matrix->cxx=1.0; matrix->cyx=0.0; matrix->cxy=0.0; matrix->cyy=1.0; } matrix->cxy *=-1.0; matrix->cyy *=-1.0; return( matrix); } /* Horizontal shearing */ /* H-Shearing: ( x11' x21' ) ( 1 f ) ( x11 x21 ) ( x11+f*x12 x21+f*x22 ) ( ) = ( ) * ( ) = ( ) ( x12' x22' ) ( 0 1 ) ( x12 x22 ) ( x12 x22 ) */ T1_TMATRIX *T1_ShearHMatrix( T1_TMATRIX *matrix, double shear) { if (matrix==NULL){ if ((matrix=(T1_TMATRIX *)malloc( sizeof(T1_TMATRIX)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return( NULL); } matrix->cxx=1.0; matrix->cyx=0.0; matrix->cxy=0.0; matrix->cyy=1.0; } matrix->cxx +=shear*matrix->cxy; matrix->cyx +=shear*matrix->cyy; return( matrix); } /* Vertical shearing */ /* V-Shearing: ( x11' x21' ) ( 1 0 ) ( x11 x21 ) ( x11 x21 ) ( ) = ( ) * ( ) = ( ) ( x12' x22' ) ( f 1 ) ( x12 x22 ) ( x12+f*x11 x22+f*x21 ) */ T1_TMATRIX *T1_ShearVMatrix( T1_TMATRIX *matrix, double shear) { if (matrix==NULL){ if ((matrix=(T1_TMATRIX *)malloc( sizeof(T1_TMATRIX)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return( NULL); } matrix->cxx=1.0; matrix->cyx=0.0; matrix->cxy=0.0; matrix->cyy=1.0; } matrix->cxy +=shear*matrix->cxx; matrix->cyy +=shear*matrix->cyx; return( matrix); } /* Horizontal extension */ /* Horizontal-Extension: ( x11' x21' ) ( f 0 ) ( x11 x21 ) ( f*x11 f*x21 ) ( ) = ( ) * ( ) = ( ) ( x12' x22' ) ( 0 1 ) ( x12 x22 ) ( x12 x22 ) */ T1_TMATRIX *T1_ExtendHMatrix( T1_TMATRIX *matrix, double extent) { if (matrix==NULL){ if ((matrix=(T1_TMATRIX *)malloc( sizeof(T1_TMATRIX)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return( NULL); } matrix->cxx=1.0; matrix->cyx=0.0; matrix->cxy=0.0; matrix->cyy=1.0; } matrix->cxx *=extent; matrix->cyx *=extent; return( matrix); } /* Vertical extension */ /* Vertical-Extension: ( x11' x21' ) ( 1 0 ) ( x11 x21 ) ( x11 x21 ) ( ) = ( ) * ( ) = ( ) ( x12' x22' ) ( 0 f ) ( x12 x22 ) ( f*x12 f*x22 ) */ T1_TMATRIX *T1_ExtendVMatrix( T1_TMATRIX *matrix, double extent) { if (matrix==NULL){ if ((matrix=(T1_TMATRIX *)malloc( sizeof(T1_TMATRIX)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return( NULL); } matrix->cxx=1.0; matrix->cyx=0.0; matrix->cxy=0.0; matrix->cyy=1.0; } matrix->cxy *=extent; matrix->cyy *=extent; return( matrix); } /* General transformation */ /* ( x11 x21 ) ( y11 y21 ) ( x11*y11+x21*y12 x11*y21+x21*y22 ) ( ) * ( ) = ( ) ( x12 x22 ) ( y12 y22 ) ( x12*y11+x22*y12 x12*y21+x22*y22 ) */ T1_TMATRIX *T1_TransformMatrix( T1_TMATRIX *matrix, double cxx, double cyx, double cxy, double cyy) { T1_TMATRIX tmat; if (matrix==NULL){ if ((matrix=(T1_TMATRIX *)malloc( sizeof(T1_TMATRIX)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return( NULL); } matrix->cxx=1.0; matrix->cyx=0.0; matrix->cxy=0.0; matrix->cyy=1.0; } memcpy( &tmat, matrix, sizeof(T1_TMATRIX)); matrix->cxx=cxx * tmat.cxx + cyx * tmat.cxy; matrix->cyx=cxx * tmat.cyx + cyx * tmat.cyy; matrix->cxy=cxy * tmat.cxx + cyy * tmat.cxy; matrix->cyy=cxy * tmat.cyx + cyy * tmat.cyy; return( matrix); } /* T1_StrokeFont(): Switch the font referenced by FontID to stroking or filling. The stroked character will be cached and filled characters are no longer cached and vice versa. This is only allowed if no size dependent data exists. Of course, the font must already have been loaded. Returns 0 for success and -1 otherwise. */ int T1_StrokeFont( int FontID, int dostroke) { /* First, check for font residing in memory: */ if ( T1_CheckForFontID( FontID) != 1 ) { T1_errno = T1ERR_INVALID_FONTID; return -1; } /* Second, check whether size-dependent data exists: */ if ( pFontBase->pFontArray[FontID].pFontSizeDeps != NULL ) { T1_errno = T1ERR_OP_NOT_PERMITTED; return -1; } if ( dostroke != 0 ) { pFontBase->pFontArray[FontID].info_flags |= RASTER_STROKED; pFontBase->pFontArray[FontID].info_flags |= CACHE_STROKED; } else { pFontBase->pFontArray[FontID].info_flags &= ~RASTER_STROKED; pFontBase->pFontArray[FontID].info_flags &= ~CACHE_STROKED; } return 0; } /* T1_SetStrokeFlag(): Return the stroke flag for font FontID. Return: 0 flag has been set -1 flag could not be set */ int T1_SetStrokeFlag( int FontID) { /* First, check for font residing in memory: */ if ( T1_CheckForFontID(FontID) != 1 ) { T1_errno = T1ERR_INVALID_FONTID; return -1; } /* Set stroke flag to true */ pFontBase->pFontArray[FontID].info_flags |= RASTER_STROKED; return 0; } /* T1_ClearStrokeFlag(): Reset the stroke flag for font FontID. Return: 0 flag has been reset -1 flag could not be reset */ int T1_ClearStrokeFlag( int FontID) { /* First, check for font residing in memory: */ if ( T1_CheckForFontID(FontID) != 1 ) { T1_errno = T1ERR_INVALID_FONTID; return -1; } /* Reset stroke flag */ pFontBase->pFontArray[FontID].info_flags &= ~RASTER_STROKED; return 0; } /* T1_GetStrokeMode(): Return the stroke flag for font FontID. Return: -1 if font is not loaded. 0 if flag is reset, 1 if stroking is enabled for this font, 2 if stroked characters are cached, 3 if stroking is enabled and stroked characters are cached. */ int T1_GetStrokeMode( int FontID) { int outval = 0; /* First, check for font residing in memory: */ if ( T1_CheckForFontID( FontID) != 1 ) { T1_errno = T1ERR_INVALID_FONTID; return -1; } if ( (pFontBase->pFontArray[FontID].info_flags & CACHE_STROKED) != 0 ) outval |= 0x02; if ( (pFontBase->pFontArray[FontID].info_flags & RASTER_STROKED) != 0 ) outval |= 0x01; return outval; } /* T1_SetStrokeWidth(): Set the penwidth used when stroking font FontID. Return -1 If width could not be set. 0 if width has been set. */ int T1_SetStrokeWidth( int FontID, float strokewidth) { /* First, check for font residing in memory: */ if ( T1_CheckForFontID( FontID) != 1 ) { T1_errno = T1ERR_INVALID_FONTID; return -1; } /* Second, check whether caching stroked characters is enabled for this font and glyph data is already existing. In this case the operation is forbidden, unless the previous non-zero value is just restored! */ if ( ((pFontBase->pFontArray[FontID].info_flags & CACHE_STROKED) != 0) && (pFontBase->pFontArray[FontID].pFontSizeDeps != NULL) && (pFontBase->pFontArray[FontID].SavedStrokeWidth != strokewidth) ) { T1_errno = T1ERR_OP_NOT_PERMITTED; return -1; } /* OK, accept stroke width after ensuring a numerically meaningful value */ if ( strokewidth < 0.0f ) { T1_errno = T1ERR_INVALID_PARAMETER; return -1; } pFontBase->pFontArray[FontID].StrokeWidth = strokewidth; if ( strokewidth != 0.0f ) pFontBase->pFontArray[FontID].SavedStrokeWidth = strokewidth; return 0; } /* T1_GetStrokeWidth(): Get the penwidth used when stroking font FontID. If 0.0 is returned, it might also indicate that the font is not loaded. */ float T1_GetStrokeWidth( int FontID) { /* First, check for font residing in memory: */ if ( T1_CheckForFontID( FontID) != 1 ) { T1_errno = T1ERR_INVALID_FONTID; return 0.0f; } return pFontBase->pFontArray[FontID].StrokeWidth; } t1lib-5.1.2/lib/t1lib/t1trans.h0000644000175000001440000001011610733501626014611 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1trans.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2002-10-19 ----- Description: This file is part of the t1-library. It contains definitions and declarations fort t1trans.c ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1TRANS_C int T1_ExtendFont( int FontID, double extend); int T1_SlantFont( int FontID, double slant); int T1_TransformFont( int FontID, T1_TMATRIX *matrix); double T1_GetExtend( int FontID); double T1_GetSlant( int FontID); T1_TMATRIX T1_GetTransform( int FontID); int T1_SetLinePosition( int FontID, int linetype, float value); int T1_SetLineThickness( int FontID, int linetype, float value); float T1_GetLinePosition( int FontID, int linetype); float T1_GetLineThickness( int FontID, int linetype); T1_TMATRIX *T1_RotateMatrix( T1_TMATRIX *matrix, double angle); T1_TMATRIX *T1_MirrorHMatrix( T1_TMATRIX *matrix); T1_TMATRIX *T1_MirrorVMatrix( T1_TMATRIX *matrix); T1_TMATRIX *T1_ShearHMatrix( T1_TMATRIX *matrix, double shear); T1_TMATRIX *T1_ShearVMatrix( T1_TMATRIX *matrix, double shear); T1_TMATRIX *T1_ExtendHMatrix( T1_TMATRIX *matrix, double extent); T1_TMATRIX *T1_ExtendVMatrix( T1_TMATRIX *matrix, double extent); T1_TMATRIX *T1_TransformMatrix( T1_TMATRIX *matrix, double cxx, double cyx, double cxy, double cyy); int T1_StrokeFont( int FontID, int dostroke); int T1_SetStrokeFlag( int FontID); int T1_ClearStrokeFlag( int FontID); int T1_GetStrokeMode( int FontID); int T1_SetStrokeWidth( int FontID, float strokewidth); float T1_GetStrokeWidth( int FontID); #else extern int T1_ExtendFont( int FontID, double extend); extern int T1_SlantFont( int FontID, double slant); extern int T1_TransformFont( int FontID, T1_TMATRIX *matrix); extern double T1_GetExtend( int FontID); extern double T1_GetSlant( int FontID); extern T1_TMATRIX T1_GetTransform( int FontID); extern int T1_SetLinePosition( int FontID, int linetype, float value); extern int T1_SetLineThickness( int FontID, int linetype, float value); extern float T1_GetLinePosition( int FontID, int linetype); extern float T1_GetLineThickness( int FontID, int linetype); extern T1_TMATRIX *T1_RotateMatrix( T1_TMATRIX *matrix, double angle); extern T1_TMATRIX *T1_MirrorHMatrix( T1_TMATRIX *matrix); extern T1_TMATRIX *T1_MirrorVMatrix( T1_TMATRIX *matrix); extern T1_TMATRIX *T1_ShearHMatrix( T1_TMATRIX *matrix, double shear); extern T1_TMATRIX *T1_ShearVMatrix( T1_TMATRIX *matrix, double shear); extern T1_TMATRIX *T1_ExtendHMatrix( T1_TMATRIX *matrix, double extent); extern T1_TMATRIX *T1_ExtendVMatrix( T1_TMATRIX *matrix, double extent); extern T1_TMATRIX *T1_TransformMatrix( T1_TMATRIX *matrix, double cxx, double cyx, double cxy, double cyy); extern int T1_StrokeFont( int FontID, int dostroke); extern int T1_SetStrokeFlag( int FontID); extern int T1_ClearStrokeFlag( int FontID); extern int T1_GetStrokeMode( int FontID); extern int T1_SetStrokeWidth( int FontID, float strokewidth); extern float T1_GetStrokeWidth( int FontID); #endif t1lib-5.1.2/lib/t1lib/t1misc.h0000644000175000001440000001566310733501626014431 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1misc.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2004-11-27 ----- Description: This file is part of the t1-library. It contains some miscellaneous definitions. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2004. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #include #define LINE_BUF 512 #define BUF_SIZE 512 #define NULLPTR (void *) 0 /* t1lib-glyphs are padded to this value by default: */ #define T1GLYPH_PAD 8 #define T1GLYPH_BIT 0 #define T1GLYPH_BYTE 0 #define PAD(bits, pad) (((bits)+(pad)-1)&-(pad)) /* For debugging purposes: */ #define SLEEP for(j=0; j<50; j++){for (k=0; k<65536; k++);} #define KERN_FLAG 0x01 #define LIGATURE_FLAG 0x02 /* common 'yes'/'no' */ #define T1_YES 0x1 #define T1_NO 0x0 /* The maximum length of a PostScript name of a font: */ #define MAXPSNAMELEN 256 #ifndef MAXPATHLEN # ifdef PATH_MAX # define MAXPATHLEN PATH_MAX # else # define MAXPATHLEN 4096 # endif #endif /* The default resolution used by the library */ #define DEFAULT_RES 72.0 #define BIGPOINTSPERINCH 72.0 /* Defaults for configuration file searching: */ /* (Note: The directory where the global config will be located is determined by configure at compile time) */ #define T1_CONFIGFILENAME ".t1librc" #define ENV_CONF_STRING "T1LIB_CONFIG" #define GLOBAL_CONFIG_FILE "t1lib.config" /* Directory separator is operating system dependent */ #if defined(VMS) # define DIRECTORY_SEP "]" # define DIRECTORY_SEP_CHAR ']' #elif defined(MSDOS) | defined(_WIN32) | defined(_MSC_VER) # define DIRECTORY_SEP "\\" # define DIRECTORY_SEP_CHAR '\\' #else # define DIRECTORY_SEP "/" # define DIRECTORY_SEP_CHAR '/' #endif /* For EMX-, WIN32-, MSDOS-environment, we define the default path separator to be ';' instead of ':' */ #if defined(MSDOS) | defined(_WIN32) | defined(__EMX__) | defined(_MSC_VER) | defined(VMS) #define PATH_SEP ";" #define PATH_SEP_CHAR ';' #else #define PATH_SEP ":" #define PATH_SEP_CHAR ':' #endif /* This non printable character is used internally */ #define INTERNAL_PATH_SEP "\001" #define INTERNAL_PATH_SEP_CHAR '\1' /* Default name for t1lib-logfile: */ #define ENV_LOG_STRING "T1LIB_LOGMODE" #define T1_LOG_FILE "t1lib.log" /* logfile levels: */ #define T1LOG_ERROR 1 #define T1LOG_WARNING 2 #define T1LOG_STATISTIC 3 #define T1LOG_DEBUG 4 /* def's for T1_InitLib() */ #define NO_LOGFILE 0x0 #define LOGFILE 0x1 #define IGNORE_FONTDATABASE 0x2 /* Default is to read database */ #define IGNORE_CONFIGFILE 0x4 /* Default is to read config file */ #define T1_AA_CACHING 0x8 /* Cache aa-bytes */ #define T1_NO_AFM 0x10 /* Don't load AFM files or generate AFM data */ /* How may ligatures a character may have at maximum: */ #define MAX_LIGS 20 /* The maximum number of gray-levels in antialiasing */ #define AAMAXPLANES 17 #define T1_AA_NONE 1 #define T1_AA_LOW 2 #define T1_AA_HIGH 4 /* The default limits for no/low/high AA */ #define T1_AA_SMARTLIMIT1 20.0 #define T1_AA_SMARTLIMIT2 60.0 /* How much to advance the number of FONTPRIVATE structures when reallocating for new fonts? */ #define ADVANCE_FONTPRIVATE 10 #define NO_ANTIALIAS 0 #define ANTIALIAS 1 /* #define's for manipulating searchpaths */ #define T1_PFAB_PATH 0x01 #define T1_AFM_PATH 0x02 #define T1_ENC_PATH 0x04 #define T1_FDB_PATH 0x08 #define T1_APPEND_PATH 0x00 #define T1_PREPEND_PATH 0x01 /* #define's for character/string properties (not all implemented) */ #define T1_DEFAULT 0x0000 #define T1_UNDERLINE 0x0001 #define T1_OVERLINE 0x0002 #define T1_OVERSTRIKE 0x0004 #define T1_DOUBLEOVERSTRIKE 0x0008 #define T1_RIGHT_TO_LEFT 0x0010 #define T1_SUBSCRIPT 0x0100 #define T1_SUPERSCRIPT 0x0200 #define T1_STROKED 0x1000 #define T1_KERNING 0x2000 /* Error handling: */ /* These are from scanning a font file */ #define T1ERR_SCAN_FONT_FORMAT -5 #define T1ERR_SCAN_FILE_OPEN_ERR -4 #define T1ERR_SCAN_OUT_OF_MEMORY -3 #define T1ERR_SCAN_ERROR -2 #define T1ERR_SCAN_FILE_EOF -1 /* These are from generating paths */ #define T1ERR_PATH_ERROR 1 #define T1ERR_PARSE_ERROR 2 #define T1ERR_TYPE1_ABORT 3 /* These are from t1lib */ #define T1ERR_INVALID_FONTID 10 #define T1ERR_INVALID_PARAMETER 11 #define T1ERR_OP_NOT_PERMITTED 12 #define T1ERR_ALLOC_MEM 13 #define T1ERR_FILE_OPEN_ERR 14 #define T1ERR_UNSPECIFIED 15 #define T1ERR_NO_AFM_DATA 16 #define T1ERR_X11 17 #define T1ERR_COMPOSITE_CHAR 18 #define T1ERR_SCAN_ENCODING 19 /* The info_flags meaning */ #define AFM_SUCCESS (short)0x0001 #define AFM_SLOPPY_SUCCESS (short)0x0002 #define AFM_SELFGEN_SUCCESS (short)0x0004 #define USES_STANDARD_ENCODING (short)0x0008 #define RASTER_STROKED (short)0x0010 #define CACHE_STROKED (short)0x0020 #define FONT_NOCACHING (short)0x0100 #ifndef PI #define PI 3.1415927 #endif /* Flags to control the rasterizer */ #define T1_IGNORE_FORCEBOLD 0x0001 #define T1_IGNORE_FAMILYALIGNMENT 0x0002 #define T1_IGNORE_HINTING 0x0004 #define T1_DEBUG_LINE 0x0100 #define T1_DEBUG_REGION 0x0200 #define T1_DEBUG_PATH 0x0400 #define T1_DEBUG_FONT 0x0800 #define T1_DEBUG_HINT 0x1000 /* */ #define DO_RASTER 0x1 #define DO_NOT_RASTER 0x0 /* this definition reports a character substitution from fontfcn */ #define FF_NOTDEF_SUBST -1 t1lib-5.1.2/lib/t1lib/t1enc.c0000644000175000001440000005532010733501626014230 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1enc.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-01 ----- Description: This file is part of the t1-library. It contains functions encoding handling at runtime. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independ from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1ENC_C #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include "../type1/ffilest.h" #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "t1types.h" #include "t1extern.h" #include "t1enc.h" #include "t1env.h" #include "t1base.h" #include "t1finfo.h" static char defaultencodingname[]="Unspecified"; /* This struct is retunred by the tokenizer. It contains indices in linebuf for the first and the last character in a token */ typedef struct { int first; int last; } CNTOKEN; /* ScanForWord(): Tokenizer for ScanEncodingFile. - and return the first and last index in linebuf of the token - skips whitespace and comments - the vector marks [ and ] are considered token-delimiters and also treated as independent tokens - the literal escape char "/" is also considered as a token delimiter but is not returned as a token. This function leaves linebuf unmodified so that in case of a failure, TryT1LibEncoding() will receive a clean buffer! */ static CNTOKEN *ScanForWord( char *lb, int size) { static int i=-1; int j; int comment; static CNTOKEN currtoken={-1,-1}; /* Reset tokenizer */ if (lb==NULL) { i=-1; currtoken.first=-1; currtoken.last=-1; return NULL; } comment=0; j=-1; while (++i word */ if (j==-1) { j=i; currtoken.first=j; continue; } } /* We're at the end of the buffer. Do we have a word? */ if (j!=-1) { currtoken.last=i-1; return &currtoken; } /* We have nothing */ return NULL; } /* tokcpy(): Copy a token from linebuf and append \0 */ static char *tokcpy( char *dest, const char *src, int first, int last) { /* we do not do any range or error checking in this function */ memcpy( dest, &(src[first]), last-first+1); dest[last-first+1]='\0'; return dest; } /* TryDVIPSEncoding(): Try to read an encoding file conforming to the dvips specification. The file's contents is expected in a buffer "linebuf" of size "filesize". Function returns the actual size of the charnames memory or -1. */ static int TryDVIPSEncoding( char *linebuf, int filesize, char *charnames) { char token[256]; char *encname; int charname_count=0; int k=0; CNTOKEN *currtokenP; /* Initialize tokenizer */ currtokenP=ScanForWord( NULL, filesize); currtokenP=ScanForWord(linebuf,filesize); if ( (currtokenP!=NULL) && (linebuf[currtokenP->first]=='/')) { /* / indicates start of postscript string literal, so this could be a postscript .enc file */ if ((encname=(char *)malloc( (currtokenP->last - currtokenP->first + 1 + 1) * sizeof( char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return -1; } else { /* store encoding name */ if (currtokenP->first==currtokenP->last) { /* PostScript encoding requires an identifier so this does not seem to be a valid encoding file */ free( encname); return( -1); } tokcpy( encname, linebuf, currtokenP->first+1, currtokenP->last); } /* Next, the PostScript "mark" character is expected */ if ( ((currtokenP=ScanForWord(linebuf,filesize))!=NULL) && (currtokenP->first==currtokenP->last) && (linebuf[currtokenP->first]!='[') ) { /* Since we got up to here, there is a certain probability that we have a PostScript encoding definition, but with invalid syntax. So put log message. */ sprintf( err_warn_msg_buf, "Expected encoding definition after %s, but did not find \"[\"-character", encname); T1_PrintLog( "TryDVIPSEncoding()", err_warn_msg_buf, T1LOG_WARNING); if (encname!=NULL) free( encname); return( -1); } /* now, try to read 256 literal character names. We do not check for charname count because this would bypass error checking. */ while((currtokenP=ScanForWord(linebuf,filesize))!=NULL) { /* End of vector operator? */ if ( (currtokenP->first==currtokenP->last) && /* one character? */ (linebuf[currtokenP->first]==']')) { break; } /* We drop the escape character if it is present. However, non-literal name specifications are not allowed in encoding vectors. */ if (linebuf[currtokenP->first]!='/') { sprintf( err_warn_msg_buf, "Found non-literal name (c=%c (first=%d, last=%d)) at slot %d while scanning encoding vector %s.", linebuf[currtokenP->first], currtokenP->first, currtokenP->last, charname_count, encname); T1_PrintLog( "TryDVIPSEncoding()", err_warn_msg_buf, T1LOG_WARNING); if (encname!=NULL) free( encname); return( -1); } else { /* OK, first char in token is "/". Does there follow a name? */ if ( currtokenP->first==currtokenP->last) { sprintf( err_warn_msg_buf, "Empty literal name at slot %d while scanning encoding vector %s.", charname_count, encname); T1_PrintLog( "TryDVIPSEncoding()", err_warn_msg_buf, T1LOG_WARNING); if (encname!=NULL) free( encname); return( -1); } } /* We seem to have a valid name -> copy name to *charnames-array */ tokcpy( &(charnames[k]), linebuf, currtokenP->first+1, currtokenP->last); k+=currtokenP->last-currtokenP->first+1; /* note: we have omitted "/"! */ /* Increment character counter */ charname_count++; /* set index to start of next word/line */ } /* end of loop scanning character names */ if (currtokenP==NULL) { /* In this case loop has been stopped because buffer end has been reached. Since we did not alreay read the ]-character, this is an error condition. */ sprintf( err_warn_msg_buf, "Premature end of encoding definition encountered." ); T1_PrintLog( "TryDVIPSEncoding()", err_warn_msg_buf, T1LOG_WARNING); free(encname); return( -1); } /* Since the above loop has not been finished due to a NULL-ptr, the token ] must have been encountered. Thus, read ahead and look for def: */ if ((currtokenP=ScanForWord(linebuf,filesize))==NULL) { sprintf( err_warn_msg_buf, "Premature end of encoding definition encountered."); T1_PrintLog( "TryDVIPSEncoding()", err_warn_msg_buf, T1LOG_WARNING); free(encname); return( -1); } if (strcmp(tokcpy( &(charnames[k]), linebuf, currtokenP->first, currtokenP->last), "def")!=0) { /* we store the current token in charnames only temporarily, so we do not increment k! */ sprintf( err_warn_msg_buf, "Closing token \"def\" expected but found \"%s\".", &(charnames[k])); T1_PrintLog( "TryDVIPSEncoding()", err_warn_msg_buf, T1LOG_WARNING); free(encname); return( -1); } /* Encoding definition is complete. we do not allow any further tokens except comments. */ if ((currtokenP=ScanForWord(linebuf,filesize))!=NULL) { tokcpy( token, linebuf, currtokenP->first, currtokenP->last); sprintf( err_warn_msg_buf, "Token \"%s\" after closing \"def\" in successfully scanned encoding file makes encoding definition file invalid", token); T1_PrintLog( "TryDVIPSEncoding()", err_warn_msg_buf, T1LOG_WARNING); free(encname); return( -1); } /* we allow less than 256 character names. The missing ones are filled now with .notdef */ for ( ; charname_count<256; charname_count++) { tokcpy( &(charnames[k]), ".notdef", 0, 6); k+=8; } /* Append the string for the encoding's name */ strcpy( &(charnames[k]), encname); k +=strlen(encname)+1; free(encname); return( k); } /* file does not start with / -> no dvips-encoding file */ return( -1); } /* TryT1LibEncoding(): Try to read an encoding file conforming to the t1lib specification. The file's contents is expected in a buffer "linebuf" of size "filesize". Function returns the actual size of the charnames memory or -1. */ static int TryT1LibEncoding( char *linebuf, int filesize, char *charnames) { int i=0, j=0, k=0, l=0; char save_char; int charname_count=0; while(i no encoding read */ } /* enc_fp points now to a (hopefully) valid encoding file */ /* Get the file size */ fseek( enc_fp, 0, SEEK_END); filesize=ftell(enc_fp); /* Reset fileposition to start */ fseek( enc_fp, 0, SEEK_SET); if ((linebuf=(char *)calloc( filesize, sizeof(char)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } /* Allocate space for character names, assume the worst case and realloc later. The DVIPS-parser requires one more char in order to work properly */ if ((charnames=(char *)calloc( filesize + strlen(defaultencodingname+1), sizeof(char)))==NULL){ free( linebuf); T1_errno=T1ERR_ALLOC_MEM; return(NULL); } fread((char *)linebuf, sizeof(char), filesize, enc_fp); fclose(enc_fp); /* file is read. Operate now on the buffer. */ /* try dvips encoding file */ cnsize=TryDVIPSEncoding( linebuf, filesize, charnames); if ( cnsize>-1) { /* a debug message to log file */ sprintf( err_warn_msg_buf, "Scanned file %s (%d bytes) as dvips-encoding file.", FileName, filesize); T1_PrintLog( "ScanEncodingFile()", err_warn_msg_buf, T1LOG_DEBUG); } else { /* try t1lib encoding file */ cnsize=TryT1LibEncoding( linebuf, filesize, charnames); if ( cnsize>-1) { /* write a debug message to log file */ sprintf( err_warn_msg_buf, "Scanned file %s (%d bytes) as t1lib-encoding file.", FileName, filesize); T1_PrintLog( "ScanEncodingFile()", err_warn_msg_buf, T1LOG_DEBUG); } else { /* write a warning message because loading encoding entirely failed */ sprintf( err_warn_msg_buf, "Scanning file %s (%d bytes) as encoding file failed.", FileName, filesize); T1_PrintLog( "ScanEncodingFile()", err_warn_msg_buf, T1LOG_WARNING); } } if ( cnsize<0) { T1_errno=T1ERR_SCAN_ENCODING; if ( charnames!=NULL) { free(charnames); } free(linebuf); return( NULL); } /* cnsize contains the size of the charnames' memory, so let's now realloc charnames */ charnames=(char *)realloc( charnames, cnsize*sizeof(char)); /* Now initialize the array with the start-addresses of the character name strings */ /* We alloc 257 to save the encoding's name at the 257th entry */ if ((encoding=(char **)malloc(257*sizeof(char *)))==NULL) { if ( charnames!=NULL) { free(charnames); } free(linebuf); T1_errno=T1ERR_ALLOC_MEM; return(NULL); } while (i<257) { encoding[i]=&charnames[j]; while (charnames[j]) j++; j++; i++; } free( linebuf); return(encoding); } /* T1_LoadEncoding(): Load an encoding file to have a new encoding available. If successful, the pointer to the encoding array is returned. In case of an error, the return value is NULL. */ char **T1_LoadEncoding( char *FileName) { char **Encoding; char *EncFileName; if( FileName==NULL){ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } if ((EncFileName=intT1_Env_GetCompletePath( FileName, T1_ENC_ptr))==NULL){ T1_errno=T1ERR_FILE_OPEN_ERR; return(NULL); } Encoding=ScanEncodingFile(EncFileName); free(EncFileName); return(Encoding); } /* T1_DeleteEncoding() free a previously loaded encoding */ int T1_DeleteEncoding( char **encoding) { if (encoding){ /* First free character names memory */ free( encoding[0]); /* then, free pointer array */ free( encoding); } return(0); } /* T1_ReencodeFont(): Assign a new encoding to an existent font. This is only allowed if no size dependent data exists for the font in question. Moreover, the font must be loaded already since must get the position of the space-character. Function returns 0 if successful, and -1 otherwise. */ int T1_ReencodeFont( int FontID, char **Encoding) { int i, j, k, l, m; char *charname; PairKernData *pkd; METRICS_ENTRY *kern_tbl; int char1, char2; /* First, check for valid font ID residing in memory: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(-1); } /* Second, check whether size-dependent data exists: */ if (pFontBase->pFontArray[FontID].pFontSizeDeps != NULL){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } pFontBase->pFontArray[FontID].pFontEnc=Encoding; /* We have to update the space_position-entry in the FONTPRIVATE. If space is not found (not encoded), set it to -1: */ pFontBase->pFontArray[FontID].space_position=-1; i=0; if (Encoding){ /* external encoding */ while (i<256){ if (strcmp( (char *)pFontBase->pFontArray[FontID].pFontEnc[i], "space")==0){ /* space found at position i: */ pFontBase->pFontArray[FontID].space_position=i; break; } i++; } } else{ /* reencoding to internal encoding */ while (i<256){ if (strcmp( (char *)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP[i].data.arrayP, "space")==0){ /* space found at position i: */ pFontBase->pFontArray[FontID].space_position=i; break; } i++; } } /* Now update afm index mapping: */ if (pFontBase->pFontArray[FontID].pAFMData != NULL){ for (i=0; i<256; i++) { charname=T1_GetCharName( FontID, i); /* in a first loop check for ordinary characters */ for ( j=0; jpFontArray[FontID].pAFMData->numOfChars; j++) { if (strcmp( charname, pFontBase->pFontArray[FontID].pAFMData->cmi[j].name)==0) { pFontBase->pFontArray[FontID].pEncMap[i]=j+1; /* index 0 is reserved! */ continue; } } /* if nothing has been found, check for composite characters */ for ( j=0; jpFontArray[FontID].pAFMData->numOfComps; j++) { if (strcmp( charname, pFontBase->pFontArray[FontID].pAFMData->ccd[j].ccName)==0) { pFontBase->pFontArray[FontID].pEncMap[i]=-(j+1); /* index 0 is reserved! */ /* Note: Metrics of composite characters already exist so that there is no need to recalculate them! */ continue; } } } /* Update kerning table */ pFontBase->pFontArray[FontID].KernMapSize=0; k=pFontBase->pFontArray[FontID].pAFMData->numOfPairs; if (k>0){ /* i.e., there are any pairs */ /* OK, it does not suffice to alloc numOfPairs METRICS_ENTRYs, because a given character might be encoded at several locations and kerning should still work. As a worst case estimation, we allocate 256^2 and realloc later. */ if ((pFontBase->pFontArray[FontID].pKernMap= (METRICS_ENTRY *)malloc( (256*256) *sizeof( METRICS_ENTRY)))==NULL){ sprintf( err_warn_msg_buf, "Error allocating memory for metrics map (FontID=%d)", FontID); T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_ALLOC_MEM; return(-1); } kern_tbl=pFontBase->pFontArray[FontID].pKernMap; pkd=pFontBase->pFontArray[FontID].pAFMData->pkd; j=0; for ( i=0; i Put char1 in higher byte and char2 in LSB: */ kern_tbl[j].chars=(char1 << 8) | char2; /* We only make use of horizontal kerning */ kern_tbl[j].hkern=pkd[i].xamt; j++; } /* while (char2) */ } /* while (char1) */ } /* for */ /* We are done, realloc memory: */ kern_tbl=(METRICS_ENTRY*) realloc( kern_tbl, j*sizeof(METRICS_ENTRY)); /* We now sort the kerning array with respect to char indices */ qsort( kern_tbl, (size_t) j, sizeof(METRICS_ENTRY), &cmp_METRICS_ENTRY ); /* Finally write back pointer for the case that realloc changed the pointer */ pFontBase->pFontArray[FontID].pKernMap=kern_tbl; pFontBase->pFontArray[FontID].KernMapSize=j; } else { pFontBase->pFontArray[FontID].pKernMap=NULL; } } return(0); } /* T1_SetDefaultEncoding(): Set the default encoding vector that's used when fonts are loaded. */ int T1_SetDefaultEncoding( char **encoding) { if (T1_CheckForInit()){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } pFontBase->default_enc=encoding; return(0); } /* T1_GetEncodingScheme(): Get the name associated with the current encoding vector of font FontID */ char *T1_GetEncodingScheme( int FontID) { static char enc_scheme[256]; /* First, check for valid font ID residing in memory: */ if (T1_CheckForFontID(FontID)!=1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } if (pFontBase->pFontArray[FontID].pFontEnc==NULL){ if (pFontBase->pFontArray[FontID].info_flags & USES_STANDARD_ENCODING){ strcpy( enc_scheme, "StandardEncoding"); } else { strcpy( enc_scheme, "FontSpecific"); } } else strcpy( enc_scheme, pFontBase->pFontArray[FontID].pFontEnc[256]); return(enc_scheme); } /* A function for comparing METRICS_ENTRY structs */ static int cmp_METRICS_ENTRY( const void *entry1, const void *entry2) { if (((METRICS_ENTRY *)entry1)->chars < ((METRICS_ENTRY *)entry2)->chars) return(-1); if (((METRICS_ENTRY *)entry1)->chars > ((METRICS_ENTRY *)entry2)->chars) return(1); return(0); /* This should not happen */ } t1lib-5.1.2/lib/t1lib/t1enc.h0000644000175000001440000000375410733501626014241 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1enc.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2001-06-16 ----- Description: This file is part of the t1-library. It contains declarations and definitions for t11enc.c. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independ from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1ENC_C static char **ScanEncodingFile( char *FileName); char **T1_LoadEncoding( char *FileName); int T1_DeleteEncoding( char **encoding); int T1_ReencodeFont( int FontID, char **Encoding); int T1_SetDefaultEncoding( char **encoding); char *T1_GetEncodingScheme( int FontID); static int cmp_METRICS_ENTRY( const void *entry1, const void *entry2); #else extern char **T1_LoadEncoding( char *FileName); extern int T1_DeleteEncoding( char **encoding); extern int T1_ReencodeFont( int FontID, char **Encoding); extern int T1_SetDefaultEncoding( char **encoding); extern char *T1_GetEncodingScheme( int FontID); #endif t1lib-5.1.2/lib/t1lib/t1env.c0000644000175000001440000010355010733501626014252 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1env.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2007-12-22 ----- Description: This file is part of the t1-library. It implements the reading of a configuration file and path-searching of type1-, afm- and encoding files. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independ from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1ENV_C #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/fontmisc.h" #include "sysconf.h" #include "t1types.h" #include "t1extern.h" #include "t1env.h" #include "t1misc.h" #include "t1base.h" /* The following static variables are used to store information on the distinct file search paths: -1 t1lib has not yet been initialized! 0 t1lib has been initialized and default paths have been setup n (>0) there are n path elements for current search path type, either built from a FontDataBase file or from explicit fucntion calls. */ static int pfab_no=-1; static int afm_no=-1; static int enc_no=-1; static int fdb_no=-1; static int fdbxlfd_no=-1; static char path_sep_char='\0'; static char path_sep_string[2]; static char pathbuf[2048]; /* Define some default search paths */ #ifndef VMS static char T1_pfab[]="."; static char T1_afm[]="."; static char T1_enc[]="."; #else static char T1_pfab[]="sys$disk:[]"; static char T1_afm[]="sys$disk:[]"; static char T1_enc[]="sys$disk:[]"; #endif char T1_fdb[]="FontDataBase"; char T1_fdbxlfd[]=""; /* By default, we do not search XLFD databases. */ /* keywords recognized in config file */ static const char enc_key[]="ENCODING"; static const char pfab_key[]="TYPE1"; static const char afm_key[]="AFM"; static const char fdb_key[]="FONTDATABASE"; static const char fdbxlfd_key[]="FONTDATABASEXLFD"; /* qstrncpy(): Copy bytes from srcP to to destP. srcP is count bytes long and destP is the number of quoted characters shorter. That is, count refers to the number of characters including the escapement chars in srcP! */ static void qstrncpy( char *destP, const char *srcP, long nochars) { long i; long j; i=0; /* dest-index */ j=0; /* src-index */ while (j omit escape char. */ } } else { /* normal character */ destP[i++]=srcP[j++]; } } } /* Setup the default paths for searching the distinct file types. If paths have been setup explicitly, skip the step of setting up a default path. */ void intT1_SetupDefaultSearchPaths( void) { path_sep_char=PATH_SEP_CHAR; sprintf( path_sep_string, "%c", path_sep_char); /* We set the number of stored path elements 0 so that we can distiguish between explicitly setup paths and default paths in intT1_ScanConfigFile(). */ if (pfab_no==-1) { T1_PFAB_ptr=(char**) calloc( 2, sizeof(char*)); T1_PFAB_ptr[0]=(char*)malloc(strlen(T1_pfab)+1); strcpy(T1_PFAB_ptr[0],T1_pfab); pfab_no=0; } if (afm_no==-1) { T1_AFM_ptr=(char**) calloc( 2, sizeof(char*)); T1_AFM_ptr[0]=(char*)malloc(strlen(T1_afm)+1); strcpy(T1_AFM_ptr[0],T1_afm); afm_no=0; } if (enc_no==-1) { T1_ENC_ptr=(char**) calloc( 2, sizeof(char*)); T1_ENC_ptr[0]=(char*)malloc(strlen(T1_enc)+1); strcpy(T1_ENC_ptr[0],T1_enc); enc_no=0; } if (fdb_no==-1) { T1_FDB_ptr=(char**) calloc( 2, sizeof(char*)); T1_FDB_ptr[0]=(char*)malloc(strlen(T1_fdb)+1); strcpy(T1_FDB_ptr[0],T1_fdb); fdb_no=0; } if (fdbxlfd_no==-1) { /* The XLFD font data base defaults to be empty */ T1_FDBXLFD_ptr=(char**) calloc( 1, sizeof(char*)); fdbxlfd_no=0; } } /* This function is called from T1_CloseLib(). We have to indicate the state of a non-initialzed t1lib! */ void intT1_FreeSearchPaths( void) { int i; i=0; if (T1_PFAB_ptr!=NULL) { while (T1_PFAB_ptr[i]!=NULL) { free(T1_PFAB_ptr[i]); T1_PFAB_ptr[i++]=NULL; } free( T1_PFAB_ptr); T1_PFAB_ptr=NULL; } i=0; if (T1_AFM_ptr!=NULL) { while (T1_AFM_ptr[i]!=NULL) { free(T1_AFM_ptr[i]); T1_AFM_ptr[i++]=NULL; } free( T1_AFM_ptr); T1_AFM_ptr=NULL; } i=0; if (T1_ENC_ptr!=NULL) { while (T1_ENC_ptr[i]!=NULL) { free(T1_ENC_ptr[i]); T1_ENC_ptr[i++]=NULL; } free( T1_ENC_ptr); T1_ENC_ptr=NULL; } i=0; if (T1_FDB_ptr!=NULL) { while (T1_FDB_ptr[i]!=NULL) { free(T1_FDB_ptr[i]); T1_FDB_ptr[i++]=NULL; } free( T1_FDB_ptr); T1_FDB_ptr=NULL; } i=0; if (T1_FDBXLFD_ptr!=NULL) { while (T1_FDBXLFD_ptr[i]!=NULL) { free(T1_FDBXLFD_ptr[i]); T1_FDBXLFD_ptr[i++]=NULL; } free( T1_FDBXLFD_ptr); T1_FDBXLFD_ptr=NULL; } /* indicate t1lib non-initialized */ pfab_no=-1; afm_no=-1; enc_no=-1; fdb_no=-1; fdbxlfd_no=-1; return; } /* ScanConfigFile(): Read a configuration file and scan and save the environment strings used for searching pfa/pfb-, afm- and encoding files as well as the name of the font database file. */ int intT1_ScanConfigFile( void) { char *env_str; char *linebuf; char *usershome; char *cnffilepath; char *globalcnffilepath; static int linecnt; char local_path_sep_char; int quoted=0; int quotecnt=0; FILE *cfg_fp; int filesize, i, j, k; int ignoreline=0; char*** destP=NULL; int *idestP=NULL; char* curr_key=NULL; /* First, get the string stored in the environment variable: */ env_str=getenv(ENV_CONF_STRING); linecnt=1; if (!env_str) { /* environment variable not set, try to open default file in user's home directory and afterwards global config file */ if ((usershome=getenv("HOME"))!=NULL) { cnffilepath=(char *)malloc((strlen(usershome) + strlen(T1_CONFIGFILENAME) + 2 ) * sizeof(char)); if (cnffilepath==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(-1); } strcpy( cnffilepath, usershome); } else { cnffilepath=(char *)malloc((strlen(T1_CONFIGFILENAME) + 2 ) * sizeof(char)); } strcat( cnffilepath, DIRECTORY_SEP); strcat( cnffilepath, T1_CONFIGFILENAME); globalcnffilepath=(char*)malloc((strlen(GLOBAL_CONFIG_DIR) + strlen(GLOBAL_CONFIG_FILE) + 2 ) * sizeof(char)); if (globalcnffilepath==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(-1); } strcpy( globalcnffilepath, GLOBAL_CONFIG_DIR); strcat( globalcnffilepath, DIRECTORY_SEP); strcat( globalcnffilepath, GLOBAL_CONFIG_FILE); if ((cfg_fp=fopen( cnffilepath, "rb"))==NULL){ sprintf( err_warn_msg_buf, "Could not open configfile %s", cnffilepath); T1_PrintLog( "ScanConfigFile()", err_warn_msg_buf, T1LOG_STATISTIC); /* Try global config file */ if ((cfg_fp=fopen( globalcnffilepath, "rb"))==NULL){ sprintf( err_warn_msg_buf, "Could not open global configfile %s", globalcnffilepath); T1_PrintLog( "ScanConfigFile()", err_warn_msg_buf, T1LOG_WARNING); } else{ sprintf( err_warn_msg_buf, "Using %s as Configfile (global)", globalcnffilepath); T1_PrintLog( "ScanConfigFile()", err_warn_msg_buf, T1LOG_STATISTIC); } } else{ sprintf( err_warn_msg_buf, "Using %s as Configfile (user's)", cnffilepath); T1_PrintLog( "ScanConfigFile()", err_warn_msg_buf, T1LOG_STATISTIC); } free( cnffilepath); free( globalcnffilepath); if (cfg_fp==NULL){ T1_PrintLog( "ScanConfigFile()", "Neither user's nor global Configfile has been found", T1LOG_WARNING); return(0); } } else { /* open specified file for reading the configuration */ if ((cfg_fp=fopen(env_str,"rb"))==NULL){ T1_PrintLog( "ScanConfigFile()", "Configfile as specified by Environment has not been found", T1LOG_WARNING); return(0); /* specified file could not be openend => no config paths read */ } else { sprintf( err_warn_msg_buf, "Using %s as Configfile (environment)", env_str); T1_PrintLog( "ScanConfigFile()", err_warn_msg_buf, T1LOG_STATISTIC); } } /* cfg_fp points now to a valid config file */ /* Get the file size */ fseek( cfg_fp, 0, SEEK_END); filesize=ftell(cfg_fp); /* Reset fileposition to start */ fseek( cfg_fp, 0, SEEK_SET); if ((linebuf=(char *)calloc( filesize+1, sizeof(char)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(-1); } fread((char *)linebuf, sizeof(char), filesize, cfg_fp); fclose(cfg_fp); i=0; /* this might be overwritten on a per file basis */ local_path_sep_char=path_sep_char; while(i end of path specification */ else quotecnt++; } /* some other char */ if (linebuf[i]=='\n') { /* a newline in a quoted string? Perhabs, quotes do not match! */ T1_PrintLog( "ScanConfigFile()", "Newline in quoted %s-string in line %d, column %d, of config file! Closing quote missing?", T1LOG_WARNING, curr_key, linecnt, i-j+1); j=i+1; /* resynchronize linecount */ linecnt++; } if (i1) && (FileName[0]=='.') && (FileName[1]==DIRECTORY_SEP_CHAR)) || ((fnamelen>2) && (FileName[0]=='.') && (FileName[1]=='.') && (FileName[2]==DIRECTORY_SEP_CHAR)) #if defined(MSDOS) | defined(_WIN32) | defined (__EMX__) || ((isalpha(FileName[0])) && (FileName[1]==':')) #endif #ifdef VMS || (strchr(FileName,':') != NULL) #endif ) { /* Check for existence of the path: */ if (!stat( FileName, &filestats)) { if (t1lib_log_file!=NULL) { sprintf( err_warn_msg_buf, "stat()'ing complete path %s successful", FileName); T1_PrintLog( "intT1_Env_GetCompletePath()", err_warn_msg_buf, T1LOG_DEBUG); } /* Return a copy of the string */ if ((FullPathName=(char *)malloc( fnamelen + 1))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(NULL); } strcpy( FullPathName, FileName); return(FullPathName); } if (t1lib_log_file!=NULL){ sprintf( err_warn_msg_buf, "stat()'ing complete path %s failed", FileName); T1_PrintLog( "intT1_Env_GetCompletePath()", err_warn_msg_buf, T1LOG_DEBUG); } /* Trying to locate absolute path spec. failed. We try to recover by removing the path component and searching in the remaining search path entries. This depends on the OS. */ i=fnamelen-1; StrippedName=&(FileName[i]); while ( FileName[i]!=DIRECTORY_SEP_CHAR #if defined(VMS) /* What exactly to do for VMS? */ #elif defined(MSDOS) | defined(_WIN32) | defined (__EMX__) | defined(_MSC_VER) /* We take a drive specification into account. This means we step back until the directory separator or a drive specifier appears! */ && FileName[i]!=':' #endif ) { i--; } i++; StrippedName=&FileName[i]; if (t1lib_log_file!=NULL){ sprintf( err_warn_msg_buf, "path %s stripped to %s", FileName, StrippedName); T1_PrintLog( "intT1_Env_GetCompletePath()", err_warn_msg_buf, T1LOG_DEBUG); } } else{ /* We have a relative path name */ StrippedName=&FileName[0]; } i=0; while (env_ptr[i]!=NULL) { /* Copy current path element: */ strcpy( pathbuf, env_ptr[i]); /* cut a trailing directory separator */ j=strlen(pathbuf); if (pathbuf[j-1]==DIRECTORY_SEP_CHAR) pathbuf[--j]='\0'; /* Add the directory separator: */ #ifdef VMS { char *p= strrchr(pathbuf, DIRECTORY_SEP_CHAR); if (p && *(p+1) == '\0') *p = '\0'; } #endif strcat( pathbuf, DIRECTORY_SEP); /* And finally the filename. The following is fix against a vulnerability given by passing in large filenames, cf.: http://www.securityfocus.com/bid/25079 or http://packetstormsecurity.nl/0707-advisories/t1lib.txt If current pathbuf + StrippedName + 1 byte for NULL is bigger than pathbuf log a warning and try next pathbuf */ if ( strlen(pathbuf) + strlen(StrippedName) + 1 > sizeof(pathbuf) ) { T1_PrintLog( "intT1_Env_GetCompletePath()", "Omitting suspicious long candidate path in order to prevent buffer overflow.", T1LOG_WARNING); i++; continue; } strcat( pathbuf, StrippedName); /* Check for existence of the path: */ if (!stat( pathbuf, &filestats)) { if ((FullPathName=(char*)malloc( (j+fnamelen+2)*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(NULL); } strcpy( FullPathName, pathbuf); if (t1lib_log_file!=NULL){ sprintf( err_warn_msg_buf, "stat()'ing %s successful", FullPathName); T1_PrintLog( "intT1_Env_GetCompletePath()", err_warn_msg_buf, T1LOG_DEBUG); } return(FullPathName); } if (t1lib_log_file!=NULL){ sprintf( err_warn_msg_buf, "stat()'ing %s failed", pathbuf); T1_PrintLog( "intT1_Env_GetCompletePath()", err_warn_msg_buf, T1LOG_DEBUG); } /* We didn't find the file --> try next path entry */ i++; } /* If we get here, no file was found at all, so return a NULL-pointer */ return(NULL); } /* T1_SetFileSearchPath(): Set the search path to find files of the specified type and return 0 if successful and -1 otherwise. An existing path is overwritten rigorously, unless the database already contains fonts. In the latter case the function returns with an error status. Multiple path types may be specified as a bitmask! */ int T1_SetFileSearchPath( int type, char *pathname) { int i; int pathlen; if (pathname==NULL){ T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } /* We do not allow to change the searchpath if the database already contains one or more entries. */ if (T1_GetNoFonts()>0){ sprintf( err_warn_msg_buf, "Path %s not set, database is not empty", pathname); T1_PrintLog( "T1_SetFileSearchPath()", err_warn_msg_buf, T1LOG_STATISTIC); T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } pathlen=strlen(pathname)+1; /* Throw away a possibly existing path */ if (type & T1_PFAB_PATH){ if (pfab_no==-1) { T1_PFAB_ptr=NULL; /* realloc() will do a malloc() */ } else { /* throw away current paths */ i=0; while (T1_PFAB_ptr[i]!=NULL) { free (T1_PFAB_ptr[i++]); } } if ((T1_PFAB_ptr=(char**)realloc( T1_PFAB_ptr, 2*sizeof(char*)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } if ((T1_PFAB_ptr[0]=(char*)malloc(pathlen*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } strcpy( T1_PFAB_ptr[0], pathname); T1_PFAB_ptr[1]=NULL; pfab_no=1; } if (type & T1_AFM_PATH){ if (afm_no==-1) { T1_AFM_ptr=NULL; /* realloc() will do a malloc() */ } else { /* throw away current paths */ i=0; while (T1_AFM_ptr[i]!=NULL) { free (T1_AFM_ptr[i++]); } } if ((T1_AFM_ptr=(char**)realloc( T1_AFM_ptr, 2*sizeof(char*)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } if ((T1_AFM_ptr[0]=(char*)malloc(pathlen*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } strcpy( T1_AFM_ptr[0], pathname); T1_AFM_ptr[1]=NULL; afm_no=1; } if (type & T1_ENC_PATH){ if (enc_no==-1) { T1_ENC_ptr=NULL; /* realloc() will do a malloc() */ } else { /* throw away current paths */ i=0; while (T1_ENC_ptr[i]!=NULL) { free (T1_ENC_ptr[i++]); } } if ((T1_ENC_ptr=(char**)realloc( T1_ENC_ptr, 2*sizeof(char*)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } if ((T1_ENC_ptr[0]=(char*)malloc(pathlen*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } strcpy( T1_ENC_ptr[0], pathname); T1_ENC_ptr[1]=NULL; enc_no=1; } return(0); } /* T1_GetFileSearchPath(): Return the specified file search path or NULL if an error occurred. Note: We do only one path at a time, so that if a bitmask is specified, the first match wins. The returned path is formatted using the actual PATH_SEP_CHAR. */ char *T1_GetFileSearchPath( int type) { static char *out_ptr; int i; int pathlen; char **src_ptr=NULL; if (out_ptr!=NULL) free( out_ptr); out_ptr=NULL; if (type & T1_PFAB_PATH) { src_ptr=T1_PFAB_ptr; } else if (type & T1_AFM_PATH) { src_ptr=T1_AFM_ptr; } else if (type & T1_ENC_PATH) { src_ptr=T1_ENC_ptr; } else if (type & T1_FDB_PATH) { src_ptr=T1_FDB_ptr; } i=0; pathlen=0; while (src_ptr[i]!=NULL) { pathlen +=strlen( src_ptr[i++]); pathlen+=1; /* path separator */ } if ((out_ptr=(char *)malloc(pathlen+1))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return( NULL); } strcpy( out_ptr, src_ptr[0]); i=1; while (src_ptr[i]!=NULL) { strcat( out_ptr, path_sep_string); strcat( out_ptr, src_ptr[i++]); } return( out_ptr); } /* T1_AddToFileSearchPath(): Add the specified path element to the specified search path. If the existing path is the default path, it will not be replaced by the new path element. Since this function might be called before initialization, we have to be aware that even the default path could be missing. Multiple path types may be specified as a bitmask! Return value is 0 if successful and -1 otherwise */ int T1_AddToFileSearchPath( int pathtype, int mode, char *pathname) { int i; int pathlen; char* newpath = NULL; int nofonts; if (pathname==NULL) return(-1); nofonts=T1_GetNoFonts(); pathlen=strlen(pathname); if (pathtype & T1_PFAB_PATH){ /* Allocate meory for string */ if ((newpath=(char*)malloc( (pathlen+1)*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } /* Check for and handle the existing path configuration */ if (pfab_no==0) { /* do not free the default path but establish it as a regularly setup path, if database not empty! */ if (nofonts>0) { pfab_no++; } else { free( T1_AFM_ptr[0]); } } if (pfab_no==-1) { /* not initialized! */ pfab_no=0; T1_PFAB_ptr=NULL; /* realloc() will do the malloc()! */ } if ((T1_PFAB_ptr=(char**)realloc( T1_PFAB_ptr, (++pfab_no+1)*sizeof(char*)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } /* Insert the new path element: */ if (mode & T1_PREPEND_PATH){ /* prepend */ i=pfab_no-2; while (i>=0) { T1_PFAB_ptr[i+1]=T1_PFAB_ptr[i]; i--; } T1_PFAB_ptr[0]=newpath; } else{ /* append */ T1_PFAB_ptr[pfab_no-1]=newpath; } T1_PFAB_ptr[pfab_no]=NULL; } if (pathtype & T1_AFM_PATH){ /* Allocate meory for string */ if ((newpath=(char*)malloc( (pathlen+1)*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } /* Check for and handle the existing path configuration */ if (afm_no==0) { /* do not free the default path but establish it as a regularly setup path, if database not empty! */ if (nofonts>0) { afm_no++; } else { free( T1_AFM_ptr[0]); } } if (afm_no==-1) { /* not initialized! */ afm_no=0; T1_AFM_ptr=NULL; /* realloc() will do the malloc()! */ } if ((T1_AFM_ptr=(char**)realloc( T1_AFM_ptr, (++afm_no+1)*sizeof(char*)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } /* Insert the new path element */ if (mode & T1_PREPEND_PATH){ /* prepend */ i=afm_no-2; while (i>=0) { T1_AFM_ptr[i+1]=T1_AFM_ptr[i]; i--; } T1_AFM_ptr[0]=newpath; } else{ /* append */ T1_AFM_ptr[afm_no-1]=newpath; } T1_AFM_ptr[afm_no]=NULL; } if (pathtype & T1_ENC_PATH){ /* Allocate meory for string */ if ((newpath=(char*)malloc( (pathlen+1)*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } /* Check for and handle the existing path configuration */ if (enc_no==0) { /* do not free the default path but establish it as a regularly setup path, if database not empty! */ if (nofonts>0) { enc_no++; } else { free( T1_ENC_ptr[0]); } } if (enc_no==-1) { /* not initialized! */ enc_no=0; T1_ENC_ptr=NULL; /* realloc() will do the malloc()! */ } if ((T1_ENC_ptr=(char**)realloc( T1_ENC_ptr, (++enc_no+1)*sizeof(char*)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } /* Insert the new path element: */ if (mode & T1_PREPEND_PATH){ /* prepend */ i=enc_no-2; while (i>=0) { T1_ENC_ptr[i+1]=T1_ENC_ptr[i]; i--; } T1_ENC_ptr[0]=newpath; } else{ /* append */ T1_ENC_ptr[enc_no-1]=newpath; } T1_ENC_ptr[enc_no]=NULL; } /* Copy new path to where it belongs ... */ if (newpath) strcpy(newpath, pathname); return(0); } /* T1_SetFontDataBase(): Set a new name for the font database. It replaces the default name and any names specified previously with this function. Return value: 0 if OK, and -1 if filename not valid or an allocation error occurred */ int T1_SetFontDataBase( char *filename) { int pathlen; int i; int result=0; /* chekc filename */ if (filename==NULL) { T1_errno=T1ERR_INVALID_PARAMETER; return -1; } /* this function must be called before any font is in the database, that is, usually, before initialization! */ if ( pFontBase!=NULL && pFontBase->no_fonts>0) { T1_errno=T1ERR_OP_NOT_PERMITTED; return -1; } pathlen=strlen(filename)+1; /* Throw away a possibly existing font database-statement */ if (fdb_no==-1) { T1_FDB_ptr=NULL; /* realloc() will do a malloc() */ } else { /* throw away current paths */ i=0; while (T1_FDB_ptr[i]!=NULL) { free (T1_FDB_ptr[i++]); } } if ((T1_FDB_ptr=(char**)realloc( T1_FDB_ptr, 2*sizeof(char*)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return -1; } if ((T1_FDB_ptr[0]=(char*)malloc(pathlen*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return -1; } strcpy( T1_FDB_ptr[0], filename); T1_FDB_ptr[1]=NULL; fdb_no=1; /* Load database immediately if t1lib already is initailzed */ if (T1_CheckForInit()==0) { if ((result=intT1_scanFontDBase(T1_FDB_ptr[0]))==-1) { T1_PrintLog( "T1_AddFontDataBase()", "Fatal error scanning Font Database File %s (T1_errno=%d)", T1LOG_WARNING, T1_FDB_ptr[0], T1_errno); } if (result>-1) pFontBase->no_fonts+=result; result=pFontBase->no_fonts; } return result; } /* T1_AddFontDataBase(): Add a new font database file to the list. If the lib is already initialzed, then the new database is immediately loaded. Otherwise it is simply appended to the list and loaded at the time of initialization. Returns: -1 an error occured 0 successfully inserted but not loaded because lib not initilized n>0 the highest defined FontID */ int T1_AddFontDataBase( int mode, char *filename) { int i; int pathlen; int result=0; char* newpath; if (filename==NULL) { T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } pathlen=strlen(filename); /* Allocate memory for string */ if ((newpath=(char*)malloc( (pathlen+1)*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } strcpy( newpath, filename); /* Check for and handle the existing path configuration */ if (fdb_no==0) { /* defauls setup, free the path */ free( T1_FDB_ptr[0]); } if (fdb_no==-1) { /* not initialized! */ fdb_no=0; T1_FDB_ptr=NULL; /* realloc() will do the malloc()! */ } if ((T1_FDB_ptr=(char**)realloc( T1_FDB_ptr, (++fdb_no+1)*sizeof(char*)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } /* Insert the new database. If t1lib is already initialzed, the database can only be appended. Otherwise. prepending is also possible.*/ if ((mode & T1_PREPEND_PATH) && (T1_CheckForInit()!=0) ) { /* prepend */ i=fdb_no-2; while (i>=0) { T1_FDB_ptr[i+1]=T1_FDB_ptr[i]; i--; } T1_FDB_ptr[0]=newpath; result=0; } else { /* append */ T1_FDB_ptr[fdb_no-1]=newpath; if (T1_CheckForInit()==0) { if ((result=intT1_scanFontDBase(T1_FDB_ptr[fdb_no-1]))==-1) { T1_PrintLog( "T1_AddFontDataBase()", "Fatal error scanning Font Database File %s (T1_errno=%d)", T1LOG_WARNING, T1_FDB_ptr[fdb_no-1], T1_errno); } if (result>-1) pFontBase->no_fonts+=result; result=pFontBase->no_fonts; } } T1_FDB_ptr[fdb_no]=NULL; return result; } /* T1_SetFontDataBaseXLFD(): Set a new name for the XLFD font database. It replaces the default name (which is empty and any names specified previously with this function. Return value: 0 if OK, and -1 if filename not valid or an allocation error occurred */ int T1_SetFontDataBaseXLFD( char *filename) { int pathlen; int i; int result=0; /* check filename */ if (filename==NULL) { T1_errno=T1ERR_INVALID_PARAMETER; return -1; } /* this function must be called before any font is in the database, that is, usually, before initialization! */ if ( pFontBase!=NULL && pFontBase->no_fonts>0) { T1_errno=T1ERR_OP_NOT_PERMITTED; return -1; } pathlen=strlen(filename)+1; /* Throw away a possibly existing font database-statement */ if (fdbxlfd_no==-1) { T1_FDBXLFD_ptr=NULL; /* realloc() will do a malloc() */ } else { /* throw away current paths */ i=0; while (T1_FDBXLFD_ptr[i]!=NULL) { free (T1_FDBXLFD_ptr[i++]); } } if ((T1_FDBXLFD_ptr=(char**)realloc( T1_FDBXLFD_ptr, 2*sizeof(char*)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return -1; } if ((T1_FDBXLFD_ptr[0]=(char*)malloc(pathlen*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return -1; } strcpy( T1_FDBXLFD_ptr[0], filename); T1_FDBXLFD_ptr[1]=NULL; fdb_no=1; /* Load XLFD database immediately if t1lib already is initailzed */ if (T1_CheckForInit()==0) { if ((result=intT1_scanFontDBaseXLFD(T1_FDBXLFD_ptr[0]))==-1) { T1_PrintLog( "T1_AddFontDataBaseXLFD()", "Fatal error scanning XLFD Font Database File %s (T1_errno=%d)", T1LOG_WARNING, T1_FDBXLFD_ptr[0], T1_errno); } if (result>-1) pFontBase->no_fonts+=result; result=pFontBase->no_fonts; } return result; } /* T1_AddFontDataBaseXLFD(): Add a new XLFD font database file to the list. If the lib is already initialzed, then the new database is immediately loaded. Otherwise it is simply appended to the list and loaded at the time of initialization. Returns: -1 an error occured 0 successfully inserted but not loaded because lib not initilized n>0 the highest defined FontID */ int T1_AddFontDataBaseXLFD( int mode, char *filename) { int i; int pathlen; int result=0; char* newpath; if (filename==NULL) { T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } pathlen=strlen(filename); /* Allocate memory for string */ if ((newpath=(char*)malloc( (pathlen+1)*sizeof(char)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } strcpy( newpath, filename); /* Check for and handle the existing path configuration */ if (fdb_no==0) { /* defauls setup, free the path */ free( T1_FDB_ptr[0]); } if (fdbxlfd_no==-1) { /* not initialized! */ fdbxlfd_no=0; T1_FDBXLFD_ptr=NULL; /* realloc() will do the malloc()! */ } if ((T1_FDBXLFD_ptr=(char**)realloc( T1_FDBXLFD_ptr, (++fdbxlfd_no+1)*sizeof(char*)))==NULL) { T1_errno=T1ERR_ALLOC_MEM; return(-1); } /* Insert the new database. If t1lib is already initialzed, the database can only be appended. Otherwise. prepending is also possible.*/ if ((mode & T1_PREPEND_PATH) && (T1_CheckForInit()!=0) ) { /* prepend */ i=fdbxlfd_no-2; while (i>=0) { T1_FDBXLFD_ptr[i+1]=T1_FDBXLFD_ptr[i]; i--; } T1_FDBXLFD_ptr[0]=newpath; result=0; } else { /* append */ T1_FDBXLFD_ptr[fdbxlfd_no-1]=newpath; if (T1_CheckForInit()==0) { if ((result=intT1_scanFontDBaseXLFD(T1_FDBXLFD_ptr[fdbxlfd_no-1]))==-1) { T1_PrintLog( "T1_AddFontDataBase()", "Fatal error scanning Font Database File %s (T1_errno=%d)", T1LOG_WARNING, T1_FDBXLFD_ptr[fdbxlfd_no-1], T1_errno); } if (result>-1) pFontBase->no_fonts+=result; result=pFontBase->no_fonts; } } T1_FDBXLFD_ptr[fdbxlfd_no]=NULL; return result; } t1lib-5.1.2/lib/t1lib/t1env.h0000644000175000001440000000501510733501626014254 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1env.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-16 ----- Description: This file is part of the t1-library. It contains declarations and definitions for t1env.c ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independ from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1ENV_C void intT1_FreeSearchPaths( void); void intT1_SetupDefaultSearchPaths( void); int intT1_ScanConfigFile( void); char *intT1_Env_GetCompletePath( char *FileName, char **env_ptr ); int T1_SetFileSearchPath( int type, char *pathname); int T1_AddToFileSearchPath( int pathtype, int mode, char *pathname); char *T1_GetFileSearchPath( int type); int T1_SetFontDataBase( char *filename); int T1_AddFontDataBase( int mode, char *filename); int T1_SetFontDataBaseXLFD( char *filename); int T1_AddFontDataBaseXLFD( int mode, char *filename); #else extern void intT1_FreeSearchPaths( void); extern void intT1_SetupDefaultSearchPaths( void); extern int intT1_ScanConfigFile( void); extern char *intT1_Env_GetCompletePath( char *FileName, char **env_ptr ); extern int T1_SetFileSearchPath( int type, char *pathname); extern int T1_AddToFileSearchPath( int pathtype, int mode, char *pathname); extern char *T1_GetFileSearchPath( int type); extern int T1_SetFontDataBase( char *filename); extern int T1_AddFontDataBase( int mode, char *filename); extern int T1_SetFontDataBaseXLFD( char *filename); extern int T1_AddFontDataBaseXLFD( int mode, char *filename); #endif t1lib-5.1.2/lib/t1lib/t1lib.h0000644000175000001440000004153310733501626014237 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1lib.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2004-12-19 ----- Description: This file is part of the t1-library. It must be included by the user of the t1lib. It contains function declarations and some basic data types, the user must deal with. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2004. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifndef T1LIB_H_INCLUDED #define T1LIB_H_INCLUDED /* type definitions, needed by the user: */ #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif /* Version information filled in by configure */ #define T1LIB_VERSION 5 #define T1LIB_REVISION 1 #define T1LIB_PATCHLEVEL 2 #define T1LIB_VERSIONSTRING "5.1.2" /* Data Type information filled in by configure. */ typedef short T1_int16; typedef int T1_int32; /* the data structure which contains the character bitmap description */ typedef struct { char *bits; /* A pointer to the characters local bitmap */ struct /* A struct containing diverse metric information */ { int ascent; int descent; int leftSideBearing; int rightSideBearing; int advanceX; int advanceY; } metrics; void *pFontCacheInfo; unsigned long bpp; } GLYPH; /* A structure representing a matrix */ typedef struct { double cxx; double cyx; double cxy; double cyy; } T1_TMATRIX; /* the bounding box data structure: */ typedef struct { int llx; /* lower left x-position */ int lly; /* lower left y-position */ int urx; /* upper right x-position */ int ury; /* upper right y-position */ } BBox; /* A data that makes most important information available to user. */ typedef struct { int width; /* The glyph's width */ BBox bbox; /* The glyph's bounding box */ int numchars; /* The number of characters in the glyph (string) */ int *charpos; /* A pointer to an integer array were the horizontal positions in (afm units) of the individual characters in the string are stored */ } METRICSINFO; #define PAD(bits, pad) (((bits)+(pad)-1)&-(pad)) /* def's for T1_InitLib() */ #define NO_LOGFILE 0x0 #define LOGFILE 0x1 #define IGNORE_FONTDATABASE 0x2 /* Default is to read database */ #define IGNORE_CONFIGFILE 0x4 /* Default is to read config file */ #define T1_AA_CACHING 0x8 /* Cache aa-bytes */ #define T1_NO_AFM 0x10 /* Do not load or generate AFM data */ /* common 'yes'/'no' */ #define T1_YES 0x1 #define T1_NO 0x0 /* logfile levels: */ #define T1LOG_ERROR 1 #define T1LOG_WARNING 2 #define T1LOG_STATISTIC 3 #define T1LOG_DEBUG 4 /* #define's for manipulating searchpaths */ #define T1_PFAB_PATH 0x01 #define T1_AFM_PATH 0x02 #define T1_ENC_PATH 0x04 #define T1_FDB_PATH 0x08 #define T1_APPEND_PATH 0x00 #define T1_PREPEND_PATH 0x01 /* #define's for character/string properties (not all implemented) */ #define T1_DEFAULT 0x0000 #define T1_UNDERLINE 0x0001 #define T1_OVERLINE 0x0002 #define T1_OVERSTRIKE 0x0004 #define T1_DOUBLEOVERSTRIKE 0x0008 #define T1_RIGHT_TO_LEFT 0x0010 #define T1_SUBSCRIPT 0x0100 #define T1_SUPERSCRIPT 0x0200 #define T1_STROKED 0x1000 #define T1_KERNING 0x2000 /* Setting the subsampling value */ #define T1_AA_NONE 1 #define T1_AA_LOW 2 #define T1_AA_HIGH 4 /* Error handling: */ extern int T1_errno; /* These are from scanning a font file */ #define T1ERR_SCAN_FONT_FORMAT -5 #define T1ERR_SCAN_FILE_OPEN_ERR -4 #define T1ERR_SCAN_OUT_OF_MEMORY -3 #define T1ERR_SCAN_ERROR -2 #define T1ERR_SCAN_FILE_EOF -1 /* These are from generating paths */ #define T1ERR_PATH_ERROR 1 #define T1ERR_PARSE_ERROR 2 #define T1ERR_TYPE1_ABORT 3 /* These are from t1lib */ #define T1ERR_INVALID_FONTID 10 #define T1ERR_INVALID_PARAMETER 11 #define T1ERR_OP_NOT_PERMITTED 12 #define T1ERR_ALLOC_MEM 13 #define T1ERR_FILE_OPEN_ERR 14 #define T1ERR_UNSPECIFIED 15 #define T1ERR_NO_AFM_DATA 16 #define T1ERR_X11 17 #define T1ERR_COMPOSITE_CHAR 18 #define T1ERR_SCAN_ENCODING 19 /* Flags to control the rasterizer */ #define T1_IGNORE_FORCEBOLD 0x0001 #define T1_IGNORE_FAMILYALIGNMENT 0x0002 #define T1_IGNORE_HINTING 0x0004 #define T1_DEBUG_LINE 0x0100 #define T1_DEBUG_REGION 0x0200 #define T1_DEBUG_PATH 0x0400 #define T1_DEBUG_FONT 0x0800 #define T1_DEBUG_HINT 0x1000 /* definitions for outline handling */ #define FRACTBITS 16 /* number of fractional bits in 'fractpel' */ /* From/to conversion of pels/fractpels */ #define T1_TOPATHPOINT(p) (((T1_int32)p)<>FRACTBITS) /* A fractional point */ typedef struct { T1_int32 x; T1_int32 y; } T1_PATHPOINT; /* A straight outline segment, stroked or not stroked */ typedef struct pathsegment { char type; /* type of segment (line or move) */ unsigned char flag; /* type1 rasterizer internal stuff */ short references; /* type1 rasterizer internal stuff */ unsigned char size; /* size of the structure */ unsigned char context; /* index to device context */ struct pathsegment *link; /* pointer to next structure in linked list */ struct pathsegment *last; /* pointer to last structure in list */ T1_PATHPOINT dest; /* relative ending location of path segment */ } T1_PATHSEGMENT; /* A third order bezier segment */ typedef struct bezierpathsegment { char type; /* type of segment (bezier) */ unsigned char flag; /* type1 rasterizer internal stuff */ short references; /* type1 rasterizer internal stuff */ unsigned char size; /* as with any 'segment' type */ unsigned char context; /* as with any 'segment' type */ T1_PATHSEGMENT *link; /* as with any 'segment' type */ T1_PATHSEGMENT *last; /* as with any 'segment' type */ T1_PATHPOINT dest; /* ending point (D) */ T1_PATHPOINT B; /* control point B */ T1_PATHPOINT C; /* control point C */ } T1_BEZIERSEGMENT; typedef T1_PATHSEGMENT T1_OUTLINE; #define T1_PATHTYPE_LINE 0x10 #define T1_PATHTYPE_BEZIER 0x12 #define T1_PATHTYPE_MOVE 0x15 /* Definitions for font subsetting */ #define T1_SUBSET_DEFAULT 0x00 #define T1_SUBSET_FORCE_REENCODE 0x01 #define T1_SUBSET_SKIP_REENCODE 0x02 #define T1_SUBSET_ENCRYPT_BINARY 0x04 /* This is only for debugging, it does not produce valid font-files! This flag is not in the documented API!. */ #define T1_SUBSET_ENCRYPT_NONE 0x08 /* Two structures for handling composite character data */ /* One structure for each symbol of the composite character */ typedef struct { int piece; /* the index of the current symbol */ int deltax; /* horizontal displacement of current symbol in CS */ int deltay; /* vertical displacement of current symbol in CS */ } T1_COMP_PIECE; /* This one defines the composite character, the number of pieces and how to access their data. */ typedef struct { int compchar; /* the base character in the current encoding */ int numPieces; /* the number of defined pieces including the base char */ T1_COMP_PIECE *pieces; /* a pointer to the pieces' information */ } T1_COMP_CHAR_INFO; /* function declarations: */ /* from t1base.c */ extern void *T1_InitLib( int log); extern int T1_CloseLib( void); extern int T1_AddFont( char *fontfilename); extern void T1_PrintLog( char *func_ident, char *msg_txt, int level, ...); extern void T1_SetLogLevel( int level); extern int T1_CheckForInit(void); extern int T1_CheckForFontID( int FontID); extern char *T1_GetFontFileName( int FontID); extern int T1_GetNoFonts(void); extern int T1_SetDeviceResolutions( float x_res, float y_res); extern int T1_CopyFont( int FontID); extern int T1_QueryX11Support( void); extern int T1_CheckEndian(void); extern int T1_SetBitmapPad( int pad); extern int T1_GetBitmapPad( void); extern char *T1_GetLibIdent( void); extern void T1_SetRasterFlags( int flags); extern char *T1_GetAfmFileName( int FontID); extern int T1_SetAfmFileName( int FontId, char *afm_name); extern char *T1_GetFontFilePath( int FontID); extern char *T1_GetAfmFilePath( int FontID); extern const char *T1_StrError( int t1err); /* from t1delete.c */ extern int T1_DeleteSize( int FontID, float size); extern int T1_DeleteAllSizes( int FontID); extern int T1_FreeGlyph( GLYPH *glyph); extern int T1_FreeCompCharData( T1_COMP_CHAR_INFO *cci); extern int T1_DeleteFont( int FontID); /* from t1enc.c */ extern char **T1_LoadEncoding( char *FileName); extern int T1_DeleteEncoding( char **encoding); extern int T1_ReencodeFont( int FontID, char **Encoding); extern int T1_SetDefaultEncoding( char **encoding); extern char *T1_GetEncodingScheme( int FontID); /* from t1env.c */ extern int T1_SetFileSearchPath( int type, char *pathname); extern int T1_AddToFileSearchPath( int pathtype, int mode, char *pathname); extern char *T1_GetFileSearchPath( int type); extern int T1_SetFontDataBase( char *filename); extern int T1_AddFontDataBase( int mode, char *filename); /* from t1finfo.c */ extern int T1_GetKerning( int FontID, char char1, char char2); extern int T1_GetCharWidth( int FontID, char char1); extern BBox T1_GetCharBBox( int FontID, char char1); extern float T1_GetUnderlinePosition( int FontID); extern float T1_GetUnderlineThickness( int FontID); extern float T1_GetItalicAngle( int FontID); extern int T1_GetIsFixedPitch( int FontID); extern char *T1_GetFontName( int FontID); extern char *T1_GetFullName( int FontID); extern char *T1_GetFamilyName( int FontID); extern char *T1_GetWeight( int FontID); extern char *T1_GetVersion( int FontID); extern char *T1_GetNotice( int FontID); extern char *T1_GetCharName( int FontID, char char1); extern int T1_QueryLigs( int FontID, char char1, char **successors, char **ligatures); extern int T1_GetEncodingIndex( int FontID, char *char1); extern int *T1_GetEncodingIndices( int FontID, char *char1); extern int T1_GetStringWidth( int FontID, char *string, int len, long spaceoff, int kerning); extern BBox T1_GetStringBBox( int FontID, char *string, int len, long spaceoff, int kerning); extern METRICSINFO T1_GetMetricsInfo( int FontID, char *string, int len, long spaceoff, int kerning); extern BBox T1_GetFontBBox( int FontID); extern char **T1_GetAllCharNames( int FontID); extern int T1_GetNoKernPairs( int FontID); extern int T1_GetNoCompositeChars( int FontID); extern int T1_QueryCompositeChar( int FontID, char char1); extern T1_COMP_CHAR_INFO *T1_GetCompCharData( int FontID, char char1); extern T1_COMP_CHAR_INFO *T1_GetCompCharDataByIndex( int FontID, int index); extern int T1_IsInternalChar( int FontID, char char1); /* from t1load.c */ extern int T1_LoadFont( int FontID); extern void *T1_QueryFontSize( int FontID, float size, int aa); /* from t1set.c */ extern GLYPH *T1_SetChar( int FontID, char charcode, float size, T1_TMATRIX *transform); extern GLYPH *T1_SetString( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern GLYPH* T1_SetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform); extern GLYPH *T1_CopyGlyph(GLYPH *glyph); extern void T1_DumpGlyph( GLYPH *glyph); extern GLYPH *T1_ConcatGlyphs( GLYPH *glyph1, GLYPH *glyph2, int x_off, int y_off, int modflag); extern void T1_DumpPixmap( GLYPH *glyph); extern GLYPH *T1_FillOutline( T1_OUTLINE *path, int modflag); /* from t1trans.c */ extern int T1_ExtendFont( int FontID, double extend); extern int T1_SlantFont( int FontID, double slant); extern int T1_TransformFont( int FontID, T1_TMATRIX *matrix); extern double T1_GetExtend( int FontID); extern double T1_GetSlant( int FontID); extern T1_TMATRIX T1_GetTransform( int FontID); extern int T1_SetLinePosition( int FontID, int linetype, float value); extern int T1_SetLineThickness( int FontID, int linetype, float value); extern float T1_GetLinePosition( int FontID, int linetype); extern float T1_GetLineThickness( int FontID, int linetype); extern T1_TMATRIX *T1_RotateMatrix( T1_TMATRIX *matrix, double angle); extern T1_TMATRIX *T1_MirrorHMatrix( T1_TMATRIX *matrix); extern T1_TMATRIX *T1_MirrorVMatrix( T1_TMATRIX *matrix); extern T1_TMATRIX *T1_ShearHMatrix( T1_TMATRIX *matrix, double shear); extern T1_TMATRIX *T1_ShearVMatrix( T1_TMATRIX *matrix, double shear); extern T1_TMATRIX *T1_ExtendHMatrix( T1_TMATRIX *matrix, double extent); extern T1_TMATRIX *T1_ExtendVMatrix( T1_TMATRIX *matrix, double extent); extern T1_TMATRIX *T1_TransformMatrix( T1_TMATRIX *matrix, double cxx, double cyx, double cxy, double cyy); extern int T1_StrokeFont( int FontID, int dostroke); extern int T1_SetStrokeFlag( int FontID); extern int T1_ClearStrokeFlag( int FontID); extern int T1_GetStrokeMode( int FontID); extern int T1_SetStrokeWidth( int FontID, float strokewidth); extern float T1_GetStrokeWidth( int FontID); /* from t1aaset.c */ extern GLYPH *T1_AASetChar( int FontID, char charcode, float size, T1_TMATRIX *transform); extern GLYPH *T1_AASetString( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern GLYPH* T1_AASetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform); extern int T1_AASetGrayValues(unsigned long white, unsigned long gray75, unsigned long gray50, unsigned long gray25, unsigned long black); extern int T1_AAHSetGrayValues( unsigned long *grayvals); extern int T1_AANSetGrayValues( unsigned long bg, unsigned long fg); extern int T1_AAGetGrayValues( long *pgrayvals); extern int T1_AAHGetGrayValues( long *pgrayvals); extern int T1_AANGetGrayValues( long *pgrayvals); extern int T1_AASetBitsPerPixel( int bpp); extern int T1_AAGetBitsPerPixel( void); extern int T1_AASetLevel( int level); extern int T1_AAGetLevel( void); extern GLYPH *T1_AAFillOutline( T1_OUTLINE *path, int modflag); extern int T1_AASetSmartLimits( float limit1, float limit2); extern int T1_AASetSmartMode( int smart); /* from t1afmtool.c */ extern int T1_WriteAFMFallbackFile( int FontID); /* from t1outline.c */ extern T1_OUTLINE *T1_GetCharOutline( int FontID, char charcode, float size, T1_TMATRIX *transform); extern T1_OUTLINE *T1_GetStringOutline( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern T1_OUTLINE *T1_ConcatOutlines( T1_OUTLINE *path1, T1_OUTLINE *path2); extern T1_OUTLINE *T1_ScaleOutline( T1_OUTLINE *path, float scale); extern T1_OUTLINE *T1_GetMoveOutline( int FontID, int deltax, int deltay, int modflag, float size, T1_TMATRIX *transform); extern void T1_DumpPath( T1_OUTLINE *path); extern void T1_AbsolutePath( T1_OUTLINE *rpath); extern void T1_RelativePath( T1_OUTLINE *apath); extern void T1_ManipulatePath( T1_OUTLINE *path, void (*manipulate)(long *x,long *y,int type)); extern T1_OUTLINE *T1_CopyOutline( T1_OUTLINE *path); extern void T1_FreeOutline( T1_OUTLINE *path); /* from t1subset.c */ extern char *T1_SubsetFont( int FontID, char *mask, unsigned int flags, int linewidth, unsigned long maxblocksize, unsigned long *bufsize); extern char *T1_GetCharString( int FontID, char *charname, int *len); extern int T1_GetlenIV( int FontID); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* T1LIB_H_INCLUDED */ t1lib-5.1.2/lib/t1lib/t1x11.c0000644000175000001440000007344010733501626014077 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1x11.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-01 ----- Description: This file is part of the t1-library. It contains functions for generating glyphs with data in X11-Pixmap format. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1X11_C #include #include #include #include #include #include #include #include #include #include #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "t1types.h" #include "t1extern.h" #include "t1set.h" #include "t1aaset.h" #include "t1load.h" #include "t1finfo.h" #include "t1misc.h" #include "t1x11.h" #include "t1base.h" #define T1GCMASK GCForeground | GCBackground /* As a fall back */ #ifndef T1_AA_TYPE16 #define T1_AA_TYPE16 short #endif #ifndef T1_AA_TYPE32 #define T1_AA_TYPE32 int #endif /* The three important X11 parameters t1lib has to deal with: */ static Display *T1_display=NULL; /* Must be accessible from t1delete.c */ static Visual *T1_visual=NULL; static Colormap T1_colormap; static unsigned int T1_depth=0; static int T1_byte_order; static int lastlevel=0; static unsigned long oldfg_n=0, oldbg_n=0, oldfg_l=0, oldbg_l=0; static unsigned long oldfg_h=0, oldbg_h=0, oldfg=0, oldbg=0; extern int T1aa_SmartOn; /* from t1aaset.c */ extern float T1aa_smartlimit1; extern float T1aa_smartlimit2; static XColor aacolors[AAMAXPLANES]; static unsigned long aapixels[AAMAXPLANES]; /* The following parameter determines whether t1lib will use logical positioning of chars and string (place the origin at specified destination-point) or absolute positioning with respect to the origin (upper left corner) of the generated bitmap/pixmap. */ static int T1_lposition=1; /* T1_SetX11Params(): Set X11-parameters which t1lib has to know in order to properly generate pixmaps from characters */ int T1_SetX11Params( Display *display, Visual *visual, unsigned int depth, Colormap colormap) { T1_display =display; T1_visual =visual; T1_depth =depth; T1_colormap =colormap; if (T1_CheckEndian()==0) T1_byte_order=0; else T1_byte_order=1; /* For bug hunting: */ if (ImageByteOrder( T1_display)==0) T1_PrintLog( "T1_SetX11Params()", "X-Server uses Little Endian data representation", T1LOG_DEBUG); else T1_PrintLog( "T1_SetX11Params()", "X-Server uses Big Endian data representation", T1LOG_DEBUG); return(0); } /* T1_SetCharX(): Generate an object of type GLYPH, i.e, a glyph with a pixmap ID instead of a pointer to a bitmap: */ GLYPH *T1_SetCharX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, char charcode, float size, T1_TMATRIX *transform) { GLYPH *pglyph; static GLYPH xglyph={NULL,{0,0,0,0,0,0},NULL,0}; int height, width; Pixmap clipmask=0; int opaque; xglyph.metrics.leftSideBearing=0; xglyph.metrics.rightSideBearing=0; xglyph.metrics.advanceX=0; xglyph.metrics.advanceY=0; xglyph.metrics.ascent=0; xglyph.metrics.descent=0; xglyph.pFontCacheInfo=NULL; opaque=mode; if ((pglyph=T1_SetChar( FontID, charcode, size, transform))==NULL){ T1_PrintLog( "T1_SetCharX()", "T1_SetChar() returned NULL-pointer!", T1LOG_WARNING); return(NULL); } /* Check for empty bitmap */ if (pglyph->bits==NULL) { xglyph=*pglyph; return( &xglyph); } width=pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing; height=pglyph->metrics.ascent-pglyph->metrics.descent; clipmask=XCreateBitmapFromData( T1_display, d, (char *)pglyph->bits, PAD(width, pFontBase->bitmap_pad), height ); /* Correct position */ if (T1_lposition){ x_dest += pglyph->metrics.leftSideBearing; y_dest -= pglyph->metrics.ascent; } if (opaque==0){ XSetClipMask(T1_display, gc, clipmask); XSetClipOrigin(T1_display, gc, x_dest, y_dest); } XCopyPlane( T1_display, clipmask, d, gc, 0, 0, width, height, x_dest, y_dest, 0x01); if (clipmask){ XFreePixmap( T1_display, clipmask); clipmask=0; XSetClipMask(T1_display, gc, None); XSetClipOrigin(T1_display, gc, 0, 0); } pglyph->bits=NULL; /* Since XDestroyImage() free's this also! */ xglyph.metrics.leftSideBearing=pglyph->metrics.leftSideBearing; xglyph.metrics.rightSideBearing=pglyph->metrics.rightSideBearing; xglyph.metrics.advanceX=pglyph->metrics.advanceX; xglyph.metrics.advanceY=pglyph->metrics.advanceY; xglyph.metrics.ascent=pglyph->metrics.ascent; xglyph.metrics.descent=pglyph->metrics.descent; xglyph.bpp=pglyph->bpp; return( &xglyph); } /* T1_SetStringX(...): Draw a string of characters into an X11 drawable */ GLYPH *T1_SetStringX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform) { GLYPH *pglyph; static GLYPH xglyph={NULL,{0,0,0,0,0,0},NULL,0}; int height, width; Pixmap clipmask=0; int opaque; xglyph.metrics.leftSideBearing=0; xglyph.metrics.rightSideBearing=0; xglyph.metrics.advanceX=0; xglyph.metrics.advanceY=0; xglyph.metrics.ascent=0; xglyph.metrics.descent=0; xglyph.pFontCacheInfo=NULL; opaque=mode; if ((pglyph=T1_SetString( FontID, string, len, spaceoff, modflag, size, transform))==NULL){ T1_PrintLog( "T1_SetStringX()", "T1_SetString() returned NULL-pointer!", T1LOG_WARNING); return(NULL); } /* Check for empty bitmap */ if (pglyph->bits==NULL) { xglyph=*pglyph; return( &xglyph); } width=pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing; height=pglyph->metrics.ascent-pglyph->metrics.descent; clipmask=XCreateBitmapFromData( T1_display, d, (char *)pglyph->bits, PAD(width, pFontBase->bitmap_pad), /* width */ height ); /* Correct position */ if (T1_lposition){ x_dest += pglyph->metrics.leftSideBearing; y_dest -= pglyph->metrics.ascent; } if (opaque==0){ XSetClipMask(T1_display, gc, clipmask); XSetClipOrigin(T1_display, gc, x_dest, y_dest); } XCopyPlane( T1_display, clipmask, d, gc, 0, 0, width, height, x_dest, y_dest, 0x01); if (clipmask){ XFreePixmap( T1_display, clipmask); clipmask=0; XSetClipMask(T1_display, gc, None); XSetClipOrigin(T1_display, gc, 0, 0); } pglyph->bits=NULL; /* Since XDestroyImage() free's this also! */ xglyph.metrics.leftSideBearing=pglyph->metrics.leftSideBearing; xglyph.metrics.rightSideBearing=pglyph->metrics.rightSideBearing; xglyph.metrics.advanceX=pglyph->metrics.advanceX; xglyph.metrics.advanceY=pglyph->metrics.advanceY; xglyph.metrics.ascent=pglyph->metrics.ascent; xglyph.metrics.descent=pglyph->metrics.descent; xglyph.bpp=pglyph->bpp; return( &xglyph); } /* T1_SetRectX(): Draw a rectangle into an x11 drawable */ GLYPH *T1_SetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, float size, float rwidth, float rheight, T1_TMATRIX *transform) { GLYPH *pglyph; static GLYPH xglyph={NULL,{0,0,0,0,0,0},NULL,0}; int height, width; Pixmap clipmask=0; int opaque; xglyph.metrics.leftSideBearing=0; xglyph.metrics.rightSideBearing=0; xglyph.metrics.advanceX=0; xglyph.metrics.advanceY=0; xglyph.metrics.ascent=0; xglyph.metrics.descent=0; xglyph.pFontCacheInfo=NULL; opaque=mode; if ((pglyph=T1_SetRect( FontID, size, rwidth, rheight, transform))==NULL){ T1_PrintLog( "T1_SetRectrX()", "T1_SetRect() returned NULL-pointer!", T1LOG_WARNING); return(NULL); } /* Check for empty bitmap */ if (pglyph->bits==NULL) { xglyph=*pglyph; return( &xglyph); } width=pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing; height=pglyph->metrics.ascent-pglyph->metrics.descent; clipmask=XCreateBitmapFromData( T1_display, d, (char *)pglyph->bits, PAD(width, pFontBase->bitmap_pad), height ); /* Correct position */ if (T1_lposition){ x_dest += pglyph->metrics.leftSideBearing; y_dest -= pglyph->metrics.ascent; } if (opaque==0){ XSetClipMask(T1_display, gc, clipmask); XSetClipOrigin(T1_display, gc, x_dest, y_dest); } XCopyPlane( T1_display, clipmask, d, gc, 0, 0, width, height, x_dest, y_dest, 0x01); if (clipmask){ XFreePixmap( T1_display, clipmask); clipmask=0; XSetClipMask(T1_display, gc, None); XSetClipOrigin(T1_display, gc, 0, 0); } pglyph->bits=NULL; /* Since XDestroyImage() free's this also! */ xglyph.metrics.leftSideBearing=pglyph->metrics.leftSideBearing; xglyph.metrics.rightSideBearing=pglyph->metrics.rightSideBearing; xglyph.metrics.advanceX=pglyph->metrics.advanceX; xglyph.metrics.advanceY=pglyph->metrics.advanceY; xglyph.metrics.ascent=pglyph->metrics.ascent; xglyph.metrics.descent=pglyph->metrics.descent; xglyph.bpp=pglyph->bpp; return( &xglyph); } /* T1_AASetCharX(): Generate an object of type GLYPH, i.e, a glyph with a pixmap ID instead of a pointer to a bitmap: */ GLYPH *T1_AASetCharX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, char charcode, float size, T1_TMATRIX *transform) { int j, k; GLYPH *pglyph; XImage *ximage; static GLYPH xglyph={NULL,{0,0,0,0,0,0},NULL,0}; int height, width, width_pad; XGCValues xgcvalues; static unsigned long fg, bg; Pixmap clipmask=0; int clipmask_h, clipmask_v, line_off; char *clipmask_ptr; int opaque; xglyph.metrics.leftSideBearing=0; xglyph.metrics.rightSideBearing=0; xglyph.metrics.advanceX=0; xglyph.metrics.advanceY=0; xglyph.metrics.ascent=0; xglyph.metrics.descent=0; xglyph.pFontCacheInfo=NULL; opaque=mode; xglyph.bpp=T1_depth; /* In order to be able to contruct the pixmap we need to know foreground and background color as well the copy function */ XGetGCValues( T1_display, gc, T1GCMASK, &xgcvalues); fg=xgcvalues.foreground; bg=xgcvalues.background; /* At this point we must compute the colors that are needed to do antialiasing between fore- and background. The following function fills the static aacolors */ if (T1aa_SmartOn==0) j=T1_AAGetLevel(); else if (size>=T1aa_smartlimit2) j=1; else if (size>=T1aa_smartlimit1) j=2; else j=4; if ( j!=lastlevel || fg!=oldfg || bg!=oldbg ){ switch ( j){ case 1: if ( fg!=oldfg_n || bg!=oldbg_n){ oldfg_n=fg; oldbg_n=bg; /* computing colors is not necessary here */ T1_AANSetGrayValues( bg, fg); } break; case 2: if ( fg!=oldfg_l || bg!=oldbg_l){ T1_ComputeAAColorsX( fg, bg, AAMAXPLANES); /*~derekn*/ /* If fg=bg, the clipmask will be messed up; in this case */ /* we can arbitrarily change bg to get a correct clipmask. */ if (opaque == 0 && fg == bg) aapixels[0] = bg = (fg > 0) ? fg - 1 : fg + 1; oldfg_l=fg; oldbg_l=bg; T1_AASetGrayValues(aapixels[0], /* white */ aapixels[4], aapixels[8], aapixels[12], aapixels[16] ); /* black */ } break; case 4: if ( fg!=oldfg_h || bg!=oldbg_h){ T1_ComputeAAColorsX( fg, bg, AAMAXPLANES); /*~derekn*/ /* If fg=bg, the clipmask will be messed up; in this case */ /* we can arbitrarily change bg to get a correct clipmask. */ if (opaque == 0 && fg == bg) aapixels[0] = bg = (fg > 0) ? fg - 1 : fg + 1; oldfg_h=fg; oldbg_h=bg; T1_AAHSetGrayValues( aapixels); } break; } lastlevel=j; oldfg=fg; oldbg=bg; } if ((pglyph=T1_AASetChar( FontID, charcode, size, transform))==NULL){ T1_PrintLog( "T1_AASetCharX()", "T1_AASetChar() returned NULL-pointer!", T1LOG_WARNING); return(NULL); } /* Check for empty bitmap */ if (pglyph->bits==NULL) { xglyph=*pglyph; return( &xglyph); } width=pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing; height=pglyph->metrics.ascent-pglyph->metrics.descent; /* Correct position */ if (T1_lposition){ x_dest += pglyph->metrics.leftSideBearing; y_dest -= pglyph->metrics.ascent; } if (opaque==0){ clipmask_v=height; clipmask_h=width; width_pad=PAD(width*T1aa_bpp, pFontBase->bitmap_pad)/T1aa_bpp; clipmask_ptr=(char *)calloc((PAD(clipmask_h, 8)>>3) * clipmask_v, sizeof( char)); if (clipmask_ptr==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } /* Note: We pad the clipmask always to byte boundary */ if (pglyph->bpp==8) for ( k=0; k>3); for (j=0; jbits))[k*width_pad+j]!=bg) clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8)); } } else if (pglyph->bpp==16) for ( k=0; k>3); for (j=0; jbits))[k*width_pad+j]!=(T1_AA_TYPE16)bg) clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8)); } } else for ( k=0; k>3); for (j=0; jbits))[k*width_pad+j]!=(T1_AA_TYPE32)bg) clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8)); } } clipmask=XCreateBitmapFromData( T1_display, d, (char *)clipmask_ptr, width, height ); free( clipmask_ptr); XSetClipMask(T1_display, gc, clipmask); XSetClipOrigin(T1_display, gc, x_dest, y_dest); } ximage=XCreateImage( T1_display, T1_visual, T1_depth, ZPixmap, /* XYBitmap or XYPixmap */ 0, /* No offset */ (char *)pglyph->bits, width, height, pFontBase->bitmap_pad, 0 /*PAD(width,8)/8*/ /* number of bytes per line */ ); ximage->byte_order=T1_byte_order; XPutImage(T1_display, d, gc, ximage, 0, 0, x_dest, y_dest, width, height ); XDestroyImage(ximage); if (clipmask){ XFreePixmap( T1_display, clipmask); clipmask=0; XSetClipMask(T1_display, gc, None); XSetClipOrigin(T1_display, gc, 0, 0); } pglyph->bits=NULL; /* Since XDestroyImage() free's this also! */ xglyph.metrics.leftSideBearing=pglyph->metrics.leftSideBearing; xglyph.metrics.rightSideBearing=pglyph->metrics.rightSideBearing; xglyph.metrics.advanceX=pglyph->metrics.advanceX; xglyph.metrics.advanceY=pglyph->metrics.advanceY; xglyph.metrics.ascent=pglyph->metrics.ascent; xglyph.metrics.descent=pglyph->metrics.descent; xglyph.bpp=pglyph->bpp; return( &xglyph); } /* T1_AASetStringX(...): Draw a string of characters into an X11 drawable */ GLYPH *T1_AASetStringX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform) { int j, k; GLYPH *pglyph; XImage *ximage; static GLYPH xglyph={NULL,{0,0,0,0,0,0},NULL,0}; int height, width, width_pad; XGCValues xgcvalues; static unsigned long fg, bg; Pixmap clipmask=0; int clipmask_h, clipmask_v, line_off; char *clipmask_ptr; int opaque; xglyph.metrics.leftSideBearing=0; xglyph.metrics.rightSideBearing=0; xglyph.metrics.advanceX=0; xglyph.metrics.advanceY=0; xglyph.metrics.ascent=0; xglyph.metrics.descent=0; xglyph.pFontCacheInfo=NULL; opaque=mode; /* In order to be able to contruct the pixmap we need to know foreground and background color as well the copy function */ XGetGCValues( T1_display, gc, T1GCMASK, &xgcvalues); fg=xgcvalues.foreground; bg=xgcvalues.background; xglyph.bpp=T1_depth; /* At this point we must compute the colors that are needed to do antialiasing between fore- and background. The following function fills the static aacolors */ if (T1aa_SmartOn==0) j=T1_AAGetLevel(); else if (size>=T1aa_smartlimit2) j=1; else if (size>=T1aa_smartlimit1) j=2; else j=4; if ( j!=lastlevel || fg!=oldfg || bg!=oldbg ){ switch ( j){ case 1: if ( fg!=oldfg_n || bg!=oldbg_n){ oldfg_n=fg; oldbg_n=bg; /* computing colors is not necessary here */ T1_AANSetGrayValues( bg, fg); } break; case 2: if ( fg!=oldfg_l || bg!=oldbg_l){ T1_ComputeAAColorsX( fg, bg, AAMAXPLANES); /*~derekn*/ /* If fg=bg, the clipmask will be messed up; in this case */ /* we can arbitrarily change bg to get a correct clipmask. */ if (opaque == 0 && fg == bg) aapixels[0] = bg = (fg > 0) ? fg - 1 : fg + 1; oldfg_l=fg; oldbg_l=bg; T1_AASetGrayValues(aapixels[0], /* white */ aapixels[4], aapixels[8], aapixels[12], aapixels[16] ); /* black */ } break; case 4: if ( fg!=oldfg_h || bg!=oldbg_h){ T1_ComputeAAColorsX( fg, bg, AAMAXPLANES); /*~derekn*/ /* If fg=bg, the clipmask will be messed up; in this case */ /* we can arbitrarily change bg to get a correct clipmask. */ if (opaque == 0 && fg == bg) aapixels[0] = bg = (fg > 0) ? fg - 1 : fg + 1; oldfg_h=fg; oldbg_h=bg; T1_AAHSetGrayValues( aapixels); } break; } lastlevel=j; oldfg=fg; oldbg=bg; } if ((pglyph=T1_AASetString( FontID, string, len, spaceoff, modflag, size, transform))==NULL){ T1_PrintLog( "T1_AASetStringX()", "T1_AASetString() returned NULL-pointer!", T1LOG_WARNING); return(NULL); } /* Check for empty bitmap */ if (pglyph->bits==NULL) { xglyph=*pglyph; return( &xglyph); } width=pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing; height=pglyph->metrics.ascent-pglyph->metrics.descent; /* Correct position */ if (T1_lposition){ x_dest += pglyph->metrics.leftSideBearing; y_dest -= pglyph->metrics.ascent; } if (opaque==0){ clipmask_v=height; clipmask_h=width; width_pad=PAD(width*T1aa_bpp, pFontBase->bitmap_pad)/T1aa_bpp; clipmask_ptr=(char *)calloc((PAD(clipmask_h, 8)>>3) * clipmask_v, sizeof( char)); if (clipmask_ptr==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } /* Note: We pad the clipmask always to byte boundary */ if (pglyph->bpp==8) for ( k=0; k>3); for (j=0; jbits))[k*width_pad+j]!=bg) clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8)); } } else if (pglyph->bpp==16) for ( k=0; k>3); for (j=0; jbits))[k*width_pad+j]!=(T1_AA_TYPE16)bg) clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8)); } } else for ( k=0; k>3); for (j=0; jbits))[k*width_pad+j]!=(T1_AA_TYPE32)bg) clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8)); } } clipmask=XCreateBitmapFromData( T1_display, d, (char *)clipmask_ptr, width, height ); free( clipmask_ptr); XSetClipMask(T1_display, gc, clipmask); XSetClipOrigin(T1_display, gc, x_dest, y_dest); } ximage=XCreateImage( T1_display, T1_visual, T1_depth, ZPixmap, /* XYBitmap or XYPixmap */ 0, /* No offset */ (char *)pglyph->bits, width, height, pFontBase->bitmap_pad, /* lines padded to bytes */ 0 /*PAD(width,8)/8*/ /* number of bytes per line */ ); ximage->byte_order=T1_byte_order; XPutImage(T1_display, d, gc, ximage, 0, 0, x_dest, y_dest, width, height ); XDestroyImage(ximage); if (clipmask){ XFreePixmap( T1_display, clipmask); clipmask=0; XSetClipMask(T1_display, gc, None); XSetClipOrigin(T1_display, gc, 0, 0); } pglyph->bits=NULL; /* Since XDestroyImage() free's this also! */ xglyph.metrics.leftSideBearing=pglyph->metrics.leftSideBearing; xglyph.metrics.rightSideBearing=pglyph->metrics.rightSideBearing; xglyph.metrics.advanceX=pglyph->metrics.advanceX; xglyph.metrics.advanceY=pglyph->metrics.advanceY; xglyph.metrics.ascent=pglyph->metrics.ascent; xglyph.metrics.descent=pglyph->metrics.descent; xglyph.bpp=pglyph->bpp; return( &xglyph); } /* T1_AASetCharX(): Draw a rectangle into an x11 drawable */ GLYPH *T1_AASetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, float size, float rwidth, float rheight, T1_TMATRIX *transform) { int j, k; GLYPH *pglyph; XImage *ximage; static GLYPH xglyph={NULL,{0,0,0,0,0,0},NULL,0}; int height, width, width_pad; XGCValues xgcvalues; static unsigned long fg, bg; Pixmap clipmask=0; int clipmask_h, clipmask_v, line_off; char *clipmask_ptr; int opaque; xglyph.metrics.leftSideBearing=0; xglyph.metrics.rightSideBearing=0; xglyph.metrics.advanceX=0; xglyph.metrics.advanceY=0; xglyph.metrics.ascent=0; xglyph.metrics.descent=0; xglyph.pFontCacheInfo=NULL; opaque=mode; xglyph.bpp=T1_depth; /* In order to be able to contruct the pixmap we need to know foreground and background color as well the copy function */ XGetGCValues( T1_display, gc, T1GCMASK, &xgcvalues); fg=xgcvalues.foreground; bg=xgcvalues.background; /* At this point we must compute the colors that are needed to do antialiasing between fore- and background. The following function fills the static aacolors */ if (T1aa_SmartOn==0) j=T1_AAGetLevel(); else if (size>=T1aa_smartlimit2) j=1; else if (size>=T1aa_smartlimit1) j=2; else j=4; if ( j!=lastlevel || fg!=oldfg || bg!=oldbg ){ switch ( j){ case 1: if ( fg!=oldfg_n || bg!=oldbg_n){ oldfg_n=fg; oldbg_n=bg; /* computing colors is not necessary here */ T1_AANSetGrayValues( bg, fg); } break; case 2: if ( fg!=oldfg_l || bg!=oldbg_l){ T1_ComputeAAColorsX( fg, bg, AAMAXPLANES); /*~derekn*/ /* If fg=bg, the clipmask will be messed up; in this case */ /* we can arbitrarily change bg to get a correct clipmask. */ if (opaque == 0 && fg == bg) aapixels[0] = bg = (fg > 0) ? fg - 1 : fg + 1; oldfg_l=fg; oldbg_l=bg; T1_AASetGrayValues(aapixels[0], /* white */ aapixels[4], aapixels[8], aapixels[12], aapixels[16] ); /* black */ } break; case 4: if ( fg!=oldfg_h || bg!=oldbg_h){ T1_ComputeAAColorsX( fg, bg, AAMAXPLANES); /*~derekn*/ /* If fg=bg, the clipmask will be messed up; in this case */ /* we can arbitrarily change bg to get a correct clipmask. */ if (opaque == 0 && fg == bg) aapixels[0] = bg = (fg > 0) ? fg - 1 : fg + 1; oldfg_h=fg; oldbg_h=bg; T1_AAHSetGrayValues( aapixels); } break; } lastlevel=j; oldfg=fg; oldbg=bg; } if ((pglyph=T1_AASetRect( FontID, size, rwidth, rheight, transform))==NULL){ T1_PrintLog( "T1_AASetRectX()", "T1_AASetRect() returned NULL-pointer!", T1LOG_WARNING); return(NULL); } /* Check for empty bitmap */ if (pglyph->bits==NULL) { xglyph=*pglyph; return( &xglyph); } width=pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing; height=pglyph->metrics.ascent-pglyph->metrics.descent; /* Correct position */ if (T1_lposition){ x_dest += pglyph->metrics.leftSideBearing; y_dest -= pglyph->metrics.ascent; } if (opaque==0){ clipmask_v=height; clipmask_h=width; width_pad=PAD(width*T1aa_bpp, pFontBase->bitmap_pad)/T1aa_bpp; clipmask_ptr=(char *)calloc((PAD(clipmask_h, 8)>>3) * clipmask_v, sizeof( char)); if (clipmask_ptr==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } /* Note: We pad the clipmask always to byte boundary */ if (pglyph->bpp==8) for ( k=0; k>3); for (j=0; jbits))[k*width_pad+j]!=bg) clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8)); } } else if (pglyph->bpp==16) for ( k=0; k>3); for (j=0; jbits))[k*width_pad+j]!=(T1_AA_TYPE16)bg) clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8)); } } else for ( k=0; k>3); for (j=0; jbits))[k*width_pad+j]!=(T1_AA_TYPE32)bg) clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8)); } } clipmask=XCreateBitmapFromData( T1_display, d, (char *)clipmask_ptr, width, height ); free( clipmask_ptr); XSetClipMask(T1_display, gc, clipmask); XSetClipOrigin(T1_display, gc, x_dest, y_dest); } ximage=XCreateImage( T1_display, T1_visual, T1_depth, ZPixmap, /* XYBitmap or XYPixmap */ 0, /* No offset */ (char *)pglyph->bits, width, height, pFontBase->bitmap_pad, 0 /*PAD(width,8)/8*/ /* number of bytes per line */ ); ximage->byte_order=T1_byte_order; XPutImage(T1_display, d, gc, ximage, 0, 0, x_dest, y_dest, width, height ); XDestroyImage(ximage); if (clipmask){ XFreePixmap( T1_display, clipmask); clipmask=0; XSetClipMask(T1_display, gc, None); XSetClipOrigin(T1_display, gc, 0, 0); } pglyph->bits=NULL; /* Since XDestroyImage() free's this also! */ xglyph.metrics.leftSideBearing=pglyph->metrics.leftSideBearing; xglyph.metrics.rightSideBearing=pglyph->metrics.rightSideBearing; xglyph.metrics.advanceX=pglyph->metrics.advanceX; xglyph.metrics.advanceY=pglyph->metrics.advanceY; xglyph.metrics.ascent=pglyph->metrics.ascent; xglyph.metrics.descent=pglyph->metrics.descent; xglyph.bpp=pglyph->bpp; return( &xglyph); } /* T1_ComputeAAColorsX(): Compute the antialiasing colors in dependency of foreground and background */ int T1_ComputeAAColorsX( unsigned long fg, unsigned long bg, int nolevels) { static unsigned long last_fg; static unsigned long last_bg; long delta_red, delta_green, delta_blue; int i; int nocolors=0; aacolors[0].pixel=bg; aacolors[nolevels-1].pixel=fg; if ((fg==last_fg)&&(bg==last_bg)) return(nocolors); /* Get RGB values for fore- and background */ XQueryColor( T1_display, T1_colormap, &aacolors[0]); XQueryColor( T1_display, T1_colormap, &aacolors[nolevels-1]); delta_red = (aacolors[nolevels-1].red - aacolors[0].red)/(nolevels-1); delta_green = (aacolors[nolevels-1].green - aacolors[0].green)/(nolevels-1); delta_blue = (aacolors[nolevels-1].blue - aacolors[0].blue)/(nolevels-1); aapixels[0]=aacolors[0].pixel; aapixels[nolevels-1]=aacolors[nolevels-1].pixel; for (i=1; ibits==NULL) { T1_errno=T1ERR_INVALID_PARAMETER; return( NULL); } if (pglyph->bpp==1) { /* we have a bitmap glyph */ ximage=XCreateImage( T1_display, T1_visual, 1, XYBitmap, /* XYBitmap or XYPixmap */ 0, /* No offset */ (char *)pglyph->bits, pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing, pglyph->metrics.ascent-pglyph->metrics.descent, pFontBase->bitmap_pad, 0 /* number of bytes per line */ ); } else { /* we have an anztialiased glyph */ ximage=XCreateImage( T1_display, T1_visual, T1_depth, ZPixmap, /* XYBitmap or XYPixmap */ 0, /* No offset */ (char *)pglyph->bits, pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing, pglyph->metrics.ascent-pglyph->metrics.descent, pFontBase->bitmap_pad, 0 /* number of bytes per line */ ); } if (ximage==NULL) { T1_errno=T1ERR_X11; return( NULL); } ximage->byte_order=T1_byte_order; /* Set t1lib´s byteorder */ return( ximage); } t1lib-5.1.2/lib/t1lib/t1x11.h0000644000175000001440000001004510733501626014074 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1x11.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2003-01-02 ----- Description: This file is part of the t1-library. It contains definitions and declarations for t1x11.c. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #include #ifdef T1X11_C int T1_SetX11Params( Display *display, Visual *visual, unsigned int depth, Colormap colormap); GLYPH *T1_SetCharX( Drawable d, GC gc, int mode, int x, int y, int FontID, char charcode, float size, T1_TMATRIX *transform); GLYPH *T1_SetStringX( Drawable d, GC gc, int mode, int x, int y, int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); GLYPH *T1_SetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, float size, float width, float height, T1_TMATRIX *transform); GLYPH *T1_AASetCharX( Drawable d, GC gc, int mode, int x, int y, int FontID, char charcode, float size, T1_TMATRIX *transform); GLYPH *T1_AASetStringX( Drawable d, GC gc, int mode, int x, int y, int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); GLYPH *T1_AASetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, float size, float width, float height, T1_TMATRIX *transform); int T1_ComputeAAColorsX( unsigned long fg, unsigned long bg, int nolevels); int T1_GetDepthOfDrawable( Drawable drawable); void T1_LogicalPositionX( int pos_switch); #else extern Display *T1_display; extern int T1_SetX11Params( Display *display, Visual *visual, unsigned int depth, Colormap colormap); extern GLYPH *T1_SetCharX( Drawable d, GC gc, int mode, int x, int y, int FontID, char charcode, float size, T1_TMATRIX *transform); extern GLYPH *T1_SetStringX( Drawable d, GC gc, int mode, int x, int y, int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern GLYPH *T1_SetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, float size, float width, float height, T1_TMATRIX *transform); extern GLYPH *T1_AASetCharX( Drawable d, GC gc, int mode, int x, int y, int FontID, char charcode, float size, T1_TMATRIX *transform); extern GLYPH *T1_AASetStringX( Drawable d, GC gc, int mode, int x, int y, int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern GLYPH *T1_AASetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest, int FontID, float size, float width, float height, T1_TMATRIX *transform); extern int T1_ComputeAAColorsX( unsigned long fg, unsigned long bg, int nolevels); extern int T1_GetDepthOfDrawable( Drawable drawable); extern void T1_LogicalPositionX( int pos_switch); #endif t1lib-5.1.2/lib/t1lib/t1set.c0000644000175000001440000020635410733501626014263 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1set.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-01 ----- Description: This file is part of the t1-library. It contains functions for setting characters and strings of characters. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1SET_C #include #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include #include "../type1/ffilest.h" #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "t1types.h" #include "t1extern.h" #include "t1set.h" #include "t1load.h" #include "t1finfo.h" #include "t1misc.h" #include "t1base.h" /* As a fall back */ #ifndef T1_AA_TYPE16 #define T1_AA_TYPE16 short #endif #ifndef T1_AA_TYPE32 #define T1_AA_TYPE32 int #endif extern char *t1_get_abort_message( int number); extern struct region *Interior(struct segment *path, int fillrule); extern unsigned T1_AA_TYPE32 T1aa_bg; /* white value */ static void T1_ComputeLineParameters( int FontID, int width, int mode, float size, int *startx, int *endx, int *starty, int *endy); static int T1_bit=T1GLYPH_BIT; static int T1_byte; static int T1_pad; static int T1_wordsize; static int c_shift=8; static int s_shift=16; static int l_shift=32; /* bin_dump(): Print a binary dump of a byte, short and long variable (used for debug purposes only): */ static void bin_dump_c(unsigned char value, char space_flag) { int i,j; for (i=0;i<=7;i++){ if ((j=((value)>>i)&0x01)) printf("X"); else printf("."); } if (space_flag) printf(" "); } static void bin_dump_s(unsigned short value, char space_flag) { int i,j; if (T1_CheckEndian()){ for (i=8;i<=15;i++){ if ((j=((value)>>i)&0x01)) printf("X"); else printf("."); } for (i=0;i<=7;i++){ if ((j=((value)>>i)&0x01)) printf("X"); else printf("."); } } else{ for (i=0;i<=15;i++){ if ((j=((value)>>i)&0x01)) printf("X"); else printf("."); } } if (space_flag) printf(" "); } static void bin_dump_l(unsigned long value, char space_flag) { int i,j; if (T1_CheckEndian()){ for (i=24;i<=31;i++){ if ((j=((value)>>i)&0x01)) printf("X"); else printf("."); } for (i=16;i<=23;i++){ if ((j=((value)>>i)&0x01)) printf("X"); else printf("."); } for (i=8;i<=15;i++){ if ((j=((value)>>i)&0x01)) printf("X"); else printf("."); } for (i=0;i<=7;i++){ if ((j=((value)>>i)&0x01)) printf("X"); else printf("."); } } else{ for (i=0;i<=31;i++){ if ((j=((value)>>i)&0x01)) printf("X"); else printf("."); } } if (space_flag) printf(" "); } /* T1_SetChar(...): Generate the bitmap for a character */ GLYPH *T1_SetChar( int FontID, char charcode, float size, T1_TMATRIX *transform) { int i; int mode; struct region *area; struct XYspace *Current_S; int cache_flag = 1; int rot_flag = 0; unsigned char ucharcode; float strokewidth = 0.0f; volatile int strokeextraflag = 0; FONTSIZEDEPS *font_ptr; FONTPRIVATE *fontarrayP; volatile int memsize=0; LONG h,w; LONG paddedW; /* We don't implement underlining for characters, but the rasterer implements it. Thus, we use a modflag of constant 0 */ int modflag=0; static GLYPH glyph={NULL,{0,0,0,0,0,0},NULL,1}; /* We return to this if something goes wrong deep in the rasterizer */ if ((i=setjmp( stck_state))!=0) { T1_errno=T1ERR_TYPE1_ABORT; sprintf( err_warn_msg_buf, "t1_abort: Reason: %s", t1_get_abort_message( i)); T1_PrintLog( "T1_SetChar()", err_warn_msg_buf, T1LOG_ERROR); return( NULL); } ucharcode=(unsigned char)charcode; /* Reset character glyph, if necessary */ if (glyph.bits!=NULL){ free(glyph.bits); glyph.bits=NULL; } glyph.metrics.leftSideBearing=0; glyph.metrics.rightSideBearing=0; glyph.metrics.advanceX=0; glyph.metrics.advanceY=0; glyph.metrics.ascent=0; glyph.metrics.descent=0; glyph.pFontCacheInfo=NULL; glyph.bpp=1; /* First, check for a correct ID */ i=T1_CheckForFontID(FontID); if (i==-1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* if necessary load font into memory */ if (i==0) if (T1_LoadFont(FontID)) return(NULL); /* Check for valid size */ if (size<=0.0){ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } /* Assign padding value */ T1_pad=pFontBase->bitmap_pad; if (pFontBase->endian) T1_byte=1; else T1_byte=0; T1_wordsize=T1_pad; fontarrayP=&(pFontBase->pFontArray[FontID]); /* Check if rotation is requested */ if (transform!=NULL){ /* there's rotation requested => do not cache the resulting bitmap */ rot_flag=1; cache_flag=0; } else { rot_flag=0; cache_flag=1; } /* handle stroking stuff */ if ( pFontBase->pFontArray[FontID].info_flags & RASTER_STROKED) { /* Stroking requested. If caching is not desired, clear cache_flag. Otherwise, leave it unaffected. */ if ( (pFontBase->pFontArray[FontID].info_flags & CACHE_STROKED) == 0 ) { /* filled glyphs are cached, indicate that character is to be rendered on the fly and not to be cached */ strokeextraflag = 1; cache_flag = 0; } strokewidth = pFontBase->pFontArray[FontID].StrokeWidth; } else { /* filling requested. */ if ( (pFontBase->pFontArray[FontID].info_flags & CACHE_STROKED) != 0 ) { /* stroked glyphs are cached, indicate that character is to be rendered on the fly and not to be cached */ strokeextraflag = 1; cache_flag = 0; } strokewidth = 0.0f; } /* font is now loaded into memory => Check for size: */ if ((font_ptr=T1int_QueryFontSize( FontID, size, NO_ANTIALIAS))==NULL){ font_ptr=T1int_CreateNewFontSize( FontID, size, NO_ANTIALIAS); if (font_ptr==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } } else {/* size is already existent in cache */ /* If no rotation and no noncached stroking , try to get character from cache */ if ( (rot_flag==0) && (strokeextraflag==0) ) { /* we don't use the .bits entry to check because in newer releases also white glyphs (bits=NULL) are allowed. Rather, we check whether bpp > 0! */ if (font_ptr->pFontCache[ucharcode].bpp > 0){ /* Character is already in Chache -> create a copy of cache and return a pointer to the result: */ memcpy( &glyph, &(font_ptr->pFontCache[ucharcode]), sizeof(GLYPH)); paddedW = PAD((glyph.metrics.rightSideBearing-glyph.metrics.leftSideBearing), T1_pad); if (font_ptr->pFontCache[ucharcode].bits!=NULL) { memsize = (glyph.metrics.ascent-glyph.metrics.descent)*paddedW / 8; glyph.bits = (char *)malloc(memsize*sizeof( char)); if (glyph.bits == NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } memcpy( glyph.bits, font_ptr->pFontCache[ucharcode].bits, memsize); } return(&(glyph)); } } } /* Setup an appropriate charspace matrix. Note that the rasterizer assumes vertical values with inverted sign! Transformation should create a copy of the local charspace matrix which then still has to be made permanent. */ if (rot_flag){ Current_S=(struct XYspace *) Permanent(Scale(Transform (font_ptr->pCharSpaceLocal, transform->cxx, - transform->cxy, transform->cyx, - transform->cyy), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } else{ Current_S=(struct XYspace *) Permanent(Scale(Transform(font_ptr->pCharSpaceLocal, 1.0, 0.0, 0.0, -1.0), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } /* fnt_ptr now points to the correct FontSizeDeps-struct => lets now raster the character */ mode=0; area=fontfcnB( FontID, modflag, Current_S, fontarrayP->pFontEnc, ucharcode, &mode, fontarrayP->pType1Data, DO_RASTER, strokewidth); KillSpace (Current_S); /* fill the glyph-structure */ if (mode > 0) { sprintf( err_warn_msg_buf, "fontfcnB() set mode=%d", mode); T1_PrintLog( "T1_SetChar()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=mode; return(NULL); } if (area == NULL){ T1_PrintLog( "T1_SetChar()", "area=NULL returned by fontfcnB()", T1LOG_WARNING); T1_errno=mode; return(NULL); } h = area->ymax - area->ymin; w = area->xmax - area->xmin; if (mode == FF_NOTDEF_SUBST) { sprintf( err_warn_msg_buf, "\".notdef\" substituted for character %d from font %d", ucharcode, FontID); T1_PrintLog( "T1_SetChar()", err_warn_msg_buf, T1LOG_WARNING); mode=0; } paddedW = PAD(w, T1_pad); if (h > 0 && w > 0) { memsize = h * paddedW / 8 + 1; /* This is for the users copy of the character, for security-reasons the original pointer to the cache area is not used. The entry glyph.bits is free'ed every time this function is called: */ glyph.bits = (char *)malloc(memsize*sizeof( char)); if (glyph.bits == NULL){ T1_errno=T1ERR_ALLOC_MEM; /* make sure to get rid of 'area' before leaving! */ KillRegion (area); return(NULL); } } else { h = w = 0; area->xmin = area->xmax = 0; area->ymin = area->ymax = 0; } /* Assign metrics */ glyph.metrics.leftSideBearing = area->xmin; glyph.metrics.advanceX = NEARESTPEL(area->ending.x - area->origin.x); glyph.metrics.advanceY = - NEARESTPEL(area->ending.y - area->origin.y); glyph.metrics.rightSideBearing = area->xmax; glyph.metrics.descent = - area->ymax; glyph.metrics.ascent = - area->ymin; if (h > 0 && w > 0) { (void) memset(glyph.bits, 0, memsize); fill(glyph.bits, h, paddedW, area, T1_byte, T1_bit, T1_wordsize ); } /* make sure to get rid of 'area' before leaving! */ KillRegion (area); /* Cache glyph if requested, also if it contains only white space */ if (cache_flag){ /* Copy glyph to cache but be careful not to modify the pixmap entry */ font_ptr->pFontCache[ucharcode].metrics.leftSideBearing=glyph.metrics.leftSideBearing; font_ptr->pFontCache[ucharcode].metrics.rightSideBearing=glyph.metrics.rightSideBearing; font_ptr->pFontCache[ucharcode].metrics.advanceX=glyph.metrics.advanceX; font_ptr->pFontCache[ucharcode].metrics.advanceY=glyph.metrics.advanceY; font_ptr->pFontCache[ucharcode].metrics.ascent=glyph.metrics.ascent; font_ptr->pFontCache[ucharcode].metrics.descent=glyph.metrics.descent; font_ptr->pFontCache[ucharcode].pFontCacheInfo=glyph.pFontCacheInfo; font_ptr->pFontCache[ucharcode].bpp=glyph.bpp; if (glyph.bits==NULL) { font_ptr->pFontCache[ucharcode].bits=NULL; } else { font_ptr->pFontCache[ucharcode].bits = (char *)malloc(memsize*sizeof( char)); if (font_ptr->pFontCache[ucharcode].bits == NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } /* ... and copy bitmap to cache area: */ memcpy( font_ptr->pFontCache[ucharcode].bits, glyph.bits, memsize); } } return(&glyph); } /* T1_SetString(...): Generate the bitmap for a string of characters */ GLYPH *T1_SetString( int FontID, char *string, volatile int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform) { volatile int i, j=0, k; int mode; /* initialize this to NULL just to be on the safe side */ struct region *area = NULL; struct XYspace *Current_S, *S; int cache_flag=1; volatile int rot_flag=0; int *kern_pairs; /* use for accessing the kern pairs if kerning is requested */ int no_chars=0; /* The number of characters in the string */ static int lastno_chars=0; float factor; long spacewidth; /* This is given to fontfcnb_string() */ float strokewidth = 0.0f; volatile int strokeextraflag = 0; FONTSIZEDEPS *font_ptr; FONTPRIVATE *fontarrayP; volatile int memsize=0; long h,w; long paddedW, char_paddedW; int h_anchor, v_anchor; static int *pixel_h_anchor_corr=NULL; static int *flags=NULL; int lsb_min, rsb_max; long overallwidth=0; long overallascent=0; long overalldescent=0; int underline_startx, underline_starty, underline_endx, underline_endy; int overline_startx, overline_starty, overline_endx, overline_endy; int overstrike_startx, overstrike_starty, overstrike_endx, overstrike_endy; int start, middle; int afm_ind; char startmask, endmask; static unsigned char *r2lstring; static int r2l_len=0; static GLYPH string_glyph={NULL,{0,0,0,0,0,0},NULL,1}; GLYPH *currchar; /* The following are for bitmap blitting */ long BitShift; long ByteOffset; /* pad=8 */ unsigned T1_AA_TYPE16 BitBuf_c; unsigned char *p_c; unsigned char *Target_c; /* pad=16 */ unsigned T1_AA_TYPE32 BitBuf_s; unsigned T1_AA_TYPE16 *p_s; unsigned T1_AA_TYPE16 *Target_s; #ifdef T1_AA_TYPE64 /* pad=32 */ unsigned T1_AA_TYPE64 BitBuf_l; unsigned T1_AA_TYPE32 *p_l; unsigned T1_AA_TYPE32 *Target_l; #endif unsigned char *ustring; /* We return to this if something goes wrong deep in the rasterizer */ if ((i=setjmp( stck_state))!=0) { T1_errno=T1ERR_TYPE1_ABORT; sprintf( err_warn_msg_buf, "t1_abort: Reason: %s", t1_get_abort_message( i)); T1_PrintLog( "T1_SetString()", err_warn_msg_buf, T1LOG_ERROR); return( NULL); } /* force string elements into unsigned */ ustring=(unsigned char*)string; /* Check for valid string */ if (string==NULL){ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } /* Reorganize if required */ if (modflag & T1_RIGHT_TO_LEFT){ if (len) i=len; else i=j=strlen( string); if (i+1>r2l_len){ if (r2lstring!=NULL) free( r2lstring); r2lstring=(unsigned char *)malloc( (i+1)*sizeof(char)); r2l_len=i+1; } j--; while ( i--) { r2lstring[j-i]=ustring[i]; } ustring=r2lstring; len=j+1; } /* Reset string glyph, if necessary */ if (string_glyph.bits!=NULL){ free(string_glyph.bits); string_glyph.bits=NULL; } string_glyph.metrics.leftSideBearing=0; string_glyph.metrics.rightSideBearing=0; string_glyph.metrics.advanceX=0; string_glyph.metrics.advanceY=0; string_glyph.metrics.ascent=0; string_glyph.metrics.descent=0; string_glyph.pFontCacheInfo=NULL; string_glyph.bpp=1; /* We don't want to cache the resulting bitmap: */ cache_flag=0; /* First, check for a correct ID */ i=T1_CheckForFontID(FontID); if (i==-1){ T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* if necessary load font into memory */ if (i==0) if (T1_LoadFont(FontID)) return(NULL); /* If no AFM info is present, we return an error */ if (pFontBase->pFontArray[FontID].pAFMData==NULL) { T1_errno=T1ERR_NO_AFM_DATA; return(NULL); } /* Check for valid size */ if (size<=0.0){ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } /* Assign padding value */ T1_pad=pFontBase->bitmap_pad; if (pFontBase->endian) T1_byte=1; else T1_byte=0; T1_wordsize=T1_pad; fontarrayP=&(pFontBase->pFontArray[FontID]); /* Check if rotation is requested */ if (transform!=NULL){ /* there's rotation requested => do not cache the resulting bitmap */ rot_flag=1; cache_flag=0; } /* handle stroking stuff */ if ( pFontBase->pFontArray[FontID].info_flags & RASTER_STROKED) { /* Stroking requested. If caching is not desired, clear cache_flag. Otherwise, leave it unaffected. */ if ( (pFontBase->pFontArray[FontID].info_flags & CACHE_STROKED) == 0 ) { /* filled glyphs are cached, indicate that character is to be rendered on the fly and not to be cached */ strokeextraflag = 1; cache_flag = 0; } strokewidth = pFontBase->pFontArray[FontID].StrokeWidth; } else { /* filling requested. */ if ( (pFontBase->pFontArray[FontID].info_flags & CACHE_STROKED) != 0 ) { /* stroked glyphs are cached, indicate that character is to be rendered on the fly and not to be cached */ strokeextraflag = 1; cache_flag = 0; } strokewidth = 0.0f; } /* font is now loaded into memory => Check for size: */ if ((font_ptr=T1int_QueryFontSize( FontID, size, NO_ANTIALIAS))==NULL){ font_ptr=T1int_CreateNewFontSize( FontID, size, NO_ANTIALIAS); if (font_ptr==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } } /* Now comes string specific stuff: Get length of string and create an array of integers where to store the bitmap positioning dimens: */ if (len<0){ /* invalid length */ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } if (len==0) /* should be computed assuming "normal" 0-terminated string, or R2L-part has already been computed! */ no_chars=strlen(string); else /* use value given on command line */ no_chars=len; /* If necessary, allocate memory */ if (no_chars>lastno_chars){ if (pixel_h_anchor_corr!=NULL){ free(pixel_h_anchor_corr); } if (flags!=NULL){ free(flags); } pixel_h_anchor_corr=(int *)calloc(no_chars, sizeof(int)); flags=(int *)calloc(no_chars, sizeof(int)); lastno_chars=no_chars; } else{ /* Reset flags and position array */ for (i=0; ipCharSpaceLocal, transform->cxx, - transform->cxy, transform->cyx, - transform->cyy), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } else{ Current_S=(struct XYspace *) Permanent(Scale(Transform(font_ptr->pCharSpaceLocal, 1.0, 0.0, 0.0, -1.0), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } /* Compute the correct spacewidth value (in charspace units). The value supplied by the user is interpreted as an offset in char space units: */ spacewidth=T1_GetCharWidth(FontID,fontarrayP->space_position)+spaceoff; /* The following if (rot_flag==0){ ... } contains the whole code to execute when the string is oriented horizontal. Then, there's the possibility of concatenating most probably existent bitmaps from the Cache, which should be much faster than every time raster all the characters. */ /* First, ensure that all needed characters are in the Cache; if not, generate them */ if ( (rot_flag==0) && (strokeextraflag==0) ){ overallwidth=0; for (i=0; ipFontCache[ustring[i]]); if (currchar->bpp<1) { flags[i]=0; mode=0; /* Don't try to generate space-character: */ if (ustring[i]!=fontarrayP->space_position){ /* Note: Never underline etc. cached chars --> modflag=0 */ area=fontfcnB( FontID, 0, Current_S, fontarrayP->pFontEnc, ustring[i], &mode, fontarrayP->pType1Data, DO_RASTER, strokewidth); /* fill the glyph-structure */ if (mode > 0) { sprintf( err_warn_msg_buf, "fontfcnB() set mode=%d", mode); T1_PrintLog( "T1_SetString()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=mode; /* Make sure to free the region if it's non-NULL */ if (area){ KillRegion (area); } return(NULL); } if (area == NULL){ T1_PrintLog( "T1_SetString()", "area=NULL returned by fontfcnB()", T1LOG_WARNING); T1_errno=mode; return(NULL); } if (mode == FF_NOTDEF_SUBST) { sprintf( err_warn_msg_buf, "\".notdef\" substituted in string[%d] (=character %d) from font %d", i, ustring[i], FontID); T1_PrintLog( "T1_SetString()", err_warn_msg_buf, T1LOG_WARNING); mode=0; flags[i]=1; /* indicates that .notdef has been substituted */ } h = area->ymax - area->ymin; w = area->xmax - area->xmin; if (h > 0 && w > 0) { /* bitmap contains pixels */ paddedW = PAD(w, T1_pad); memsize = h * paddedW / 8 + 1; currchar->bits = (char *)malloc(memsize*sizeof( char)); if (currchar->bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; /* Make sure to free up the region if it's non-NULL */ if (area){ KillRegion (area); } return(NULL); } (void) memset(currchar->bits, 0, memsize); fill(currchar->bits, h, paddedW, area, T1_byte, T1_bit, T1_wordsize ); } /* area valid -> set metrics in cache for that character */ currchar->metrics.leftSideBearing = area->xmin; currchar->metrics.advanceX = NEARESTPEL(area->ending.x - area->origin.x); currchar->metrics.advanceY = - NEARESTPEL(area->ending.y - area->origin.y); currchar->metrics.rightSideBearing = area->xmax; currchar->metrics.descent = - area->ymax; currchar->metrics.ascent = - area->ymin; currchar->bpp=1; /* By this point, it's clear that the 'area' struct exists, and that we no longer need it, so free it up. */ KillRegion (area); } } /* end of if ( ... ), needed characters are now in cache! */ } /* end of for (ipFontArray[FontID].pEncMap[(int) ustring[i]]; /* Advance to next character in high resolution */ if (ustring[i]==fontarrayP->space_position) h_anchor +=(int)spacewidth; /* check for a substituted char or notdef and get missing escapement */ else if (afm_ind==0) { /* Setup apropriate charspace matrix */ S=(struct XYspace *)IDENTITY; /* Make this permanent so that scaling it in fontfcnB_ByName will make a duplicate of it, and this duplicate can thus be safely destroyed. Fixes the somewhat smaller memory leak */ S=(struct XYspace *)Permanent (Transform(S, pFontBase->pFontArray[FontID].FontTransform[0], pFontBase->pFontArray[FontID].FontTransform[1], pFontBase->pFontArray[FontID].FontTransform[2], pFontBase->pFontArray[FontID].FontTransform[3])); /* Get metrics values */ area=fontfcnB_ByName( FontID, 0, S, ".notdef", &mode, pFontBase->pFontArray[FontID].pType1Data, DO_RASTER); if (area==NULL || mode!=0){ sprintf( err_warn_msg_buf, "Could not get charspace representation of \".notdef\", Font %d, mode=%d!", FontID, mode); T1_PrintLog( "T1_SetString()", err_warn_msg_buf, T1LOG_ERROR); T1_errno=mode; return( NULL); } /* value to add to hanchor */ h_anchor +=NEARESTPEL(area->ending.x); /* make sure to free S */ if (S) { KillSpace (S); } /* make sure to free area */ if (area) { KillRegion (area); } } else{ currchar=&(font_ptr->pFontCache[ustring[i]]); pixel_h_anchor_corr[i]=((int)floor(h_anchor*factor+0.5)); /* Store maximum rsb ...*/ if ( pixel_h_anchor_corr[i]+currchar->metrics.rightSideBearing > rsb_max){ rsb_max=pixel_h_anchor_corr[i]+currchar->metrics.rightSideBearing; } /* ... and minimum lsb */ if ( pixel_h_anchor_corr[i]+currchar->metrics.leftSideBearing < lsb_min){ lsb_min=pixel_h_anchor_corr[i]+currchar->metrics.leftSideBearing; } /* Advance by current chars width */ /* h_anchor +=T1_GetCharWidth( FontID, ustring[i]); */ if (afm_ind>0) { /* we have a standard character */ h_anchor +=(fontarrayP->pAFMData->cmi[afm_ind-1].wx) * fontarrayP->extend; } else { /* afm_ind must be negative so that we have a composite char */ h_anchor +=(fontarrayP->pAFMData->ccd[-(afm_ind+1)].wx) * fontarrayP->extend; } /* If kerning, insert kerning amount */ if ((imetrics.ascent>overallascent) overallascent=currchar->metrics.ascent; if (currchar->metrics.descentmetrics.descent; } } string_glyph.metrics.advanceX=(int)floor(h_anchor*factor+0.5); /* We have to check for underlining and such things. They may affect the bounding box of the glyph */ if (modflag & T1_UNDERLINE){ T1_ComputeLineParameters( FontID, T1_UNDERLINE, string_glyph.metrics.advanceX, size, &underline_startx, &underline_endx, &underline_starty, &underline_endy); /* Check whether rsb is affected ...*/ if ( underline_endx > rsb_max){ rsb_max=underline_endx; } /* ... and for lsb */ if ( underline_startx < lsb_min){ lsb_min=underline_startx; } /* Vertical metrics may also be affected. */ if (underline_starty > overallascent) overallascent=underline_starty; if (underline_endy < overalldescent) overalldescent=underline_endy; } if (modflag & T1_OVERLINE){ T1_ComputeLineParameters( FontID, T1_OVERLINE, string_glyph.metrics.advanceX, size, &overline_startx, &overline_endx, &overline_starty, &overline_endy); /* Check whether rsb is affected ...*/ if ( overline_endx > rsb_max){ rsb_max=overline_endx; } /* ... and for lsb */ if ( overline_startx < lsb_min){ lsb_min=overline_startx; } /* Vertical metrics may also be affected. */ if (overline_starty > overallascent) overallascent=overline_starty; if (overline_endy < overalldescent) overalldescent=overline_endy; } if (modflag & T1_OVERSTRIKE){ T1_ComputeLineParameters( FontID, T1_OVERSTRIKE, string_glyph.metrics.advanceX, size, &overstrike_startx, &overstrike_endx, &overstrike_starty, &overstrike_endy); /* Check whether rsb is affected ...*/ if ( overstrike_endx > rsb_max){ rsb_max=overstrike_endx; } /* ... and for lsb */ if ( overstrike_startx < lsb_min){ lsb_min=overstrike_startx; } /* Vertical metrics may also be affected. */ if (overstrike_starty > overallascent) overallascent=overstrike_starty; if (overstrike_endy < overalldescent) overalldescent=overstrike_endy; } /* Set the string-glyphs' metrics: */ /* Bearings: */ string_glyph.metrics.rightSideBearing=rsb_max; string_glyph.metrics.leftSideBearing=lsb_min; /* ascent and descent: */ string_glyph.metrics.ascent=overallascent; string_glyph.metrics.descent=overalldescent; /* Now, allocate memory for the resulting bitmap and set it to 0: */ h=overallascent - overalldescent; w=string_glyph.metrics.rightSideBearing-string_glyph.metrics.leftSideBearing; paddedW = PAD( w, T1_pad); if ( h > 0 && w > 0){ memsize = h * paddedW / 8; /* We alloc some amount more in order to avoid alignment check in bit-blitting loop */ memsize += T1_pad/8; string_glyph.bits = (char *)malloc( memsize); if (string_glyph.bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; return(NULL); } } else { /* We have only characters without pixels in the string -> we allow this and only set the advance width in the glyph. The bits pointer will be NULL. We reset rsb and lsb */ string_glyph.metrics.rightSideBearing=0; string_glyph.metrics.leftSideBearing=0; string_glyph.metrics.ascent=0; string_glyph.metrics.descent=0; } if (string_glyph.bits != NULL) { memset(string_glyph.bits, 0, memsize); /* Now comes the loop for bitmap blitting: */ for (i=0;ipFontCache[ustring[i]]); /* First, we have to correct the positioning values to refer to the bitmap BBox */ pixel_h_anchor_corr[i] -= lsb_min; pixel_h_anchor_corr[i] += currchar->metrics.leftSideBearing; /* Compute vertical anchor for current char-bitmap: */ v_anchor=overallascent - currchar->metrics.ascent; char_paddedW=PAD( currchar->metrics.rightSideBearing - currchar->metrics.leftSideBearing , T1_pad); /* We have to check for Big Endian. In that case, we have to act on byte-level */ if (T1_byte){ BitShift = pixel_h_anchor_corr[i] % 8; ByteOffset = pixel_h_anchor_corr[i] / 8; } else { BitShift = pixel_h_anchor_corr[i] % T1_pad; ByteOffset = pixel_h_anchor_corr[i] / T1_pad; if (T1_pad==32) ByteOffset *=4; else if (T1_pad==16) ByteOffset *=2; } #ifdef T1_AA_TYPE64 /* We compile this part only if long is 64 bits to be conform to ANSI C */ if (T1_pad==32 && T1_byte==0){ /* The following loop steps through the lines of the character bitmap: */ for (j=0;jmetrics.ascent-currchar->metrics.descent;j++){ Target_l= (unsigned T1_AA_TYPE32 *)(string_glyph.bits +((v_anchor+j)*paddedW/8) +ByteOffset); /* The following loop copies the scanline of a character bitmap: */ if (currchar->bits != NULL) { p_l = (unsigned T1_AA_TYPE32 *)(currchar->bits+(char_paddedW/8*j)); if (BitShift == 0) { for (k=char_paddedW >> 5; k; k--) *Target_l++ |= *p_l++; } else { for (k=0; k < char_paddedW / 32 ; k++){ BitBuf_l= ((T1_AA_TYPE64)(*p_l++)) << BitShift; *Target_l++ |= BitBuf_l; *Target_l |= BitBuf_l>>l_shift; } /* End of for ( .. ) stepping through columns */ } } /* End of if(currchar->bits != NULL) */ } /* End of for( .. ) steppin' through lines of char bitmap */ }/* end if (T1_pad==32) */ else #endif if (T1_pad==16 && T1_byte==0){ /* The following loop steps through the lines of the character bitmap: */ for (j=0;jmetrics.ascent-currchar->metrics.descent;j++){ Target_s= (unsigned T1_AA_TYPE16 *)(string_glyph.bits +((v_anchor+j)*paddedW/8) +ByteOffset); /* The following loop copies the scanline of a character bitmap: */ if (currchar->bits != NULL) { p_s = (unsigned T1_AA_TYPE16 *)(currchar->bits+(char_paddedW/8*j)); if (BitShift == 0) { for (k=char_paddedW >> 4; k; k--) *Target_s++ |= *p_s++; } else{ for (k=char_paddedW >> 4; k; k--){ BitBuf_s= ((T1_AA_TYPE32)(*p_s++))<>s_shift; } /* End of for ( .. ) stepping through columns */ } } /* End of if(currchar->bits != NULL) */ } /* End of for( .. ) steppin' through lines of char bitmap */ }/* end if (T1_pad==16 */ else{ /* T1_pad = 8 or Big Endian machine */ /* The following loop steps through the lines of the character bitmap: */ for (j=0;jmetrics.ascent-currchar->metrics.descent;j++){ Target_c= (unsigned char *)(string_glyph.bits +((v_anchor+j)*paddedW/8) +ByteOffset); /* The following loop copies the scanline of a character bitmap: */ if (currchar->bits != NULL) { p_c = (unsigned char *)(currchar->bits+(char_paddedW/8*j)); if (BitShift == 0){ for (k=char_paddedW >> 3; k; k--) *Target_c++ |= *p_c++; } else{ for (k=char_paddedW >> 3; k; k--){ BitBuf_c = ((T1_AA_TYPE16)(*p_c++)) << BitShift; *Target_c++ |= BitBuf_c; *Target_c |= BitBuf_c>>c_shift; } /* End of for ( .. ) stepping through columns */ } } /* End of if(currchar->bits != NULL) */ } /* End of for( .. ) steppin' through lines of char bitmap */ } /* end if (T1_pad==8) and/or BigEndian */ } } /* if (string_glyph.bits != NULL) */ /* We now put the underlining rule on the glyph */ if (modflag & T1_UNDERLINE){ start=-string_glyph.metrics.leftSideBearing; for (i=string_glyph.metrics.ascent-underline_starty; islant+0.5); middle = ((start+string_glyph.metrics.advanceX) / 8) - (start / 8); startmask = 0xFF << (start % 8); endmask = (char) ~(0xFF << ((start+string_glyph.metrics.advanceX) % 8)); Target_c= (unsigned char *)(string_glyph.bits +(i*paddedW/8) + (start / 8)); if (!Target_c) { continue; } j=middle; if (j == 0) *Target_c++ |= startmask & endmask; else { *Target_c++ |= startmask; while (--j > 0) *Target_c++ = (unsigned char) 0xFF; if ((endmask)) *Target_c |= endmask; } } } /* Put an overstrike rule on the glyph */ if (modflag & T1_OVERSTRIKE){ start=-string_glyph.metrics.leftSideBearing; for (i=string_glyph.metrics.ascent-overstrike_starty; islant+0.5); middle = ((start+string_glyph.metrics.advanceX) / 8) - (start / 8); startmask = 0xFF << (start % 8); endmask = (char) ~(0xFF << ((start+string_glyph.metrics.advanceX) % 8)); Target_c= (unsigned char *)(string_glyph.bits +(i*paddedW/8) + (start / 8)); if (!Target_c) { continue; } j=middle; if (j == 0) *Target_c++ |= startmask & endmask; else { *Target_c++ |= startmask; while (--j > 0) *Target_c++ = (unsigned char) 0xFF; if ((endmask)) *Target_c |= endmask; } } } /* Put an overline rule */ if (modflag & T1_OVERLINE){ start=-string_glyph.metrics.leftSideBearing; for (i=string_glyph.metrics.ascent-overline_starty; islant+0.5); middle = ((start+string_glyph.metrics.advanceX) / 8) - (start / 8); startmask = 0xFF << (start % 8); endmask = (char) ~(0xFF << ((start+string_glyph.metrics.advanceX) % 8)); Target_c= (unsigned char *)(string_glyph.bits +(i*paddedW/8) + (start / 8)); if (!Target_c) { continue; } j=middle; if (j == 0) *Target_c++ |= startmask & endmask; else { *Target_c++ |= startmask; while (--j > 0) *Target_c++ = (unsigned char) 0xFF; if ((endmask)) *Target_c |= endmask; } } } /* Check for writing direction and re-compute dimensions appropriately: */ if (modflag & T1_RIGHT_TO_LEFT){ string_glyph.metrics.advanceX *= -1; string_glyph.metrics.leftSideBearing += string_glyph.metrics.advanceX; string_glyph.metrics.rightSideBearing += string_glyph.metrics.advanceX; } return(&string_glyph); } /* end of "if (rot_flag==0.0)" */ /* fnt_ptr now points to the correct FontSizeDeps-struct => lets now raster the character */ mode=0; kern_pairs=(int *)calloc(no_chars, sizeof(int)); if ((modflag & T1_KERNING)) for (i=0; ipFontEnc, ustring, no_chars, &mode, fontarrayP->pType1Data, kern_pairs, spacewidth, DO_RASTER, strokewidth); KillSpace (Current_S); /* In all cases, free memory for kerning pairs */ free(kern_pairs); /* fill the string_glyph-structure */ if (mode > 0) { sprintf( err_warn_msg_buf, "fontfcnB() set mode=%d", mode); T1_PrintLog( "T1_SetString()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=mode; /* make sure to get rid of area if it's there */ if (area){ KillRegion (area); } return(NULL); } if (area == NULL){ T1_PrintLog( "T1_SetString()", "area=NULL returned by fontfcnB()", T1LOG_WARNING); T1_errno=mode; return(NULL); } if (mode == FF_NOTDEF_SUBST) { sprintf( err_warn_msg_buf, "\".notdef\" substituted somewhere in string from font %d", FontID); T1_PrintLog( "T1_SetString()", err_warn_msg_buf, T1LOG_WARNING); mode=0; } h = area->ymax - area->ymin; w = area->xmax - area->xmin; paddedW = PAD(w, T1_pad); if (h > 0 && w > 0) { memsize = h * paddedW / 8 + 1; /* This is for the users copy of the character, for security-reasons the original pointer to the cache area is not used. The entry string_glyph.bits is free'ed every time this function is called: */ string_glyph.bits = (char *)malloc(memsize*sizeof( char)); if (string_glyph.bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; /* make sure to get rid of area if it's there */ if (area){ KillRegion (area); } /* it's safe to free this, since this is a rotated glyph and therefore it's a copy of the original one */ return(NULL); } } else { h = w = 0; area->xmin = area->xmax = 0; area->ymin = area->ymax = 0; } string_glyph.metrics.leftSideBearing=area->xmin; string_glyph.metrics.advanceX=NEARESTPEL(area->ending.x - area->origin.x); string_glyph.metrics.advanceY=-NEARESTPEL(area->ending.y - area->origin.y); string_glyph.metrics.rightSideBearing=area->xmax; string_glyph.metrics.descent=-area->ymax; string_glyph.metrics.ascent=-area->ymin; if (h > 0 && w > 0) { (void) memset(string_glyph.bits, 0, memsize); fill(string_glyph.bits, h, paddedW, area, T1_byte, T1_bit, T1_wordsize ); } else { /* We have no black pixels */ string_glyph.metrics.leftSideBearing=0; string_glyph.metrics.advanceX=NEARESTPEL(area->ending.x - area->origin.x); string_glyph.metrics.advanceY=-NEARESTPEL(area->ending.y - area->origin.y); string_glyph.metrics.rightSideBearing=0; string_glyph.metrics.descent=0; string_glyph.metrics.ascent=0; } /* make sure to get rid of area if it's there */ if (area){ KillRegion (area); } /* Check for writing direction and re-compute dimensions appropriately: */ if (modflag & T1_RIGHT_TO_LEFT){ string_glyph.metrics.advanceX *= -1; string_glyph.metrics.advanceY *= -1; string_glyph.metrics.leftSideBearing += string_glyph.metrics.advanceX; string_glyph.metrics.rightSideBearing += string_glyph.metrics.advanceX; string_glyph.metrics.descent += string_glyph.metrics.advanceY; string_glyph.metrics.ascent += string_glyph.metrics.advanceY; } return(&string_glyph); } void fill(dest, h, w, area, byte, bit, wordsize) register char *dest; /* destination bitmap */ int h,w; /* dimensions of 'dest', w padded */ register struct region *area; /* region to write to 'dest' */ int byte,bit; /* flags; LSBFirst or MSBFirst */ int wordsize; /* number of bits per word for LSB/MSB purposes */ { register struct edgelist *edge; /* for looping through edges */ register char *p; /* current scan line in 'dest' */ register int y; /* for looping through scans */ register int wbytes = w / 8; /* number of bytes in width */ register pel *leftP,*rightP; /* pointers to X values, left and right */ int xmin = area->xmin; /* upper left X */ int ymin = area->ymin; /* upper left Y */ for (edge = area->anchor; VALIDEDGE(edge); edge = edge->link->link) { p = dest + (edge->ymin - ymin) * wbytes; leftP = edge->xvalues; rightP = edge->link->xvalues; for (y = edge->ymin; y < edge->ymax; y++) { fillrun(p, *leftP++ - xmin , *rightP++ - xmin, bit); p += wbytes; } } /* Now, as an afterthought, we'll go reorganize if odd byte order requires it: */ /* We do not reorganize since t1lib internally always uses LSBFirst */ /* if ( 0 && wordsize != 8) { register int i; printf("Reorganizing data ..\n"); switch (wordsize) { case 16: { register unsigned short data,*p; p = (unsigned short *) dest; for (i = h * w /16; --i >= 0;) { data = *p; *p++ = (data << 8) + (data >> 8); } break; } case 64: case 32: { register ULONG data,*p; p = (ULONG *) dest; for (i = h * w / 32; --i >= 0;) { data = *p; *p++ = (data << 24) + (data >> 24) + (0xFF00 & (data >> 8)) + (0xFF0000 & (data << 8)); } if (wordsize == 64) { p = (ULONG *) dest; for (i = h * w / 64; --i >= 0;) { data = *p++; p[-1] = p[0]; *p++ = data; } } break; } default: abort("xiFill: unknown format"); } } */ } #define ALLONES 0xFF void fillrun(register char *p, pel x0, pel x1, int bit) { register int startmask,endmask; /* bits to set in first and last char*/ register int middle; /* number of chars between start and end + 1 */ if (x1 <= x0) return; middle = x1/8 - x0/8; p += x0/8; x0 &= 7; x1 &= 7; if (bit == LSBFirst) { startmask = ALLONES << x0; endmask = ~(ALLONES << x1); } else { startmask = ALLONES >> x0; endmask = ~(ALLONES >> x1); } if (middle == 0) *p++ |= startmask & endmask; else { *p++ |= startmask; while (--middle > 0){ *p++ = (unsigned char)ALLONES; } if (endmask) *p |= endmask; } } /* outline */ #undef CHECK_OUTLINEFILL #ifdef CHECK_OUTLINEFILL void fill(dest, h, w, area, byte, bit, wordsize) register char *dest; /* destination bitmap */ int h,w; /* dimensions of 'dest', w padded */ register struct region *area; /* region to write to 'dest' */ int byte,bit; /* flags; LSBFirst or MSBFirst */ int wordsize; /* number of bits per word for LSB/MSB purposes */ { register struct edgelist *edge; /* for looping through edges */ register char *p; /* current scan line in 'dest' */ register int y; /* for looping through scans */ register int wbytes = w / 8; /* number of bytes in width */ register pel *leftP,*rightP; /* pointers to X values, left and right */ int xmin = area->xmin; /* upper left X */ int ymin = area->ymin; /* upper left Y */ for (edge = area->anchor; VALIDEDGE(edge); edge = edge->link->link) { p = dest + (edge->ymin - ymin) * wbytes; leftP = edge->xvalues; rightP = edge->link->xvalues; printf("leftP=%d, RightP=%d,\n", *leftP, *rightP); for (y = edge->ymin; y < edge->ymax; y++) { printf("leftP=%d, RightP=%d,y=%d\n", *leftP, *rightP, y); fillrun(p, *leftP++ - xmin, *rightP++ - xmin, bit); p += wbytes; } } } #endif /* T1_CopyGlyph(): Make a copy of an existent glyph-structure to save it for later usage by the user. */ GLYPH *T1_CopyGlyph( GLYPH *glyph) { GLYPH *dest; long size; if (glyph==NULL){ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } /* Assign padding value */ T1_pad=pFontBase->bitmap_pad; /* Allocate memory for struct: */ if ((dest=(GLYPH *)malloc(sizeof(GLYPH)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } /* Copy the structure members: */ *dest=*glyph; /* Allocate memory for bitmap, initialize pointer to it and copy bitmap: */ size=PAD((dest->metrics.rightSideBearing-dest->metrics.leftSideBearing)* glyph->bpp, T1_pad) / 8; size=size*(dest->metrics.ascent-dest->metrics.descent); /* We must check whether there's actually a bits-pointer different from NULL. If not omit the following step: */ if (glyph->bits!=NULL){ if ((dest->bits=(char *)malloc(size*sizeof(char)))==NULL){ free(dest); T1_errno=T1ERR_ALLOC_MEM; return(NULL); } memcpy(dest->bits,glyph->bits,size); } return(dest); } /* T1_DumpGlyph(): Dump a glyph-representation to stdout: */ void T1_DumpGlyph( GLYPH *glyph) { int i,j,h,w; /* i=line-index, j=column-index */ long paddedW; printf("Dataformat: T1_bit=%d, T1_byte=%d, T1_wordsize=%d, T1_pad=%d\n", T1_bit, T1_byte, T1_pad, T1_pad); if (glyph==NULL){ return; } h=glyph->metrics.ascent-glyph->metrics.descent; w=glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing; paddedW=PAD(w,T1_pad); printf("GlyphInfo: h=%d, w=%d, paddedW=%ld\n", h, w, paddedW); for ( i=0; ibits[i*paddedW/T1_pad+j], 1); else if (T1_pad==16) for (j=0; jbits)[i*paddedW/T1_pad+j], 1); } else for (j=0; jbits)[i*paddedW/T1_pad+j], 1); } printf("\n"); } } /* This function will essentially return the bounding box of the line-rule */ static void T1_ComputeLineParameters( int FontID, int mode, int width, float size, int *startx, int *endx, int *starty, int *endy) { float position=0.0, thickness=0.0; int startx1, startx2, endx1, endx2; if (mode & T1_UNDERLINE){ position=pFontBase->pFontArray[FontID].UndrLnPos * DeviceSpecifics.scale_y; thickness=pFontBase->pFontArray[FontID].UndrLnThick * DeviceSpecifics.scale_y; } else if (mode & T1_OVERLINE){ position=pFontBase->pFontArray[FontID].OvrLnPos * DeviceSpecifics.scale_y; thickness=pFontBase->pFontArray[FontID].OvrLnThick * DeviceSpecifics.scale_y; } else if (mode & T1_OVERSTRIKE){ position=pFontBase->pFontArray[FontID].OvrStrkPos * DeviceSpecifics.scale_y; thickness=pFontBase->pFontArray[FontID].OvrStrkThick * DeviceSpecifics.scale_y; } *starty=(int) floor((position+0.5*(thickness-DeviceSpecifics.y_resolution/1000.0)) *size/1000.0 +0.5 ); startx1=(int) floor(*starty*pFontBase->pFontArray[FontID].slant+0.5); *endy =*starty - (int) floor(thickness/1000.0*size+0.5); startx2=(int) floor(*endy*pFontBase->pFontArray[FontID].slant+0.5); *startx=startx1 < startx2 ? startx1 : startx2; endx1 = width + (int) floor(*starty*pFontBase->pFontArray[FontID].slant+0.5); endx2 = width + (int) floor(*endy*pFontBase->pFontArray[FontID].slant+0.5); *endx=endx1 < endx2 ? endx2 : endx1; /* We take care that at least one pixel is drawn */ if (*starty==*endy) *endy -=1; return; } /* The following function concatenates two glyphs. Optional offsets x_off, y_off are respected. By the function. If either glyph is NULL or the glyphs have distinct depth, NULL is returned. */ GLYPH *T1_ConcatGlyphs( GLYPH *glyph_1, GLYPH *glyph_2, int x_off, int y_off, int modflag) { int lsb1, lsb2, rsb1, rsb2; int advanceX1, advanceX2, advanceY1, advanceY2; int ascent1, ascent2, descent1, descent2; int rsb, lsb, ascent, descent, advanceX, advanceY; int vanchor, w, h, wscanline, wscanline1, wscanline2, bpp; int memsize, BitShift; GLYPH *glyph1, *glyph2; unsigned T1_AA_TYPE16 BitBuf_c; unsigned T1_AA_TYPE32 BitBuf_s; unsigned long BitBuf_l; /* This is only actually used if sizeof long = 8 */ int i, j, k; int ByteOffset; unsigned char *Target_c, *p_c; unsigned T1_AA_TYPE16 *Target_s, *p_s; unsigned T1_AA_TYPE32 *Target_l, *p_l; static GLYPH glyph={NULL,{0,0,0,0,0,0},NULL,1}; /* We handle the Right-To-Left concatenation the simple way: 1) Change the order of the two glyphs 2) Invert the sign of the y-part of the offset 3) Recalculate the dimensions of the resulating glyph. */ /* Check for writing direction and reorganize appropriately: */ if (modflag & T1_RIGHT_TO_LEFT){ glyph1=glyph_2; glyph2=glyph_1; y_off=-y_off; } else { glyph1=glyph_1; glyph2=glyph_2; } if (glyph1==NULL){ T1_errno=T1ERR_INVALID_PARAMETER; return( NULL); } if (glyph2==NULL){ T1_errno=T1ERR_INVALID_PARAMETER; return( NULL); } if (glyph1->bpp != glyph2->bpp){ T1_errno=T1ERR_INVALID_PARAMETER; return( NULL); } /* We have two glyph different from NULL */ /* Reset glyph, if necessary */ if (glyph.bits!=NULL){ free(glyph.bits); glyph.bits=NULL; } glyph.metrics.leftSideBearing=0; glyph.metrics.rightSideBearing=0; glyph.metrics.advanceX=0; glyph.metrics.advanceY=0; glyph.metrics.ascent=0; glyph.metrics.descent=0; glyph.pFontCacheInfo=NULL; glyph.bpp=1; /* Assign dimens */ lsb1=glyph1->metrics.leftSideBearing; rsb1=glyph1->metrics.rightSideBearing; ascent1=glyph1->metrics.ascent; descent1=glyph1->metrics.descent; advanceX1=glyph1->metrics.advanceX + x_off; advanceY1=glyph1->metrics.advanceY + y_off; lsb2=glyph2->metrics.leftSideBearing; rsb2=glyph2->metrics.rightSideBearing; ascent2=glyph2->metrics.ascent; descent2=glyph2->metrics.descent; advanceX2=glyph2->metrics.advanceX; advanceY2=glyph2->metrics.advanceY; lsb=lsb1 < lsb2+advanceX1 ? lsb1 : lsb2+advanceX1; rsb=rsb1 > rsb2+advanceX1 ? rsb1 : rsb2+advanceX1; ascent=ascent1 > ascent2+advanceY1 ? ascent1 : ascent2+advanceY1; descent=descent1 < descent2+advanceY1 ? descent1 : descent2+advanceY1; advanceX=advanceX1+advanceX2; advanceY=advanceY1+advanceY2; bpp=glyph1->bpp; w=rsb-lsb; h=ascent-descent; wscanline=PAD( w*bpp, T1_pad) / 8; wscanline1=PAD( (rsb1-lsb1)*bpp, T1_pad) / 8; wscanline2=PAD( (rsb2-lsb2)*bpp, T1_pad) / 8; memsize=wscanline*h; if ((glyph.bits=(char *)calloc( memsize + 1, sizeof(unsigned char)))==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } if (bpp==1){ if (T1_pad==32 && T1_byte==0 && sizeof(long)==8){ /* The following loop steps through the lines of the first glyph: */ vanchor=ascent-ascent1; BitShift=(lsb1-lsb) % 32; ByteOffset=(lsb1-lsb)/32*4; for ( i=0; ibits+(wscanline1*i)); if (BitShift == 0){ for (k=wscanline1/4; k; k--) *Target_l++ |= *p_l++; } else{ for (k=wscanline1/4; k; k--){ BitBuf_l = ((long)*p_l++) << BitShift; *Target_l++ |= BitBuf_l; *Target_l |= BitBuf_l>>l_shift; } } } /* The following loop steps through the lines of the second glyph: */ vanchor=ascent-(ascent2+advanceY1); BitShift=(lsb2+advanceX1-lsb) % 32; ByteOffset=(lsb2+advanceX1-lsb)/32*4; for ( i=0; ibits+(wscanline2*i)); if (BitShift == 0){ for (k=wscanline2/4; k; k--) *Target_l++ |= *p_l++; } else{ for (k=wscanline2/4; k; k--){ BitBuf_l = ((long)*p_l++) << BitShift; *Target_l++ |= BitBuf_l; *Target_l |= BitBuf_l>>l_shift; } } } } else if(T1_pad==16 && T1_byte==0){ /* The following loop steps through the lines of the first glyph: */ vanchor=ascent-ascent1; BitShift=(lsb1-lsb) % 16; ByteOffset=(lsb1-lsb)/16*2; for ( i=0; ibits+(wscanline1*i)); if (BitShift == 0){ for (k=wscanline1/2; k; k--) *Target_s++ |= *p_s++; } else{ for (k=wscanline1/2; k; k--){ BitBuf_s = ((T1_AA_TYPE32)*p_s++) << BitShift; *Target_s++ |= BitBuf_s; *Target_s |= BitBuf_s>>s_shift; } } } /* The following loop steps through the lines of the second glyph: */ vanchor=ascent-(ascent2+advanceY1); BitShift=(lsb2+advanceX1-lsb) % 16; ByteOffset=(lsb2+advanceX1-lsb)/16*2; for ( i=0; ibits+(wscanline2*i)); if (BitShift == 0){ for (k=wscanline2/2; k; k--) *Target_s++ |= *p_s++; } else{ for (k=wscanline2/2; k; k--){ BitBuf_s = ((T1_AA_TYPE32)*p_s++) << BitShift; *Target_s++ |= BitBuf_s; *Target_s |= BitBuf_s>>s_shift; } } } } else{ /* T1_pad==8 or Big Endian machine */ /* The following loop steps through the lines of the first glyph: */ vanchor=ascent-ascent1; BitShift=(lsb1-lsb) % 8; ByteOffset=(lsb1-lsb) / 8; for ( i=0; ibits+(wscanline1*i)); if (BitShift == 0){ for (k=wscanline1; k; k--) *Target_c++ |= *p_c++; } else{ for (k=wscanline1; k; k--){ BitBuf_c = ((T1_AA_TYPE16)*p_c++) << BitShift; *Target_c++ |= BitBuf_c; *Target_c |= BitBuf_c>>c_shift; } } } /* The following loop steps through the lines of the second glyph: */ vanchor=ascent-(ascent2+advanceY1); BitShift=(lsb2+advanceX1-lsb) % 8; ByteOffset=(lsb2+advanceX1-lsb) / 8; for ( i=0; ibits+(wscanline2*i)); if (BitShift == 0){ for (k=wscanline2; k; k--) *Target_c++ |= *p_c++; } else{ for (k=wscanline2; k; k--){ BitBuf_c = ((T1_AA_TYPE16)*p_c++) << BitShift; *Target_c++ |= BitBuf_c; *Target_c |= BitBuf_c>>c_shift; } } } } } /* end of if (bpp==1) ... */ else if (bpp==8){ /* Set background */ for ( i=0; ibits+(wscanline1*i)); memcpy( Target_c, p_c, (rsb1-lsb1)); } /* The following loop steps through the lines of the second glyph. Note that we only set the pixel if it is not background! */ vanchor=ascent-(ascent2+advanceY1); for ( i=0; ibits+(wscanline2*i)); for (j=0; j<(rsb2-lsb2); j++) if (p_c[j] != (unsigned char) T1aa_bg) Target_c[j]=p_c[j]; } } /* end of if (bpp==8) ... */ else if (bpp==16){ /* Set background */ for ( i=0; ibits+(wscanline1*i)); memcpy( Target_s, p_s, (rsb1-lsb1)*2); } /* The following loop steps through the lines of the second glyph. Note that we only set the pixel if it is not background! */ vanchor=ascent-(ascent2+advanceY1); for ( i=0; ibits+(wscanline2*i)); for (j=0; j<(rsb2-lsb2); j++) if (p_s[j] != (unsigned T1_AA_TYPE16) T1aa_bg) Target_s[j]=p_s[j]; } } /* end of if (bpp==16) ... */ else if (bpp==32){ /* Set background */ for ( i=0; ibits+(wscanline1*i)); memcpy( Target_l, p_l, (rsb1-lsb1)*4); } /* The following loop steps through the lines of the second glyph. Note that we only set the pixel if it is not background! */ vanchor=ascent-(ascent2+advanceY1); for ( i=0; ibits+(wscanline2*i)); for (j=0; j<(rsb2-lsb2); j++) if (p_l[j] != (unsigned T1_AA_TYPE32) T1aa_bg) Target_l[j]=p_l[j]; } } /* end of if (bpp==32) ... */ /* Check for writing direction and re-compute dimens appropriately: */ if (modflag & T1_RIGHT_TO_LEFT){ advanceX=-advanceX1-advanceX2; advanceY=-advanceY1-advanceY2; lsb=lsb1 < lsb2+advanceX1 ? advanceX+lsb1 : advanceX+lsb2+advanceX1; rsb=rsb1 > rsb2+advanceX1 ? advanceX+rsb1 : advanceX+rsb2+advanceX1; ascent=ascent1 > ascent2+advanceY1 ? ascent1 : ascent2+advanceY1; descent=descent1 < descent2+advanceY1 ? descent1 : descent2+advanceY1; ascent += advanceY; descent += advanceY; } glyph.metrics.leftSideBearing=lsb; glyph.metrics.rightSideBearing=rsb; glyph.metrics.advanceX=advanceX; glyph.metrics.advanceY=advanceY; glyph.metrics.ascent=ascent; glyph.metrics.descent=descent; glyph.bpp=bpp; /* printf("lsb=%d, rsb=%d, adX=%d, adY=%d asc=%d, desc=%d\n", glyph.metrics.leftSideBearing, glyph.metrics.rightSideBearing, glyph.metrics.advanceX, glyph.metrics.advanceY, glyph.metrics.ascent, glyph.metrics.descent ); */ return( &glyph); } /* T1_FillOutline(): Create a filled glyph from an outline description */ GLYPH *T1_FillOutline( T1_OUTLINE *path, int modflag) { struct region *area=NULL; static GLYPH glyph={NULL,{0,0,0,0,0,0},NULL,1}; volatile int memsize=0; int i; LONG h,w; LONG paddedW; /* We return to this if something goes wrong deep in the rasterizer */ if ((i=setjmp( stck_state))!=0) { T1_errno=T1ERR_TYPE1_ABORT; sprintf( err_warn_msg_buf, "t1_abort: Reason: %s", t1_get_abort_message( i)); T1_PrintLog( "T1_FillOutline()", err_warn_msg_buf, T1LOG_ERROR); return( NULL); } /* Reset character glyph, if necessary */ if (glyph.bits!=NULL){ free(glyph.bits); glyph.bits=NULL; } glyph.metrics.leftSideBearing=0; glyph.metrics.rightSideBearing=0; glyph.metrics.advanceX=0; glyph.metrics.advanceY=0; glyph.metrics.ascent=0; glyph.metrics.descent=0; glyph.pFontCacheInfo=NULL; glyph.bpp=1; /* Assign padding value */ T1_pad=pFontBase->bitmap_pad; if (pFontBase->endian) T1_byte=1; else T1_byte=0; T1_wordsize=T1_pad; /* Create a region from outline */ area=(struct region *)Interior( (struct segment *)path, WINDINGRULE+CONTINUITY); /* fill the glyph-structure */ if (area == NULL){ T1_PrintLog( "T1_FillOutline()", "area=NULL returned by Interior()", T1LOG_WARNING); T1_errno=1000; return(NULL); } h = area->ymax - area->ymin; w = area->xmax - area->xmin; paddedW = PAD(w, T1_pad); if ( (area->xmin > area->xmax) || (area->ymin > area->ymax) ){ /* There was a character like .notdef or space, that didn't produce any black pixels on the bitmap! -> we return a glyph with correct metrics and bitmap pointer set to NULL */ sprintf( err_warn_msg_buf, "No black pixels in outline %p", path); T1_PrintLog( "T1_FillOutline()", err_warn_msg_buf, T1LOG_WARNING); glyph.metrics.leftSideBearing = 0; glyph.metrics.advanceX = NEARESTPEL(area->ending.x - area->origin.x); glyph.metrics.advanceY = - NEARESTPEL(area->ending.y - area->origin.y); glyph.metrics.rightSideBearing = 0; glyph.metrics.descent = 0; glyph.metrics.ascent = 0; /* make sure to get rid of 'area' before leaving! */ KillRegion (area); return( &glyph); } if (h > 0 && w > 0) { memsize = h * paddedW / 8 + 1; /* This is for the users copy of the character, for security-reasons the original pointer to the cache area is not used. The entry glyph.bits is free'ed every time this function is called: */ glyph.bits = (char *)malloc(memsize*sizeof( char)); if (glyph.bits == NULL){ T1_errno=T1ERR_ALLOC_MEM; /* make sure to get rid of area if it's there */ if (area){ KillRegion (area); } return(NULL); } } else { h = w = 0; area->xmin = area->xmax = 0; area->ymin = area->ymax = 0; } glyph.metrics.leftSideBearing = area->xmin; glyph.metrics.advanceX = NEARESTPEL(area->ending.x - area->origin.x); glyph.metrics.advanceY = - NEARESTPEL(area->ending.y - area->origin.y); glyph.metrics.rightSideBearing = area->xmax; glyph.metrics.descent = - area->ymax; glyph.metrics.ascent = - area->ymin; if (h > 0 && w > 0) { (void) memset(glyph.bits, 0, memsize); fill(glyph.bits, h, paddedW, area, T1_byte, T1_bit, T1_wordsize ); } /* Check for writing direction and re-compute dimensions appropriately: */ if (modflag & T1_RIGHT_TO_LEFT){ glyph.metrics.advanceX *= -1; glyph.metrics.advanceY *= -1; glyph.metrics.leftSideBearing += glyph.metrics.advanceX; glyph.metrics.rightSideBearing += glyph.metrics.advanceX; glyph.metrics.descent += glyph.metrics.advanceY; glyph.metrics.ascent += glyph.metrics.advanceY; } /* make sure to get rid of area if it's there */ if (area){ KillRegion (area); } return( &glyph); } /* T1_SetRect(): Raster a rectangle, whose size is given in charspace units. The resulting glyph does not cause any escapement. */ GLYPH* T1_SetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform) { int i; int mode; struct region *area; struct XYspace *Current_S; float strokewidth = 0.0f; FONTSIZEDEPS *font_ptr; FONTPRIVATE *fontarrayP; volatile int memsize=0; LONG h,w; LONG paddedW; static GLYPH glyph={NULL,{0,0,0,0,0,0},NULL,1}; /* We return to this if something goes wrong deep in the rasterizer */ if ((i=setjmp( stck_state))!=0) { T1_errno=T1ERR_TYPE1_ABORT; sprintf( err_warn_msg_buf, "t1_abort: Reason: %s", t1_get_abort_message( i)); T1_PrintLog( "T1_SetRect()", err_warn_msg_buf, T1LOG_ERROR); return( NULL); } font_ptr = NULL; /* Reset character glyph, if necessary */ if (glyph.bits!=NULL){ free(glyph.bits); glyph.bits=NULL; } glyph.metrics.leftSideBearing=0; glyph.metrics.rightSideBearing=0; glyph.metrics.advanceX=0; glyph.metrics.advanceY=0; glyph.metrics.ascent=0; glyph.metrics.descent=0; glyph.pFontCacheInfo=NULL; glyph.bpp=1; /* First, check for a correct ID. */ i=T1_CheckForFontID(FontID); if ( i == -1 ) { return NULL; } /* if necessary load font into memory */ if ( i == 0 ) if ( T1_LoadFont( FontID) ) return NULL; /* Check for valid size */ if (size<=0.0){ T1_errno=T1ERR_INVALID_PARAMETER; return(NULL); } /* Assign padding value */ T1_pad=pFontBase->bitmap_pad; if (pFontBase->endian) T1_byte=1; else T1_byte=0; T1_wordsize=T1_pad; if ( i > 0 ) { /* FontID identifies a valid font */ fontarrayP = &(pFontBase->pFontArray[FontID]); /* Check for size and create it if necessary */ if ((font_ptr=T1int_QueryFontSize( FontID, size, NO_ANTIALIAS))==NULL){ font_ptr=T1int_CreateNewFontSize( FontID, size, NO_ANTIALIAS); if (font_ptr==NULL){ T1_errno=T1ERR_ALLOC_MEM; return(NULL); } } /* handle stroking stuff */ if ( fontarrayP->info_flags & RASTER_STROKED) { strokewidth = pFontBase->pFontArray[FontID].StrokeWidth; } else { strokewidth = 0.0f; } } else { fontarrayP = NULL; strokewidth = 0.0f; } /* Setup an appropriate charspace matrix. Note that the rasterizer assumes vertical values with inverted sign! Transformation should create a copy of the local charspace matrix which then still has to be made permanent. */ if ( transform != NULL ) { Current_S = (struct XYspace *) Permanent(Scale(Transform (font_ptr->pCharSpaceLocal, transform->cxx, - transform->cxy, transform->cyx, - transform->cyy), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } else{ Current_S = (struct XYspace *) Permanent(Scale(Transform(font_ptr->pCharSpaceLocal, 1.0, 0.0, 0.0, -1.0), DeviceSpecifics.scale_x, DeviceSpecifics.scale_y)); } mode=0; area=fontfcnRect( width, height, Current_S, &mode, DO_RASTER, strokewidth); KillSpace (Current_S); /* fill the glyph-structure */ if ( mode > 0 ) { sprintf( err_warn_msg_buf, "fontfcnRect() set mode=%d", mode); T1_PrintLog( "T1_SetRect()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=mode; return(NULL); } if ( area == NULL ) { T1_PrintLog( "T1_SetRect()", "area=NULL returned by fontfcnRect()", T1LOG_WARNING); T1_errno=mode; return(NULL); } h = area->ymax - area->ymin; w = area->xmax - area->xmin; paddedW = PAD(w, T1_pad); if (h > 0 && w > 0) { memsize = h * paddedW / 8 + 1; /* This is for the users copy of the character, for security-reasons the original pointer to the cache area is not used. The entry glyph.bits is free'ed every time this function is called: */ glyph.bits = (char *)malloc(memsize*sizeof( char)); if ( glyph.bits == NULL ) { T1_errno=T1ERR_ALLOC_MEM; /* make sure to get rid of 'area' before leaving! */ KillRegion (area); return(NULL); } } else { h = w = 0; area->xmin = area->xmax = 0; area->ymin = area->ymax = 0; } /* Assign metrics */ glyph.metrics.leftSideBearing = area->xmin; glyph.metrics.advanceX = NEARESTPEL(area->ending.x - area->origin.x); glyph.metrics.advanceY = - NEARESTPEL(area->ending.y - area->origin.y); glyph.metrics.rightSideBearing = area->xmax; glyph.metrics.descent = - area->ymax; glyph.metrics.ascent = - area->ymin; if (h > 0 && w > 0) { (void) memset(glyph.bits, 0, memsize); fill(glyph.bits, h, paddedW, area, T1_byte, T1_bit, T1_wordsize ); } /* make sure to get rid of 'area' before leaving! */ KillRegion (area); return(&glyph); } t1lib-5.1.2/lib/t1lib/t1set.h0000644000175000001440000000740710733501626014266 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1set.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2003-01-02 ----- Description: This file is part of the t1-library. It contains definitions and declarations for t1set.c. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1SET_C GLYPH *T1_SetChar( int FontID, char charcode, float size, T1_TMATRIX *transform); GLYPH *T1_SetString( int FontID, char *string, volatile int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); GLYPH* T1_SetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform); void fill(char *dest, int h, int w, struct region *area, int byte, int bit, int wordsize); void fillrun(char *p, pel x0, pel x1, int bit); GLYPH *T1_CopyGlyph(GLYPH *glyph); void T1_DumpGlyph( GLYPH *glyph); GLYPH *T1_ConcatGlyphs( GLYPH *glyph1, GLYPH *glyph2, int x_off, int y_off, int modflag); void T1_DumpGlyph( GLYPH *glyph); GLYPH *T1_FillOutline( T1_OUTLINE *path, int modflag); #else extern GLYPH *T1_SetChar( int FontID, char charcode, float size, T1_TMATRIX *transform); extern GLYPH *T1_SetString( int FontID, char *string, volatile int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern GLYPH* T1_SetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform); extern void fill(char *dest, int h, int w, struct region *area, int byte, int bit, int wordsize); extern void fillrun(char *p, pel x0, pel x1, int bit); extern GLYPH *T1_CopyGlyph(GLYPH *glyph); extern void T1_DumpGlyph( GLYPH *glyph); extern GLYPH *T1_ConcatGlyphs( GLYPH *glyph1, GLYPH *glyph2, int x_off, int y_off, int modflag); extern void T1_DumpGlyph( GLYPH *glyph); extern GLYPH *T1_FillOutline( T1_OUTLINE *path, int modflag); #endif extern struct region *fontfcnB(int FontID, int modflag, struct XYspace *S, char **ev, unsigned char index, int *mode, psfont *Font_Ptr, int do_raster, float strokewidth); extern struct region *fontfcnB_string( int FontID, int modflag, struct XYspace *S, char **ev, unsigned char *string, int no_chars, int *mode, psfont *Font_Ptr, int *kern_pairs, long spacewidth, int do_raster, float strokewidth); extern struct region *fontfcnB_ByName( int FontID, int modflag, struct XYspace *S, char *charname, int *mode, psfont *Font_Ptr, int do_raster); extern struct region* fontfcnRect( float width, float height, struct XYspace* S, int* mode, int do_raster, float strokewidth); t1lib-5.1.2/lib/t1lib/t1aaset.c0000644000175000001440000014547310733501626014571 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1aaset.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) Subsampling based on code by Raph Levien (raph@acm.org) ----- Date: 2007-12-21 ----- Description: This file is part of the t1-library. It contains functions for antialiased setting of characters and strings of characters. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1AASET_C #include #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include "../type1/ffilest.h" #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "t1types.h" #include "t1extern.h" #include "t1aaset.h" #include "t1set.h" #include "t1load.h" #include "t1finfo.h" #include "t1misc.h" #include "t1base.h" #include "t1outline.h" #define DEFAULTBPP 8 /* As a fall back */ #ifndef T1_AA_TYPE16 #define T1_AA_TYPE16 short #endif #ifndef T1_AA_TYPE32 #define T1_AA_TYPE32 int #endif /* In the following arrays take the gray values. Entry 0 is associated with the white (background) value and the max entry is the black (foreground) value. */ static unsigned T1_AA_TYPE32 gv[5]={0,0,0,0,0}; static unsigned T1_AA_TYPE32 gv_h[17]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static unsigned T1_AA_TYPE32 gv_n[2]={0,0}; static int T1aa_level=T1_AA_LOW; /* The default value */ static T1_AA_TYPE32 T1aa_lut[625]; static int T1aa_count[256]; static T1_AA_TYPE32 T1aa_h_lut[289]; static int T1aa_h_count[256]; static T1_AA_TYPE32 T1aa_n_lut[64]; /* This global is for querying the current bg from other parts of t1lib */ unsigned T1_AA_TYPE32 T1aa_bg=0; /* The limit values for smart antialiasing */ float T1aa_smartlimit1=T1_AA_SMARTLIMIT1; float T1aa_smartlimit2=T1_AA_SMARTLIMIT2; int T1aa_SmartOn=0; /* We do not enable smart AA by default */ /* T1_AAInit: This function must be called whenever the T1aa_gray_val or T1aa_bpp variables change, or the level changes. */ static int T1_AAInit ( int level ) { int i; int i0, i1, i2, i3; int movelow=0, movehigh=0, indlow=0, indhigh=0; /* Note: movelow, movehigh, indlow and indhigh take care for proper byte swapping in dependence of endianess for level=4 */ if (level==T1_AA_NONE){ if (T1aa_bpp==8){ if (pFontBase->endian){ movelow=3; movehigh=2; } else{ movelow=0; movehigh=1; } } else if (T1aa_bpp==16){ if (pFontBase->endian){ movelow=1; movehigh=0; } else{ movelow=0; movehigh=1; } } } if (level==T1_AA_HIGH){ if (T1aa_bpp==8){ if (pFontBase->endian){ indlow=17; indhigh=1; movelow=3; movehigh=2; } else{ indlow=1; indhigh=17; movelow=0; movehigh=1; } } else if (T1aa_bpp==16){ if (pFontBase->endian){ indlow=17; indhigh=1; movelow=1; movehigh=0; } else{ indlow=1; indhigh=17; movelow=0; movehigh=1; } } else if (T1aa_bpp==32){ indlow=1; indhigh=17; } for (i = 0; i < 256; i++) { T1aa_h_count[i] = 0; if (i & 0x80) T1aa_h_count[i] += indhigh; if (i & 0x40) T1aa_h_count[i] += indhigh; if (i & 0x20) T1aa_h_count[i] += indhigh; if (i & 0x10) T1aa_h_count[i] += indhigh; if (i & 0x08) T1aa_h_count[i] += indlow; if (i & 0x04) T1aa_h_count[i] += indlow; if (i & 0x02) T1aa_h_count[i] += indlow; if (i & 0x01) T1aa_h_count[i] += indlow; } } if (level == 2 && T1aa_bpp == 8) { for (i0 = 0; i0 < 5; i0++) for (i1 = 0; i1 < 5; i1++) for (i2 = 0; i2 < 5; i2++) for (i3 = 0; i3 < 5; i3++) { ((char *)T1aa_lut)[(((i0 * 5 + i1) * 5 + i2) * 5 + i3) * 4] = gv[i3]; ((char *)T1aa_lut)[(((i0 * 5 + i1) * 5 + i2) * 5 + i3) * 4 + 1] = gv[i2]; ((char *)T1aa_lut)[(((i0 * 5 + i1) * 5 + i2) * 5 + i3) * 4 + 2] = gv[i1]; ((char *)T1aa_lut)[(((i0 * 5 + i1) * 5 + i2) * 5 + i3) * 4 + 3] = gv[i0]; } for (i = 0; i < 256; i++) { T1aa_count[i] = 0; if (i & 0x80) T1aa_count[i] += 125; if (i & 0x40) T1aa_count[i] += 125; if (i & 0x20) T1aa_count[i] += 25; if (i & 0x10) T1aa_count[i] += 25; if (i & 0x08) T1aa_count[i] += 5; if (i & 0x04) T1aa_count[i] += 5; if (i & 0x02) T1aa_count[i] += 1; if (i & 0x01) T1aa_count[i] += 1; } return(0); } else if (level == 2 && T1aa_bpp == 16) { for (i0 = 0; i0 < 5; i0++) for (i1 = 0; i1 < 5; i1++) { ((T1_AA_TYPE16 *)T1aa_lut)[(i0 * 5 + i1) * 2] = gv[i1]; ((T1_AA_TYPE16 *)T1aa_lut)[(i0 * 5 + i1) * 2 + 1] = gv[i0]; } for (i = 0; i < 256; i++) { T1aa_count[i] = 0; if (i & 0x80) T1aa_count[i] += 160; if (i & 0x40) T1aa_count[i] += 160; if (i & 0x20) T1aa_count[i] += 32; if (i & 0x10) T1aa_count[i] += 32; if (i & 0x08) T1aa_count[i] += 5; if (i & 0x04) T1aa_count[i] += 5; if (i & 0x02) T1aa_count[i] += 1; if (i & 0x01) T1aa_count[i] += 1; } return(0); } else if (level == 2 && T1aa_bpp == 32) { for (i0 = 0; i0 < 5; i0++) ((T1_AA_TYPE32 *)T1aa_lut)[i0] = gv[i0]; for (i = 0; i < 256; i++) { T1aa_count[i] = 0; if (i & 0x80) T1aa_count[i] += 512; if (i & 0x40) T1aa_count[i] += 512; if (i & 0x20) T1aa_count[i] += 64; if (i & 0x10) T1aa_count[i] += 64; if (i & 0x08) T1aa_count[i] += 8; if (i & 0x04) T1aa_count[i] += 8; if (i & 0x02) T1aa_count[i] += 1; if (i & 0x01) T1aa_count[i] += 1; } return(0); } else if (level == 4 && T1aa_bpp == 8) { for (i0 = 0; i0 < 17; i0++){ /* i0 indexes higher nibble */ for (i1 = 0; i1 < 17; i1++){ /* i1 indixes lower nibble */ ((char *)T1aa_h_lut)[(i0 * 17 + i1) * 4 + movelow] = gv_h[i1]; ((char *)T1aa_h_lut)[(i0 * 17 + i1) * 4 + movehigh] = gv_h[i0]; } } return(0); } else if (level == 4 && T1aa_bpp == 16) { for (i0 = 0; i0 < 17; i0++){ /* i0 indexes higher nibble */ for (i1 = 0; i1 < 17; i1++){ /* i1 indixes lower nibble */ ((T1_AA_TYPE16 *)T1aa_h_lut)[(i0 * 17 + i1) * 2 + movelow] = gv_h[i1]; ((T1_AA_TYPE16 *)T1aa_h_lut)[(i0 * 17 + i1) * 2 + movehigh] = gv_h[i0]; } } return(0); } else if (level == 4 && T1aa_bpp == 32) { for (i0 = 0; i0 < 17; i0++){ /* i0 indexes higher nibble */ for (i1 = 0; i1 < 17; i1++){ /* i1 indixes lower nibble */ ((T1_AA_TYPE32 *)T1aa_h_lut)[(i0 * 17 + i1)] = gv_h[i1]; } } return(0); } else if (level == 1 && T1aa_bpp == 8) { for (i0=0; i0<16; i0++) { ((char *)T1aa_n_lut)[i0*4+movelow]=gv_n[i0 & 0x01]; ((char *)T1aa_n_lut)[i0*4+movelow+1]=gv_n[(i0>>1) & 0x01]; ((char *)T1aa_n_lut)[i0*4+movelow+2]=gv_n[(i0>>2) & 0x01]; ((char *)T1aa_n_lut)[i0*4+movelow+3]=gv_n[(i0>>3) & 0x01]; } return(0); } else if (level == 1 && T1aa_bpp == 16) { for (i0=0; i0<4; i0++) { ((T1_AA_TYPE16 *)T1aa_n_lut)[i0*2]=gv_n[i0 & 0x01]; ((T1_AA_TYPE16 *)T1aa_n_lut)[i0*2+1]=gv_n[(i0>>1) & 0x01]; } return(0); } else if (level == 1 && T1aa_bpp == 32) { for ( i0=0; i0<2; i0++) { ((T1_AA_TYPE32 *)T1aa_n_lut)[i0]=gv_n[i0]; } return(0); } else { /* unsupported combination of level and bpp -> we set T1_errno and put an entry into the logfile! */ T1_errno=T1ERR_INVALID_PARAMETER; sprintf( err_warn_msg_buf, "Unsupported AA specification: level=%d, bpp=%d", level, T1aa_bpp); T1_PrintLog( "T1_AAInit()", err_warn_msg_buf, T1LOG_WARNING); } return(1); } /* T1_AADoLine: Create a single scanline of antialiased output. The (x, y) arguments refer to the number of pixels in the input image to convert down. The width argument is the number of bytes separating scanlines in the input. The quantity hcorr describes the number of subpixels. It is the shift of the oversampled bitmap to the right */ static void T1_AADoLine ( int level, int x, int y, int width, char *c_in_ptr, char *target_ptr, int hcorr ) { int i=0; int size; int count=0; int mod; unsigned char bcarry1=0, bcarry2=0, bcarry3=0, bcarry4=0; static char *align_buf = NULL; static int align_buf_size = 0; unsigned char *in_ptr; int new_size=55; register char *optr; /* We convert the input pointer to unsigned since we use it as index! */ in_ptr=(unsigned char*)c_in_ptr; if ((long)target_ptr & 3){ /* calculate new_size (size in bytes of output buffer */ if (level == T1_AA_LOW){ new_size=((x + hcorr + 1) >> 1) * (T1aa_bpp >> 3); } else{ /* T1_AA_HIGH */ new_size = ((x + hcorr + 3) >> 2) * (T1aa_bpp >> 3); } if (new_size > align_buf_size) { if (align_buf) free (align_buf); /* Note: we allocate 12 more than necessary to have tolerance at the end of line */ align_buf = (char *)malloc(new_size+12); align_buf_size = new_size; } optr = align_buf; } else optr = target_ptr; /* size: The number of valid byte in the input string, i.e., the number of bytes partially filled with pixels before shifting with hcorr. mod: Is 1 if after shifting with hcorr the last byte in the input line has an overflow. */ if (level == T1_AA_LOW) { size=(x+7)>>3; mod=(x+hcorr)>(size*8) ? 1 : 0; if (T1aa_bpp == 8) { if (y == 2){ for (i = 0; i < size; i++) { ((T1_AA_TYPE32 *)optr)[i] = T1aa_lut[(T1aa_count[(unsigned char)((in_ptr[i]<>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<> 5]; bcarry1=in_ptr[i]>>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<> 5]; bcarry1=in_ptr[i]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<> 5]; } } else if (T1aa_bpp == 32) { if (y == 2){ for (i = 0; i < size; i++) { count = T1aa_count[(unsigned char)((in_ptr[i]<> 3) & 7]; ((T1_AA_TYPE32 *)optr)[i * 4 + 2] = T1aa_lut[(count >> 6) & 7]; ((T1_AA_TYPE32 *)optr)[i * 4 + 3] = T1aa_lut[(count >> 9) & 7]; bcarry1=in_ptr[i]>>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<> 3) & 7]; ((T1_AA_TYPE32 *)optr)[i * 4 + 2] = T1aa_lut[(count >> 6) & 7]; ((T1_AA_TYPE32 *)optr)[i * 4 + 3] = T1aa_lut[(count >> 9) & 7]; bcarry1=in_ptr[i]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<> 3) & 7]; ((T1_AA_TYPE32 *)optr)[i * 4 + 2] = T1aa_lut[(count >> 6) & 7]; ((T1_AA_TYPE32 *)optr)[i * 4 + 3] = T1aa_lut[(count >> 9) & 7]; } } } else if (level==T1_AA_HIGH){ size=(x+7)>>3; mod=(x+hcorr)>(size*8) ? 1 : 0; if (T1aa_bpp == 8) { if (y == 4){ for (i = 0; i < size; i++) { ((T1_AA_TYPE16 *)optr)[i] = T1aa_h_lut[(T1aa_h_count[(unsigned char)((in_ptr[i]<>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); bcarry3=in_ptr[i+2*width]>>(8-hcorr); bcarry4=in_ptr[i+3*width]>>(8-hcorr); } } else if (y == 3){ for (i = 0; i < size; i++) { ((T1_AA_TYPE16 *)optr)[i] = T1aa_h_lut[(T1aa_h_count[(unsigned char)((in_ptr[i]<>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); bcarry3=in_ptr[i+2*width]>>(8-hcorr); } } else if (y == 2){ for (i = 0; i < size; i++) { ((T1_AA_TYPE16 *)optr)[i] = T1aa_h_lut[(T1aa_h_count[(unsigned char)((in_ptr[i]<>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); } } else if (y == 1){ for (i = 0; i < size; i++) { ((T1_AA_TYPE16 *)optr)[i] = T1aa_h_lut[(T1aa_h_count[(unsigned char)((in_ptr[i]<>(8-hcorr); } } if (mod) { if (y == 4) ((T1_AA_TYPE16 *)optr)[i] = T1aa_h_lut[(T1aa_h_count[bcarry1] + T1aa_h_count[bcarry2] + T1aa_h_count[bcarry3] + T1aa_h_count[bcarry4])]; else if (y == 3) ((T1_AA_TYPE16 *)optr)[i] = T1aa_h_lut[(T1aa_h_count[bcarry1] + T1aa_h_count[bcarry2] + T1aa_h_count[bcarry3])]; else if (y == 2) ((T1_AA_TYPE16 *)optr)[i] = T1aa_h_lut[(T1aa_h_count[bcarry1] + T1aa_h_count[bcarry2])]; else if (y == 1) ((T1_AA_TYPE16 *)optr)[i] = T1aa_h_lut[(T1aa_h_count[bcarry1])]; } } else if (T1aa_bpp == 16) { if (y == 4){ for (i = 0; i < size; i++) { ((T1_AA_TYPE32 *)optr)[i] = T1aa_h_lut[(T1aa_h_count[(unsigned char)((in_ptr[i]<>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); bcarry3=in_ptr[i+2*width]>>(8-hcorr); bcarry4=in_ptr[i+3*width]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<>(8-hcorr); bcarry2=in_ptr[i+2*width]>>(8-hcorr); bcarry3=in_ptr[i+3*width]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); bcarry3=in_ptr[i+2*width]>>(8-hcorr); bcarry4=in_ptr[i+3*width]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); bcarry3=in_ptr[i+2*width]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<>(8-hcorr); bcarry2=in_ptr[i+width]>>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<>(8-hcorr); } if (size==0){ bcarry1=in_ptr[0]<>j%8)&0x0F]; } } else if (T1aa_bpp==16) { starget_ptr=(T1_AA_TYPE16 *)target_ptr; for ( j=0; j>j%8)&0x03]; } } else if (T1aa_bpp==32) { ltarget_ptr=(T1_AA_TYPE32 *)target_ptr; for ( j=0; j>j%8)&0x01]; } return; } /* T1_AASetChar(...): Generate the anti-aliased bitmap for a character */ GLYPH *T1_AASetChar( int FontID, char charcode, float size, T1_TMATRIX *transform) { GLYPH *glyph; /* pointer to bitmap glyph */ static GLYPH aaglyph={NULL,{0,0,0,0,0,0},NULL,DEFAULTBPP};/* The anti-aliased glyph */ long asc, dsc, ht, wd; long i; long n_horz, n_horz_pad, n_vert, n_asc, n_dsc; long v_start, v_end; char *target_ptr; long offset; char *ptr; int y; long lsb, aalsb, aahstart; int memsize; LONG paddedW; int savelevel; FONTSIZEDEPS *font_ptr=NULL; unsigned char ucharcode; /* Reset character glyph, if necessary */ if (aaglyph.bits!=NULL){ free(aaglyph.bits); aaglyph.bits=NULL; } aaglyph.metrics.leftSideBearing=0; aaglyph.metrics.rightSideBearing=0; aaglyph.metrics.advanceX=0; aaglyph.metrics.advanceY=0; aaglyph.metrics.ascent=0; aaglyph.metrics.descent=0; aaglyph.pFontCacheInfo=NULL; aaglyph.bpp=T1aa_bpp; ucharcode=charcode; /* Check for smart antialiasing */ savelevel=T1aa_level; if (T1aa_SmartOn){ if (size>=T1aa_smartlimit2) { T1aa_level=T1_AA_NONE; } else if (size>=T1aa_smartlimit1) { T1aa_level=T1_AA_LOW; } else { T1aa_level=T1_AA_HIGH; } } /* The following code is only exectued if caching of antialiased chracters is enabled. */ /* Check if char is in cache */ if ((pFontBase->t1lib_flags & T1_AA_CACHING)) { if (transform==NULL){ /* if size/aa is not existent we create it */ if ((font_ptr=T1int_QueryFontSize( FontID, size, T1aa_level))==NULL){ /* We create the required size struct and leave the rest for T1_SetChar() */ font_ptr=T1int_CreateNewFontSize( FontID, size, T1aa_level); if (font_ptr==NULL){ T1_errno=T1ERR_ALLOC_MEM; T1aa_level=savelevel; return(NULL); } } else {/* size is already existent in cache */ if (font_ptr->pFontCache[ucharcode].bits != NULL){ /* Character is already in Chache -> create a copy of cache and return a pointer to the result: */ memcpy( &aaglyph, &(font_ptr->pFontCache[ucharcode]), sizeof(GLYPH)); memsize = (aaglyph.metrics.ascent-aaglyph.metrics.descent) * PAD((aaglyph.metrics.rightSideBearing-aaglyph.metrics.leftSideBearing) * T1aa_bpp,pFontBase->bitmap_pad)/8; aaglyph.bits = (char *)malloc(memsize*sizeof( char)); if (aaglyph.bits == NULL){ T1_errno=T1ERR_ALLOC_MEM; T1aa_level=savelevel; return(NULL); } memcpy( aaglyph.bits, font_ptr->pFontCache[ucharcode].bits, memsize); return(&(aaglyph)); } } } /* (transform==NULL) */ } /* T1_AA_CACHING */ /* First, call routine to rasterize character, all error checking is done in this function: */ if ((glyph=T1_SetChar( FontID, charcode, T1aa_level*size, transform))==NULL){ /* restore level */ T1aa_level=savelevel; return(NULL); /* An error occured */ } /* In case there are no black pixels, we simply set the dimensions and then return */ if ( glyph->bits == NULL) { aaglyph.bits=NULL; aaglyph.metrics.leftSideBearing=0; aaglyph.metrics.rightSideBearing=0; aaglyph.metrics.advanceX=(int) floor(glyph->metrics.advanceX/(float)T1aa_level+0.5); aaglyph.metrics.advanceY=(int) floor(glyph->metrics.advanceY/(float)T1aa_level+0.5); aaglyph.metrics.ascent=0; aaglyph.metrics.descent=0; aaglyph.pFontCacheInfo=NULL; /* restore level and return */ T1aa_level=savelevel; return(&aaglyph); } /* Get dimensions of bitmap: */ asc=glyph->metrics.ascent; dsc=glyph->metrics.descent; lsb=glyph->metrics.leftSideBearing; ht=asc-dsc; wd=glyph->metrics.rightSideBearing-lsb; if (T1aa_level==T1_AA_NONE){ /* we only convert bitmap to bytemap */ aaglyph=*glyph; aaglyph.bpp=T1aa_bpp; /* Compute scanline length and such */ n_horz_pad=PAD( wd*T1aa_bpp, pFontBase->bitmap_pad )>>3; /* Allocate memory for glyph */ memsize = n_horz_pad*ht*8; /* aaglyph.bits = (char *)malloc(memsize*sizeof( char)); */ aaglyph.bits = (char *)malloc(memsize*sizeof( char)); if (aaglyph.bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; /* restore level */ T1aa_level=savelevel; return(NULL); } paddedW=PAD(wd,pFontBase->bitmap_pad)>>3; ptr=glyph->bits; target_ptr=aaglyph.bits; for (i = 0; i < ht; i++) { T1_DoLine ( wd, paddedW, ptr, target_ptr ); ptr += paddedW; target_ptr += n_horz_pad; } /* restore level */ T1aa_level=savelevel; return(&aaglyph); } /* Set some looping parameters for subsampling */ if (lsb<0){ aalsb=lsb/T1aa_level-1; aahstart=T1aa_level+(lsb%T1aa_level); } else{ aalsb=lsb/T1aa_level; aahstart=lsb%T1aa_level; } /* The horizontal number of steps: */ n_horz=(wd+aahstart+T1aa_level-1)/T1aa_level; /* And the padded value */ n_horz_pad=PAD( n_horz*T1aa_bpp, pFontBase->bitmap_pad )>>3; /* vertical number of steps: */ if (asc % T1aa_level){ /* not aligned */ if ( asc > 0){ n_asc=asc/T1aa_level+1; v_start=asc % T1aa_level; } else{ n_asc=asc/T1aa_level; v_start=T1aa_level + (asc % T1aa_level); } } else{ n_asc=asc/T1aa_level; v_start=T1aa_level; } if (dsc % T1aa_level){ /* not aligned */ if ( dsc < 0){ n_dsc=dsc/T1aa_level-1; v_end=-(dsc % T1aa_level); } else{ n_dsc=dsc/T1aa_level; v_end=T1aa_level - (dsc % T1aa_level); } } else{ n_dsc=dsc/T1aa_level; v_end=T1aa_level; } /* the total number of lines: */ n_vert=n_asc-n_dsc; /* Allocate memory for glyph */ memsize = n_horz_pad*n_vert; /* Note: we allocate 12 bytes more than necessary */ aaglyph.bits = (char *)malloc(memsize*sizeof( char) +12); if (aaglyph.bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; /* restore level */ T1aa_level=savelevel; return(NULL); } paddedW=PAD(wd,pFontBase->bitmap_pad)/8; offset=0; target_ptr=aaglyph.bits; /* We must check for n_vert==1 because then both v_start and v_end could / will affect the same AA scan line. Because I'm forgetful, a reminder: v_end | 000000000000000000000 | 111111111111111111111 ^ Y 111111111111111111111 | 000000000000000000000 | v_start In order to count the v_end from bottom to top, we express it as (T1aa_level-v_end). The number of rows to take into account is then v_start-(T1aa_level-v_end). */ if (n_vert==1) { v_start=v_start - (T1aa_level - v_end); } ptr = glyph->bits; for (i = 0; i < n_vert; i++) { if (i==0) y=v_start; else if (i==n_vert-1) y=v_end; else y=T1aa_level; T1_AADoLine ( T1aa_level, wd, y, paddedW, ptr, target_ptr, aahstart ); ptr += y * paddedW; target_ptr += n_horz_pad; } /* .. and set them in aaglyph */ aaglyph.metrics.leftSideBearing=aalsb; aaglyph.metrics.rightSideBearing=aalsb + n_horz; aaglyph.metrics.advanceX=(int) floor(glyph->metrics.advanceX/(float)T1aa_level+0.5); aaglyph.metrics.advanceY=(int) floor(glyph->metrics.advanceY/(float)T1aa_level+0.5); aaglyph.metrics.ascent=n_asc; aaglyph.metrics.descent=n_dsc; aaglyph.pFontCacheInfo=NULL; if ((pFontBase->t1lib_flags & T1_AA_CACHING) && (transform==NULL)) { /* Put char into cache area */ memcpy( &(font_ptr->pFontCache[ucharcode]), &aaglyph, sizeof(GLYPH)); font_ptr->pFontCache[ucharcode].bits = (char *)malloc(memsize*sizeof( char)); if (font_ptr->pFontCache[ucharcode].bits == NULL){ T1_errno=T1ERR_ALLOC_MEM; T1aa_level=savelevel; return(NULL); } memcpy( font_ptr->pFontCache[ucharcode].bits, aaglyph.bits, memsize); } /* restore level */ T1aa_level=savelevel; return(&aaglyph); } /* T1_AASetString(...): Generate the antialiased bitmap for a string of characters */ GLYPH *T1_AASetString( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform) { GLYPH *glyph; /* pointer to bitmap glyph */ static GLYPH aastring_glyph={NULL,{0,0,0,0,0,0},NULL,DEFAULTBPP};/* The anti-aliased glyph */ long asc, dsc, ht, wd; long i; long n_horz, n_horz_pad, n_vert, n_asc, n_dsc; long v_start, v_end; char *target_ptr; long offset; char *ptr; int y; long lsb, aalsb, aahstart; int memsize; LONG paddedW; int savelevel; /* Reset character glyph, if necessary */ if (aastring_glyph.bits!=NULL){ free(aastring_glyph.bits); aastring_glyph.bits=NULL; } aastring_glyph.metrics.leftSideBearing=0; aastring_glyph.metrics.rightSideBearing=0; aastring_glyph.metrics.advanceX=0; aastring_glyph.metrics.advanceY=0; aastring_glyph.metrics.ascent=0; aastring_glyph.metrics.descent=0; aastring_glyph.pFontCacheInfo=NULL; aastring_glyph.bpp=T1aa_bpp; /* Check for smart antialiasing */ savelevel=T1aa_level; if (T1aa_SmartOn){ if (size>=T1aa_smartlimit2) { T1aa_level=T1_AA_NONE; } else if (size>=T1aa_smartlimit1) { T1aa_level=T1_AA_LOW; } else { T1aa_level=T1_AA_HIGH; } } /* First, call routine to rasterize character, all error checking is done in this function: */ if ((glyph=T1_SetString( FontID, string, len, spaceoff, modflag, T1aa_level*size, transform))==NULL){ /* restore level */ T1aa_level=savelevel; return(NULL); /* An error occured */ } /* In case there are no black pixels, we simply set the dimensions and then return */ if ( glyph->bits == NULL) { aastring_glyph.bits=NULL; aastring_glyph.metrics.leftSideBearing=0; aastring_glyph.metrics.rightSideBearing=0; aastring_glyph.metrics.advanceX=(int) floor(glyph->metrics.advanceX/(float)T1aa_level+0.5); aastring_glyph.metrics.advanceY=(int) floor(glyph->metrics.advanceY/(float)T1aa_level+0.5); aastring_glyph.metrics.ascent=0; aastring_glyph.metrics.descent=0; aastring_glyph.pFontCacheInfo=NULL; /* restore level and return */ T1aa_level=savelevel; return(&aastring_glyph); } /* Get dimensions of bitmap: */ asc=glyph->metrics.ascent; dsc=glyph->metrics.descent; lsb=glyph->metrics.leftSideBearing; ht=asc-dsc; wd=glyph->metrics.rightSideBearing-lsb; if (T1aa_level==T1_AA_NONE){ /* we only convert bitmap to bytemap */ aastring_glyph=*glyph; aastring_glyph.bpp=T1aa_bpp; /* Compute scanline length and such */ n_horz_pad=PAD( wd*T1aa_bpp, pFontBase->bitmap_pad )>>3; /* Allocate memory for glyph */ memsize = n_horz_pad*ht*8; aastring_glyph.bits = (char *)malloc(memsize*sizeof( char)); if (aastring_glyph.bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; /* restore level */ T1aa_level=savelevel; return(NULL); } paddedW=PAD(wd,pFontBase->bitmap_pad)>>3; ptr=glyph->bits; target_ptr=aastring_glyph.bits; for (i = 0; i < ht; i++) { T1_DoLine ( wd, paddedW, ptr, target_ptr ); ptr += paddedW; target_ptr += n_horz_pad; } /* restore level */ T1aa_level=savelevel; return(&aastring_glyph); } /* Set some looping parameters for subsampling */ if (lsb<0){ aalsb=lsb/T1aa_level-1; aahstart=T1aa_level+(lsb%T1aa_level); } else{ aalsb=lsb/T1aa_level; aahstart=lsb%T1aa_level; } /* The horizontal number of steps: */ n_horz=(wd+aahstart+T1aa_level-1)/T1aa_level; /* And the padded value */ n_horz_pad=PAD( n_horz*T1aa_bpp, pFontBase->bitmap_pad )>>3; /* vertical number of steps: */ if (asc % T1aa_level){ /* not aligned */ if ( asc > 0){ n_asc=asc/T1aa_level+1; v_start=asc % T1aa_level; } else{ n_asc=asc/T1aa_level; v_start=T1aa_level + (asc % T1aa_level); } } else{ n_asc=asc/T1aa_level; v_start=T1aa_level; } if (dsc % T1aa_level){ /* not aligned */ if ( dsc < 0){ n_dsc=dsc/T1aa_level-1; v_end=-(dsc % T1aa_level); } else{ n_dsc=dsc/T1aa_level; v_end=T1aa_level - (dsc % T1aa_level); } } else{ n_dsc=dsc/T1aa_level; v_end=T1aa_level; } /* the total number of lines: */ n_vert=n_asc-n_dsc; /* Allocate memory for glyph */ memsize = n_horz_pad*n_vert; /* Note: we allocate 12 bytes more than necessary */ aastring_glyph.bits = (char *)malloc(memsize*sizeof( char) +12); if (aastring_glyph.bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; return(NULL); } paddedW=PAD(wd,pFontBase->bitmap_pad)/8; offset=0; target_ptr=aastring_glyph.bits; /* We must check for n_vert==1 because then both v_start and v_end could / will affect the same AA scan line. */ if (n_vert==1) { v_start=v_start - (T1aa_level - v_end); } ptr = glyph->bits; for (i = 0; i < n_vert; i++) { if (i==0) y=v_start; else if (i==n_vert-1) y=v_end; else y=T1aa_level; T1_AADoLine ( T1aa_level, wd, y, paddedW, ptr, target_ptr, aahstart ); ptr += y * paddedW; target_ptr += n_horz_pad; } /* .. and set them in aastring_glyph */ aastring_glyph.metrics.leftSideBearing=aalsb; aastring_glyph.metrics.rightSideBearing=aalsb + n_horz; aastring_glyph.metrics.advanceX=(int) floor(glyph->metrics.advanceX/(float)T1aa_level+0.5); aastring_glyph.metrics.advanceY=(int) floor(glyph->metrics.advanceY/(float)T1aa_level+0.5); aastring_glyph.metrics.ascent=n_asc; aastring_glyph.metrics.descent=n_dsc; aastring_glyph.pFontCacheInfo=NULL; /* restore level */ T1aa_level=savelevel; return(&aastring_glyph); } /* T1_AASetRect(): Raster a rectangle, whose size is given in charspace units. The resulting glyph does not cause any escapement. */ GLYPH* T1_AASetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform) { GLYPH *glyph; /* pointer to bitmap glyph */ static GLYPH aaglyph={NULL,{0,0,0,0,0,0},NULL,DEFAULTBPP};/* The anti-aliased glyph */ long asc, dsc, ht, wd; long i; long n_horz, n_horz_pad, n_vert, n_asc, n_dsc; long v_start, v_end; char *target_ptr; long offset; char *ptr; int y; long lsb, aalsb, aahstart; int memsize; LONG paddedW; int savelevel; /* Reset character glyph, if necessary */ if (aaglyph.bits!=NULL){ free(aaglyph.bits); aaglyph.bits=NULL; } aaglyph.metrics.leftSideBearing=0; aaglyph.metrics.rightSideBearing=0; aaglyph.metrics.advanceX=0; aaglyph.metrics.advanceY=0; aaglyph.metrics.ascent=0; aaglyph.metrics.descent=0; aaglyph.pFontCacheInfo=NULL; aaglyph.bpp=T1aa_bpp; /* Check for smart antialiasing */ savelevel=T1aa_level; if (T1aa_SmartOn){ if (size>=T1aa_smartlimit2) { T1aa_level=T1_AA_NONE; } else if (size>=T1aa_smartlimit1) { T1aa_level=T1_AA_LOW; } else { T1aa_level=T1_AA_HIGH; } } /* First, call routine to rasterize character, all error checking is done in this function: */ if ((glyph=T1_SetRect( FontID, T1aa_level*size, width, height, transform))==NULL){ /* restore level */ T1aa_level=savelevel; return(NULL); /* An error occured */ } /* In case there are no black pixels, we simply set the dimensions and then return */ if ( glyph->bits == NULL) { aaglyph.bits=NULL; aaglyph.metrics.leftSideBearing=0; aaglyph.metrics.rightSideBearing=0; aaglyph.metrics.advanceX=(int) floor(glyph->metrics.advanceX/(float)T1aa_level+0.5); aaglyph.metrics.advanceY=(int) floor(glyph->metrics.advanceY/(float)T1aa_level+0.5); aaglyph.metrics.ascent=0; aaglyph.metrics.descent=0; aaglyph.pFontCacheInfo=NULL; /* restore level and return */ T1aa_level=savelevel; return(&aaglyph); } /* Get dimensions of bitmap: */ asc=glyph->metrics.ascent; dsc=glyph->metrics.descent; lsb=glyph->metrics.leftSideBearing; ht=asc-dsc; wd=glyph->metrics.rightSideBearing-lsb; if (T1aa_level==T1_AA_NONE){ /* we only convert bitmap to bytemap */ aaglyph=*glyph; aaglyph.bpp=T1aa_bpp; /* Compute scanline length and such */ n_horz_pad=PAD( wd*T1aa_bpp, pFontBase->bitmap_pad )>>3; /* Allocate memory for glyph */ memsize = n_horz_pad*ht*8; /* aaglyph.bits = (char *)malloc(memsize*sizeof( char)); */ aaglyph.bits = (char *)malloc(memsize*sizeof( char)); if (aaglyph.bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; /* restore level */ T1aa_level=savelevel; return(NULL); } paddedW=PAD(wd,pFontBase->bitmap_pad)>>3; ptr=glyph->bits; target_ptr=aaglyph.bits; for (i = 0; i < ht; i++) { T1_DoLine ( wd, paddedW, ptr, target_ptr ); ptr += paddedW; target_ptr += n_horz_pad; } /* restore level */ T1aa_level=savelevel; return(&aaglyph); } /* Set some looping parameters for subsampling */ if (lsb<0){ aalsb=lsb/T1aa_level-1; aahstart=T1aa_level+(lsb%T1aa_level); } else{ aalsb=lsb/T1aa_level; aahstart=lsb%T1aa_level; } /* The horizontal number of steps: */ n_horz=(wd+aahstart+T1aa_level-1)/T1aa_level; /* And the padded value */ n_horz_pad=PAD( n_horz*T1aa_bpp, pFontBase->bitmap_pad )>>3; /* vertical number of steps: */ if (asc % T1aa_level){ /* not aligned */ if ( asc > 0){ n_asc=asc/T1aa_level+1; v_start=asc % T1aa_level; } else{ n_asc=asc/T1aa_level; v_start=T1aa_level + (asc % T1aa_level); } } else{ n_asc=asc/T1aa_level; v_start=T1aa_level; } if (dsc % T1aa_level){ /* not aligned */ if ( dsc < 0){ n_dsc=dsc/T1aa_level-1; v_end=-(dsc % T1aa_level); } else{ n_dsc=dsc/T1aa_level; v_end=T1aa_level - (dsc % T1aa_level); } } else{ n_dsc=dsc/T1aa_level; v_end=T1aa_level; } /* the total number of lines: */ n_vert=n_asc-n_dsc; /* Allocate memory for glyph */ memsize = n_horz_pad*n_vert; /* Note: we allocate 12 bytes more than necessary */ aaglyph.bits = (char *)malloc(memsize*sizeof( char) +12); if (aaglyph.bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; /* restore level */ T1aa_level=savelevel; return(NULL); } paddedW=PAD(wd,pFontBase->bitmap_pad)/8; offset=0; target_ptr=aaglyph.bits; /* We must check for n_vert==1 because then both v_start and v_end could / will affect the same AA scan line. */ if (n_vert==1) { v_start=v_start - (T1aa_level - v_end); } ptr = glyph->bits; for (i = 0; i < n_vert; i++) { if (i==0) y=v_start; else if (i==n_vert-1) y=v_end; else y=T1aa_level; T1_AADoLine ( T1aa_level, wd, y, paddedW, ptr, target_ptr, aahstart ); ptr += y * paddedW; target_ptr += n_horz_pad; } /* .. and set them in aaglyph */ aaglyph.metrics.leftSideBearing=aalsb; aaglyph.metrics.rightSideBearing=aalsb + n_horz; aaglyph.metrics.advanceX=(int) floor(glyph->metrics.advanceX/(float)T1aa_level+0.5); aaglyph.metrics.advanceY=(int) floor(glyph->metrics.advanceY/(float)T1aa_level+0.5); aaglyph.metrics.ascent=n_asc; aaglyph.metrics.descent=n_dsc; aaglyph.pFontCacheInfo=NULL; /* restore level */ T1aa_level=savelevel; return(&aaglyph); } /* T1_AASetGrayValues(): Sets the byte values that are put into the pixel position for the respective entries: Returns 0 if successfull. */ int T1_AASetGrayValues(unsigned long white, unsigned long gray75, unsigned long gray50, unsigned long gray25, unsigned long black) { if (T1_CheckForInit()){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } gv[4]=(unsigned T1_AA_TYPE32)black; /* black value */ gv[3]=(unsigned T1_AA_TYPE32)gray25; /* gray 25% value */ gv[2]=(unsigned T1_AA_TYPE32)gray50; /* gray 50% value */ gv[1]=(unsigned T1_AA_TYPE32)gray75; /* gray 75% value */ gv[0]=(unsigned T1_AA_TYPE32)white; /* white value */ T1aa_bg=white; if ((T1_AAInit( T1_AA_LOW))) return(-1); return(0); } /* T1_AAHSetGrayValues(): Sets the byte values that are put into the pixel position for the respective entries (for 17 gray levels): Returns 0 if successfull. */ int T1_AAHSetGrayValues( unsigned long *grayvals) { int i; if (T1_CheckForInit()){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } /* 0==white(background) ... 16==black(foreground) */ for (i=0; i<17; i++){ gv_h[i]=(unsigned T1_AA_TYPE32)grayvals[i]; } T1aa_bg=grayvals[0]; if ((T1_AAInit( T1_AA_HIGH))) return(-1); return(0); } /* T1_AANSetGrayValues(): Sets the byte values that are put into the pixel position for the respective entries (for 2 gray levels): Returns 0 if successfull. This is for the case the non-antialiased "bytemaps" should be generated. */ int T1_AANSetGrayValues( unsigned long bg, unsigned long fg) { if (T1_CheckForInit()){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } gv_n[0]=bg; gv_n[1]=fg; T1aa_bg=bg; if ((T1_AAInit( T1_AA_NONE))) return(-1); return(0); } /* Get the current setting of graylevels for 2x antialiasing. The 5 values are stored at address pgrayvals in order from background to foreground */ int T1_AAGetGrayValues( long *pgrayvals) { int i; if (T1_CheckForInit()) { T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } if (pgrayvals==NULL) { T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } for ( i=0; i<5; i++) { /* bg (i=0) to fg (i=4) */ pgrayvals[i]=gv[i]; } return( 0); } /* Get the current setting of graylevels for 4x antialiasing. The 17 values are stored at address pgrayvals in order from background to foreground */ int T1_AAHGetGrayValues( long *pgrayvals) { int i; if (T1_CheckForInit()) { T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } if (pgrayvals==NULL) { T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } for ( i=0; i<17; i++) { /* bg (i=0) to fg (i=16) */ pgrayvals[i]=gv_h[i]; } return( 0); } /* Get the current setting of graylevels for no antialiasing. The 2 values are stored at address pgrayvals in order from background to foreground */ int T1_AANGetGrayValues( long *pgrayvals) { if (T1_CheckForInit()) { T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } if (pgrayvals==NULL) { T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } pgrayvals[0]=gv_n[0]; /* background */ pgrayvals[1]=gv_n[1]; /* foreground */ return( 0); } /* T1_AASetBitsPerPixel(): Sets the depths of the antialiased glyph pixel. Returns 0 if bpp is valid and -1 otherwise. If 24 is specified, meaning to be the depth rather than the bpp-value, automatically 32 bpp is chosen. */ int T1_AASetBitsPerPixel( int bpp) { if (T1_CheckForInit()){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } /* T1aa_level = 0; */ if (bpp==8){ T1aa_bpp=8; return(0); } if (bpp==16){ T1aa_bpp=16; return(0); } if ((bpp==32)|(bpp==24)){ T1aa_bpp=32; return(0); } T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } /* T1_AAGetBitsPerPixel(): Return the number of bits per pixel set in t1lib. */ int T1_AAGetBitsPerPixel( void) { return( T1aa_bpp); } /* Set the Subsampling level for subsequent operations: */ int T1_AASetLevel( int level) { if (T1_CheckForInit()){ T1_errno=T1ERR_OP_NOT_PERMITTED; return(-1); } if (level==T1_AA_LOW){ T1aa_level=T1_AA_LOW; return(0); } else if (level==T1_AA_HIGH){ T1aa_level=T1_AA_HIGH; return(0); } else if (level==T1_AA_NONE){ T1aa_level=T1_AA_NONE; return(0); } T1_errno=T1ERR_INVALID_PARAMETER; return(-1); } /* Get the current subsampling level */ int T1_AAGetLevel( void) { return( T1aa_level); } /* T1_AAFillOutline(): Create a filled glyph from an outline description */ GLYPH *T1_AAFillOutline( T1_OUTLINE *path, int modflag) { GLYPH *glyph; /* pointer to bitmap glyph */ static GLYPH aaglyph={NULL,{0,0,0,0,0,0},NULL,DEFAULTBPP};/* The anti-aliased glyph */ long asc, dsc, ht, wd; long i; long n_horz, n_horz_pad, n_vert, n_asc, n_dsc; long v_start, v_end; char *target_ptr; long offset; char *ptr; int y; long lsb, aalsb, aahstart; int memsize; LONG paddedW; /* Reset character glyph, if necessary */ if (aaglyph.bits!=NULL){ free(aaglyph.bits); aaglyph.bits=NULL; } aaglyph.metrics.leftSideBearing=0; aaglyph.metrics.rightSideBearing=0; aaglyph.metrics.advanceX=0; aaglyph.metrics.advanceY=0; aaglyph.metrics.ascent=0; aaglyph.metrics.descent=0; aaglyph.pFontCacheInfo=NULL; aaglyph.bpp=T1aa_bpp; /* First, scale outline appropriately: */ path=T1_ScaleOutline( path, T1aa_level); /* Second, call routine to fill outline, all error checking is done in this function: */ if ((glyph=T1_FillOutline( path, modflag))==NULL) return(NULL); /* An error occured */ /* In case there are no black pixels, we simply set the dimensions and then return */ if ( glyph->bits == NULL) { aaglyph.bits=NULL; aaglyph.metrics.leftSideBearing=0; aaglyph.metrics.rightSideBearing=0; aaglyph.metrics.advanceX=(int) floor(glyph->metrics.advanceX/(float)T1aa_level+0.5); aaglyph.metrics.advanceY=(int) floor(glyph->metrics.advanceY/(float)T1aa_level+0.5); aaglyph.metrics.ascent=0; aaglyph.metrics.descent=0; aaglyph.pFontCacheInfo=NULL; return(&aaglyph); } /* Get dimensions of bitmap: */ asc=glyph->metrics.ascent; dsc=glyph->metrics.descent; lsb=glyph->metrics.leftSideBearing; ht=asc-dsc; wd=glyph->metrics.rightSideBearing-lsb; if (T1aa_level==T1_AA_NONE){ /* we only convert bitmap to bytemap */ aaglyph=*glyph; aaglyph.bpp=T1aa_bpp; /* Compute scanline length and such */ n_horz_pad=PAD( wd*T1aa_bpp, pFontBase->bitmap_pad )>>3; /* Allocate memory for glyph, we alloc 12 bytes more to simplify subsampling! */ memsize = n_horz_pad*ht*8; aaglyph.bits = (char *)malloc(memsize*sizeof( char) +12); if (aaglyph.bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; return(NULL); } paddedW=PAD(wd,pFontBase->bitmap_pad)>>3; ptr=glyph->bits; target_ptr=aaglyph.bits; for (i = 0; i < ht; i++) { T1_DoLine ( wd, paddedW, ptr, target_ptr ); ptr += paddedW; target_ptr += n_horz_pad; } return(&aaglyph); } /* Set some looping parameters for subsampling */ if (lsb<0){ aalsb=lsb/T1aa_level-1; aahstart=T1aa_level+(lsb%T1aa_level); } else{ aalsb=lsb/T1aa_level; aahstart=lsb%T1aa_level; } /* The horizontal number of steps: */ n_horz=(wd+aahstart+T1aa_level-1)/T1aa_level; /* And the padded value */ n_horz_pad=PAD( n_horz*T1aa_bpp, pFontBase->bitmap_pad )>>3; /* vertical number of steps: */ if (asc % T1aa_level){ /* not aligned */ if ( asc > 0){ n_asc=asc/T1aa_level+1; v_start=asc % T1aa_level; } else{ n_asc=asc/T1aa_level; v_start=T1aa_level + (asc % T1aa_level); } } else{ n_asc=asc/T1aa_level; v_start=T1aa_level; } if (dsc % T1aa_level){ /* not aligned */ if ( dsc < 0){ n_dsc=dsc/T1aa_level-1; v_end=-(dsc % T1aa_level); } else{ n_dsc=dsc/T1aa_level; v_end=T1aa_level - (dsc % T1aa_level); } } else{ n_dsc=dsc/T1aa_level; v_end=T1aa_level; } /* the total number of lines: */ n_vert=n_asc-n_dsc; /* Allocate memory for glyph */ memsize = n_horz_pad*n_vert; aaglyph.bits = (char *)malloc(memsize*sizeof( char)+12); if (aaglyph.bits == NULL) { T1_errno=T1ERR_ALLOC_MEM; return(NULL); } paddedW=PAD(wd,pFontBase->bitmap_pad)/8; offset=0; target_ptr=aaglyph.bits; /* We must check for n_vert==1 because then both v_start and v_end could / will affect the same AA scan line. */ if (n_vert==1) { v_start=v_start - (T1aa_level - v_end); } ptr = glyph->bits; for (i = 0; i < n_vert; i++) { if (i==0) y=v_start; else if (i==n_vert-1) y=v_end; else y=T1aa_level; T1_AADoLine ( T1aa_level, wd, y, paddedW, ptr, target_ptr, aahstart ); ptr += y * paddedW; target_ptr += n_horz_pad; } /* .. and set them in aaglyph */ aaglyph.metrics.leftSideBearing=aalsb; aaglyph.metrics.rightSideBearing=aalsb + n_horz; aaglyph.metrics.advanceX=(int) floor(glyph->metrics.advanceX/(float)T1aa_level+0.5); aaglyph.metrics.advanceY=(int) floor(glyph->metrics.advanceY/(float)T1aa_level+0.5); aaglyph.metrics.ascent=n_asc; aaglyph.metrics.descent=n_dsc; aaglyph.pFontCacheInfo=NULL; return(&aaglyph); } /* T1_AASetSmartLimits(): Set the limit-values for smart antialiasing. Returns 0 if OK, and -1 else. */ int T1_AASetSmartLimits( float limit1, float limit2) { if (limit1 > 0.0 && limit2 > 0.0 && limit2 >= limit2) { T1aa_smartlimit1=limit1; T1aa_smartlimit2=limit2; return( 0); } else{ T1_errno=T1ERR_INVALID_PARAMETER; return( -1); } } /* T1_AASetSmartMode(): Enable or disable smart anialiasing */ int T1_AASetSmartMode( int smart) { if (smart==T1_YES) { T1aa_SmartOn=1; } else if (smart==T1_NO) { T1aa_SmartOn=0; } else { T1_errno=T1ERR_INVALID_PARAMETER; return( -1); } return( 0); } t1lib-5.1.2/lib/t1lib/t1aaset.h0000644000175000001440000000677410733501626014576 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1aaset.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2003-01-02 ----- Description: This file is part of the t1-library. It contains definitions and declarations for t1set.c. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1AASET_C GLYPH *T1_AASetChar( int FontID, char charcode, float size, T1_TMATRIX *transform); GLYPH *T1_AASetString( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); GLYPH* T1_AASetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform); int T1_AASetGrayValues( unsigned long white, unsigned long gray75, unsigned long gray50, unsigned long gray25, unsigned long black); int T1_AAHSetGrayValues( unsigned long *grayvals); int T1_AANSetGrayValues( unsigned long fg, unsigned long bg); int T1_AAGetGrayValues( long *pgrayvals); int T1_AAHGetGrayValues( long *pgrayvals); int T1_AANGetGrayValues( long *pgrayvals); int T1_AASetBitsPerPixel( int bpp); int T1_AAGetBitsPerPixel( void); int T1_AASetLevel( int level); int T1_AAGetLevel( void); GLYPH *T1_AAFillOutline( T1_OUTLINE *path, int modflag); int T1_AASetSmartLimits( float limit1, float limit2); int T1_AASetSmartMode( int smart); #else extern GLYPH *T1_AASetChar( int FontID, char charcode, float size, T1_TMATRIX *transform); extern GLYPH *T1_AASetString( int FontID, char *string, int len, long spaceoff, int modflag, float size, T1_TMATRIX *transform); extern GLYPH* T1_AASetRect( int FontID, float size, float width, float height, T1_TMATRIX *transform); extern int T1_AASetGrayValues( unsigned long white, unsigned long gray75, unsigned long gray50, unsigned long gray25, unsigned long black); extern int T1_AAHSetGrayValues( unsigned long *grayvals); extern int T1_AANSetGrayValues( unsigned long bg, unsigned long fg); extern int T1_AAGetGrayValues( long *pgrayvals); extern int T1_AAHGetGrayValues( long *pgrayvals); extern int T1_AANGetGrayValues( long *pgrayvals); extern int T1_AASetBitsPerPixel( int bpp); extern int T1_AAGetBitsPerPixel( void); extern int T1_AASetLevel( int level); extern int T1_AAGetLevel( void); extern GLYPH *T1_AAFillOutline( T1_OUTLINE *path, int modflag); extern int T1_AASetSmartLimits( float limit1, float limit2); extern int T1_AASetSmartMode( int smart); #endif t1lib-5.1.2/lib/t1lib/sysconf.h.in0000644000175000001440000000341010733501626015305 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: sysconf.h.in ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2001-04-01 ----- Description: This file is part of the t1-library. Some system dependent definitions are stored here. sysconf.h is generated from this file automatically by the configure-script. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #undef __CHAR_UNSIGNED__ #define SIZEOF_CHAR 0 #define SIZEOF_SHORT 0 #define SIZEOF_INT 0 #define SIZEOF_LONG 0 #define SIZEOF_LONG_LONG 0 #define SIZEOF_FLOAT 0 #define SIZEOF_DOUBLE 0 #define SIZEOF_LONG_DOUBLE 0 #define SIZEOF_VOID_P 0 t1lib-5.1.2/lib/t1lib/t1afmtool.c0000644000175000001440000004673410733501626015135 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1afmtool.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2007-12-23 ----- Description: This file is part of the t1-library. It contains functions for generating a fallback set of afm data from type 1 font files. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1AFMTOOL_C #include #include #include #include #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include #include "../type1/ffilest.h" #include "../type1/types.h" #include "parseAFM.h" #include "../type1/objects.h" #include "../type1/spaces.h" #include "../type1/util.h" #include "../type1/fontfcn.h" #include "../type1/paths.h" #include "../type1/regions.h" #include "../type1/blues.h" #include "t1types.h" #include "t1extern.h" #include "t1finfo.h" #include "t1base.h" #include "t1misc.h" #include "t1set.h" #include "t1load.h" #include "t1afmtool.h" #define DELTA_MAX 30 #define ENCODINGSIZE (int) 256 #ifndef T1LIB_IDENT #define T1LIB_IDENT "???.???" #endif extern char *t1_get_abort_message( int number); /* T1_GenerateAFMFallbackInfo(): Generate fallback information from Type 1 font file by rasterizing every character at 1000 bp. Returns a pointer to a generated FontInfo struct or NULL in case of an error. */ FontInfo *T1_GenerateAFMFallbackInfo( int FontID) { int i, j; struct region *area; struct XYspace *S; int mode=0; char **charnames; int nochars=0; FontInfo *pAFMData; /* When generaing fallback info, we accumulate a font bounding box that could be useful when the font's definition is missing or trivial. */ int acc_llx=0; int acc_lly=0; int acc_urx=0; int acc_ury=0; /* We return to this if something goes wrong deep in the rasterizer */ if ((i=setjmp( stck_state))!=0) { T1_errno=T1ERR_TYPE1_ABORT; sprintf( err_warn_msg_buf, "t1_abort: Reason: %s", t1_get_abort_message( i)); T1_PrintLog( "T1_GenerateAFMFallbackInfo()", err_warn_msg_buf, T1LOG_ERROR); return( NULL); } /* Check whether font is loaded: */ if (T1_CheckForFontID(FontID)!=1){ sprintf( err_warn_msg_buf, "Can't generate AFM Info from Font %d (invalid ID)\n", FontID); T1_PrintLog( "T1_GenerateAFMFallbackInfo()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_INVALID_FONTID; return(NULL); } /* Setup apropriate charspace matrix */ S=(struct XYspace *)IDENTITY; /* Make this permanent so that scaling it in fontfcnB_ByName will make a duplicate of it, and this duplicate can thus be safely destroyed. Fixes the somewhat smaller memory leak */ S=(struct XYspace *)Permanent (Transform(S, pFontBase->pFontArray[FontID].FontTransform[0], pFontBase->pFontArray[FontID].FontTransform[1], pFontBase->pFontArray[FontID].FontTransform[2], pFontBase->pFontArray[FontID].FontTransform[3])); /* Alloc memory for FontInfo: */ if ((pAFMData=(FontInfo *)malloc( sizeof(FontInfo)))==NULL){ sprintf( err_warn_msg_buf, "Failed to allocate memory for FontInfo in Font %d!", FontID); T1_PrintLog( "T1_GenerateAFMFallbackInfo()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_ALLOC_MEM; /* make sure to free S */ if (S) { KillSpace (S); } return( NULL); } /* Initialize pointers */ pAFMData->gfi=NULL; pAFMData->cwi=NULL; pAFMData->numOfChars=0; pAFMData->cmi=NULL; pAFMData->numOfTracks=0; pAFMData->tkd=NULL; pAFMData->numOfPairs=0; pAFMData->pkd=NULL; pAFMData->numOfComps=0; pAFMData->ccd=NULL; /* Get list of character name */ charnames=T1_GetAllCharNames( FontID); /* and count number of characters */ nochars=0; while (charnames[nochars]!=NULL) nochars++; pAFMData->numOfChars=nochars; /* Allocate memory for CharMetricInfo area */ if ((pAFMData->cmi=(CharMetricInfo *) malloc( nochars * sizeof( CharMetricInfo)))==NULL){ sprintf( err_warn_msg_buf, "Failed to allocate memory for CharMetricsInfo area in Font %d!", FontID); T1_PrintLog( "T1_GenerateAFMFallbackInfo()", err_warn_msg_buf, T1LOG_WARNING); free( pAFMData); T1_errno=T1ERR_ALLOC_MEM; /* make sure to free S */ if (S) { KillSpace (S); } return( NULL); } /* Get metrics values */ for (i=0; ipFontArray[FontID].pType1Data, DO_RASTER); if (area==NULL){ sprintf( err_warn_msg_buf, "Could not get charspace representation of character %d (%s) Font %d!", i, charnames[i], FontID); T1_PrintLog( "T1_GenerateAFMFallbackInfo()", err_warn_msg_buf, T1LOG_WARNING); /* Return since we don't know how to fill the values */ for (j=i-1; j>=0; j--) free( pAFMData->cmi[j].name); if (pAFMData->cmi!=NULL) free( pAFMData->cmi); if (pAFMData!=NULL) free( pAFMData); T1_errno=mode; /* make sure to free S */ if (S) { KillSpace (S); } return( NULL); } else if ((pAFMData->cmi[i].name=(char *) malloc( (size_t)(strlen( charnames[i])+1)))==NULL){ sprintf( err_warn_msg_buf, "Failed to allocate memory for CharName %d (%s) Font %d!", i, charnames[i], FontID); T1_PrintLog( "T1_GenerateAFMFallbackInfo()", err_warn_msg_buf, T1LOG_WARNING); /* NULL-ptr in charnames is prone to SIGSEGV-errors, thus, we have to return: */ for (j=i; j>=0; j--) free( pAFMData->cmi[j].name); free( pAFMData->cmi); free( pAFMData); T1_errno=T1ERR_ALLOC_MEM; /* make sure to free S */ if (S) { KillSpace (S); } return( NULL); } else{ strcpy( pAFMData->cmi[i].name, charnames[i]); pAFMData->cmi[i].code=T1_GetEncodingIndex( FontID, charnames[i]); pAFMData->cmi[i].wx=NEARESTPEL(area->ending.x); pAFMData->cmi[i].wy=NEARESTPEL(area->ending.y); /* We check for a valid BBox and set it to zero otherwise */ if ((int)area->xmax > (int)area->xmin){ pAFMData->cmi[i].charBBox.llx =(int)area->xmin; pAFMData->cmi[i].charBBox.urx =(int)area->xmax; pAFMData->cmi[i].charBBox.lly =(int)area->ymin; pAFMData->cmi[i].charBBox.ury =(int)area->ymax; } else{ pAFMData->cmi[i].charBBox.llx =0; pAFMData->cmi[i].charBBox.urx =0; pAFMData->cmi[i].charBBox.lly =0; pAFMData->cmi[i].charBBox.ury =0; } pAFMData->cmi[i].ligs=NULL; /* Accumulate bounding box of font */ if ( pAFMData->cmi[i].charBBox.llx < acc_llx ) { acc_llx=pAFMData->cmi[i].charBBox.llx; } if ( pAFMData->cmi[i].charBBox.lly < acc_lly ) { acc_lly=pAFMData->cmi[i].charBBox.lly; } if ( pAFMData->cmi[i].charBBox.urx > acc_urx ) { acc_urx=pAFMData->cmi[i].charBBox.urx; } if ( pAFMData->cmi[i].charBBox.ury > acc_ury ) { acc_ury=pAFMData->cmi[i].charBBox.ury; } /* We are done with area, so get rid of it. Solves the REALLY HUGE memory leak */ KillRegion (area); } } sprintf( err_warn_msg_buf, "Generated metric information for %d characters of font %d!", nochars, FontID); T1_PrintLog( "T1_GenerateAFMFallbackInfo()", err_warn_msg_buf, T1LOG_STATISTIC); /* Check whether the bounding box we computed could be better than that specified in the font file itself. Id so, we overwrite it. */ if ( pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[0].data.integer == 0 && pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[1].data.integer == 0 && pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[2].data.integer == 0 && pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[3].data.integer == 0 ) { pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[0].data.integer = acc_llx; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[1].data.integer = acc_lly; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[2].data.integer = acc_urx; pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[3].data.integer = acc_ury; sprintf( err_warn_msg_buf, "Substituted accumulated FontBBox [%d,%d,%d,%d] for trivial FontBBox of font %d!", acc_llx, acc_lly, acc_urx, acc_ury, FontID); T1_PrintLog( "T1_GenerateAFMFallbackInfo()", err_warn_msg_buf, T1LOG_WARNING); } /* make sure to free S */ if (S) { KillSpace (S); } return( pAFMData); } /* T1_WriteAFMFallbackFile(): Write a fallback AFM-file from AFM data genarated for font FontID. returns 0 if successful -1 if afm-data was loaded from existent AFM-file -2 if font is not loaded (invalid FontID) -3 if for some reason the fonts' AFM-data has not been generated -4 if the file could not be openend -5 if an error occurred during write -6 other error. */ int T1_WriteAFMFallbackFile( int FontID) { int i, j, k, l; int nochars; int capheight, ascender, xheight, descender; int min=0, delta; time_t s_clock, *tp; char *afmfilename; FILE *afmfile; CharMetricInfo **cmi; /* Check for valid font */ if (T1_CheckForFontID(FontID)!=1){ sprintf( err_warn_msg_buf, "Warning: Invalid FontID, font %d not loaded!", FontID); T1_PrintLog( "T1_WriteAFMFallbackFile()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_INVALID_FONTID; return(-2); } /* Check for AFM-data to be existent */ if (pFontBase->pFontArray[FontID].pAFMData==NULL){ sprintf( err_warn_msg_buf, "Warning: No AFM-Data available for font %d", FontID); T1_PrintLog( "T1_WriteAFMFallbackFile()", err_warn_msg_buf, T1LOG_WARNING); return(-3); } /* Check if AFM data has been generated from existent afm file --> no need to generate a new one. */ if ((pFontBase->pFontArray[FontID].info_flags & AFM_SUCCESS) || (pFontBase->pFontArray[FontID].info_flags & AFM_SLOPPY_SUCCESS)){ sprintf( err_warn_msg_buf, "Alert: Available AFM-Data for font %d is generated from existent AFM-file!", FontID); T1_PrintLog( "T1_WriteAFMFallbackFile()", err_warn_msg_buf, T1LOG_STATISTIC); return(-1); } /* Construct AFM-filename */ i=strlen(pFontBase->pFontArray[FontID].pFontFileName); if ((afmfilename=(char *)malloc((size_t)(i + 1) ))==NULL){ sprintf( err_warn_msg_buf, "Memory allocation error (fontID = %d)", FontID); T1_PrintLog( "T1_WriteAFMFallbackFile()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_ALLOC_MEM; return(-6); } strcpy( afmfilename, pFontBase->pFontArray[FontID].pFontFileName); while (afmfilename[i]!='.') i--; afmfilename[i+1]='a'; afmfilename[i+2]='f'; afmfilename[i+3]='m'; if ((afmfile=fopen( afmfilename, "wb"))==NULL){ sprintf( err_warn_msg_buf, "Could not open %s, (FontID = %d)", afmfilename, FontID); T1_PrintLog( "T1_WriteAFMFallbackFile()", err_warn_msg_buf, T1LOG_WARNING); free( afmfilename); T1_errno=T1ERR_FILE_OPEN_ERR; return(-4); } /* Set the creation time of afm file */ tp=&s_clock; s_clock=time( tp); /* Allocate a pointer-array to the metrics information, of the size 256 + number of characters. */ nochars=pFontBase->pFontArray[FontID].pAFMData->numOfChars; if ((cmi=(CharMetricInfo **)calloc( nochars+ENCODINGSIZE, sizeof(CharMetricInfo *)))==NULL){ sprintf( err_warn_msg_buf, "Memory allocation error (fontID = %d)", FontID); T1_PrintLog( "T1_WriteAFMFallbackFile()", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_ALLOC_MEM; return(-6); } /* Reset area */ for ( i=0; i<(nochars+ENCODINGSIZE); i++) cmi[i]=NULL; /* First half of array is dedicated to encoded characters, the second half for unencoded characters */ k=ENCODINGSIZE; for ( i=0; ipFontArray[FontID].pAFMData->cmi[i].name); if (j>=0) cmi[j]=&(pFontBase->pFontArray[FontID].pAFMData->cmi[i]); else cmi[k++]=&(pFontBase->pFontArray[FontID].pAFMData->cmi[i]); } fprintf(afmfile, "StartFontMetrics 4.0\n"); fprintf(afmfile, "Comment This is %s created from %s by t1lib V. %s.\n", afmfilename, pFontBase->pFontArray[FontID].pFontFileName, T1LIB_IDENT); fprintf(afmfile, "Comment File creation date: %s", ctime(&s_clock)); fprintf(afmfile, "Comment t1lib is copyright (c) Rainer Menzner, 1996-2001.\n"); fprintf(afmfile, "Comment t1lib is distributed under the GNU General Public Library License (LGPL)\n"); fprintf(afmfile, "FontName %s\n", T1_GetFontName( FontID)); fprintf(afmfile, "FullName %s\n", T1_GetFullName( FontID)); fprintf(afmfile, "FamilyName %s\n", T1_GetFamilyName( FontID)); fprintf(afmfile, "Weight %s\n", T1_GetWeight( FontID)); fprintf(afmfile, "ItalicAngle %d\n", (int)T1_GetItalicAngle( FontID)); fprintf(afmfile, "IsFixedPitch %s\n", T1_GetIsFixedPitch( FontID) ? "true" : "false" ); fprintf(afmfile, "FontBBox %d %d %d %d\n", T1_GetFontBBox( FontID).llx, T1_GetFontBBox( FontID).lly, T1_GetFontBBox( FontID).urx, T1_GetFontBBox( FontID).ury); fprintf(afmfile, "UnderlinePosition %d\n", (int)T1_GetUnderlinePosition( FontID)); fprintf(afmfile, "UnderlineThickness %d\n", (int)T1_GetUnderlineThickness( FontID)); fprintf(afmfile, "Version %s\n", T1_GetVersion( FontID)); fprintf(afmfile, "Notice %s\n", T1_GetNotice( FontID)); /* Encoding */ if (pFontBase->pFontArray[FontID].pFontEnc==NULL){ if (pFontBase->pFontArray[FontID].info_flags & USES_STANDARD_ENCODING){ fprintf( afmfile, "EncodingScheme AdobeStandardEncoding\n"); } else{ fprintf( afmfile, "EncodingScheme FontSpecific\n"); } } else fprintf( afmfile, "EncodingScheme FontSpecific\n"); /* Values like capheight ascender xheight and descender */ /* We start with the overshoot positions */ i=pFontBase->pFontArray[FontID].pType1Data->BluesP->numBlueValues; if (i>0){ /* Capheight */ if ((k=T1_GetEncodingIndex( FontID, "H"))!=-1){ l=T1_GetCharBBox( FontID, (char) k).ury; delta=10000; for (j=0; j abs(pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[j] - l)){ min=j; delta=abs(pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[j] - l); } } if (min % 2) /* index is odd */ min--; /* Check for plausibility */ if (abs( pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[min] - l) > DELTA_MAX) /* We probably did not found the right position */ capheight=0; else capheight=pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[min]; } else capheight=0; /* XHeight */ if ((k=T1_GetEncodingIndex( FontID, "x"))!=-1){ l=T1_GetCharBBox( FontID, (char) k).ury; delta=10000; for (j=0; j abs(pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[j] - l)){ min=j; delta=abs(pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[j] - l); } } if (min % 2) /* index is odd */ min--; /* Check for plausibility */ if (abs( pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[min] - l) > DELTA_MAX) /* We probably did not found the right position */ xheight=0; else xheight=pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[min]; } else{ xheight=0; } /* Ascender */ if ((k=T1_GetEncodingIndex( FontID, "d"))!=-1){ l=T1_GetCharBBox( FontID, (char) k).ury; delta=10000; for (j=0; j abs(pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[j] - l)){ min=j; delta=abs(pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[j] - l); } } if (min % 2) /* index is odd */ min--; /* Check for plausibility */ if (abs( pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[min] - l) > DELTA_MAX) /* We probably did not found the right position */ ascender=0; else ascender=pFontBase->pFontArray[FontID].pType1Data->BluesP->BlueValues[min]; } else{ ascender=0; } } else{ capheight=0; xheight=0; ascender=0; } /* And now comes under shoot alignment position */ i=pFontBase->pFontArray[FontID].pType1Data->BluesP->numOtherBlues; if (i>0){ /* Descender */ if ((k=T1_GetEncodingIndex( FontID, "p"))!=-1){ l=T1_GetCharBBox( FontID, (char) k).lly; delta=10000; for (j=0; j abs(pFontBase->pFontArray[FontID].pType1Data->BluesP->OtherBlues[j] - l)){ min=j; delta=abs(pFontBase->pFontArray[FontID].pType1Data->BluesP->OtherBlues[j] - l); } } if ((min % 2)==0) /* index is even */ min++; /* Check for plausibility */ if (abs( pFontBase->pFontArray[FontID].pType1Data->BluesP->OtherBlues[min] - l) > DELTA_MAX) /* We probably did not found the right position */ descender=0; else descender=pFontBase->pFontArray[FontID].pType1Data->BluesP->OtherBlues[min]; } else{ descender=0; } } else{ descender=0; } if (capheight != 0) fprintf( afmfile, "CapHeight %d\n", capheight); if (xheight != 0) fprintf( afmfile, "XHeight %d\n", xheight); if (ascender != 0) fprintf( afmfile, "Ascender %d\n", ascender); if (descender != 0) fprintf( afmfile, "Descender %d\n", descender); if (pFontBase->pFontArray[FontID].pType1Data->BluesP->StdHW != 0.0) fprintf( afmfile, "StdHW %d\n", (int) pFontBase->pFontArray[FontID].pType1Data->BluesP->StdHW); if (pFontBase->pFontArray[FontID].pType1Data->BluesP->StdVW != 0.0) fprintf( afmfile, "StdVW %d\n", (int) pFontBase->pFontArray[FontID].pType1Data->BluesP->StdVW); /* Now fill in the values (we omit the .notdef) */ fprintf(afmfile, "StartCharMetrics %d\n", nochars-1); for ( i=0; i<(nochars+ENCODINGSIZE); i++){ if (cmi[i]!=NULL && strcmp(cmi[i]->name,".notdef")) fprintf( afmfile, "C %3d ; WX %4d ; N %-20s ; B %5d %5d %5d %5d ;\n", cmi[i]->code, cmi[i]->wx, cmi[i]->name, cmi[i]->charBBox.llx, cmi[i]->charBBox.lly, cmi[i]->charBBox.urx, cmi[i]->charBBox.ury); } fprintf(afmfile, "EndCharMetrics\nEndFontMetrics\n"); free(cmi); fclose( afmfile); return(0); } t1lib-5.1.2/lib/t1lib/t1afmtool.h0000644000175000001440000000347110733501626015131 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1afmtool.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2001-04-01 ----- Description: This file is part of the t1-library. It contains declarations and definitions for t1afmtool.c. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #ifdef T1AFMTOOL_C FontInfo *T1_GenerateAFMFallbackInfo( int FontID); int T1_WriteAFMFallbackFile( int FontID); extern struct region *fontfcnB_ByName( int FontID, int modflag, struct XYspace *S, char *charname, int *mode, psfont *Font_Ptr, int do_raster); #else extern FontInfo *T1_GenerateAFMFallbackInfo( int FontID); extern int T1_WriteAFMFallbackFile( int FontID); #endif t1lib-5.1.2/lib/t1lib/t1types.h0000644000175000001440000002073410733501626014635 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1types.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2004-12-09 ----- Description: This file is part of the t1-library. It contains type definitions used by the t1-library. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2004. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #define T1TYPES_H #include "sysconf.h" typedef struct { int flags; int chars; int hkern; } METRICS_ENTRY; typedef struct { char *pFontFileName; /* Pointer to the font's filename */ char *pAfmFileName; /* Pointer to the afm filename, IFF set explicitly */ FontInfo *pAFMData; /* A pointer to a struct which gives access to all the data contained in the .afm-file. If this pointer is NULL, no .afm-file had been found. => There's no advanced info on the font available. */ psfont *pType1Data; /* A pointer to a struct giving access to all information contained in the .pfa/.pfb-file. This is needed! */ int *pEncMap; /* For fast mapping from charnames to encoding indices */ METRICS_ENTRY *pKernMap; /* dito */ int KernMapSize; char **pFontEnc; /* This is the pointer to the encoding array associated with that particular font. If FontEnc=NULL, it means the internal (fontspecific) encoding is to be used. */ char *vm_base; /* The base address of the virtual memory area for this font. It must be stored in order to be able to realloc and free those memory areas later. */ void *pFontSizeDeps; /* This one points to a linked list of structures which store all font size dependent data. */ double FontMatrix[4]; /* Two matrices which store the font matrix and special Transformation to be applied, such as slant and extend or probably some rotation. */ double FontTransform[4]; float slant; /* A slant factor for the font */ float extend; /* A extension factor for the font */ float UndrLnPos; /* Parameters for ~lining rules */ float UndrLnThick; float OvrLnPos; float OvrLnThick; float OvrStrkPos; float OvrStrkThick; float StrokeWidth; float SavedStrokeWidth; unsigned short physical; /* This entry is used to decide, whether a font is associated with an own physical fontfile, or whether it has been created as a "logical" font by copying another "physical" font. */ unsigned short refcount; /* At load time this counter is set to 1. Every time, a T1_CopyFont() is executed on this font, this counter is incremented by 1. This gives the possibility to decide whether a physical font is used by some logical font. */ short space_position; /* The position where "space" is encoded, is saved in this entry. The space character needs special treatment. Saving its position here yields faster execution during rastering of strings with a user-supplied space-offset! */ short info_flags; /* Here some info may be stored */ } FONTPRIVATE; /* A structure representing a matrix */ typedef struct { double cxx; double cyx; double cxy; double cyy; } T1_TMATRIX; /* Following struct is used for storing all information for a particular rendered character glyph */ typedef struct { char *bits; /* A pointer to the characters local bitmap */ struct /* A struct containing diverse metric information */ { int ascent; int descent; int leftSideBearing; int rightSideBearing; int advanceX; int advanceY; } metrics; void *pFontCacheInfo; unsigned long bpp; /* The number of bits that represent 1 pixel */ } GLYPH; /* Next comes the struct declaration for FontSizeDeps, which stores size specific data of a font */ typedef struct { GLYPH *pFontCache; /* Pointer to the cache area of this font at this size */ void *pNextFontSizeDeps; /* A pointer to the next size's FontSizeDeps-structure. */ void *pPrevFontSizeDeps; /* A pointer to the previous size's FontSizeDeps-structure or NULL if the current is the first. */ struct XYspace *pCharSpaceLocal; /* This is a scaled version of the global version for this font. */ float size; /* The desired size, to be specified in bp's. */ int antialias; /* Switch for marking the current size antialiased */ } FONTSIZEDEPS; /* A data type that makes most important information available to user. */ typedef struct { int width; /* The glyph's width */ BBox bbox; /* The glyph's bounding box */ int numchars; /* The number of characters in the glyph (string) */ int *charpos; /* A pointer to an integer array were the horizontal positions in (afm units) of the individual characters in the string are stored */ } METRICSINFO; /* Handling of outlines: These definitions decouple from the type 1 rasterizers def's and make the necessary stuff available to end users */ #define FRACTBITS 16 /* number of fractional bits in 'fractpel' */ /* From/to conversion of pels/fractpels */ #define T1_TOPATHPOINT(p) (((T1_AA_TYPE32)p)<>FRACTBITS) /* A fractional point */ typedef struct { T1_AA_TYPE32 x; T1_AA_TYPE32 y; } T1_PATHPOINT; /* A straight outline segment, stroked or not stroked */ typedef struct pathsegment { char type; /* type of segment (line or move) */ unsigned char flag; /* type1 rasterizer internal stuff */ short references; /* type1 rasterizer internal stuff */ unsigned char size; /* size of the structure */ unsigned char context; /* index to device context */ struct pathsegment *link; /* pointer to next structure in linked list */ struct pathsegment *last; /* pointer to last structure in list */ T1_PATHPOINT dest; /* relative ending location of path segment */ } T1_PATHSEGMENT; /* A third order bezier segment */ typedef struct bezierpathsegment { char type; /* type of segment (bezier) */ unsigned char flag; /* type1 rasterizer internal stuff */ short references; /* type1 rasterizer internal stuff */ unsigned char size; /* as with any 'segment' type */ unsigned char context; /* as with any 'segment' type */ T1_PATHSEGMENT *link; /* as with any 'segment' type */ T1_PATHSEGMENT *last; /* as with any 'segment' type */ T1_PATHPOINT dest; /* ending point (D) */ T1_PATHPOINT B; /* control point B */ T1_PATHPOINT C; /* control point C */ } T1_BEZIERSEGMENT; typedef T1_PATHSEGMENT T1_OUTLINE; /* Two structures for handling composite character data */ /* One structure for each symbol of the composite character */ typedef struct { int piece; /* the index of the current symbol */ int deltax; /* horizontal displacement of current symbol in CS */ int deltay; /* vertical displacement of current symbol in CS */ } T1_COMP_PIECE; /* This one defines the composite character, the number of pieces and how to access their data. */ typedef struct { int compchar; /* the base character in the current encoding */ int numPieces; /* the number of defined pieces including the base char */ T1_COMP_PIECE *pieces; /* a pointer to the pieces' information */ } T1_COMP_CHAR_INFO; t1lib-5.1.2/lib/t1lib/t1global.h0000644000175000001440000001016410733501626014725 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1global.h ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2005-05-16 ----- Description: This file is part of the t1-library. It contains global declarations used by the t1-library. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #include "t1misc.h" /* Following struct will allow all accesses to font data! */ struct FONTBASE { int t1lib_flags; /* Global library flags */ int no_fonts_ini; /* The number of fonts initially declared in Font database file. */ int no_fonts; /* The number of currently allocated fonts including logical fonts produced by T1_CopyFont() */ int no_fonts_limit; /* The maximum number of font for which is memory currently available. */ int bitmap_pad; /* The value to which bitmap-scanlines are padded */ int endian; /* 1 if little endian representation and 0 otherwise */ char **default_enc; /* The default encoding vector */ FONTPRIVATE *pFontArray; /* Points to first element of font pointer array */ } FontBase; struct FONTBASE *pFontBase=NULL; /* Further we need a struct where to save device dependent data such as resolution. The values in this struct may be altered using T1_SetDeviceRes(x_res,y_res). Generally, the fontsize is to be specified in BigPoints ("bp")---this is the default PostScript unit. It is 1in=72bp. */ typedef struct { float x_resolution; /* Value must be specified in DPI */ float y_resolution; /* Value must be specified in DPI */ float scale_x; /* horizontal scale-value to get a matrix scaled to 1b */ float scale_y; /* vertical scale-value to get a matrix scaled to 1b */ } DEVICESPECIFICS; DEVICESPECIFICS DeviceSpecifics = { DEFAULT_RES, DEFAULT_RES, DEFAULT_RES/BIGPOINTSPERINCH, DEFAULT_RES/BIGPOINTSPERINCH }; struct stat filestats; /* A structure where fileinfo is stored */ char linebuf[BUF_SIZE]; /* A buffer for reading files line by line */ int T1_Up=0; /* This one is for initialization-checking */ /* The width of AA-pixels */ int T1aa_bpp; /* The follwoing variable allows the primary rastering functions to check for the caller */ int SetFuncRequestID=0; /* The following variable allows to suppress rastering at 1000 bp for getting a correct bounding box for slanted characters --> should only internally be used */ int ForceAFMBBox=0; extern struct XYspace *IDENTITY; int errornumber; /* for debugging purposes */ /* The following pointers should be set to path-strings--used for locating type1, afm and encoding files */ char** T1_PFAB_ptr=NULL; char** T1_AFM_ptr=NULL; char** T1_ENC_ptr=NULL; char** T1_FDB_ptr=NULL; char** T1_FDBXLFD_ptr=NULL; /* We use a uchar buffer for error and warning messages: */ char err_warn_msg_buf[1024]; /* file pointer for log-file */ FILE *t1lib_log_file=NULL; int t1lib_log_level=2; /* The errno for t1lib */ int T1_errno=0; /* A variable for saving stack info */ jmp_buf stck_state; t1lib-5.1.2/lib/type1/0000755000175000001440000000000010733501626013074 5ustar rmzuserst1lib-5.1.2/lib/type1/cluts.h0000644000175000001440000000307310733501626014402 0ustar rmzusers/* $XConsortium: cluts.h,v 1.2 91/10/10 11:17:54 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* STUB */ #define KillCLUT(T) #define CopyCLUT(T) T #define UniqueCLUT(T) t1lib-5.1.2/lib/type1/scanfont.c0000644000175000001440000012675210733501626015070 0ustar rmzusers/* $XConsortium: scanfont.c,v 1.9 92/07/07 17:14:56 gildea Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* Author: Katherine A. Hitchcock IBM Almaden Research Laboratory */ #include #include #include "t1stdio.h" #include "util.h" #include "token.h" #include "fontfcn.h" #include "blues.h" #include "../t1lib/t1misc.h" /* #define DEBUG_SCANFONT */ static int rc; static boolean InPrivateDict; static boolean WantFontInfo; static boolean TwoSubrs; static psobj inputFile; static psobj filterFile; static psobj *inputP; extern int T1Getc(F_FILE * ); extern int T1Ungetc( int,F_FILE *); extern int SearchDictName( psdict *dictP, psobj *keyP); extern void T1io_setblocklen( long len); /* functions from util.c */ extern void objFormatInteger(psobj *objP, int value); extern void objFormatReal(psobj *objP, float value); extern void objFormatBoolean(psobj *objP, boolean value); extern void objFormatEncoding( psobj *objP, int length, psobj *valueP); extern void objFormatArray( psobj *objP, int length, psobj *valueP); extern void objFormatString( psobj *objP, int length, char *valueP); extern void objFormatName( psobj *objP, int length, char *valueP); extern void objFormatFile( psobj *objP, FILE *valueP); /**********************************************************************/ /* Init_BuiltInEncoding() */ /* */ /* Initializes the StandardEncoding. */ /* */ /**********************************************************************/ typedef struct /* Builtin Standard Encoding */ { int index; char *name; } EncodingTable; char not_def[]=".notdef"; static EncodingTable StdEnc[] = { {040 , "space"}, {041 , "exclam"}, {042 , "quotedbl"}, {043 , "numbersign"}, {044 , "dollar"}, {045 , "percent"}, {046 , "ampersand"}, {047 , "quoteright"}, {050 , "parenleft"}, {051 , "parenright"}, {052 , "asterisk"}, {053 , "plus"}, {054 , "comma"}, {055 , "hyphen"}, {056 , "period"}, {057 , "slash"}, {060 , "zero"}, {061 , "one"}, {062 , "two"}, {063 , "three"}, {064 , "four"}, {065 , "five"}, {066 , "six"}, {067 , "seven"}, {070 , "eight"}, {071 , "nine"}, {072 , "colon"}, {073 , "semicolon"}, {074 , "less"}, {075 , "equal"}, {076 , "greater"}, {077 , "question"}, {0100 , "at"}, {0101 , "A"}, {0102 , "B"}, {0103 , "C"}, {0104 , "D"}, {0105 , "E"}, {0106 , "F"}, {0107 , "G"}, {0110 , "H"}, {0111 , "I"}, {0112 , "J"}, {0113 , "K"}, {0114 , "L"}, {0115 , "M"}, {0116 , "N"}, {0117 , "O"}, {0120 , "P"}, {0121 , "Q"}, {0122 , "R"}, {0123 , "S"}, {0124 , "T"}, {0125 , "U"}, {0126 , "V"}, {0127 , "W"}, {0130 , "X"}, {0131 , "Y"}, {0132 , "Z"}, {0133 , "bracketleft"}, {0134 , "backslash"}, {0135 , "bracketright"}, {0136 , "asciicircum"}, {0137 , "underscore"}, {0140 , "quoteleft"}, {0141 , "a"}, {0142 , "b"}, {0143 , "c"}, {0144 , "d"}, {0145 , "e"}, {0146 , "f"}, {0147 , "g"}, {0150 , "h"}, {0151 , "i"}, {0152 , "j"}, {0153 , "k"}, {0154 , "l"}, {0155 , "m"}, {0156 , "n"}, {0157 , "o"}, {0160 , "p"}, {0161 , "q"}, {0162 , "r"}, {0163 , "s"}, {0164 , "t"}, {0165 , "u"}, {0166 , "v"}, {0167 , "w"}, {0170 , "x"}, {0171 , "y"}, {0172 , "z"}, {0173 , "braceleft"}, {0174 , "bar"}, {0175 , "braceright"}, {0176 , "asciitilde"}, {0241 , "exclamdown"}, {0242 , "cent"}, {0243 , "sterling"}, {0244 , "fraction"}, {0245 , "yen"}, {0246 , "florin"}, {0247 , "section"}, {0250 , "currency"}, {0251 , "quotesingle"}, {0252 , "quotedblleft"}, {0253 , "guillemotleft"}, {0254 , "guilsinglleft"}, {0255 , "guilsinglright"}, {0256 , "fi"}, {0257 , "fl"}, {0261 , "endash"}, {0262 , "dagger"}, {0263 , "daggerdbl"}, {0264 , "periodcentered"}, {0266 , "paragraph"}, {0267 , "bullet"}, {0270 , "quotesinglbase"}, {0271 , "quotedblbase"}, {0272 , "quotedblright"}, {0273 , "guillemotright"}, {0274 , "ellipsis"}, {0275 , "perthousand"}, {0277 , "questiondown"}, {0301 , "grave"}, {0302 , "acute"}, {0303 , "circumflex"}, {0304 , "tilde"}, {0305 , "macron"}, {0306 , "breve"}, {0307 , "dotaccent"}, {0310 , "dieresis"}, {0312 , "ring"}, {0313 , "cedilla"}, {0315 , "hungarumlaut"}, {0316 , "ogonek"}, {0317 , "caron"}, {0320 , "emdash"}, {0341 , "AE"}, {0343 , "ordfeminine"}, {0350 , "Lslash"}, {0351 , "Oslash"}, {0352 , "OE"}, {0353 , "ordmasculine"}, {0361 , "ae"}, {0365 , "dotlessi"}, {0370 , "lslash"}, {0371 , "oslash"}, {0372 , "oe"}, {0373 , "germandbls"}, { 0, 0 } }; /* Encodings changed from static to global since they must be accessible by T1_LoadFont() when reallocating memory. */ psobj *StdEncArrayP = NULL; static psobj *MakeEncodingArrayP(encodingTable) EncodingTable *encodingTable; { int i; psobj *encodingArrayP; encodingArrayP = (psobj *)malloc(256*(sizeof(psobj))); if (!encodingArrayP) return NULL; /* initialize everything to .notdef */ for (i=0; i<256;i++) objFormatName(&(encodingArrayP[i]),7, not_def); for (i=0; encodingTable[i].name; i++) { objFormatName(&(encodingArrayP[encodingTable[i].index]), strlen(encodingTable[i].name), encodingTable[i].name); } return(encodingArrayP); } boolean Init_BuiltInEncoding() { if ( StdEncArrayP != NULL) { /* Note: We should not run into this case because multiple initialization should be caught by T1_InitLib(). */ return FALSE; } StdEncArrayP = MakeEncodingArrayP(StdEnc); if (StdEncArrayP==NULL) return( FALSE); else return( TRUE); } /********************************************************************/ /***================================================================***/ static int getNextValue(valueType) int valueType; { scan_token(inputP); if (tokenType != valueType) { return(SCAN_ERROR); } return(SCAN_OK); } /***================================================================***/ /* This routine will set the global rc if there is an error */ /***================================================================***/ static int getInt() { scan_token(inputP); if (tokenType != TOKEN_INTEGER) { rc = SCAN_ERROR; return(0); } else { return( tokenValue.integer); } } /***================================================================***/ /* * See Sec 10.3 of ``Adobe Type 1 Font Format'' v1.1, * for parsing Encoding. */ static int getEncoding(arrayP) psobj *arrayP; { scan_token(inputP); if ((tokenType == TOKEN_NAME) && ((tokenLength==16) && (!strncmp(tokenStartP,"StandardEncoding",16))) ) { /* Adobe Standard Encoding */ if (tokenLength == 16) arrayP->data.valueP = (char *) StdEncArrayP; else return(SCAN_ERROR); arrayP->len = 256; return(SCAN_OK); } else if ( (tokenType == TOKEN_LEFT_BRACE) || (tokenType == TOKEN_LEFT_BRACKET) ) { /* Array of literal names */ psobj *objP; int i; objP = (psobj *)vm_alloc(256*(sizeof(psobj))); if (!(objP)) return(SCAN_OUT_OF_MEMORY); arrayP->data.valueP = (char *) objP; arrayP->len = 256; for (i=0; i<256; i++, objP++) { scan_token(inputP); if (tokenType != TOKEN_LITERAL_NAME) return(SCAN_ERROR); if (!(vm_alloc(tokenLength)) ) return(SCAN_OUT_OF_MEMORY); objFormatName(objP,tokenLength,tokenStartP); } scan_token(inputP); if ( (tokenType == TOKEN_RIGHT_BRACE) || (tokenType == TOKEN_RIGHT_BRACKET) ) return(SCAN_OK); } else { /* Must be sequences of ``dup put" */ psobj *objP; int i; objP = (psobj *)vm_alloc(256*(sizeof(psobj))); if (!(objP)) return(SCAN_OUT_OF_MEMORY); arrayP->data.valueP = (char *) objP; arrayP->len = 256; for (i=0; i<256; i++) objFormatName(objP + i, 7, not_def); while (TRUE) { scan_token(inputP); switch (tokenType) { case TOKEN_NAME: if (tokenLength == 3) { if (strncmp(tokenStartP,"dup",3) == 0) { /* get */ scan_token(inputP); if (tokenType != TOKEN_INTEGER || tokenValue.integer < 0 || tokenValue.integer > 255) return (SCAN_ERROR); i = tokenValue.integer; /* get */ scan_token(inputP); if (tokenType != TOKEN_LITERAL_NAME) return(SCAN_ERROR); if (!(vm_alloc(tokenLength)) ) return(SCAN_OUT_OF_MEMORY); objFormatName(objP + i,tokenLength,tokenStartP); /* get "put" */ scan_token(inputP); if (tokenType != TOKEN_NAME) return(SCAN_ERROR); } else if (strncmp(tokenStartP,"def",3) == 0) return (SCAN_OK); } break; case TOKEN_EOF: case TOKEN_NONE: case TOKEN_INVALID: return (SCAN_ERROR); } } } return (SCAN_ERROR); } /***================================================================***/ static int getArray(arrayP) psobj *arrayP; { int N; /* count the items in the array */ psobj *objP; scan_token(inputP); if ( (tokenType != TOKEN_LEFT_BRACE) && (tokenType != TOKEN_LEFT_BRACKET) ) { return(SCAN_ERROR); } /* format the array in memory, save pointer to the beginning */ arrayP->data.valueP = tokenStartP; /* loop, picking up next object, until right BRACE or BRACKET */ N = 0; do { scan_token(inputP); if ( (tokenType == TOKEN_RIGHT_BRACE) || (tokenType == TOKEN_RIGHT_BRACKET) ) { /* save then number of items in the array */ arrayP->len = N; return(SCAN_OK); } /* allocate the space for the object */ objP = (psobj *)vm_alloc(sizeof(psobj)); if (!(objP)) return(SCAN_OUT_OF_MEMORY); /* array is an array of numbers, (real or integer) */ if (tokenType == TOKEN_REAL) { objFormatReal(objP, tokenValue.real); } else if (tokenType == TOKEN_INTEGER) { objFormatInteger(objP, tokenValue.integer); } else return(SCAN_ERROR); N++; } while ( 1>0 ); /* NOTREACHED*/ } /***================================================================***/ /* is not needed */ /* static int getName(nameP) char *nameP; { do { scan_token(inputP); if (tokenType <= TOKEN_NONE) { if (tokenTooLong) return(SCAN_OUT_OF_MEMORY); return(SCAN_ERROR); } } while ((tokenType != TOKEN_NAME) || (0 != strncmp(tokenStartP,nameP,strlen(nameP))) ); return(SCAN_OK); } */ /***================================================================***/ static int getNbytes(N) int N; { int I; if (N > vm_free_bytes()) { if (!vm_init()) return(SCAN_OUT_OF_MEMORY); } tokenStartP = vm_next_byte(); I = fread(tokenStartP,1,N,inputP->data.fileP); if ( I != N ) return(SCAN_FILE_EOF); return(SCAN_OK); } /***================================================================***/ /* getLiteralName(nameObjP) */ /* scan for next literal. */ /* if we encounter the name 'end' then terminate and say ok. */ /* It means that the CharStrings does not have as many characters */ /* as the dictionary said it would and that is ok. */ /***================================================================***/ static int getLiteralName(nameObjP) psobj *nameObjP; { do { scan_token(inputP); if (tokenType <= TOKEN_NONE) { if (tokenTooLong) return(SCAN_OUT_OF_MEMORY); return(SCAN_ERROR); } if (tokenType == TOKEN_NAME) { if (0 == strncmp(tokenStartP,"end",3) ) { return(SCAN_END); } } } while (tokenType != TOKEN_LITERAL_NAME) ; nameObjP->len = tokenLength; /* allocate all the names in the CharStrings Structure */ if (!(vm_alloc(tokenLength)) ) return(SCAN_OUT_OF_MEMORY); nameObjP->data.valueP = tokenStartP; /* found */ return(SCAN_OK); } /***================================================================***/ /* * BuildSubrs routine */ /***================================================================***/ static int BuildSubrs(FontP) psfont *FontP; { int N; /* number of values in Subrs */ int I; /* index into Subrs */ int i; /* loop thru Subrs */ int J; /* length of Subrs entry */ psobj *arrayP; /* next token should be a positive int */ /* note: rc is set by getInt. */ N = getInt(); if (rc) return(rc); if (N < 0 ) return(SCAN_ERROR); /* if we already have a Subrs, then skip the second one */ /* The second one is for hiresolution devices. */ if (FontP->Subrs.data.arrayP != NULL) { TwoSubrs = TRUE; /* process all the Subrs, but do not update anything */ /* can not just skip them because of the binary data */ for (i=0;iSubrs.len = N; FontP->Subrs.data.arrayP = arrayP; /* get N values for Subrs */ for (i=0;iCharStringsP = dictP; dictP[0].key.len = N; /* get N values for CharStrings */ for (i=1;i<=N;i++) { /* look for next literal name */ rc = getLiteralName(&(dictP[i].key)); /* If rc=SCAN_END, the end of file has been reached. This means there were less than N charstrings. This is perfectly valid. */ if (rc) return(rc); /* get 1 integer */ J = getInt(); if (rc) return(rc); /* if next token was not an Int */ if (J<0) return (SCAN_ERROR); dictP[i].value.len = J; /* get the next token, it should be RD or -|, either is ok */ rc = getNextValue(TOKEN_NAME); if ( rc != SCAN_OK ) return(rc); rc = getNbytes(J); if (rc == SCAN_OK) { dictP[i].value.data.valueP = tokenStartP; if ( !(vm_alloc(J)) ) return(SCAN_OUT_OF_MEMORY); } else { return(rc); } } return(SCAN_OK); } /***================================================================***/ /***================================================================***/ /* * BuildFontInfo Dictionary */ /***================================================================***/ static int BuildFontInfo(fontP) psfont *fontP; { psdict *dictP; /* allocate the private dictionary */ dictP = (psdict *)vm_alloc(20*sizeof(psdict)); if (!(dictP)) return(SCAN_OUT_OF_MEMORY); fontP->fontInfoP = dictP; fontP->fontInfoP[0].key.len = 17; /* number of actual entries */ objFormatName(&(dictP[FONTNAME].key),8,"FontName"); objFormatName(&(dictP[FONTNAME].value),0,NULL); objFormatName(&(dictP[PAINTTYPE].key),9,"PaintType"); objFormatInteger(&(dictP[PAINTTYPE].value),0); objFormatName(&(dictP[FONTTYPENUM].key),8,"FontType"); objFormatInteger(&(dictP[FONTTYPENUM].value),0); objFormatName(&(dictP[FONTMATRIX].key),10,"FontMatrix"); objFormatArray(&(dictP[FONTMATRIX].value),0,NULL); objFormatName(&(dictP[FONTBBOX].key),8,"FontBBox"); objFormatArray(&(dictP[FONTBBOX].value),0,NULL); objFormatName(&(dictP[ENCODING].key),8,"Encoding"); objFormatEncoding(&(dictP[ENCODING].value),0,NULL); objFormatName(&(dictP[UNIQUEID].key),8,"UniqueID"); objFormatInteger(&(dictP[UNIQUEID].value),0); objFormatName(&(dictP[STROKEWIDTH].key),11,"StrokeWidth"); objFormatReal(&(dictP[STROKEWIDTH].value),0.0); objFormatName(&(dictP[VERSION].key),7,"version"); objFormatString(&(dictP[VERSION].value),0,NULL); objFormatName(&(dictP[NOTICE].key),6,"Notice"); objFormatString(&(dictP[NOTICE].value),0,NULL); objFormatName(&(dictP[FULLNAME].key),8,"FullName"); objFormatString(&(dictP[FULLNAME].value),0,NULL); objFormatName(&(dictP[FAMILYNAME].key),10,"FamilyName"); objFormatString(&(dictP[FAMILYNAME].value),0,NULL); objFormatName(&(dictP[WEIGHT].key),6,"Weight"); objFormatString(&(dictP[WEIGHT].value),0,NULL); objFormatName(&(dictP[ITALICANGLE].key),11,"ItalicAngle"); objFormatReal(&(dictP[ITALICANGLE].value),0.0); objFormatName(&(dictP[ISFIXEDPITCH].key),12,"isFixedPitch"); objFormatBoolean(&(dictP[ISFIXEDPITCH].value),FALSE); objFormatName(&(dictP[UNDERLINEPOSITION].key),17,"UnderlinePosition"); objFormatReal(&(dictP[UNDERLINEPOSITION].value),0.0); objFormatName(&(dictP[UNDERLINETHICKNESS].key),18,"UnderlineThickness"); objFormatReal(&(dictP[UNDERLINETHICKNESS].value),0.0); return(SCAN_OK); } /***================================================================***/ /* * BuildPrivate Dictionary */ /* "LenIV" corrected to be "lenIV", otherwise fonts with some specific lenIV value could not be decrypted. (RMz, Author of t1lib, 06/03/1998)*/ /***================================================================***/ static int BuildPrivate(fontP) psfont *fontP; { psdict *Private; /* allocate the private dictionary */ Private = (psdict *)vm_alloc(20*sizeof(psdict)); if (!(Private)) return(SCAN_OUT_OF_MEMORY); fontP->Private = Private; fontP->Private[0].key.len = 16; /* number of actual entries */ objFormatName(&(Private[BLUEVALUES].key),10,"BlueValues"); objFormatArray(&(Private[BLUEVALUES].value),0,NULL); objFormatName(&(Private[OTHERBLUES].key),10,"OtherBlues"); objFormatArray(&(Private[OTHERBLUES].value),0,NULL); objFormatName(&(Private[FAMILYBLUES].key),11,"FamilyBlues"); objFormatArray(&(Private[FAMILYBLUES].value),0,NULL); objFormatName(&(Private[FAMILYOTHERBLUES].key),16,"FamilyOtherBlues"); objFormatArray(&(Private[FAMILYOTHERBLUES].value),0,NULL); objFormatName(&(Private[BLUESCALE].key),9,"BlueScale"); objFormatReal(&(Private[BLUESCALE].value),DEFAULTBLUESCALE); objFormatName(&(Private[BLUESHIFT].key),9,"BlueShift"); objFormatInteger(&(Private[BLUESHIFT].value),DEFAULTBLUESHIFT); objFormatName(&(Private[BLUEFUZZ].key),8,"BlueFuzz"); objFormatInteger(&(Private[BLUEFUZZ].value),DEFAULTBLUEFUZZ); objFormatName(&(Private[STDHW].key),5,"StdHW"); objFormatArray(&(Private[STDHW].value),0,NULL); objFormatName(&(Private[STDVW].key),5,"StdVW"); objFormatArray(&(Private[STDVW].value),0,NULL); objFormatName(&(Private[STEMSNAPH].key),9,"StemSnapH"); objFormatArray(&(Private[STEMSNAPH].value),0,NULL); objFormatName(&(Private[STEMSNAPV].key),9,"StemSnapV"); objFormatArray(&(Private[STEMSNAPV].value),0,NULL); objFormatName(&(Private[FORCEBOLD].key),9,"ForceBold"); objFormatBoolean(&(Private[FORCEBOLD].value),DEFAULTFORCEBOLD); objFormatName(&(Private[LANGUAGEGROUP].key),13,"LanguageGroup"); objFormatInteger(&(Private[LANGUAGEGROUP].value),DEFAULTLANGUAGEGROUP); objFormatName(&(Private[LENIV].key),5,"lenIV"); objFormatInteger(&(Private[LENIV].value),DEFAULTLENIV); objFormatName(&(Private[RNDSTEMUP].key),9,"RndStemUp"); objFormatBoolean(&(Private[RNDSTEMUP].value),DEFAULTRNDSTEMUP); objFormatName(&(Private[EXPANSIONFACTOR].key),9,"ExpansionFactor"); objFormatReal(&(Private[EXPANSIONFACTOR].value), DEFAULTEXPANSIONFACTOR); return(SCAN_OK); } /***================================================================***/ /**********************************************************************/ /* GetType1Blues(fontP) */ /* */ /* Routine to support font-level hints. */ /* */ /* Gets all the Blues information from the Private dictionary */ /* for the font. */ /* */ /* */ /**********************************************************************/ static int GetType1Blues(fontP) psfont *fontP; { psdict *PrivateDictP; /* the Private dict relating to hints */ struct blues_struct *blues; /* ptr for the blues struct we will allocate */ int i; psobj *HintEntryP; /* get the Private dictionary pointer */ PrivateDictP = fontP->Private; /* allocate the memory for the blues structure */ blues = (struct blues_struct *) vm_alloc(sizeof(struct blues_struct)); if (!blues) return(SCAN_OUT_OF_MEMORY); /* Make fontP's blues ptr point to this newly allocated structure. */ fontP->BluesP = blues; /* fill in the BlueValues array */ HintEntryP = &(PrivateDictP[BLUEVALUES].value); /* check to see if the entry exists and if it's an array */ if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 )) blues->numBlueValues = 0; else { /* get the number of values in the array */ if (HintEntryP->len > NUMBLUEVALUES) { blues->numBlueValues = NUMBLUEVALUES; } else blues->numBlueValues = HintEntryP->len; for (i = 0; i<= blues->numBlueValues-1; ++i) { if (objPIsInteger(&HintEntryP->data.arrayP[i])) blues->BlueValues[i] = HintEntryP->data.arrayP[i].data.integer; else if (objPIsReal(&HintEntryP->data.arrayP[i])) blues->BlueValues[i] = HintEntryP->data.arrayP[i].data.real; else blues->BlueValues[i] = 0; } } /* fill in the OtherBlues array */ HintEntryP = &(PrivateDictP[OTHERBLUES].value); /* check to see if the entry exists and if it's an array */ if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 )) blues->numOtherBlues = 0; else { /* get the number of values in the array */ if (HintEntryP->len > NUMOTHERBLUES) { blues->numOtherBlues = NUMOTHERBLUES; } else blues->numOtherBlues = HintEntryP->len; for (i = 0; i<= blues->numOtherBlues-1; ++i) { if (objPIsInteger(&HintEntryP->data.arrayP[i])) blues->OtherBlues[i] = HintEntryP->data.arrayP[i].data.integer; else if (objPIsReal(&HintEntryP->data.arrayP[i])) blues->OtherBlues[i] = HintEntryP->data.arrayP[i].data.real; else blues->OtherBlues[i] = 0; } } /* fill in the FamilyBlues array */ HintEntryP = &(PrivateDictP[FAMILYBLUES].value); /* check to see if the entry exists and if it's an array */ if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 )) blues->numFamilyBlues = 0; else { /* get the number of values in the array */ if (HintEntryP->len > NUMFAMILYBLUES) { blues->numFamilyBlues = NUMFAMILYBLUES; } else blues->numFamilyBlues = HintEntryP->len; for (i = 0; i<= blues->numFamilyBlues-1; ++i) { if (objPIsInteger(&HintEntryP->data.arrayP[i])) blues->FamilyBlues[i] = HintEntryP->data.arrayP[i].data.integer; else if (objPIsReal(&HintEntryP->data.arrayP[i])) blues->FamilyBlues[i] = HintEntryP->data.arrayP[i].data.real; else blues->FamilyBlues[i] = 0; } } /* fill in the FamilyOtherBlues array */ HintEntryP = &(PrivateDictP[FAMILYOTHERBLUES].value); /* check to see if the entry exists and if it's an array */ if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 )) blues->numFamilyOtherBlues = 0; else { /* get the number of values in the array */ if (HintEntryP->len > NUMFAMILYOTHERBLUES) { blues->numFamilyOtherBlues = NUMFAMILYOTHERBLUES; } else blues->numFamilyOtherBlues = HintEntryP->len; for (i = 0; i<= blues->numFamilyOtherBlues-1; ++i) { if (objPIsInteger(&HintEntryP->data.arrayP[i])) blues->FamilyOtherBlues[i] = HintEntryP->data.arrayP[i].data.integer; else if (objPIsReal(&HintEntryP->data.arrayP[i])) blues->FamilyOtherBlues[i] = HintEntryP->data.arrayP[i].data.real; else blues->FamilyOtherBlues[i] = 0; } } /* fill in the StemSnapH array */ HintEntryP = &(PrivateDictP[STEMSNAPH].value); /* check to see if the entry exists and if it's an array */ if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 )) blues->numStemSnapH = 0; else { /* get the number of values in the array */ if (HintEntryP->len > NUMSTEMSNAPH) { blues->numStemSnapH = NUMSTEMSNAPH; } else blues->numStemSnapH = HintEntryP->len; for (i = 0; i<= blues->numStemSnapH-1; ++i) { if (objPIsInteger(&HintEntryP->data.arrayP[i])) blues->StemSnapH[i] = HintEntryP->data.arrayP[i].data.integer; else if (objPIsReal(&HintEntryP->data.arrayP[i])) blues->StemSnapH[i] = HintEntryP->data.arrayP[i].data.real; else blues->StemSnapH[i] = 0; } } /* fill in the StemSnapV array */ HintEntryP = &(PrivateDictP[STEMSNAPV].value); /* check to see if the entry exists and if it's an array */ if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 )) blues->numStemSnapV = 0; else { /* get the number of values in the array */ if (HintEntryP->len > NUMSTEMSNAPV) { blues->numStemSnapV = NUMSTEMSNAPV; } else blues->numStemSnapV = HintEntryP->len; for (i = 0; i<= blues->numStemSnapV-1; ++i) { if (objPIsInteger(&HintEntryP->data.arrayP[i])) blues->StemSnapV[i] = HintEntryP->data.arrayP[i].data.integer; else if (objPIsReal(&HintEntryP->data.arrayP[i])) blues->StemSnapV[i] = HintEntryP->data.arrayP[i].data.real; else blues->StemSnapV[i] = 0; } } /* fill in the StdVW array */ HintEntryP = &(PrivateDictP[STDVW].value); /* check to see if the entry exists and if it's an array */ if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 )) /* a value of zero signifies no entry */ blues->StdVW = 0.0; else { if (HintEntryP->len > NUMSTDVW) { } if (objPIsInteger(&HintEntryP->data.arrayP[0])) blues->StdVW = HintEntryP->data.arrayP[0].data.integer; else if (objPIsReal(&HintEntryP->data.arrayP[0])) blues->StdVW = HintEntryP->data.arrayP[0].data.real; else blues->StdVW = 0.0; } /* fill in the StdHW array */ HintEntryP = &(PrivateDictP[STDHW].value); /* check to see if the entry exists and if it's an array */ if ( !objPIsArray(HintEntryP) || (HintEntryP->len == 0 )) /* a value of zero signifies no entry */ blues->StdHW = 0; else { if (HintEntryP->len > NUMSTDHW) { } if (objPIsInteger(&HintEntryP->data.arrayP[0])) blues->StdHW = HintEntryP->data.arrayP[0].data.integer; else if (objPIsReal(&HintEntryP->data.arrayP[0])) blues->StdHW = HintEntryP->data.arrayP[0].data.real; else blues->StdHW = 0; } /* get the ptr to the BlueScale entry */ HintEntryP = &(PrivateDictP[BLUESCALE].value); /* put the BlueScale in the blues structure */ if (objPIsInteger(HintEntryP)) /* Must be integer! */ blues->BlueScale = HintEntryP->data.integer; else if (objPIsReal(HintEntryP)) /* Error? */ blues->BlueScale = HintEntryP->data.real; else blues->BlueScale = DEFAULTBLUESCALE; /* get the ptr to the BlueShift entry */ HintEntryP = &(PrivateDictP[BLUESHIFT].value); if (objPIsInteger(HintEntryP)) /* Must be integer! */ blues->BlueShift = HintEntryP->data.integer; else if (objPIsReal(HintEntryP)) /* Error? */ blues->BlueShift = HintEntryP->data.real; else blues->BlueShift = DEFAULTBLUESHIFT; /* get the ptr to the BlueFuzz entry */ HintEntryP = &(PrivateDictP[BLUEFUZZ].value); if (objPIsInteger(HintEntryP)) /* Must be integer! */ blues->BlueFuzz = HintEntryP->data.integer; else if (objPIsReal(HintEntryP)) /* Error? */ blues->BlueFuzz = HintEntryP->data.real; else blues->BlueFuzz = DEFAULTBLUEFUZZ; /* get the ptr to the ForceBold entry */ HintEntryP = &(PrivateDictP[FORCEBOLD].value); if (objPIsBoolean(HintEntryP)) /* Must be integer! */ blues->ForceBold = HintEntryP->data.boolean; else blues->ForceBold = DEFAULTFORCEBOLD; /* get the ptr to the LanguageGroup entry */ HintEntryP = &(PrivateDictP[LANGUAGEGROUP].value); if (objPIsInteger(HintEntryP)) /* Must be integer! */ blues->LanguageGroup = HintEntryP->data.integer; else blues->LanguageGroup = DEFAULTLANGUAGEGROUP; /* get the ptr to the RndStemUp entry */ HintEntryP = &(PrivateDictP[RNDSTEMUP].value); if (objPIsBoolean(HintEntryP)) /* Must be integer! */ blues->RndStemUp = HintEntryP->data.boolean; else blues->RndStemUp = DEFAULTRNDSTEMUP; /* get the ptr to the lenIV entry */ HintEntryP = &(PrivateDictP[LENIV].value); if (objPIsInteger(HintEntryP)) {/* Must be integer! */ blues->lenIV = HintEntryP->data.integer; } else{ blues->lenIV = DEFAULTLENIV; } /* get the ptr to the ExpansionFactor entry */ HintEntryP = &(PrivateDictP[EXPANSIONFACTOR].value); if (objPIsInteger(HintEntryP)) blues->ExpansionFactor = HintEntryP->data.integer; else if (objPIsReal(HintEntryP)) blues->ExpansionFactor = HintEntryP->data.real; else blues->ExpansionFactor = DEFAULTEXPANSIONFACTOR; return(SCAN_OK); } /**********************************************************************/ /* GetType1CharString(fontP,code) */ /* */ /* Look up code in the standard encoding vector and return */ /* the charstring associated with the character name. */ /* */ /* fontP is the psfont structure. */ /* */ /* Returns a psobj (string) */ /**********************************************************************/ psobj *GetType1CharString(fontP, code) psfont *fontP; unsigned char code; { int N; /* the 'Nth' entry in the CharStrings */ psobj *charnameP; /* points to psobj that is name of character*/ psdict *CharStringsDictP; /* dictionary with char strings */ psobj *theStringP; /* the definition for the code */ if (StdEncArrayP == NULL) { return(NULL); } /* use the code to index into the standard encoding vector */ charnameP = &(StdEncArrayP[code]); /* test if the encoding array points to a name */ if (!(objPIsName(charnameP)) ) { return(NULL); } /* Now that we have the character name out of the standardencoding */ /* get the character definition out of the current font */ CharStringsDictP = fontP->CharStringsP; /* search the chars string for this charname as key */ N = SearchDictName(CharStringsDictP,charnameP); if (N<=0) { return(NULL); } /* OK, the nth item is the psobj that is the string for this char */ theStringP = &(CharStringsDictP[N].value); return(theStringP); } /***================================================================***/ /* * FindDictValue */ /***================================================================***/ static int FindDictValue(dictP) psdict *dictP; { psobj LitName; int N; int V; /* we have just scanned a token and it is a literal name */ /* need to check if that name is in Private dictionary */ objFormatName(&LitName,tokenLength,tokenStartP); /* is it in the dictP */ N = SearchDictName(dictP,&LitName); /* if found */ if ( N > 0 ) { /* what type */ switch (dictP[N].value.type) { case OBJ_ENCODING: V = getEncoding(&(dictP[N].value)); if ( V != SCAN_OK ) return(V); break; case OBJ_ARRAY: V = getArray(&(dictP[N].value)); if ( V != SCAN_OK ) return(V); break; case OBJ_INTEGER: /* next value in integer */ dictP[N].value.data.integer = getInt(); if (rc) return(rc); /* if next token was not an Int */ break; case OBJ_REAL: /* next value must be real or int, store as a real */ scan_token(inputP); if (tokenType == TOKEN_REAL) { dictP[N].value.data.real = tokenValue.real; } else if (tokenType == TOKEN_INTEGER) { dictP[N].value.data.real = tokenValue.integer; } else return(SCAN_ERROR); break; case OBJ_NAME: V = getNextValue(TOKEN_LITERAL_NAME); if ( V != SCAN_OK ) return(V); if (!(vm_alloc(tokenLength)) ) return(SCAN_OUT_OF_MEMORY); objFormatName(&(dictP[N].value),tokenLength,tokenStartP); break; case OBJ_STRING: V = getNextValue(TOKEN_STRING); if ( V != SCAN_OK ) return(V); if (!(vm_alloc(tokenLength)) ) return(SCAN_OUT_OF_MEMORY); objFormatString(&(dictP[N].value),tokenLength,tokenStartP); break; case OBJ_BOOLEAN: scan_token(inputP); if (tokenType != TOKEN_NAME) { return(SCAN_ERROR); } if (0 == strncmp(tokenStartP,"true",4) ) { dictP[N].value.data.boolean =TRUE; } else if (0 == strncmp(tokenStartP,"false",5) ) { dictP[N].value.data.boolean =FALSE; } else return(SCAN_ERROR); break; default: return(SCAN_ERROR); break; } } /* Name is not in dictionary. That is ok. */ return(SCAN_OK); } /***================================================================***/ /* * ------------------------------------------------------------------- * Scan the next token and convert it into an object * Result is placed on the Operand Stack as next object * ------------------------------------------------------------------- */ int scan_font(FontP) psfont *FontP; { char filename[MAXPATHLEN+1]; FILE *fileP; char *nameP; int namelen; /* copy the filename and remove leading or trailing blanks */ /* point to name and search for leading blanks */ nameP= FontP->FontFileName.data.nameP; namelen = FontP->FontFileName.len; while (nameP[0] == ' ') { nameP++; namelen--; } /* now remove any trailing blanks */ while ((namelen>0) && ( nameP[namelen-1] == ' ')) { namelen--; } if ( namelen >= MAXPATHLEN ) { /* Hopefully, this will lead to a file open error */ namelen = MAXPATHLEN; } strncpy(filename,nameP,namelen); filename[namelen] = '\0'; /* file name is now constructed */ inputFile.data.fileP = NULL; filterFile.data.fileP = NULL; inputP = &inputFile; if ((fileP = fopen(filename,"rb"))!=NULL) { objFormatFile(inputP,fileP); } else { return(SCAN_FILE_OPEN_ERROR); }; WantFontInfo = TRUE; InPrivateDict = FALSE; TwoSubrs = FALSE; rc = BuildFontInfo(FontP); #ifdef DEBUG_SCANFONT printf("BuildFontInfo(): retval=%d\n", rc); #endif if (rc != 0) return(rc); /* Assume everything will be OK */ rc = 0; /* Loop until complete font is read */ do { /* Scan the next token */ scan_token(inputP); /* ==> tokenLength, tokenTooLong, tokenType, and tokenValue are */ /* now set */ switch (tokenType) { case TOKEN_EOF: case TOKEN_NONE: case TOKEN_INVALID: /* in this case we are done */ if (tokenTooLong) return(SCAN_OUT_OF_MEMORY); rc = SCAN_ERROR; break; case TOKEN_LITERAL_NAME: /* Look up the name */ tokenStartP[tokenLength] = '\0'; /* At this point we check for the font not being a Multiple Master Font. If it is, we return an error. However, we restrict searching for forbidden keywords to FontInfo, in order not to make assumptions about internal PostScript routine names. (RMz, 2004-11-27) */ if ( !InPrivateDict ) { if (strncmp(tokenStartP, "BlendAxisTypes", 14)==0){ rc=SCAN_MMFONT; break; } } if (InPrivateDict ) { if (0== strncmp(tokenStartP,"Subrs",5) ) { rc = BuildSubrs(FontP); #ifdef DEBUG_SCANFONT printf("BuildSubrs(): retval=%d\n", rc); #endif break; } if (0== strncmp(tokenStartP,"CharStrings",11) ) { rc = BuildCharStrings(FontP); #ifdef DEBUG_SCANFONT printf("BuildCharstrings(): retval=%d\n", rc); #endif if ( (rc == SCAN_OK) ||(rc == SCAN_END) ) { fclose(inputP->data.fileP); /* Build the Blues Structure */ rc = GetType1Blues(FontP); #ifdef DEBUG_SCANFONT printf("GetType1Blues(): retval=%d\n", rc); #endif /* whatever the return code, return it */ /* all the work is done. This is the normal exit.*/ return(rc); } break; } rc = FindDictValue(FontP->Private); /* we are not going to report errors */ /* Sometimes the font file may test a value such as */ /* testing to see if the font is alreadly loaded with */ /* same UniqueID. We would faile on /UniqueID get */ /* because we are expecting a int to follow UniqueID*/ /* If the correct object type does not follow a Name*/ /* then we will skip over it without reporting error*/ rc = SCAN_OK; break; } /* end of reading Private dictionary */ else if (0== strncmp(tokenStartP,"Private",7) ) { InPrivateDict = TRUE; rc = BuildPrivate(FontP); break; } else if (WantFontInfo) { rc = FindDictValue(FontP->fontInfoP); /* we are not going to report errors */ rc = SCAN_OK; break; } break; case TOKEN_NAME: if (0 == strncmp(tokenStartP,"eexec",5) ) { /* We check for the pfb-headers in I/O-module */ filterFile.data.fileP = T1eexec(inputP->data.fileP); if (filterFile.data.fileP == NULL) { fclose(inputFile.data.fileP); /* SCAN_FILE_OPEN_ERROR replaced because at this point a portion of the file has already been read successfully. We hence have encountered a premature end of file (2002-08-17, RMz). */ return SCAN_FILE_EOF; } inputP = &filterFile; WantFontInfo = FALSE; } break; } } while (rc ==0); fclose(inputP->data.fileP); if (tokenTooLong) return(SCAN_OUT_OF_MEMORY); return(rc); } t1lib-5.1.2/lib/type1/digit.h0000644000175000001440000000621510733501626014351 0ustar rmzusers/* $XConsortium: digit.h,v 1.2 91/10/10 11:18:01 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* -------------------------------------- */ /* --- MACHINE GENERATED, DO NOT EDIT --- */ /* -------------------------------------- */ #ifndef DIGIT #define DIGIT 1 /* * Digit Value Table -- * * The entries in the Digit Value Table map character * codes in the set {0-9,a-z,A-Z} to their numeric * values as part of numbers of radix 2-36. * */ unsigned char digit_value[256] = { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18, 0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18, 0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }; #endif t1lib-5.1.2/lib/type1/fontfcn.c0000644000175000001440000012620710733501626014705 0ustar rmzusers/* $XConsortium: fontfcn.c,v 1.8 92/03/27 18:15:45 eswu Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* Author: Katherine A. Hitchcock IBM Almaden Research Laboratory */ #include #include #include #include "t1imager.h" #include "util.h" #include "fontfcn.h" #include "fontmisc.h" #include "paths_rmz.h" #include "../t1lib/parseAFM.h" #include "../t1lib/t1types.h" #include "../t1lib/t1extern.h" #include "../t1lib/t1misc.h" #include "../t1lib/t1base.h" #include "../t1lib/t1finfo.h" /* Note: The argument decodeonly is used to make Type1Char() decode only such that later certain characterictics of the pass can be queried (here, information about the parts of a seac). */ extern xobject Type1Char(psfont *env, struct XYspace *S, psobj *charstrP, psobj *subrsP, psobj *osubrsP, struct blues_struct *bluesP, int *modeP, char *name, float strokewidth, int decodeonly); extern xobject Type1Line(psfont *env, struct XYspace *S, float line_position, float line_thickness, float line_length, float strokewidth); extern int T1int_Type1QuerySEAC( unsigned char* base, unsigned char* accent); void objFormatName(psobj *objP, int length, char *valueP); extern void T1io_reset( void); #define BEZIERTYPE 0x10+0x02 #define LINETYPE 0x10+0x00 #define MOVETYPE 0x10+0x05 #if 1 struct region { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = REGIONTYPE */ struct fractpoint origin; /* beginning handle: X,Y origin of region */ struct fractpoint ending; /* ending handle: X,Y change after painting region */ pel xmin,ymin; /* minimum X,Y of region */ pel xmax,ymax; /* mat1_mum X,Y of region */ struct edgelist *anchor; /* list of edges that bound the region */ struct picture *thresholded; /* region defined by thresholded picture*/ /* Note that the ending handle and the bounding box values are stored relative to 'origin'. The above elements describe a region. The following elements are scratchpad areas used while the region is being built: */ fractpel lastdy; /* direction of last segment */ fractpel firstx,firsty; /* starting point of current edge */ fractpel edgexmin,edgexmax; /* x extent of current edge */ struct edgelist *lastedge,*firstedge; /* last and first edges in subpath */ pel *edge; /* pointer to array of X values for edge */ fractpel edgeYstop; /* Y value where 'edges' array ends */ int (*newedgefcn)(); /* function to use when building a new edge */ struct strokeinfo *strokeinfo; /* scratchpad info during stroking only */ } ; struct edgelist { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = EDGETYPE */ struct edgelist *link; /* pointer to next in linked list */ struct edgelist *subpath; /* informational link for "same subpath" */ pel xmin,xmax; /* range of edge in X */ pel ymin,ymax; /* range of edge in Y */ pel *xvalues; /* pointer to ymax-ymin X values */ }; #endif /***================================================================***/ /* GLOBALS */ /***================================================================***/ static char CurCharName[257]=""; static char BaseCharName[257]=""; char CurFontName[MAXPATHLEN+1]; char *CurFontEnv; char *vm_base = NULL; static char notdef[]=".notdef"; /* the following is inserted by RMz for VM checking and reallocating: */ char *vm_used = NULL; extern int vm_init_count; extern int vm_init_amount; static psfont *FontP = NULL; psfont TheCurrentFont; /***================================================================***/ /* SearchDict - look for name */ /* - compare for match on len and string */ /* return 0 - not found. */ /* return n - nth element in dictionary. */ /***================================================================***/ int SearchDictName(dictP,keyP) psdict *dictP; psobj *keyP; { int i,n; n = dictP[0].key.len; for (i=1;i<=n;i++) { /* scan the intire dictionary */ if ( (dictP[i].key.len == keyP->len ) && (strncmp(dictP[i].key.data.valueP, keyP->data.valueP, keyP->len) == 0 ) ) return(i); } return(0); } /***================================================================***/ /* assignment of &TheCurrentFont removed by RMz: */ boolean initFont() { if (!(vm_init())) return(FALSE); vm_base = vm_next_byte(); strcpy(CurFontName, ""); /* iniitialize to none */ FontP->vm_start = vm_next_byte(); FontP->FontFileName.len = 0; FontP->FontFileName.data.valueP = CurFontName; return(TRUE); } /***================================================================***/ int resetFont(env) char *env; { vm_next = FontP->vm_start; vm_free = vm_size - ( vm_next - vm_base); FontP->Subrs.len = 0; FontP->Subrs.data.stringP = NULL; FontP->CharStringsP = NULL; FontP->Private = NULL; FontP->fontInfoP = NULL; FontP->BluesP = NULL; /* This will load the font into the FontP */ strncpy(CurFontName,env, MAXPATHLEN); CurFontName[MAXPATHLEN] = '\0'; FontP->FontFileName.len = strlen(CurFontName); FontP->FontFileName.data.nameP = CurFontName; T1io_reset(); return(0); } /***================================================================***/ /* Read font used to attempt to load the font and, upon failure, try a second time with twice as much memory. Unfortunately, if it's a really complex font, simply using 2*vm_size may be insufficient. I've modified it so that the program will try progressively larger amounts of memory until it really runs out or the font loads successfully. (ndw) */ int readFont(env) char *env; { int rcode; /* int memscale = 2; */ /* initially, try twice just like we used to ... */ /* restore the virtual memory and eliminate old font */ resetFont(env); /* This will load the font into the FontP */ rcode = scan_font(FontP); return(rcode); } static int isCompositeChar( int FontID, char *charname) { int i; FontInfo *pAFMData; if (pFontBase->pFontArray[FontID].pAFMData==NULL) { /* No AFM data present */ return( -1); } pAFMData=pFontBase->pFontArray[FontID].pAFMData; for ( i=0; inumOfComps; i++) { if (strcmp( pAFMData->ccd[i].ccName, charname)==0) return( i); } return( -1); } /* dump a description of path elements to stdout */ static T1_PATHPOINT getDisplacement( struct segment *path) { register struct segment *ipath; register struct beziersegment *ibpath; T1_PATHPOINT point={0,0}; /* Step through the path list */ ipath=(struct segment *)path; do { if (ipath->type==LINETYPE) { point.x+=ipath->dest.x; point.y+=ipath->dest.y; } else if (ipath->type==MOVETYPE) { point.x+=ipath->dest.x; point.y+=ipath->dest.y; } else if (ipath->type==BEZIERTYPE) { ibpath=(struct beziersegment *)ipath; point.x+=ibpath->dest.x; point.y+=ibpath->dest.y; } ipath=ipath->link; } while (ipath!=NULL); return( point); } /***================================================================***/ /* RMz: instead of code, which is a character pointer to the name of the character, we use "ev" which is a pointer to a desired encoding vector (or NULL if font-internal encoding should be used) and "index" as an index into the desired encoding vector! The user thus has the opportunity of supplying whatever encoding he wants. Font_Ptr is the pointer to the local psfont-structure. */ xobject fontfcnB(int FontID, int modflag, struct XYspace *S, char **ev, unsigned char index, int *mode, psfont *Font_Ptr, int do_raster, float strokewidth) { psobj *charnameP; /* points to psobj that is name of character*/ FontInfo *pAFMData=NULL; int i=-1; int j=0; int numPieces=1; int N; T1_PATHPOINT currdisp; int basechar; psdict *CharStringsDictP; /* dictionary with char strings */ psobj CodeName; /* used to store the translation of the name*/ psobj *SubrsArrayP; psobj *theStringP; int localmode=0; struct segment *charpath=NULL; /* the path for this character */ struct segment *tmppath1=NULL; struct segment *tmppath2=NULL; struct segment *tmppath3=NULL; struct segment *tmppath4=NULL; /* set the global font pointer to the address of already allocated structure and setup pointers*/ FontP=Font_Ptr; CharStringsDictP = FontP->CharStringsP; SubrsArrayP = &(FontP->Subrs); charnameP = &CodeName; if (ev==NULL){ /* font-internal encoding should be used */ charnameP->len = FontP->fontInfoP[ENCODING].value.data.arrayP[index].len; charnameP->data.stringP = (unsigned char *) FontP->fontInfoP[ENCODING].value.data.arrayP[index].data.arrayP; } else{ /* some user-supplied encoding is to be used */ charnameP->len = strlen(ev[index]); charnameP->data.stringP = (unsigned char *) ev[index]; } strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; /* search the chars string for this charname as key */ basechar = SearchDictName(CharStringsDictP,charnameP); if (basechar<=0) { /* Check first, whether a char in question is a composite char */ if ((i=isCompositeChar( FontID, CurCharName))>-1) { /* i is now the index of the composite char definitions (starting at 0). At this point it is clear that AFM-info must be present -> fetch first component of composite char. */ pAFMData=pFontBase->pFontArray[FontID].pAFMData; charnameP->len=strlen( pAFMData->ccd[i].pieces[0].pccName); charnameP->data.stringP=(unsigned char*)pAFMData->ccd[i].pieces[0].pccName; numPieces=pAFMData->ccd[i].numOfPieces; if ((basechar=SearchDictName(CharStringsDictP,charnameP))<=0) { /* this is bad, AFM-file and font file do not match. This will most probably lead to errors or inconsistencies later. However, we substitute .notdef and inform the user via logfile and T1_errno. */ sprintf( err_warn_msg_buf, "Charstring \"%s\" needed to construct composite char \"%s\" not defined (FontID=%d)", pAFMData->ccd[i].pieces[0].pccName, pAFMData->ccd[i].ccName, FontID); T1_PrintLog( "fontfcnB():", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_COMPOSITE_CHAR; } } } if (basechar<=0) { /* This means the requested char is unknown or the base char of a composite is not found -> we substitute .notdef */ charnameP = &CodeName; charnameP->len = 7; charnameP->data.stringP = (unsigned char *) notdef; basechar = SearchDictName(CharStringsDictP,charnameP); localmode=FF_NOTDEF_SUBST; /* Font must be completely damaged if it doesn't define a .notdef */ if (basechar<=0) { *mode=FF_PARSE_ERROR; return(NULL); } } /* if (basechar<=0) */ /* basechar is now the index of the base character in the CharStrings dictionary */ /* we provide the Type1Char() procedure with the name of the character to rasterize for debugging purposes */ strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; /* get CharString and character path */ theStringP = &(CharStringsDictP[basechar].value); tmppath2 = (struct segment *) Type1Char(FontP,S,theStringP,SubrsArrayP,NULL, FontP->BluesP,mode,CurCharName,strokewidth,0); /* if Type1Char reported an error, then return */ if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR) return(NULL); /* Defer rastering to later, we first have to handle the composite symbols */ for (j=1; jlen=strlen( pAFMData->ccd[i].pieces[j].pccName); charnameP->data.stringP=(unsigned char*)pAFMData->ccd[i].pieces[j].pccName; /* get CharString definition */ if ((N=SearchDictName(CharStringsDictP,charnameP))<=0) { /* handling of errors, see comments above ... */ sprintf( err_warn_msg_buf, "Charstring \"%s\" needed to construct composite char \"%s\" not defined (FontID=%d)", pAFMData->ccd[i].pieces[j].pccName, pAFMData->ccd[i].ccName, FontID); T1_PrintLog( "fontfcnB():", err_warn_msg_buf, T1LOG_WARNING); charnameP = &CodeName; charnameP->len = 7; charnameP->data.stringP = (unsigned char *) notdef; N = SearchDictName(CharStringsDictP,charnameP); localmode=FF_NOTDEF_SUBST; /* damaged Font */ if (N<=0) { *mode=FF_PARSE_ERROR; if (charpath!=NULL) { KillPath( charpath); } return(NULL); } } theStringP = &(CharStringsDictP[N].value); tmppath1=(struct segment *)ILoc(S, pAFMData->ccd[i].pieces[j].deltax, pAFMData->ccd[i].pieces[j].deltay); strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; charpath=(struct segment *)Type1Char(FontP,S,theStringP,SubrsArrayP,NULL, FontP->BluesP,mode,CurCharName,strokewidth,0); /* return if Type1Char reports an error */ if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR) return(NULL); /* get escapement of current symbol */ currdisp=getDisplacement( charpath); /* concat displacement and symbol path */ charpath=(struct segment *)Join(tmppath1,charpath); /* for composite symbols we have to step back the char escapement. this is, in order to be able to use accents that cause a non zero displacement of the current point! We further have to step back the displacement from composite char data. */ tmppath1=(struct segment *)t1_PathSegment( MOVETYPE, -currdisp.x, -currdisp.y); tmppath3=(struct segment *)ILoc(S, -pAFMData->ccd[i].pieces[j].deltax, -pAFMData->ccd[i].pieces[j].deltay); tmppath3=(struct segment *)Join(tmppath1,tmppath3); /* create path, or, respectively, append to existing path */ if (tmppath4==NULL) { tmppath4=(struct segment *)Join(charpath,tmppath3); } else { charpath=(struct segment *)Join(charpath,tmppath3); tmppath4=(struct segment *)Join(tmppath4,charpath); } } /* concat composite symbols and base char */ if (tmppath4==NULL) { /* no previous composite symbols */ charpath=tmppath2; /* a simple char */ } else { charpath=(struct segment *)Join(tmppath4,tmppath2); } if (do_raster) { /* fill with winding rule unless path was requested */ if (*mode != FF_PATH) { charpath = (struct segment *)Interior(charpath,WINDINGRULE+CONTINUITY); } } if (*mode==0) *mode=localmode; return((xobject) charpath); } /***================================================================***/ /* fontfcnA(env, mode) */ /* */ /* env is a pointer to a string that contains the fontname. */ /* */ /* 1) initialize the font - global indicates it has been done */ /* 2) load the font */ /* */ /* This function has been modified by RMz. It now takes a pointer which already contains the address of a valid type1 font structure as the third argument. The value of this pointer is first handed to FontP so that most other routines may be used without changes */ #define MAXTRIAL 4 /***================================================================***/ Bool fontfcnA(env,mode,Font_Ptr) char *env; int *mode; psfont *Font_Ptr; { int i, result; /* set the global font pointer to the address of already allocated structure */ FontP=Font_Ptr; InitImager(); /* Read the font program. */ for (i=1; ifontInfoP; objFormatName(&nameObj,strlen(infoName),infoName); N = SearchDictName(dictP,&nameObj); /* if found */ if ( N > 0 ) { *rcodeP = 0; switch (dictP[N].value.type) { case OBJ_ARRAY: valueP = dictP[N].value.data.arrayP; if (strcmp(infoName,"FontMatrix") == 0) { /* 6 elments, return them as floats */ for (i=0;i<6;i++) { if (valueP->type == OBJ_INTEGER ) ((float *)infoValue)[i] = valueP->data.integer; else ((float *)infoValue)[i] = valueP->data.real; valueP++; } } if (strcmp(infoName,"FontBBox") == 0) { /* 4 elments for Bounding Box. all integers */ for (i=0;i<4;i++) { ((int *)infoValue)[i] = valueP->data.integer; valueP++; } break; case OBJ_INTEGER: case OBJ_BOOLEAN: *((int *)infoValue) = dictP[N].value.data.integer; break; case OBJ_REAL: *((float *)infoValue) = dictP[N].value.data.real; break; case OBJ_NAME: case OBJ_STRING: *((char **)infoValue) = dictP[N].value.data.valueP; break; default: *rcodeP = 1; break; } } } else *rcodeP = 1; } /***================================================================***/ /* RMz: instead of code, which is a character pointer to the name of the character, we use "ev" which is a pointer to a desired encoding vector (or NULL if font-internal encoding should be used) and "index" as an index into the desired encoding vector! The user thus has the opportunity of supplying whatever encoding he wants. Font_Ptr is the pointer to the local psfont-structure. */ xobject fontfcnB_string( int FontID, int modflag, struct XYspace *S, char **ev, unsigned char *string, int no_chars, int *mode, psfont *Font_Ptr, int *kern_pairs, long spacewidth, int do_raster, float strokewidth) { psobj *charnameP; /* points to psobj that is name of character*/ FontInfo *pAFMData=NULL; int i=-1; int j=0; int k=0; long acc_width=0; int numPieces=1; int N; T1_PATHPOINT currdisp; int basechar; psdict *CharStringsDictP; /* dictionary with char strings */ psobj CodeName; /* used to store the translation of the name*/ psobj *SubrsArrayP; psobj *theStringP; int localmode=0; struct segment *charpath=NULL; /* the path for this character */ struct segment *tmppath1=NULL; struct segment *tmppath2=NULL; struct segment *tmppath3=NULL; struct segment *tmppath4=NULL; struct segment *tmppath5=NULL; /* set the global font pointer to the address of already allocated structure and setup pointers*/ FontP=Font_Ptr; CharStringsDictP = FontP->CharStringsP; SubrsArrayP = &(FontP->Subrs); charnameP = &CodeName; /* In the following for-loop, all characters are processed, one after the other. Between them, the amount of kerning is inserted. The number of path variables used is somewhat numerous. We use the follwing conventions: charpath: the overall path of the string. tmppath5: the overall path of one component (possibly a composite symbol) tmppath2: the path of a simple char or base char of a composite tmppath4: the path of all "accents" of a composite symbol */ for (k=0; klen = FontP->fontInfoP[ENCODING].value.data.arrayP[string[k]].len; charnameP->data.stringP = (unsigned char *) FontP->fontInfoP[ENCODING].value.data.arrayP[string[k]].data.arrayP; } else { /* some user-supplied encoding is to be used */ charnameP = &CodeName; charnameP->len = strlen(ev[string[k]]); charnameP->data.stringP = (unsigned char*) ev[string[k]]; } /* Spacing is to be under users control: => if space is the charname, don't raster it. Rather, generate a horizontal movement of spacewidth: */ if (strcmp((char *)charnameP->data.stringP, "space")==0){ tmppath5=(struct segment *)ILoc(S, spacewidth,0); acc_width += spacewidth; } else { /* here a character or composite character is to be constructed */ strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; /* search the CharString for this charname as key */ basechar = SearchDictName(CharStringsDictP,charnameP); if (basechar<=0) { /* Check first, whether a char in question is a composite char */ if ((i=isCompositeChar( FontID, CurCharName))>-1) { /* i is now the index of the composite char definitions (starting at 0). At this point it is clear that AFM-info must be present -> fetch first component of composite char. */ pAFMData=pFontBase->pFontArray[FontID].pAFMData; charnameP->len=strlen( pAFMData->ccd[i].pieces[0].pccName); charnameP->data.stringP=(unsigned char*)pAFMData->ccd[i].pieces[0].pccName; numPieces=pAFMData->ccd[i].numOfPieces; if ((basechar=SearchDictName(CharStringsDictP,charnameP))<=0) { /* this is bad, AFM-file and font file do not match. This will most probably lead to errors or inconsistencies later. However, we substitute .notdef and inform the user via logfile and T1_errno. */ sprintf( err_warn_msg_buf, "Charstring \"%s\" needed to construct composite char \"%s\" not defined (FontID=%d)", pAFMData->ccd[i].pieces[0].pccName, pAFMData->ccd[i].ccName, FontID); T1_PrintLog( "fontfcnB():", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_COMPOSITE_CHAR; } } } if (basechar<=0) { /* This means the requested char is unknown or the base char of a composite is not found -> we substitute .notdef */ charnameP = &CodeName; charnameP->len = 7; charnameP->data.stringP = (unsigned char *) notdef; basechar = SearchDictName(CharStringsDictP,charnameP); localmode=FF_NOTDEF_SUBST; /* Font must be completely damaged if it doesn't define a .notdef */ if (basechar<=0) { *mode=FF_PARSE_ERROR; return(NULL); } } /* if (basechar<=0) */ /* basechar is now the index of the base character in the CharStrings dictionary */ /* we provide the Type1Char() procedure with the name of the character to rasterize for debugging purposes */ strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; /* get CharString and character path */ theStringP = &(CharStringsDictP[basechar].value); tmppath2 = (struct segment *) Type1Char(FontP,S,theStringP,SubrsArrayP,NULL, FontP->BluesP,mode,CurCharName,strokewidth,0); strcpy( BaseCharName, CurCharName); /* if Type1Char reports an error, clean up and return */ if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR) { if (charpath!=NULL) { KillPath( charpath); } if (tmppath1!=NULL) { KillPath( tmppath1); } if (tmppath2!=NULL) { KillPath( tmppath2); } if (tmppath3!=NULL) { KillPath( tmppath3); } if (tmppath4!=NULL) { KillPath( tmppath4); } if (tmppath5!=NULL) { KillPath( tmppath5); } return(NULL); } /* Defer rastering to later, we first have to handle the composite symbols */ for (j=1; jlen=strlen( pAFMData->ccd[i].pieces[j].pccName); charnameP->data.stringP=(unsigned char*)pAFMData->ccd[i].pieces[j].pccName; /* get CharString definition */ if ((N=SearchDictName(CharStringsDictP,charnameP))<=0) { /* handling of errors, see comments above ... */ sprintf( err_warn_msg_buf, "Charstring \"%s\" needed to construct composite char \"%s\" not defined (FontID=%d)", pAFMData->ccd[i].pieces[j].pccName, pAFMData->ccd[i].ccName, FontID); T1_PrintLog( "fontfcnB():", err_warn_msg_buf, T1LOG_WARNING); charnameP = &CodeName; charnameP->len = 7; charnameP->data.stringP = (unsigned char *) notdef; N = SearchDictName(CharStringsDictP,charnameP); localmode=FF_NOTDEF_SUBST; /* an undefined .notdef is fatal -> clean up and return */ if (N<=0) { *mode=FF_PARSE_ERROR; if (charpath!=NULL) { KillPath( charpath); } if (tmppath1!=NULL) { KillPath( tmppath1); } if (tmppath2!=NULL) { KillPath( tmppath2); } if (tmppath3!=NULL) { KillPath( tmppath3); } if (tmppath4!=NULL) { KillPath( tmppath4); } if (tmppath5!=NULL) { KillPath( tmppath5); } return(NULL); } } theStringP = &(CharStringsDictP[N].value); tmppath1=(struct segment *)ILoc(S, pAFMData->ccd[i].pieces[j].deltax, pAFMData->ccd[i].pieces[j].deltay); strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; tmppath5=(struct segment *)Type1Char(FontP,S,theStringP,SubrsArrayP,NULL, FontP->BluesP,mode,CurCharName,strokewidth,0); /* return if Type1Char reports an error */ if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR) return(NULL); /* get escapement of current symbol */ currdisp=getDisplacement( tmppath5); /* concat displacement and symbol path */ tmppath5=(struct segment *)Join(tmppath1,tmppath5); /* for composite symbols we have to step back the char escapement. this is, in order to be able to use accents that cause a non zero displacement of the current point! We further have to step back the displacement from composite char data. */ tmppath1=(struct segment *)t1_PathSegment( MOVETYPE, -currdisp.x, -currdisp.y); tmppath3=(struct segment *)ILoc(S, -pAFMData->ccd[i].pieces[j].deltax, -pAFMData->ccd[i].pieces[j].deltay); tmppath3=(struct segment *)Join(tmppath1,tmppath3); /* create path, or, respectively, append to existing path */ if (tmppath4==NULL) { tmppath4=(struct segment *)Join(tmppath5,tmppath3); } else { tmppath5=(struct segment *)Join(tmppath5,tmppath3); tmppath4=(struct segment *)Join(tmppath4,tmppath5); } } /* concat composite symbols and base char. We use tmppath5 to store the path of the resulting (possibly composite) character. */ if (tmppath4==NULL) { /* no previous composite symbols */ tmppath5=tmppath2; /* a simple char */ } else { tmppath5=(struct segment *)Join(tmppath4,tmppath2); } /* Accumulate displacement, but be careful: In case of composite characters, we have to take the escapement of the base char only into account, because accents do not cause spacing. The path is constructed in a way that this automatically matches. */ if (numPieces>1) { /* composite character */ acc_width +=pFontBase->pFontArray[FontID].pAFMData->ccd[-(pFontBase->pFontArray[FontID].pEncMap[string[k]]+1)].wx; } else { /* ordinary character */ acc_width +=pFontBase->pFontArray[FontID].pAFMData->cmi[pFontBase->pFontArray[FontID].pEncMap[string[k]]-1].wx; } } /* else (if (char==space) */ /* character path is now stored in tmppath5. It may be a composite character. Insert kerning amount, if it is not the last character of the string. */ if (kpFontArray[FontID].UndrLnPos, pFontBase->pFontArray[FontID].UndrLnThick, (float) acc_width,strokewidth); charpath=(struct segment *)Join(charpath,tmppath2); } if (modflag & T1_OVERLINE){ tmppath2=(struct segment *)Type1Line(FontP,S, pFontBase->pFontArray[FontID].OvrLnPos, pFontBase->pFontArray[FontID].OvrLnThick, (float) acc_width,strokewidth); charpath=(struct segment *)Join(charpath,tmppath2); } if (modflag & T1_OVERSTRIKE){ tmppath2=(struct segment *)Type1Line(FontP,S, pFontBase->pFontArray[FontID].OvrStrkPos, pFontBase->pFontArray[FontID].OvrStrkThick, (float) acc_width,strokewidth); charpath=(struct segment *)Join(charpath,tmppath2); } /* printf("charpath->type: %x\n",charpath->type); printf("path1->type: %x\n",path1->type); printf("path2->type: %x\n",path2->type); */ /* if Type1Char reported an error, then return */ if ( *mode == FF_PARSE_ERROR) return(NULL); if ( *mode == FF_PATH_ERROR) return(NULL); if (do_raster) { /* fill with winding rule unless path was requested */ if (*mode != FF_PATH) { charpath = (struct segment *) Interior((path) charpath,WINDINGRULE+CONTINUITY); } } if (*mode==0) *mode=localmode; return((path)charpath); } /* This special variant is for generating character bitmaps from charactername */ xobject fontfcnB_ByName( int FontID, int modflag, struct XYspace *S, unsigned char *charname, int *mode, psfont *Font_Ptr, int do_raster) { psobj *charnameP; /* points to psobj that is name of character*/ FontInfo *pAFMData=NULL; int i=-1; int j=0; int numPieces=1; int N; T1_PATHPOINT currdisp; int basechar; psdict *CharStringsDictP; /* dictionary with char strings */ psobj CodeName; /* used to store the translation of the name*/ psobj *SubrsArrayP; psobj *theStringP; int localmode=0; struct segment *charpath=NULL; /* the path for this character */ struct segment *tmppath1=NULL; struct segment *tmppath2=NULL; struct segment *tmppath3=NULL; struct segment *tmppath4=NULL; /* set the global font pointer to the address of already allocated structure and setup pointers*/ FontP=Font_Ptr; CharStringsDictP = FontP->CharStringsP; SubrsArrayP = &(FontP->Subrs); charnameP = &CodeName; charnameP->len = strlen((char*)charname); charnameP->data.stringP = charname; strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; /* search the chars string for this charname as key */ basechar = SearchDictName(CharStringsDictP,charnameP); if (basechar<=0) { /* Check first, whether a char in question is a composite char */ if ((i=isCompositeChar( FontID, CurCharName))>-1) { /* i is now the index of the composite char definitions (starting at 0). At this point it is clear that AFM-info must be present -> fetch first component of composite char. */ pAFMData=pFontBase->pFontArray[FontID].pAFMData; charnameP->len=strlen( pAFMData->ccd[i].pieces[0].pccName); charnameP->data.stringP=(unsigned char*)pAFMData->ccd[i].pieces[0].pccName; numPieces=pAFMData->ccd[i].numOfPieces; if ((basechar=SearchDictName(CharStringsDictP,charnameP))<=0) { /* this is bad, AFM-file and font file do not match. This will most probably lead to errors or inconsistencies later. However, we substitute .notdef and inform the user via logfile and T1_errno. */ sprintf( err_warn_msg_buf, "Charstring \"%s\" needed to construct composite char \"%s\" not defined (FontID=%d)", pAFMData->ccd[i].pieces[0].pccName, pAFMData->ccd[i].ccName, FontID); T1_PrintLog( "fontfcnB():", err_warn_msg_buf, T1LOG_WARNING); T1_errno=T1ERR_COMPOSITE_CHAR; } } } if (basechar<=0) { /* This means the requested char is unknown or the base char of a composite is not found -> we substitute .notdef */ charnameP = &CodeName; charnameP->len = 7; charnameP->data.stringP = (unsigned char *) notdef; basechar = SearchDictName(CharStringsDictP,charnameP); localmode=FF_NOTDEF_SUBST; /* Font must be completely damaged if it doesn't define a .notdef */ if (basechar<=0) { *mode=FF_PARSE_ERROR; return(NULL); } } /* if (basechar<=0) */ /* basechar is now the index of the base character in the CharStrings dictionary */ /* we provide the Type1Char() procedure with the name of the character to rasterize for debugging purposes */ strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; /* get CharString and character path */ theStringP = &(CharStringsDictP[basechar].value); tmppath2 = (struct segment *) Type1Char(FontP,S,theStringP,SubrsArrayP,NULL, FontP->BluesP,mode,CurCharName, 0.0f, 0); /* if Type1Char reported an error, then return */ if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR) return(NULL); /* Defer rastering to later, we first have to handle the composite symbols */ for (j=1; jlen=strlen( pAFMData->ccd[i].pieces[j].pccName); charnameP->data.stringP=(unsigned char*)pAFMData->ccd[i].pieces[j].pccName; /* get CharString definition */ if ((N=SearchDictName(CharStringsDictP,charnameP))<=0) { /* handling of errors, see comments above ... */ sprintf( err_warn_msg_buf, "Charstring \"%s\" needed to construct composite char \"%s\" not defined (FontID=%d)", pAFMData->ccd[i].pieces[j].pccName, pAFMData->ccd[i].ccName, FontID); T1_PrintLog( "fontfcnB():", err_warn_msg_buf, T1LOG_WARNING); charnameP = &CodeName; charnameP->len = 7; charnameP->data.stringP = (unsigned char *) notdef; N = SearchDictName(CharStringsDictP,charnameP); localmode=FF_NOTDEF_SUBST; /* damaged Font */ if (N<=0) { *mode=FF_PARSE_ERROR; if (charpath!=NULL) { KillPath( charpath); } return(NULL); } } theStringP = &(CharStringsDictP[N].value); tmppath1=(struct segment *)ILoc(S, pAFMData->ccd[i].pieces[j].deltax, pAFMData->ccd[i].pieces[j].deltay); strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; charpath=(struct segment *)Type1Char(FontP,S,theStringP,SubrsArrayP,NULL, FontP->BluesP,mode,CurCharName,0.0f,0); /* return if Type1Char reports an error */ if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR) return(NULL); /* get escapement of current symbol */ currdisp=getDisplacement( charpath); /* concat displacement and symbol path */ charpath=(struct segment *)Join(tmppath1,charpath); /* for composite symbols we have to step back the char escapement. this is, in order to be able to use accents that cause a non zero displacement of the current point! We further have to step back the displacement from composite char data. */ tmppath1=(struct segment *)t1_PathSegment( MOVETYPE, -currdisp.x, -currdisp.y); tmppath3=(struct segment *)ILoc(S, -pAFMData->ccd[i].pieces[j].deltax, -pAFMData->ccd[i].pieces[j].deltay); tmppath3=(struct segment *)Join(tmppath1,tmppath3); /* create path, or, respectively, append to existing path */ if (tmppath4==NULL) { tmppath4=(struct segment *)Join(charpath,tmppath3); } else { charpath=(struct segment *)Join(charpath,tmppath3); tmppath4=(struct segment *)Join(tmppath4,charpath); } } /* concat composite symbols and base char */ if (tmppath4==NULL) { /* no previous composite symbols */ charpath=tmppath2; /* a simple char */ } else { charpath=(struct segment *)Join(tmppath4,tmppath2); } if (do_raster) { /* fill with winding rule unless path was requested */ if (*mode != FF_PATH) { charpath = (struct segment *)Interior(charpath,WINDINGRULE+CONTINUITY); } } if (*mode==0) *mode=localmode; return((xobject) charpath); } xobject fontfcnRect( float width, float height, struct XYspace* S, int *mode, int do_raster, float strokewidth) { struct segment *charpath = NULL; /* the path for this character (rectangle) */ charpath = (struct segment *) Type1Line( NULL, S, 0.5f * height, /* position */ height, /* thickness */ -width, /* width */ strokewidth /* strokewidth */ ); if (do_raster) { /* fill with winding rule unless path was requested */ if (*mode != FF_PATH) { charpath = (struct segment *)Interior(charpath,WINDINGRULE+CONTINUITY); } } return((xobject) charpath); } /* T1int_QuerySEAC(): Query for Type of character definition of index "index". Returns: 0 if charstring for currenc[index] not defined 1 if charstring defines a self-containing character 2 if charstring references other definition by means of the SEAC directive. */ int T1int_QuerySEAC( int FontID, unsigned char index, unsigned char* basepiece, unsigned char* accpiece ) { psobj *charnameP; /* points to psobj that is name of character*/ int thischar; int mode = 0; psdict *CharStringsDictP; /* dictionary with char strings */ psobj CodeName; /* used to store the translation of the name*/ psobj *SubrsArrayP; psobj *theStringP; char **ev; struct XYspace *S; struct segment *path=NULL; /* the path for this character */ /* set the global font pointer to the address of already allocated structure and setup pointers*/ FontP=pFontBase->pFontArray[FontID].pType1Data; CharStringsDictP = FontP->CharStringsP; SubrsArrayP = &(FontP->Subrs); charnameP = &CodeName; /* get encoding */ ev=pFontBase->pFontArray[FontID].pFontEnc; if (ev==NULL){ /* font-internal encoding should be used */ charnameP->len = FontP->fontInfoP[ENCODING].value.data.arrayP[index].len; charnameP->data.stringP = (unsigned char *) FontP->fontInfoP[ENCODING].value.data.arrayP[index].data.arrayP; } else{ /* some user-supplied encoding is to be used */ charnameP->len = strlen(ev[index]); charnameP->data.stringP = (unsigned char *) ev[index]; } strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; /* search the chars string for this charname as key */ thischar = SearchDictName(CharStringsDictP,charnameP); /* thischar is now the index of the base character in the CharStrings dictionary */ if ( thischar <= 0 ) { /* CharString not defined, return */ return 0; } /* Setup NULL-space, not needed when paths aren't created */ S = NULL; /* we provide the Type1Char() procedure with the name of the character to rasterize for debugging purposes */ strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len); CurCharName[charnameP->len]='\0'; /* get CharString and character path */ theStringP = &(CharStringsDictP[thischar].value); path = (struct segment *) Type1Char(FontP,S,theStringP,SubrsArrayP,NULL, FontP->BluesP,&mode,CurCharName,0, 1); /* if Type1Char reported an error, then return */ if ( mode == FF_PARSE_ERROR || mode==FF_PATH_ERROR) { return -1; } if ( T1int_Type1QuerySEAC( basepiece, accpiece) > 0 ) { return 2; } return 1; } t1lib-5.1.2/lib/type1/fontfcn.h0000644000175000001440000000735210733501626014711 0ustar rmzusers/* $XConsortium: fontfcn.h,v 1.3 92/03/26 16:42:23 eswu Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* Definition of a PostScript FONT */ typedef struct ps_font { char *vm_start; psobj FontFileName; psobj Subrs; psdict *CharStringsP; psdict *Private; psdict *fontInfoP; struct blues_struct *BluesP; } psfont; /***================================================================***/ /* Routines in scan_font */ /***================================================================***/ extern boolean Init_StdEnc(); extern int scan_font(); extern int GetFontInfo(); /***================================================================***/ /* Return codes from scan_font */ /***================================================================***/ #define SCAN_OK 0 #define SCAN_FILE_EOF -1 #define SCAN_ERROR -2 #define SCAN_OUT_OF_MEMORY -3 #define SCAN_FILE_OPEN_ERROR -4 #define SCAN_MMFONT -5 /* font is a Multiple Master Font */ #define SCAN_TRUE -6 #define SCAN_FALSE -7 #define SCAN_END -8 /***================================================================***/ /* Name of FontInfo fields */ /***================================================================***/ #define FONTNAME 1 #define PAINTTYPE 2 #define FONTTYPENUM 3 #define FONTMATRIX 4 #define FONTBBOX 5 #define UNIQUEID 6 #define STROKEWIDTH 7 #define VERSION 8 #define NOTICE 9 #define FULLNAME 10 #define FAMILYNAME 11 #define WEIGHT 12 #define ITALICANGLE 13 #define ISFIXEDPITCH 14 #define UNDERLINEPOSITION 15 #define UNDERLINETHICKNESS 16 #define ENCODING 17 /***================================================================***/ /* Name of Private values */ /***================================================================***/ #define BLUEVALUES 1 #define OTHERBLUES 2 #define FAMILYBLUES 3 #define FAMILYOTHERBLUES 4 #define BLUESCALE 5 #define BLUESHIFT 6 #define BLUEFUZZ 7 #define STDHW 8 #define STDVW 9 #define STEMSNAPH 10 #define STEMSNAPV 11 #define FORCEBOLD 12 #define LANGUAGEGROUP 13 #define LENIV 14 #define RNDSTEMUP 15 #define EXPANSIONFACTOR 16 t1lib-5.1.2/lib/type1/spaces.c0000644000175000001440000010162010733501626014516 0ustar rmzusers/* $XConsortium: spaces.c,v 1.4 91/10/10 11:19:16 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /* SPACES CWEB V0021 ******** */ /* :h1 id=spaces.SPACES Module - Handles Coordinate Spaces This module is responsible for handling the TYPE1IMAGER "XYspace" object. &author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com) :h3.Include Files */ #include #include #include #include "types.h" #include "objects.h" #include "spaces.h" #include "paths.h" #include "pictures.h" #include "fonts.h" #include "arith.h" #include "trig.h" static int FindFfcn(); static int FindIfcn(); /* :h3.Entry Points Provided to the TYPE1IMAGER User */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Entry Points Provided to Other Modules */ /* In addition, other modules call the SPACES module through function vectors in the "XYspace" structure. The entry points accessed that way are "FConvert()", "IConvert()", and "ForceFloat()". */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Macros and Typedefs Provided to Other Modules :h4.Duplicating and Killing Spaces Destroying XYspaces is so simple we can do it with a macro: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* On the other hand, duplicating XYspaces is slightly more difficult because of the need to keep a unique ID in the space, see :hdref refid=dupspace.. :h4.Fixed Point Pel Representation We represent pel positions with fixed point numbers. This does NOT mean integer, but truly means fixed point, with a certain number of binary digits (FRACTBITS) representing the fractional part of the pel. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h2.Data Structures for Coordinate Spaces and Points */ /* :h3 id=matrix.Matrices TYPE1IMAGER uses 2x2 transformation matrices. We'll use C notation for such a matrix (M[2][2]), the first index being rows, the second columns. */ /* :h3.The "doublematrix" Structure We frequently find it desirable to store both a matrix and its inverse. We store these in a "doublematrix" structure. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.The "XYspace" Structure The XYspace structure represents the XYspace object. */ /*SHARED LINE(S) ORIGINATED HERE*/ #define RESERVED 10 /* 'n' IDs are reserved for invalid & immortal spaces */ /* */ #define NEXTID ((SpaceID < RESERVED) ? (SpaceID = RESERVED) : ++SpaceID) static unsigned int SpaceID = 1; struct XYspace *CopySpace(S) register struct XYspace *S; { S = (struct XYspace *)Allocate(sizeof(struct XYspace), S, 0); S->ID = NEXTID; return(S); } /* :h3.The "fractpoint" Structure A fractional point is just a "fractpel" x and y: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Lazy Evaluation of Matrix Inverses Calculating the inverse of a matrix is somewhat involved, and we usually do not need them. So, we flag whether or not the space has the inverse already calculated: */ #define HASINVERSE(flag) ((flag)&0x80) /* The following macro forces a space to have an inverse: */ #define CoerceInverse(S) if (!HASINVERSE((S)->flag)) { \ MatrixInvert((S)->tofract.normal, (S)->tofract.inverse); (S)->flag |= HASINVERSE(ON); } /* :h3.IDENTITY Space IDENTITY space is (logically) the space corresponding to the identity transformation matrix. However, since all our transformation matrices have a common FRACTFLOAT scale factor to convert to 'fractpel's, that is actually what we store in 'tofract' matrix of IDENTITY: */ static struct XYspace identity = { SPACETYPE, ISPERMANENT(ON) + ISIMMORTAL(ON) + HASINVERSE(ON), 2, /* added 3-26-91 PNM */ NULL, NULL, NULL, NULL, NULL, NULL, INVALIDID + 1, 0, {{{FRACTFLOAT, 0.0}, {0.0, FRACTFLOAT}}, {{1.0/FRACTFLOAT, 0.0}, {0.0, 1.0/FRACTFLOAT}}}, {{0, 0}, {0, 0}} }; struct XYspace *IDENTITY = &identity; /* */ #define MAXCONTEXTS 16 static struct doublematrix contexts[MAXCONTEXTS]; #ifdef notdef static int nextcontext = 1; /*SHARED LINE(S) ORIGINATED HERE*/ #if __STDC__ #define pointer void * #else #define pointer char * #endif /* :h3.FindDeviceContext() - Find the Context Given a Device This routine, given a device, returns the index of the device's transformation matrix in the context array. If it cannot find it, it will allocate a new array entry and fill it out. */ static int FindDeviceContext(device) pointer device; /* device token */ { DOUBLE M[2][2]; /* temporary matrix */ float Xres,Yres; /* device resolution */ int orient = -1; /* device orientation */ int rc = -1; /* return code for QueryDeviceState */ if (rc != 0) /* we only bother with this check once */ abort("Context: QueryDeviceState didn't work", 44); M[0][0] = M[1][0] = M[0][1] = M[1][1] = 0.0; switch (orient) { case 0: M[0][0] = Xres; M[1][1] = -Yres; break; case 1: M[1][0] = Yres; M[0][1] = Xres; break; case 2: M[0][0] = -Xres; M[1][1] = Yres; break; case 3: M[1][0] = -Yres; M[0][1] = -Xres; break; default: abort("QueryDeviceState returned invalid orientation", 45); } return(FindContext(M)); } /* :h3.FindContext() - Find the Context Given a Matrix This routine, given a matrix, returns the index of that matrix matrix in the context array. If it cannot find it, it will allocate a new array entry and fill it out. */ int FindContext(M) DOUBLE M[2][2]; /* array to search for */ { register int i; /* loop variable for search */ for (i=0; i < nextcontext; i++) if (M[0][0] == contexts[i].normal[0][0] && M[1][0] == contexts[i].normal[1][0] && M[0][1] == contexts[i].normal[0][1] && M[1][1] == contexts[i].normal[1][1]) break; if (i >= nextcontext) { if (i >= MAXCONTEXTS) abort("Context: out of them", 46); LONGCOPY(contexts[i].normal, M, sizeof(contexts[i].normal)); MatrixInvert(M, contexts[i].inverse); nextcontext++; } return(i); } /* :h3.Context() - Create a Coordinate Space for a Device This user operator is implemented by first finding the device context array index, then transforming IDENTITY space to create an appropriate cooridnate space. */ struct XYspace *Context(device, units) pointer device; /* device token */ DOUBLE units; /* multiples of one inch */ { DOUBLE M[2][2]; /* device transformation matrix */ register int n; /* will hold device context number */ register struct XYspace *S; /* XYspace constructed */ IfTrace2((MustTraceCalls),"Context(%x, %f)\n", device, &units); ARGCHECK((device == NULL), "Context of NULLDEVICE not allowed", NULL, IDENTITY, (0), struct XYspace *); ARGCHECK((units == 0.0), "Context: bad units", NULL, IDENTITY, (0), struct XYspace *); n = FindDeviceContext(device); LONGCOPY(M, contexts[n].normal, sizeof(M)); M[0][0] *= units; M[0][1] *= units; M[1][0] *= units; M[1][1] *= units; S = (struct XYspace *)Xform(IDENTITY, M); S->context = n; return(S); } #endif /* :h3.ConsiderContext() - Adjust a Matrix to Take Out Device Transform Remember, we have :f/x times U times D/ and :f/M/ and and we want :f/x times U times M times D/. An easy way to do this is to calculate :f/D sup <-1> times M times D/, because: :formula. x times U times D times D sup <-1> times M times D = x times U times M times D :formula. So this subroutine, given an :f/M/and an object, finds the :f/D/ for that object and modifies :f/M/ so it is :f/D sup <-1> times M times D/. */ static void ConsiderContext(obj, M) register struct xobject *obj; /* object to be transformed */ register DOUBLE M[2][2]; /* matrix (may be changed) */ { register int context=0; /* index in contexts array */ if (obj == NULL) return; if (ISPATHTYPE(obj->type)) { struct segment *path = (struct segment *) obj; context = path->context; } else if (obj->type == SPACETYPE) { struct XYspace *S = (struct XYspace *) obj; context = S->context; } else if (obj->type == PICTURETYPE) { } else context = NULLCONTEXT; if (context != NULLCONTEXT) { MatrixMultiply(contexts[context].inverse, M, M); MatrixMultiply(M, contexts[context].normal, M); } } /* :h2.Conversion from User's X,Y to "fractpel" X,Y When the user is building paths (lines, moves, curves, etc.) he passes the control points (x,y) for the paths together with an XYspace. We must convert from the user's (x,y) to our internal representation which is in pels (fractpels, actually). This involves transforming the user's (x,y) under the coordinate space transformation. It is important that we do this quickly. So, we store pointers to different conversion functions right in the XYspace structure. This allows us to have simpler special case functions for the more commonly encountered types of transformations. :h3.Convert(), IConvert(), and ForceFloat() - Called Through "XYspace" Structure These are functions that fit in the "convert" and "iconvert" function pointers in the XYspace structure. They call the "xconvert", "yconvert", "ixconvert", and "iyconvert" as appropriate to actually do the work. These secondary routines come in many flavors to handle different special cases as quickly as possible. */ int FXYConvert(pt, S, x, y) register struct fractpoint *pt; /* point to set */ register struct XYspace *S; /* relevant coordinate space */ register DOUBLE x,y; /* user's coordinates of point */ { pt->x = (*S->xconvert)(S->tofract.normal[0][0], S->tofract.normal[1][0], x, y); pt->y = (*S->yconvert)(S->tofract.normal[0][1], S->tofract.normal[1][1], x, y); return(0); } int IXYConvert(pt, S, x, y) register struct fractpoint *pt; /* point to set */ register struct XYspace *S; /* relevant coordinate space */ register LONG x,y; /* user's coordinates of point */ { pt->x = (*S->ixconvert)(S->itofract[0][0], S->itofract[1][0], x, y); pt->y = (*S->iyconvert)(S->itofract[0][1], S->itofract[1][1], x, y); return(0); } /* ForceFloat is a substitute for IConvert(), when we just do not have enough significant digits in the coefficients to get high enough precision in the answer with fixed point arithmetic. So, we force the integers to floats, and do the arithmetic all with floats: */ int ForceFloat(pt, S, x, y) register struct fractpoint *pt; /* point to set */ register struct XYspace *S; /* relevant coordinate space */ register LONG x,y; /* user's coordinates of point */ { (*S->convert)(pt, S, (DOUBLE) x, (DOUBLE) y); return(0); } /* :h3.FXYboth(), FXonly(), FYonly() - Floating Point Conversion These are the routines we use when the user has given us floating point numbers for x and y. FXYboth() is the general purpose routine; FXonly() and FYonly() are special cases when one of the coefficients is 0.0. */ fractpel FXYboth(cx, cy, x, y) register DOUBLE cx,cy; /* x and y coefficients */ register DOUBLE x,y; /* user x,y */ { register DOUBLE r; /* temporary float */ r = x * cx + y * cy; return((fractpel) r); } /*ARGSUSED*/ fractpel FXonly(cx, cy, x, y) register DOUBLE cx,cy; /* x and y coefficients */ register DOUBLE x,y; /* user x,y */ { register DOUBLE r; /* temporary float */ r = x * cx; return((fractpel) r); } /*ARGSUSED*/ fractpel FYonly(cx, cy, x, y) register DOUBLE cx,cy; /* x and y coefficients */ register DOUBLE x,y; /* user x,y */ { register DOUBLE r; /* temporary float */ r = y * cy; return((fractpel) r); } /* :h3.IXYboth(), IXonly(), IYonly() - Simple Integer Conversion These are the routines we use when the user has given us integers for x and y, and the coefficients have enough significant digits to provide precise answers with only "long" (32 bit?) multiplication. IXYboth() is the general purpose routine; IXonly() and IYonly() are special cases when one of the coefficients is 0. */ fractpel IXYboth(cx, cy, x, y) register fractpel cx,cy; /* x and y coefficients */ register LONG x,y; /* user x,y */ { return(x * cx + y * cy); } /*ARGSUSED*/ fractpel IXonly(cx, cy, x, y) register fractpel cx,cy; /* x and y coefficients */ register LONG x,y; /* user x,y */ { return(x * cx); } /*ARGSUSED*/ fractpel IYonly(cx, cy, x, y) register fractpel cx,cy; /* x and y coefficients */ register LONG x,y; /* user x,y */ { return(y * cy); } /* :h3.FPXYboth(), FPXonly(), FPYonly() - More Involved Integer Conversion These are the routines we use when the user has given us integers for x and y, but the coefficients do not have enough significant digits to provide precise answers with only "long" (32 bit?) multiplication. We have increased the number of significant bits in the coefficients by FRACTBITS; therefore we must use "double long" (64 bit?) multiplication by calling FPmult(). FPXYboth() is the general purpose routine; FPXonly() and FPYonly() are special cases when one of the coefficients is 0. Note that it is perfectly possible for us to calculate X with the "FP" method and Y with the "I" method, or vice versa. It all depends on how the functions in the XYspace structure are filled out. */ fractpel FPXYboth(cx, cy, x, y) register fractpel cx,cy; /* x and y coefficients */ register LONG x,y; /* user x,y */ { return( FPmult(x, cx) + FPmult(y, cy) ); } /*ARGSUSED*/ fractpel FPXonly(cx, cy, x, y) register fractpel cx,cy; /* x and y coefficients */ register LONG x,y; /* user x,y */ { return( FPmult(x, cx) ); } /*ARGSUSED*/ fractpel FPYonly(cx, cy, x, y) register fractpel cx,cy; /* x and y coefficients */ register LONG x,y; /* user x,y */ { return( FPmult(y, cy) ); } /* :h3.FillOutFcns() - Determine the Appropriate Functions to Use for Conversion This function fills out the "convert" and "iconvert" function pointers in an XYspace structure, and also fills the "helper" functions that actually do the work. */ static void FillOutFcns(S) register struct XYspace *S; /* functions will be set in this structure */ { S->convert = FXYConvert; S->iconvert = IXYConvert; FindFfcn(S->tofract.normal[0][0], S->tofract.normal[1][0], &S->xconvert); FindFfcn(S->tofract.normal[0][1], S->tofract.normal[1][1], &S->yconvert); FindIfcn(S->tofract.normal[0][0], S->tofract.normal[1][0], &S->itofract[0][0], &S->itofract[1][0], &S->ixconvert); FindIfcn(S->tofract.normal[0][1], S->tofract.normal[1][1], &S->itofract[0][1], &S->itofract[1][1], &S->iyconvert); if (S->ixconvert == NULL || S->iyconvert == NULL) S->iconvert = ForceFloat; } /* :h4.FindFfcn() - Subroutine of FillOutFcns() to Fill Out Floating Functions This function tests for the special case of one of the coefficients being zero: */ static int FindFfcn(cx, cy, fcnP) register DOUBLE cx,cy; /* x and y coefficients */ register fractpel (**fcnP)(); /* pointer to function to set */ { if (cx == 0.0) *fcnP = FYonly; else if (cy == 0.0) *fcnP = FXonly; else *fcnP = FXYboth; return(0); } /* :h4.FindIfcn() - Subroutine of FillOutFcns() to Fill Out Integer Functions There are two types of integer functions, the 'I' type and the 'FP' type. We use the I type functions when we are satisfied with simple integer arithmetic. We used the FP functions when we feel we need higher precision (but still fixed point) arithmetic. If all else fails, we store a NULL indicating that this we should do the conversion in floating point. */ static int FindIfcn(cx, cy, icxP, icyP, fcnP) register DOUBLE cx,cy; /* x and y coefficients */ register fractpel *icxP,*icyP; /* fixed point coefficients to set */ register fractpel (**fcnP)(); /* pointer to function to set */ { register fractpel imax; /* maximum of cx and cy */ *icxP = cx; *icyP = cy; if (cx != (float) (*icxP) || cy != (float) (*icyP)) { /* At this point we know our integer approximations of the coefficients are not exact. However, we will still use them if the maximum coefficient will not fit in a 'fractpel'. Of course, we have little choice at that point, but we haven't lost that much precision by staying with integer arithmetic. We have enough significant digits so that any error we introduce is less than one part in 2:sup/16/. */ imax = TYPE1_MAX(TYPE1_ABS(*icxP), TYPE1_ABS(*icyP)); if (imax < (fractpel) (1<<(FRACTBITS-1)) ) { /* At this point we know our integer approximations just do not have enough significant digits for accuracy. We will add FRACTBITS significant digits to the coefficients (by multiplying them by 1<x; y = pt->y; *xp = S->tofract.inverse[0][0] * x + S->tofract.inverse[1][0] * y; *yp = S->tofract.inverse[0][1] * x + S->tofract.inverse[1][1] * y; } /* :h2.Transformations */ /* :h3 id=xform.Xform() - Transform Object in X and Y TYPE1IMAGER wants transformations of objects like paths to be identical to transformations of spaces. For example, if you scale a line(1,1) by 10 it should yield the same result as generating the line(1,1) in a coordinate space that has been scaled by 10. We handle fonts by storing the accumulated transform, for example, SR (accumulating on the right). Then when we map the font through space TD, for example, we multiply the accumulated font transform on the left by the space transform on the right, yielding SRTD in this case. We will get the same result if we did S, then R, then T on the space and mapping an unmodified font through that space. */ struct xobject *t1_Xform(obj, M) register struct xobject *obj; /* object to transform */ register DOUBLE M[2][2]; /* transformation matrix */ { if (obj == NULL) return(NULL); if (obj->type == FONTTYPE) { register struct font *F = (struct font *) obj; F = UniqueFont(F); return((struct xobject*)F); } if (obj->type == PICTURETYPE) { /* In the case of a picture, we choose both to update the picture's transformation matrix and keep the handles up to date. */ register struct picture *P = (struct picture *) obj; register struct segment *handles; /* temporary path to transform handles */ P = UniquePicture(P); handles = PathSegment(LINETYPE, P->origin.x, P->origin.y); handles = Join(handles, PathSegment(LINETYPE, P->ending.x, P->ending.y) ); handles = (struct segment *)Xform((struct xobject *) handles, M); P->origin = handles->dest; P->ending = handles->link->dest; KillPath(handles); return((struct xobject *)P); } if (ISPATHTYPE(obj->type)) { struct XYspace pseudo; /* local temporary space */ PseudoSpace(&pseudo, M); return((struct xobject *) PathTransform(obj, &pseudo)); } if (obj->type == SPACETYPE) { register struct XYspace *S = (struct XYspace *) obj; /* replaced ISPERMANENT(S->flag) with S->references > 1 3-26-91 PNM */ if (S->references > 1) S = CopySpace(S); else S->ID = NEXTID; MatrixMultiply(S->tofract.normal, M, S->tofract.normal); /* * mark inverted matrix invalid: */ S->flag &= ~HASINVERSE(ON); FillOutFcns(S); return((struct xobject *) S); } return(ArgErr("Untransformable object", obj, obj)); } /* :h3.Transform() - Transform an Object This is the external user's entry point. */ struct xobject *t1_Transform(obj, cxx, cyx, cxy, cyy) struct xobject *obj; DOUBLE cxx,cyx,cxy,cyy; /* 2x2 transform matrix elements in row order */ { DOUBLE M[2][2]; IfTrace1((MustTraceCalls),"Transform(%p,", obj); IfTrace4((MustTraceCalls)," %f %f %f %f)\n", cxx, cyx, cxy, cyy); M[0][0] = cxx; M[0][1] = cyx; M[1][0] = cxy; M[1][1] = cyy; ConsiderContext(obj, M); return(Xform(obj, M)); } /* :h3.Scale() - Special Case of Transform() This is a user operator. */ struct xobject *t1_Scale(obj, sx, sy) struct xobject *obj; /* object to scale */ DOUBLE sx,sy; /* scale factors in x and y */ { DOUBLE M[2][2]; IfTrace3((MustTraceCalls),"Scale(%p, %f, %f)\n", obj, sx, sy); M[0][0] = sx; M[1][1] = sy; M[1][0] = M[0][1] = 0.0; ConsiderContext(obj, M); return(Xform(obj, M)); } /* :h3 id=rotate.Rotate() - Special Case of Transform() We special-case different settings of 'degrees' for performance and accuracy within the DegreeSin() and DegreeCos() routines themselves. */ #ifdef notdef struct xobject *xiRotate(obj, degrees) struct xobject *obj; /* object to be transformed */ DOUBLE degrees; /* degrees of COUNTER-clockwise rotation */ { DOUBLE M[2][2]; IfTrace2((MustTraceCalls),"Rotate(%z, %f)\n", obj, °rees); M[0][0] = M[1][1] = DegreeCos(degrees); M[1][0] = - (M[0][1] = DegreeSin(degrees)); ConsiderContext(obj, M); return(Xform(obj, M)); } #endif /* :h3.PseudoSpace() - Build a Coordinate Space from a Matrix Since we have built all this optimized code that, given an (x,y) and a coordinate space, yield transformed (x,y), it seems a shame not to use the same logic when we need to multiply an (x,y) by an arbitrary matrix that is not (initially) part of a coordinate space. This subroutine takes the arbitrary matrix and builds a coordinate space, with all its nifty function pointers. */ void PseudoSpace(S, M) struct XYspace *S; /* coordinate space structure to fill out */ DOUBLE M[2][2]; /* matrix that will become 'tofract.normal' */ { S->type = SPACETYPE; S->flag = ISPERMANENT(ON) + ISIMMORTAL(ON); S->references = 2; /* 3-26-91 added PNM */ S->tofract.normal[0][0] = M[0][0]; S->tofract.normal[1][0] = M[1][0]; S->tofract.normal[0][1] = M[0][1]; S->tofract.normal[1][1] = M[1][1]; FillOutFcns(S); } /* :h2 id=matrixa.Matrix Arithmetic Following the convention in Newman and Sproull, :hp1/Interactive Computer Graphics/, matrices are organized: :xmp. | cxx cyx | | cxy cyy | :exmp. A point is horizontal, for example: :xmp. [ x y ] :exmp. This means that: :formula/x prime = cxx times x + cxy times y/ :formula/y prime = cyx times x + cyy times y/ I've seen the other convention, where transform matrices are transposed, equally often in the literature. */ /* :h3.MatrixMultiply() - Implements Multiplication of Two Matrices Implements matrix multiplication, A * B = C. To remind myself, matrix multiplication goes rows of A times columns of B. The output matrix may be the same as one of the input matrices. */ void MatrixMultiply(A, B, C) register DOUBLE A[2][2],B[2][2]; /* input matrices */ register DOUBLE C[2][2]; /* output matrix */ { register DOUBLE txx,txy,tyx,tyy; txx = A[0][0] * B[0][0] + A[0][1] * B[1][0]; txy = A[1][0] * B[0][0] + A[1][1] * B[1][0]; tyx = A[0][0] * B[0][1] + A[0][1] * B[1][1]; tyy = A[1][0] * B[0][1] + A[1][1] * B[1][1]; C[0][0] = txx; C[1][0] = txy; C[0][1] = tyx; C[1][1] = tyy; } /* :h3.MatrixInvert() - Invert a Matrix My reference for matrix inversion was :hp1/Elementary Linear Algebra/ by Paul C. Shields, Worth Publishers, Inc., 1968. */ void MatrixInvert(M, Mprime) DOUBLE M[2][2]; /* input matrix */ DOUBLE Mprime[2][2]; /* output inverted matrix */ { register DOUBLE D; /* determinant of matrix M */ register DOUBLE txx,txy,tyx,tyy; txx = M[0][0]; txy = M[1][0]; tyx = M[0][1]; tyy = M[1][1]; D = M[1][1] * M[0][0] - M[1][0] * M[0][1]; if (D == 0.0) abort("MatrixInvert: can't", 47); Mprime[0][0] = tyy / D; Mprime[1][0] = -txy / D; Mprime[0][1] = -tyx / D; Mprime[1][1] = txx / D; } /* :h2.Initialization, Queries, and Debug */ /* :h3.InitSpaces() - Initialize Constant Spaces For compatibility, we initialize a coordinate space called USER which maps 72nds of an inch to pels on the default device. */ struct XYspace *USER = &identity; void InitSpaces() { /* extern char *DEFAULTDEVICE; */ IDENTITY->type = SPACETYPE; FillOutFcns(IDENTITY); contexts[NULLCONTEXT].normal[1][0] = contexts[NULLCONTEXT].normal[0][1] = contexts[NULLCONTEXT].inverse[1][0] = contexts[NULLCONTEXT].inverse[0][1] = 0.0; contexts[NULLCONTEXT].normal[0][0] = contexts[NULLCONTEXT].normal[1][1] = contexts[NULLCONTEXT].inverse[0][0] = contexts[NULLCONTEXT].inverse[1][1] = 1.0; USER->flag |= ISIMMORTAL(ON); CoerceInverse(USER); } /* :h3.QuerySpace() - Returns the Transformation Matrix of a Space Since the tofract matrix of an XYspace includes the scale factor necessary to produce fractpel results (i.e., FRACTFLOAT), this must be taken out before we return the matrix to the user. Fortunately, this is simple: just multiply by the inverse of IDENTITY! */ void QuerySpace(S, cxxP, cyxP, cxyP, cyyP) register struct XYspace *S; /* space asked about */ register DOUBLE *cxxP,*cyxP,*cxyP,*cyyP; /* where to put answer */ { DOUBLE M[2][2]; /* temp matrix to build user's answer */ if (S->type != SPACETYPE) { ArgErr("QuerySpace: not a space", S, NULL); return; } MatrixMultiply(S->tofract.normal, IDENTITY->tofract.inverse, M); *cxxP = M[0][0]; *cxyP = M[1][0]; *cyxP = M[0][1]; *cyyP = M[1][1]; } /* :h3.FormatFP() - Format a Fixed Point Pel We format the pel as "dddd.XXXX", where XX's are hexidecimal digits, and the dd's are decimal digits. This might be a little confusing mixing hexidecimal and decimal like that, but it is convenient to use for debug. We make sure we have N (FRACTBITS/4) digits past the decimal point. */ #define FRACTMASK ((1<> FRACTBITS, s); } /* :h3.DumpSpace() - Display a Coordinate Space */ /*ARGSUSED*/ void DumpSpace(S) register struct XYspace *S; { IfTrace4(TRUE,"--Coordinate space at %p,ID=%d,convert=%p,iconvert=%p\n", S, S->ID, S->convert, S->iconvert); IfTrace2(TRUE," | %12.3f %12.3f |", S->tofract.normal[0][0], S->tofract.normal[0][1]); IfTrace2(TRUE," [ %d %d ]\n", S->itofract[0][0], S->itofract[0][1]); IfTrace2(TRUE," | %12.3f %12.3f |", S->tofract.normal[1][0], S->tofract.normal[1][1]); IfTrace2(TRUE," [ %d %d ]\n", S->itofract[1][0], S->itofract[1][1]); } t1lib-5.1.2/lib/type1/spaces.h0000644000175000001440000001352710733501626014533 0ustar rmzusers/* $XConsortium: spaces.h,v 1.3 91/10/10 11:19:22 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /*SHARED*/ #include "types.h" #define USER t1_User #define IDENTITY t1_Identity #define Context(d,u) t1_Context(d,u) #define Transform(o,f1,f2,f3,f4) t1_Transform(o,f1,f2,f3,f4) #define Rotate(o,d) t1_Rotate(o,d) #define Scale(o,sx,sy) t1_Scale(o,sx,sy) #define QuerySpace(S,f1,f2,f3,f4) t1_QuerySpace(S,f1,f2,f3,f4) #define Warp(s1,o,s2) t1_Warp(s1,o,s2) struct XYspace *t1_Context(); /* creates a coordinate space for a device */ struct xobject *t1_Transform(); /* transform an object */ struct xobject *t1_Rotate(); /* rotate an object */ struct xobject *t1_Scale(); /* scale an object */ struct xobject *t1_Warp(); /* transform like delta of two spaces */ void t1_QuerySpace(); /* returns coordinate space matrix */ /*END SHARED*/ /*SHARED*/ #define DeviceResolution t1_DeviceResolution #define InitSpaces() t1_InitSpaces() #define CopySpace(s) t1_CopySpace(s) #define Xform(o,M) t1_Xform(o,M) #define UnConvert(S,pt,xp,yp) t1_UnConvert(S,pt,xp,yp) #define MatrixMultiply(A,B,C) t1_MMultiply(A,B,C) #define MatrixInvert(A,B) t1_MInvert(A,B) #define PseudoSpace(S,M) t1_PseudoSpace(S,M) #define FindContext(M) t1_FindContext(M) void t1_InitSpaces(); /* initialize pre-defined coordinate spaces */ struct XYspace *t1_CopySpace(); /* duplicate a coordinate space */ struct xobject *t1_Xform(); /* transform object by matrix */ void t1_UnConvert(); /* return user coordinates from device coordinates */ void t1_MMultiply(); /* multiply two matrices */ void t1_MInvert(); /* invert a matrix */ void t1_PseudoSpace(); /* force a coordinate space from a matrix */ int t1_FindContext(); /* return the "context" represented by a matrix */ /*END SHARED*/ /*SHARED*/ /* #define KillSpace(s) Free(s) Note - redefined KillSpace() to check references ! 3-26-91 PNM */ #define KillSpace(s) if ( (--(s->references) == 0) ||\ ( (s->references == 1) && ISPERMANENT(s->flag) ) )\ Free(s) #define ConsumeSpace(s) MAKECONSUME(s,KillSpace(s)) #define UniqueSpace(s) MAKEUNIQUE(s,CopySpace(s)) /*END SHARED*/ /*SHARED*/ typedef SHORT pel; /* integer pel locations */ typedef LONG fractpel; /* fractional pel locations */ #define FRACTBITS 16 /* number of fractional bits in 'fractpel' */ /* We define the following macros to convert from 'fractpel' to 'pel' and vice versa: */ #define TOFRACTPEL(p) (((fractpel)p)<>FRACTBITS) #define FRACTFLOAT (DOUBLE)(1L< #include "types.h" #include "objects.h" #include "spaces.h" #include "paths.h" #include "regions.h" #include "lines.h" /* :h3.Functions Provided to the TYPE1IMAGER User None. */ /* :h3.Functions Provided to Other Modules This module provides the following entry point to other modules: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Macros Provided to Other Modules None. */ /* :h2.StepLine() - Produces Run Ends for a Line After Checks The main work is done by Bresenham(); here we just perform checks and get the line so that its Y direction is always increasing: */ void StepLine(R, x1, y1, x2, y2) register struct region *R; /* region being built */ register fractpel x1,y1; /* starting point */ register fractpel x2,y2; /* ending point */ { register fractpel dy; IfTrace4((LineDebug > 0), ".....StepLine: (%d,%d) to (%d,%d)\n", x1, y1, x2, y2); dy = y2 - y1; /* We execute the "GOING_TO" macro to call back the REGIONS module, if necessary (like if the Y direction of the edge has changed): */ GOING_TO(R, x1, y1, x2, y2, dy); if (dy == 0) return; if (dy < 0) Bresenham(R->edge, x2, y2, x1, y1); else Bresenham(R->edge, x1, y1, x2, y2); return; } /* :h3.Bresenham() - Actually Produces Run Ends This routine runs a Bresenham line-stepping algorithm. See, for example, Newman and Sproul, :hp1/Principles of Interactive Computer Graphics/, pp. 25-27. When we enter this, we are guaranteed that dy is positive. We'd like to work in 8 bit precision, so we'll define some macros and constants to let us do that: */ #define PREC 8 /* we'll keep fraction pels in 8 bit precision */ /* RoundFP() rounds down by 'b' bits: */ #define RoundFP(xy,b) (((xy)+(1<<((b)-1)))>>(b)) /* TruncFP() truncates down by 'b' bits: */ #define TruncFP(xy,b) ((xy)>>(b)) void Bresenham(edgeP,x1,y1,x2,y2) register pel *edgeP; /* pointer to top of list (y == 0) */ register fractpel x1,y1; /* starting point on line */ register fractpel x2,y2; /* ending point on the line (down) */ { register LONG dx,dy; /* change in x and y, in my own precision */ register LONG x,y; /* integer pel starting point */ register int count; /* integer pel delta y */ register LONG d; /* the Bresenham algorithm error term */ x1 = TruncFP(x1, FRACTBITS-PREC); y1 = TruncFP(y1, FRACTBITS-PREC); x2 = TruncFP(x2, FRACTBITS-PREC); y2 = TruncFP(y2, FRACTBITS-PREC); dx = x2 - x1; dy = y2 - y1; /* Find the starting x and y integer pel coordinates: */ x = RoundFP(x1,PREC); y = RoundFP(y1,PREC); edgeP += y; count = RoundFP(y2,PREC) - y; /*------------------------------------------------------------------*/ /* Force dx to be positive so that dfy will be negative */ /* this means that vertical moves will decrease d */ /*------------------------------------------------------------------*/ if (dx<0) { dx = -dx; #define P PREC d=(dy*(x1-(x<>P; #undef P while(--count >= 0 ) { while(d<0) { --x; d += dy; } *(edgeP++) = x; d -= dx; } } else /* positive dx */ { if ( dx == 0 ) { while(--count >= 0 ) { *(edgeP++) = x; } return; } #define P PREC d = (dy*((x<>P; #undef P while(--count >= 0 ) { while(d<0) { ++x; d += dy; } *(edgeP++) = x; d -= dx; } } } t1lib-5.1.2/lib/type1/lines.h0000644000175000001440000000360110733501626014357 0ustar rmzusers/* $XConsortium: lines.h,v 1.2 91/10/10 11:18:23 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /*SHARED*/ #define StepLine(R,x1,y1,x2,y2) t1_StepLine(R,x1,y1,x2,y2) #define Bresenham(e,x1,y1,x2,y2) t1_Bresenham(e,x1,y1,x2,y2) void t1_StepLine(); /* check for special conditions, call Bresenham */ void t1_Bresenham(); /* produce run ends for lines */ /*END SHARED*/ t1lib-5.1.2/lib/type1/spaces_rmz.h0000644000175000001440000001355010733501626015417 0ustar rmzusers/* $XConsortium: spaces.h,v 1.3 91/10/10 11:19:22 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /*SHARED*/ #include "types.h" #define USER t1_User #define IDENTITY t1_Identity #define Context(d,u) t1_Context(d,u) /* #define Transform(o,f1,f2,f3,f4) t1_Transform(o,f1,f2,f3,f4) */ #define Rotate(o,d) t1_Rotate(o,d) /* #define Scale(o,sx,sy) t1_Scale(o,sx,sy) */ #define QuerySpace(S,f1,f2,f3,f4) t1_QuerySpace(S,f1,f2,f3,f4) #define Warp(s1,o,s2) t1_Warp(s1,o,s2) struct XYspace *t1_Context(); /* creates a coordinate space for a device */ struct xobject *t1_Transform(); /* transform an object */ struct xobject *t1_Rotate(); /* rotate an object */ /* struct xobject *t1_Scale(); */ /* scale an object */ struct xobject *t1_Warp(); /* transform like delta of two spaces */ void t1_QuerySpace(); /* returns coordinate space matrix */ /*END SHARED*/ /*SHARED*/ #define DeviceResolution t1_DeviceResolution #define InitSpaces() t1_InitSpaces() #define CopySpace(s) t1_CopySpace(s) #define Xform(o,M) t1_Xform(o,M) #define UnConvert(S,pt,xp,yp) t1_UnConvert(S,pt,xp,yp) #define MatrixMultiply(A,B,C) t1_MMultiply(A,B,C) #define MatrixInvert(A,B) t1_MInvert(A,B) #define PseudoSpace(S,M) t1_PseudoSpace(S,M) #define FindContext(M) t1_FindContext(M) void t1_InitSpaces(); /* initialize pre-defined coordinate spaces */ struct XYspace *t1_CopySpace(); /* duplicate a coordinate space */ struct xobject *t1_Xform(); /* transform object by matrix */ void t1_UnConvert(); /* return user coordinates from device coordinates */ void t1_MMultiply(); /* multiply two matrices */ void t1_MInvert(); /* invert a matrix */ void t1_PseudoSpace(); /* force a coordinate space from a matrix */ int t1_FindContext(); /* return the "context" represented by a matrix */ /*END SHARED*/ /*SHARED*/ /* #define KillSpace(s) Free(s) Note - redefined KillSpace() to check references ! 3-26-91 PNM */ #define KillSpace(s) if ( (--(s->references) == 0) ||\ ( (s->references == 1) && ISPERMANENT(s->flag) ) )\ Free(s) #define ConsumeSpace(s) MAKECONSUME(s,KillSpace(s)) #define UniqueSpace(s) MAKEUNIQUE(s,CopySpace(s)) /*END SHARED*/ /*SHARED*/ typedef SHORT pel; /* integer pel locations */ typedef LONG fractpel; /* fractional pel locations */ #define FRACTBITS 16 /* number of fractional bits in 'fractpel' */ /* We define the following macros to convert from 'fractpel' to 'pel' and vice versa: */ #define TOFRACTPEL(p) (((fractpel)p)<>FRACTBITS) #define FRACTFLOAT (DOUBLE)(1L< FPHALF) return(0); /* not done yet */ else return(1); /* done */ } /* :h3.StepBezierRecurse() - The Recursive Logic in StepBezier() The recursion involves dividing the control polygon into two smaller control polygons by finding the midpoints of the lines. This idea is described in any graphics text book and its simplicity is what caused Bezier to define his curves as he did. If the input region 'R' is NULL, the result is a path that is the 'flattened' curve; otherwise StepBezier returns nothing special. */ static struct segment *StepBezierRecurse(I,xA,yA,xB,yB,xC,yC,xD,yD) struct bezierinfo *I; /* Region under construction or NULL */ fractpel xA,yA; /* A control point */ fractpel xB,yB; /* B control point */ fractpel xC,yC; /* C control point */ fractpel xD,yD; /* D control point */ { if (BezierTerminationTest(xA,yA,xB,yB,xC,yC,xD,yD)) { if (I->region == NULL) return(PathSegment(LINETYPE, xD - xA, yD - yA)); else StepLine(I->region, I->origin.x + xA, I->origin.y + yA, I->origin.x + xD, I->origin.y + yD); } else { fractpel xAB,yAB; fractpel xBC,yBC; fractpel xCD,yCD; fractpel xABC,yABC; fractpel xBCD,yBCD; fractpel xABCD,yABCD; xAB = xA + xB; yAB = yA + yB; xBC = xB + xC; yBC = yB + yC; xCD = xC + xD; yCD = yC + yD; xABC = xAB + xBC; yABC = yAB + yBC; xBCD = xBC + xCD; yBCD = yBC + yCD; xABCD = xABC + xBCD; yABCD = yABC + yBCD; xAB >>= 1; yAB >>= 1; xBC >>= 1; yBC >>= 1; xCD >>= 1; yCD >>= 1; xABC >>= 2; yABC >>= 2; xBCD >>= 2; yBCD >>= 2; xABCD >>= 3; yABCD >>= 3; if (I->region == NULL) { return( Join( StepBezierRecurse(I, xA, yA, xAB, yAB, xABC, yABC, xABCD, yABCD), StepBezierRecurse(I, xABCD, yABCD, xBCD, yBCD, xCD, yCD, xD, yD) ) ); } else { StepBezierRecurse(I, xA, yA, xAB, yAB, xABC, yABC, xABCD, yABCD); StepBezierRecurse(I, xABCD, yABCD, xBCD, yBCD, xCD, yCD, xD, yD); } } /*NOTREACHED*/ /* To make ANSI-C-comnpiler happy (RMz): */ return(0); } /* :h3.TOOBIG() - Macro to Test if a Coordinate is Too Big to Bezier SubDivide Normally Intermediate values in the Bezier subdivision are 8 times bigger than the starting values. If this overflows, a 'long', we are in trouble: */ #define BITS (sizeof(LONG)*8) #define HIGHTEST(p) (((p)>>(BITS-4)) != 0) /* includes sign bit */ #define TOOBIG(xy) ((xy < 0) ? HIGHTEST(-xy) : HIGHTEST(xy)) /* :h3.StepBezier() - Produce Run Ends for a Bezier Curve This is the entry point called from outside the module. */ struct segment *StepBezier(R, xA, yA, xB, yB, xC, yC, xD, yD) struct region *R; /* Region under construction or NULL */ fractpel xA,yA; /* A control point */ fractpel xB,yB; /* B control point */ fractpel xC,yC; /* C control point */ fractpel xD,yD; /* D control point */ { struct bezierinfo Info; Info.region = R; Info.origin.x = xA; Info.origin.y = yA; xB -= xA; xC -= xA; xD -= xA; yB -= yA; yC -= yA; yD -= yA; if ( TOOBIG(xB) || TOOBIG(yB) || TOOBIG(xC) || TOOBIG(yC) || TOOBIG(xD) || TOOBIG(yD) ) abort("Beziers this big not yet supported", 3); return(StepBezierRecurse(&Info, (fractpel) 0, (fractpel) 0, xB, yB, xC, yC, xD, yD)); } t1lib-5.1.2/lib/type1/curves.h0000644000175000001440000000404210733501626014554 0ustar rmzusers/* $XConsortium: curves.h,v 1.2 91/10/10 11:17:59 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /*SHARED*/ #define StepConic(R,xA,yA,xB,yB,xC,yC,r) t1_StepConic(R,xA,yA,xB,yB,xC,yC,r) #define StepBezier(R,xA,yA,xB,yB,xC,yC,xD,yD) t1_StepBezier(R,xA,yA,xB,yB,xC,yC,xD,yD) #define FlattenConic(xM,yM,xC,yC,r) t1_StepConic(NULL,(fractpel)0,(fractpel)0,xM,yM,xC,yC,r) #define FlattenBezier(xB,yB,xC,yC,xD,yD) t1_StepBezier(NULL,(fractpel)0,(fractpel)0,xB,yB,xC,yC,xD,yD) struct segment *t1_StepConic(); struct segment *t1_StepBezier(); /*END SHARED*/ t1lib-5.1.2/lib/type1/fonts.h0000644000175000001440000000354510733501626014405 0ustar rmzusers/* $XConsortium: fonts.h,v 1.2 91/10/10 11:18:09 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* STUB */ #define CopyFont(f) f #define UniqueFont(f) f #define KillFont(f) #define KillText(t) #define CopyText(t) t #define I_DumpText(t) #define CoerceText(t) t #define TextDelta(t,pt) #define XformText(p,s) #define GimeSpace() FALSE #define LibInit() #define InitFonts() #define InitFiles() #define TraceClose() #define FF_PARSE_ERROR -1 t1lib-5.1.2/lib/type1/Xstuff.h0000644000175000001440000000133210733501626014523 0ustar rmzusers#ifndef NULL #define NULL 0 #endif #ifndef XMD_H #define XMD_H 1 #include "types.h" /* * Bitfield suffixes for the protocol structure elements, if you * need them. Note that bitfields are not guarranteed to be signed * (or even unsigned) according to ANSI C. */ #ifdef WORD64 #define B32 :32 #define B16 :16 #else #define B32 #define B16 #endif typedef struct { SHORT leftSideBearing B16, rightSideBearing B16, characterWidth B16, ascent B16, descent B16; USHORT attributes; } xCharInfo; #endif /* XMD_H */ #ifndef _FS_PROTO_H_ #define _FS_PROTO_H_ typedef struct { USHORT x_resolution B16; USHORT y_resolution B16; USHORT point_size B16; } fsResolution; #endif /* _FS_PROTO_H_ */ t1lib-5.1.2/lib/type1/font.h0000644000175000001440000000653310733501626014222 0ustar rmzusers/* $XConsortium: font.h,v 1.8 91/07/19 21:03:49 rws Exp $ */ /*********************************************************** Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, and the Massachusetts Institute of Technology, Cambridge, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital or MIT not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* $NCDId: @(#)font.h,v 1.7 1991/06/24 17:00:23 lemke Exp $ */ #ifndef FONT_H #define FONT_H #ifndef BitmapFormatByteOrderMask #include "fsmasks.h" #endif /* data structures */ typedef struct _Font *FontPtr; typedef struct _FontInfo *FontInfoPtr; typedef struct _FontProp *FontPropPtr; typedef struct _ExtentInfo *ExtentInfoPtr; typedef struct _FontPathElement *FontPathElementPtr; typedef struct _CharInfo *CharInfoPtr; typedef struct _FontNames *FontNamesPtr; typedef struct _FontResolution *FontResolutionPtr; #define NullCharInfo ((CharInfoPtr) 0) #define NullFont ((FontPtr) 0) #define NullFontInfo ((FontInfoPtr) 0) /* draw direction */ #define LeftToRight 0 #define RightToLeft 1 #define BottomToTop 2 #define TopToBottom 3 typedef int DrawDirection; #define NO_SUCH_CHAR -1 #define FontAliasType 0x1000 #define AllocError 80 #define StillWorking 81 #define FontNameAlias 82 #define BadFontName 83 #define Suspended 84 #define Successful 85 #define BadFontPath 86 #define BadCharRange 87 #define BadFontFormat 88 #define FPEResetFailed 89 /* for when an FPE reset won't work */ /* OpenFont flags */ #define FontLoadInfo 0x0001 #define FontLoadProps 0x0002 #define FontLoadMetrics 0x0004 #define FontLoadBitmaps 0x0008 #define FontLoadAll 0x000f #define FontOpenSync 0x0010 /* Query flags */ #define LoadAll 0x1 #define FinishRamge 0x2 #define EightBitFont 0x4 #define SixteenBitFont 0x8 typedef char *closure; extern int StartListFontsWithInfo( /* client, length, pattern, maxNames */ ); extern int ListFonts( /* client, length, pattern, maxNames */ ); extern FontNamesPtr MakeFontNamesRecord( /* size */ ); extern void FreeFontNames(); extern int AddFontNamesName(); extern int FontToFSError(); extern FontResolutionPtr GetClientResolution(); typedef struct _FontPatternCache *FontPatternCachePtr; extern FontPatternCachePtr MakeFontPatternCache (); extern void FreeFontPatternCache (); extern void EmtpyFontPatternCache (); extern void CacheFontPattern (); extern FontPtr FindCachedFontPattern (); extern void RemoveCachedFontPattern (); #endif /* FONT_H */ t1lib-5.1.2/lib/type1/Makefile.in0000644000175000001440000000376510733501626015154 0ustar rmzusers# Makefile.in # # This file is part of the t1lib-package! See documentation and Readme files # of the t1lib-package for copyright restrictions. # # Targets provided: # all (default) # install # clean # # Author: Rainer Menzner (Rainer.Menzner@web.de) # Date: 04/06/1997 # Last modified: 2001-04-01 # # Modified by H.Kakugawa to use libtool LIBTOOL = ../../libtool SHELL = /bin/sh CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ OPTIONS = @OPTIONS@ X_LIBS = @X_LIBS@ TOPSRC = @top_srcdir@ XPM_LIB = -lXpm XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@ LDFLAGS = @LDFLAGS@ LDLIBS = @LDLIBS@ AR = ar rc RANLIB = @RANLIB@ RM = rm -f X_CFLAGS = @X_CFLAGS@ YACC = @YACC@ LEX = @LEX@ LEXLIB = @LEXLIB@ ALLCFLAGS = $(CFLAGS) SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS)' 'OPTIONS=$(OPTIONS)' @SET_MAKE@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ bindir = @bindir@ datadir = @datadir@ libdir = @libdir@ mandir = @mandir@/man1 manext = .1 no_x = @no_x@ # targets to build: OBJS = \ arith.lo \ curves.lo \ fontfcn.lo \ hints.lo \ lines.lo \ objects.lo \ paths.lo \ regions.lo \ scanfont.lo \ spaces.lo \ t1io.lo \ t1snap.lo \ t1stub.lo \ token.lo \ type1.lo \ util.lo .SUFFIXES: .c .o .lo .c.lo: $(LIBTOOL) --mode=compile \ $(CC) -c $(CPPFLAGS) $(CFLAGS) $< .c.o: $(LIBTOOL) --mode=compile \ $(CC) -c $(CPPFLAGS) $(CFLAGS) $< all: $(OBJS) .PHONY: clean dependencies: dummy gcc -MM *.c | sed 's/\.o:/.lo:/g' > .dependencies clean: dummy -$(RM) *.lo *.o .libs/* -$(RM) *~ *.bak \#*\# -rmdir .libs install: dummy dummy: # Dependencies of object files include .dependencies t1lib-5.1.2/lib/type1/token.c0000644000175000001440000006666310733501626014401 0ustar rmzusers/* $XConsortium: token.c,v 1.2 91/10/10 11:19:55 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* Authors: Sig Nin & Carol Thompson IBM Almaden Research Laboratory */ #include "types.h" #include "t1stdio.h" #include "util.h" #include "digit.h" #include "token.h" #include "tokst.h" #include "hdigit.h" /* * ------------------------------------------------------------------- * Globals * ------------------------------------------------------------------- */ extern int T1Getc(F_FILE * ), T1Ungetc( int,F_FILE *); /* These variables are set by the caller */ char *tokenStartP; /* Pointer to token buffer in VM */ char *tokenMaxP; /* Pointer to last byte in buffer + 1 */ /* These variables are set by TOKEN */ int tokenLength; /* Characters in token */ boolean tokenTooLong; /* Token too long for buffer */ int tokenType; /* Type of token identified */ psvalue tokenValue; /* Token value */ /* * ------------------------------------------------------------------- * Private variables * ------------------------------------------------------------------- */ static FILE *inputFileP; /* Current input file */ /* Token */ static char *tokenCharP; /* Pointer to next character in token */ /* * ------------------------------------------------------------------- * Private routines for manipulating numbers * ------------------------------------------------------------------- */ #define Exp10(e) \ ((e) == 0\ ? (DOUBLE)(1.0)\ : (-64 <= (e) && (e) <= 63\ ? Exp10T[(e)+64]\ : P10(e)\ )\ ) static DOUBLE Exp10T[128] = { 1e-64, 1e-63, 1e-62, 1e-61, 1e-60, 1e-59, 1e-58, 1e-57, 1e-56, 1e-55, 1e-54, 1e-53, 1e-52, 1e-51, 1e-50, 1e-49, 1e-48, 1e-47, 1e-46, 1e-45, 1e-44, 1e-43, 1e-42, 1e-41, 1e-40, 1e-39, 1e-38, 1e-37, 1e-36, 1e-35, 1e-34, 1e-33, 1e-32, 1e-31, 1e-30, 1e-29, 1e-28, 1e-27, 1e-26, 1e-25, 1e-24, 1e-23, 1e-22, 1e-21, 1e-20, 1e-19, 1e-18, 1e-17, 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22, 1e23, 1e24, 1e25, 1e26, 1e27, 1e28, 1e29, 1e30, 1e31, 1e32, 1e33, 1e34, 1e35, 1e36, 1e37, 1e38, 1e39, 1e40, 1e41, 1e42, 1e43, 1e44, 1e45, 1e46, 1e47, 1e48, 1e49, 1e50, 1e51, 1e52, 1e53, 1e54, 1e55, 1e56, 1e57, 1e58, 1e59, 1e60, 1e61, 1e62, 1e63 }; static DOUBLE P10(exponent) LONG exponent; { DOUBLE value, power; if (exponent < 0) { power = 0.1; value = (exponent & 1 ? power : 1.0); exponent = -((exponent+1) >> 1); /* portable C for -(exponent/2) */ } else { power = 10.0; value = (exponent & 1 ? power : 1.0); exponent = exponent >> 1; } while(exponent > 0) { power *= power; if (exponent & 1) value *= power; exponent >>= 1; } return(value); } /* * ------------------------------------------------------------------- * Private routines and macros for manipulating the input * ------------------------------------------------------------------- */ /* Get next character from the input -- * */ #define next_ch() (getc(inputFileP)) /* Push a character back into the input -- * * Ungetc of EOF will fail, but that's ok: the next getc will * return EOF. * * NOTE: These macros are presently written to return the character * pushed, or EOF if none was pushed. However, they are not * required to return anything in particular, and callers should * not rely on the returned value. */ #define back_ch(ch) (ungetc(ch, inputFileP)) /* Push a character back into the input if it was not white space. * If it is a carriage return (\r) then check next char for * linefeed and consume them both, otherwise put next char back. * */ #define back_ch_not_white(ch) \ (\ isWHITE_SPACE(ch)\ ? ((ch == '\r')\ ? (((ch = next_ch()) == '\n')\ ? EOF\ : back_ch(ch)\ )\ : EOF\ )\ : back_ch(ch)\ ) /* * ------------------------------------------------------------------- * Private routines and macros for manipulating the token buffer * ------------------------------------------------------------------- */ /* Add a character to the token * ---- use ONLY when you KNOW that this character will * be stored within the token buffer. */ #define save_unsafe_ch(ch) (*tokenCharP++ = ch) /* Add a character to the token, if not too long to fit */ #define save_ch(ch) \ ((tokenCharP < tokenMaxP)\ ? save_unsafe_ch(ch)\ : (tokenTooLong = TRUE)\ ) /* * ------------------------------------------------------------------- * Action Routines * * These routines all * -- take int ch as a parameter * -- return int ch if no token was recognized, DONE otherwise * -- leave the next character in the input, if returning DONE * ------------------------------------------------------------------- */ #define DONE (256) /* Get the next input character */ static int next_char(ch) int ch; { return(next_ch()); } /* Add character to token */ static int add_char(ch) int ch; { save_ch(ch); return(next_ch()); } /* ------------------------------------------------------------------- * Skip white space and comments */ /* Skip white space */ static int skip_space(ch) int ch; { do { ch = next_ch(); } while(isWHITE_SPACE(ch)); return(ch); } /* Skip comments */ static int skip_comment(ch) int ch; { do { ch = next_ch(); } while(isCOMMENT(ch)); return(ch); } /* ------------------------------------------------------------------- * Collect value elements for a number */ /* decimal integer or real number mantissa */ static int m_sign; static LONG m_value; static LONG m_scale; /* real number exponent */ static int e_sign; static LONG e_value; static LONG e_scale; /* radix number */ static LONG r_base; static LONG r_value; static LONG r_scale; static int add_sign(ch) int ch; { m_sign = ch; save_unsafe_ch(ch); return(next_ch()); } static int add_1st_digits(ch) int ch; { m_sign = '+'; return(add_digits(ch)); } static int add_digits(ch) int ch; { LONG value, p_value, scale; int digit; /* On entry, expect m_sign to be set to '+' or '-'; * ch is a decimal digit. * Expect at most one character saved at this point, * a sign. This routine will save up to 10 more * characters without checking the buffer boundary. */ value = ch - '0'; save_unsafe_ch(ch); ch = next_ch(); while(isDECIMAL_DIGIT(ch) && value < (MAX_INTEGER/10)) { value = (value << 3) + (value << 1) + (ch - '0'); save_unsafe_ch(ch); ch = next_ch(); } /* Quick exit for small integers -- * |x| <= 10*((MAX_INTEGER/10)-1)+9 * |x| <= 2,147,483,639 for 32 bit integers */ if (isNUMBER_ENDER(ch)) { back_ch_not_white(ch); tokenValue.integer = (m_sign == '-' ? -value : value); tokenType = TOKEN_INTEGER; return(DONE); } /* Handle additional digits. Beyond the boundary case, * 10*(MAX_INTEGER/10) <= |number| <= MAX_INTEGER * just count the digits: the number is too large to * represent as an integer and will be returned as a real. * The mantissa of a real holds fewer bits than an integer. */ p_value = value; value = (m_sign == '-' ? -value : value); scale = 0; if (isDECIMAL_DIGIT(ch)) { /* Handle the boundary case */ if (p_value == (MAX_INTEGER/10)) { digit = ch - '0'; /* Must handle positive and negative values separately */ /* for 2's complement arithmetic */ if (value > 0) { if (digit <= MAX_INTEGER%10) value = (value << 3) + (value << 1) + digit; else ++scale; /* Too big, just count it */ } else { /* Use positive % operands for portability */ if (digit <= -(MIN_INTEGER+10)%10) value = (value << 3) + (value << 1) - digit; else ++scale; /* Too big, just count it */ } } else ++scale; /* Not boundary case, just count digit */ save_unsafe_ch(ch); ch = next_ch(); /* Continue scanning digits, but can't store them */ while(isDECIMAL_DIGIT(ch)) { ++scale; save_ch(ch); ch = next_ch(); } } /* Continue from here scanning radix integer or real */ m_value = value; m_scale = scale; /* Initialize for possible real */ e_sign = '+'; e_value = 0; e_scale = 0; return(ch); } static int add_1st_decpt(ch) int ch; { m_sign = '+'; return(add_decpt(ch)); } static int add_decpt(ch) int ch; { /* On entry, expect m_sign to be set to '+' or '-' */ m_value = 0; m_scale = 0; save_unsafe_ch(ch); return(next_ch()); } static int add_fraction(ch) int ch; { LONG value, scale; int digit; /* On entry, expect m_value and m_scale to be initialized, * and m_sign to be set to '+' or '-'. Expect m_value and m_sign * to be consistent (this is not checked). */ value = m_value; scale = m_scale; /* Scan leading zeroes */ if (value == 0) { while(ch == '0') { --scale; save_ch(ch); ch = next_ch(); } /* Scan first significant digit */ if (isDECIMAL_DIGIT(ch)) { --scale; value = ch - '0'; value = (m_sign == '-' ? -value : value); save_ch(ch); ch = next_ch(); } else /* no significant digits -- number is zero */ scale = 0; } /* value != 0 || value == 0 && !isDECIMAL_DIGIT(ch) */ /* Scan additional significant digits */ if (isDECIMAL_DIGIT(ch)) { if (value > 0) { while(isDECIMAL_DIGIT(ch) && value < (MAX_INTEGER/10)) { --scale; value = (value << 3) + (value << 1) + (ch - '0'); save_ch(ch); ch = next_ch(); } /* Check boundary case */ if (isDECIMAL_DIGIT(ch) && value == (MAX_INTEGER/10)) { digit = ch - '0'; if (digit <= MAX_INTEGER%10) { --scale; value = (value << 3) + (value << 1) + digit; save_ch(ch); ch = next_ch(); } } } else { /* value < 0 */ while(isDECIMAL_DIGIT(ch) && value > -(-(MIN_INTEGER+10)/10+1)) { /* Use positive / operands for portability */ --scale; value = (value << 3) + (value << 1) - (ch - '0'); save_ch(ch); ch = next_ch(); } /* Check boundary case */ if (isDECIMAL_DIGIT(ch) && value == -(-(MIN_INTEGER+10)/10+1)) { digit = ch - '0'; if (digit <= -(MIN_INTEGER+10)%10) { /* Use positive % operands for portability */ --scale; value = (value << 3) + (value << 1) - digit; save_ch(ch); ch = next_ch(); } } } /* Additional digits can be discarded */ while(isDECIMAL_DIGIT(ch)) { save_ch(ch); ch = next_ch(); } } /* Store results */ m_value = value; m_scale = scale; /* Initialize for possible real */ e_sign = '+'; e_value = 0; e_scale = 0; return(ch); } static int add_e_sign(ch) int ch; { e_sign = ch; save_ch(ch); return(next_ch()); } static int add_exponent(ch) int ch; { LONG value, p_value; LONG scale = 0; int digit; /* On entry, expect e_sign to be set to '+' or '-' */ value = ch - '0'; save_ch(ch); ch = next_ch(); while(isDECIMAL_DIGIT(ch) && value < (MAX_INTEGER/10)) { value = (value << 3) + (value << 1) + (ch - '0'); save_ch(ch); ch = next_ch(); } p_value = value; value = (e_sign == '-' ? -value : value); /* Handle additional digits. Beyond the boundary case, * 10*(MAX_INTEGER/10) <= |number| <= MAX_INTEGER * just count the digits: the number is too large to * represent as an integer. */ if (isDECIMAL_DIGIT(ch)) { /* Examine boundary case */ if (p_value == (MAX_INTEGER/10)) { digit = ch - '0'; /* Must handle positive and negative values separately */ /* for 2's complement arithmetic */ if (value > 0) { if (digit <= MAX_INTEGER%10) value = (value << 3) + (value << 1) + digit; else ++scale; /* Too big, just count it */ } else { /* Use positive % operands for portability */ if (digit <= -(MIN_INTEGER+10)%10) value = (value << 3) + (value << 1) - digit; else ++scale; /* Too big, just count it */ } } else ++scale; /* Not boundary case, just count digit */ save_ch(ch); ch = next_ch(); /* Continue scanning digits, but can't store any more */ while(isDECIMAL_DIGIT(ch)) { ++scale; save_ch(ch); ch = next_ch(); } } /* Store results */ e_value = value; e_scale = scale; return(ch); } static int add_radix(ch) int ch; { if (2 <= m_value && m_value <= 36 && m_scale == 0) { r_base = m_value; save_ch(ch); return(next_ch()); } else { /* Radix invalid, complete a name token */ return(AAH_NAME(ch)); } } static int add_r_digits(ch) int ch; { ULONG value; LONG radix, scale; int digit; /* NOTE: The syntax of a radix number allows only for * values of zero or more. The value will be stored as * a 32 bit integer, which PostScript then interprets * as signed. This means, for example, that the numbers: * * 8#37777777777 * 10#4294967295 * 16#FFFFFFFF * 36#1Z141Z3 * * are all interpreted as -1. This routine implements this * idea explicitly: it accumulates the number's value * as unsigned, then casts it to signed when done. */ /* Expect r_base to be initialized */ radix = r_base; value = 0; scale = 0; /* Scan leading zeroes */ while(ch == '0') { save_ch(ch); ch = next_ch(); } /* Handle first non-zero digit */ if ((digit=digit_value[ch]) < radix) { value = digit; save_ch(ch); ch = next_ch(); /* Add digits until boundary case reached */ while((digit=digit_value[ch]) < radix && value < (MAX_ULONG / radix)) { value = value * radix + digit; save_ch(ch); ch = next_ch(); }; /* Scan remaining digits */ if ((digit=digit_value[ch]) < radix) { /* Examine boundary case --- * radix*(MAX_ULONG/radix) <= number <= MAX_ULONG */ if (value == (MAX_ULONG/radix) && digit <= MAX_ULONG%radix) value = value * radix + digit; else ++scale; /* Continue scanning digits, but can't store them */ save_ch(ch); ch = next_ch(); while(digit_value[ch] < radix) { ++scale; save_ch(ch); ch = next_ch(); } } } /* Store result */ r_value = (LONG) value; /* result is signed */ r_scale = scale; return(ch); } /* ------------------------------------------------------------------- * Complete a number; set token type and done flag. * Put current input character back, if it is not white space. */ /* Done: Radix Number */ static int RADIX_NUMBER(ch) int ch; { back_ch_not_white(ch); if (r_scale == 0) { tokenValue.integer = r_value; tokenType = TOKEN_INTEGER; } else { tokenType = TOKEN_NAME; } return(DONE); } /* Done: Integer */ static int INTEGER(ch) int ch; { back_ch_not_white(ch); if (m_scale == 0) { tokenValue.integer = m_value; tokenType = TOKEN_INTEGER; } else { tokenValue.real = (DOUBLE)(m_value) * Exp10(m_scale); tokenType = TOKEN_REAL; } return(DONE); } /* Done: Real */ static int REAL(ch) int ch; { DOUBLE temp; back_ch_not_white(ch); /* NOTE: ignore e_scale, since e_value alone will cause * exponent overflow if e_scale > 0. */ /* HAZARD: exponent overflow of intermediate result * (e.g., in 370 floating point); this should not be a problem * with IEEE floating point. Reduce exponent overflow hazard by * combining m_scale and e_value first, if they have different signs, * or multiplying m_value and one of the other factors, if both * m_scale and e_value are negative. */ if ((m_scale >= 0 && e_value <= 0) || (m_scale <= 0 && e_value >= 0)) { tokenValue.real = (DOUBLE)(m_value) * Exp10(m_scale + e_value); } else { temp = (DOUBLE)(m_value) * Exp10(m_scale); tokenValue.real = temp * Exp10(e_value); } tokenType = TOKEN_REAL; return(DONE); } /* ------------------------------------------------------------------- * Assemble a hex string; set token type and done flag. */ /* Done: Hex String */ static int HEX_STRING(ch) int ch; { int value; while(TRUE) { /* Process odd digit */ ch = next_ch(); if (!isHEX_DIGIT(ch)) { /* Skip white space */ while(isWHITE_SPACE(ch)) ch = next_ch(); /* Check for terminator */ if (!isHEX_DIGIT(ch)) { break; } } value = digit_value[ch] << 4; /* Process even digit */ ch = next_ch(); if (!isHEX_DIGIT(ch)) { /* Skip white space */ while(isWHITE_SPACE(ch)) ch = next_ch(); /* Check for terminator */ if (!isHEX_DIGIT(ch)) { save_ch(value); break; } } save_ch(value + digit_value[ch]); } /* Classify result, based on why loop ended */ if (ch == '>') tokenType = TOKEN_HEX_STRING; else { /* save the invalid character for error reporting */ save_ch(ch); tokenType = TOKEN_INVALID; } return(DONE); } /* ------------------------------------------------------------------- * Assemble a string; set token type and done flag */ /* Save a backslash-coded character in a string -- * * Store the proper character for special cases * "\b", "\f", "\n", "\r", and "\t". * * Decode and store octal-coded character, up to * three octal digits, "\o", "\oo", and "\ooo". * * The sequence "\" is a line continuation, * so consume both without storing anything. * * The sequence "\" is an error; exit without * storing anything and let the caller handle it. * * For other characters, including the sequences * "\\", "\(", and "\)", simply store the second * character. */ static void save_digraph(ch) int ch; { int value; switch (ch) { case 'b': /* backspace */ ch = '\b'; break; case 'f': /* formfeed */ ch = '\f'; break; case 'n': /* newline */ ch = '\n'; break; case 'r': /* carriage return */ ch = '\r'; break; case 't': /* horizontal tab */ ch = '\t'; break; case '\n': /* line continuation -- consume it */ return; case '\r': /* carriage return -- consume it */ ch = next_ch(); /* look at next character, is it \n? */ if (ch == '\n') return; back_ch(ch); /* if not a line feed, then return it */ return; case EOF: /* end of file -- forget it */ return; default: /* scan up to three octal digits to get value */ if (isOCTAL_DIGIT(ch)) { value = digit_value[ch]; ch = next_ch(); if (isOCTAL_DIGIT(ch)) { value = (value << 3) + digit_value[ch]; ch = next_ch(); if (isOCTAL_DIGIT(ch)) value = (value << 3) + digit_value[ch]; else back_ch(ch); } else back_ch(ch); ch = value; } } /* Found a character to save */ save_ch(ch); } /* Done: String */ static int STRING(ch) int ch; { int nest_level = 1; tokenType = TOKEN_STRING; do { ch = next_ch(); while(!isSTRING_SPECIAL(ch)) { save_ch(ch); ch = next_ch(); }; switch (ch) { case '(': ++nest_level; save_ch(ch); break; case ')': if (--nest_level > 0) save_ch(ch); break; case '\\': save_digraph(next_ch()); break; case '\r': /* All carriage returns (\r) are turned into linefeeds (\n)*/ ch = next_ch(); /* get the next one, is it \n? */ if (ch != '\n') { /* if not, then put it back. */ back_ch(ch); } save_ch('\n'); /* in either case, save a linefeed */ break; case EOF: tokenType = TOKEN_INVALID; /* Unterminated string */ nest_level = 0; break; } } while(nest_level > 0); return(DONE); } /* ------------------------------------------------------------------- * Assemble a name; set token type and done flag. * Put current input character back, if it is not white space. */ /* Done: Name * (Safe version used to complete name tokens that * start out looking like something else). */ static int AAH_NAME(ch) int ch; { do { save_ch(ch); ch = next_ch(); } while(isNAME(ch)); back_ch_not_white(ch); tokenType = TOKEN_NAME; return(DONE); } /* Done: Name */ static int NAME(ch) int ch; { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); while(isNAME(ch)) { save_ch(ch); ch = next_ch(); } } } } } } } back_ch_not_white(ch); tokenType = TOKEN_NAME; return(DONE); } /* Done: Literal Name */ static int LITERAL_NAME(ch) int ch; { if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); while(isNAME(ch)) { save_ch(ch); ch = next_ch(); } } } } } } } back_ch_not_white(ch); tokenType = TOKEN_LITERAL_NAME; return(DONE); } /* Done: immediate Name */ static int IMMED_NAME(ch) int ch; { ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); if (isNAME(ch)) { save_unsafe_ch(ch); ch = next_ch(); while(isNAME(ch)) { save_ch(ch); ch = next_ch(); } } } } } } } back_ch_not_white(ch); tokenType = TOKEN_IMMED_NAME; return(DONE); } /* Done: Name found while looking for something else */ static int OOPS_NAME(ch) int ch; { back_ch_not_white(ch); tokenType = TOKEN_NAME; return(DONE); } /* ------------------------------------------------------------------- * Complete a miscellaneous token; set token type and done flag. */ /* Done: Unmatched Right Angle-Bracket */ static int RIGHT_ANGLE(ch) int ch; { tokenType = TOKEN_RIGHT_ANGLE; return(DONE); } /* Done: Unmatched Right Parenthesis */ static int RIGHT_PAREN(ch) int ch; { tokenType = TOKEN_RIGHT_PAREN; return(DONE); } /* Done: Left Brace */ static int LEFT_BRACE(ch) int ch; { tokenType = TOKEN_LEFT_BRACE; return(DONE); } /* Done: Right Brace */ static int RIGHT_BRACE(ch) int ch; { tokenType = TOKEN_RIGHT_BRACE; return(DONE); } /* Done: Left Bracket */ static int LEFT_BRACKET(ch) int ch; { save_unsafe_ch(ch); tokenType = TOKEN_LEFT_BRACKET; return(DONE); } /* Done: Right Bracket */ static int RIGHT_BRACKET(ch) int ch; { save_unsafe_ch(ch); tokenType = TOKEN_RIGHT_BRACKET; return(DONE); } /* Done: Break */ static int BREAK_SIGNAL(ch) int ch; { tokenType = TOKEN_BREAK; return(DONE); } /* Done: No Token Found */ static int NO_TOKEN(ch) int ch; { tokenType = TOKEN_EOF; return(DONE); } /* * ------------------------------------------------------------------- * scan_token -- scan one token from the input. It uses a simple * finite state machine to recognize token classes. * * The input is from a file. * * On entry -- * * inputP -> input PostScript object, a file. * tokenStartP -> buffer in VM for accumulating the token. * tokenMaxP -> last character in the token buffer * * On exit -- * * tokenLength = number of characters in the token * tokenTooLong = TRUE if the token did not fit in the buffer * tokenType = code for the type of token parsed. * tokenValue = converted value of a numeric token. * * * ------------------------------------------------------------------- */ void scan_token(inputP) psobj *inputP; { int ch; unsigned char *stateP = s0; unsigned char entry; int (*actionP)(); /* Define input source */ inputFileP = inputP->data.fileP; if (inputFileP == NULL) { tokenType = TOKEN_EOF; return; } /* Ensure enough space for most cases * (so we don't have to keep checking) * The length needs to cover the maximum number * of save_unsafe_ch() calls that might be executed. * That number is 11 (a sign and 10 decimal digits, e.g., * when scanning -2147483648), but use MAX_NAME_LEN * in case someone changes that without checking. */ if (vm_free_bytes() < (MAX_NAME_LEN)) { if (!(vm_init())) { tokenLength = 0; tokenTooLong = TRUE; tokenType = TOKEN_NONE; tokenValue.integer = 0; return; } } tokenStartP = vm_next_byte(); /* Reset token */ tokenCharP = tokenStartP; tokenTooLong = FALSE; /* Scan one token */ ch = next_ch(); do { entry = stateP[ch]; stateP = classActionTable[entry].nextStateP; actionP = classActionTable[entry].actionRoutineP; ch = (*actionP)(ch); } while(ch != DONE); /* Return results */ tokenLength = tokenCharP - tokenStartP; } t1lib-5.1.2/lib/type1/token.h0000644000175000001440000000571710733501626014377 0ustar rmzusers/* $XConsortium: token.h,v 1.2 91/10/10 11:19:58 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ #ifndef TOKEN_H #define TOKEN_H /* Special characters */ #define CONTROL_C (3) /* Token type codes */ #define TOKEN_INVALID (-3) #define TOKEN_BREAK (-2) #define TOKEN_EOF (-1) #define TOKEN_NONE (0) #define TOKEN_LEFT_PAREN (1) #define TOKEN_RIGHT_PAREN (2) #define TOKEN_LEFT_ANGLE (3) #define TOKEN_RIGHT_ANGLE (4) #define TOKEN_LEFT_BRACE (5) #define TOKEN_RIGHT_BRACE (6) #define TOKEN_LEFT_BRACKET (7) #define TOKEN_RIGHT_BRACKET (8) #define TOKEN_NAME (9) #define TOKEN_LITERAL_NAME (10) #define TOKEN_INTEGER (11) #define TOKEN_REAL (12) #define TOKEN_RADIX_NUMBER (13) #define TOKEN_HEX_STRING (14) #define TOKEN_STRING (15) #define TOKEN_IMMED_NAME (16) /* Token routines */ extern void scan_token(); /* * ------------------------------------------------------------------------- * Globals shared -- (everyone else KEEP YOUR MITTS OFF THEM!) * ------------------------------------------------------------------------- */ /* These variables are set by the caller */ extern char *tokenStartP; /* Pointer to token buffer in VM */ extern char *tokenMaxP; /* Pointer to end of VM we may use + 1 */ /* These variables are set by P_TOKEN */ extern int tokenLength; /* Characters in token */ extern boolean tokenTooLong; /* Token too long for space available */ extern int tokenType; /* Type of token identified */ extern psvalue tokenValue; /* Token value */ #endif /* TOKEN_H */ t1lib-5.1.2/lib/type1/tokst.h0000644000175000001440000007231010733501626014414 0ustar rmzusers/* $XConsortium: tokst.h,v 1.2 91/10/10 11:20:00 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* -------------------------------------- */ /* --- MACHINE GENERATED, DO NOT EDIT --- */ /* -------------------------------------- */ #ifndef TOKST #define TOKST 1 /* * State Index Tables -- * * These tables map the input character to the * proper entry in the Class Action Table. * There is one table for each state. * */ #define s0 (si0+2) static unsigned char si0[258] = { 0x10,0x11, 0x02,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x02,0x02,0x0F,0x0F,0x02,0x0F,0x0F, 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, 0x02,0x0F,0x0F,0x0F,0x0F,0x03,0x0F,0x0F,0x05,0x0B,0x0F,0x0D,0x0F,0x0D,0x0E,0x04, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x0F,0x0F,0x08,0x0F,0x0C,0x0F, 0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0A,0x0F,0x0F, 0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x0F,0x09,0x0F,0x0F, 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F }; #define s1 (si1+2) static unsigned char si1[258] = { 0x14,0x15, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13 }; #define s2 (si2+2) static unsigned char si2[258] = { 0x1B,0x1C, 0x16,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x16,0x16,0x1A,0x1A,0x16,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, 0x16,0x1A,0x1A,0x1A,0x1A,0x17,0x1A,0x1A,0x17,0x17,0x1A,0x1A,0x1A,0x1A,0x19,0x17, 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1A,0x1A,0x17,0x1A,0x17,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x17,0x1A,0x17,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x17,0x1A,0x17,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A, 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A }; #define s3 (si3+2) static unsigned char si3[258] = { 0x23,0x24, 0x1D,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1D,0x1D,0x22,0x22,0x1D,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x1D,0x22,0x22,0x20,0x22,0x1E,0x22,0x22,0x1E,0x1E,0x22,0x22,0x22,0x22,0x1F,0x1E, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1E,0x22,0x1E,0x22, 0x22,0x22,0x22,0x22,0x22,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1E,0x22,0x1E,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1E,0x22,0x1E,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22 }; #define s4 (si4+2) static unsigned char si4[258] = { 0x29,0x2A, 0x25,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x25,0x25,0x28,0x28,0x25,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, 0x25,0x28,0x28,0x28,0x28,0x26,0x28,0x28,0x26,0x26,0x28,0x28,0x28,0x28,0x28,0x26, 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x26,0x28,0x26,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x26,0x28,0x26,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x26,0x28,0x26,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28 }; #define s5 (si5+2) static unsigned char si5[258] = { 0x30,0x31, 0x2B,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2B,0x2B,0x2F,0x2F,0x2B,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F, 0x2B,0x2F,0x2F,0x2F,0x2F,0x2C,0x2F,0x2F,0x2C,0x2C,0x2F,0x2F,0x2F,0x2F,0x2F,0x2C, 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2C,0x2F,0x2C,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2C,0x2F,0x2C,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2C,0x2F,0x2C,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F, 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F }; #define s6 (si6+2) static unsigned char si6[258] = { 0x36,0x37, 0x32,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x32,0x32,0x35,0x35,0x32,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x32,0x35,0x35,0x35,0x35,0x33,0x35,0x35,0x33,0x33,0x35,0x35,0x35,0x35,0x35,0x33, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x33,0x35,0x33,0x35, 0x35,0x35,0x35,0x35,0x35,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x33,0x35,0x33,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x33,0x35,0x33,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35 }; #define s7 (si7+2) static unsigned char si7[258] = { 0x3D,0x3E, 0x38,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x38,0x38,0x3C,0x3C,0x38,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, 0x38,0x3C,0x3C,0x3C,0x3C,0x39,0x3C,0x3C,0x39,0x39,0x3C,0x3A,0x3C,0x3A,0x3C,0x39, 0x3B,0x3B,0x3B,0x3B,0x3B,0x3B,0x3B,0x3B,0x3B,0x3B,0x3C,0x3C,0x39,0x3C,0x39,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x39,0x3C,0x39,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x39,0x3C,0x39,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C }; #define s8 (si8+2) static unsigned char si8[258] = { 0x43,0x44, 0x3F,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3F,0x3F,0x42,0x42,0x3F,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x3F,0x42,0x42,0x42,0x42,0x40,0x42,0x42,0x40,0x40,0x42,0x42,0x42,0x42,0x42,0x40, 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x40,0x42,0x40,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x42,0x40,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x42,0x40,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42 }; #define s9 (si9+2) static unsigned char si9[258] = { 0x48,0x49, 0x45,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x45,0x45,0x47,0x47,0x45,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, 0x45,0x47,0x47,0x47,0x47,0x46,0x47,0x47,0x46,0x46,0x47,0x47,0x47,0x47,0x47,0x46, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x47,0x46,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x47,0x46,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x47,0x46,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47 }; #define s10 (si10+2) static unsigned char si10[258] = { 0x4E,0x4F, 0x4A,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4A,0x4A,0x4D,0x4D,0x4A,0x4D,0x4D, 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D, 0x4A,0x4D,0x4D,0x4D,0x4D,0x4B,0x4D,0x4D,0x4B,0x4B,0x4D,0x4D,0x4D,0x4D,0x4D,0x4B, 0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4D,0x4D,0x4B,0x4D,0x4B,0x4D, 0x4D,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C, 0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4B,0x4D,0x4B,0x4D,0x4D, 0x4D,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C, 0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4C,0x4B,0x4D,0x4B,0x4D,0x4D, 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D, 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D, 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D, 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D, 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D, 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D, 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D, 0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D,0x4D }; #define s11 (si11+2) static unsigned char si11[258] = { 0x53,0x54, 0x50,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x50,0x50,0x52,0x52,0x50,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x50,0x52,0x52,0x52,0x52,0x51,0x52,0x52,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x51, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x51,0x52,0x51,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x51,0x52,0x51,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x51,0x52,0x51,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52 }; /* * Class Action Table -- * * The entries in the Class Action Table indicate the * action routine to be called, and the next state to * enter, for each relevant character class in each. * state. There are several entries for each state. * */ static int AAH_NAME(); static int BREAK_SIGNAL(); static int HEX_STRING(); static int IMMED_NAME(); static int INTEGER(); static int LEFT_BRACE(); static int LEFT_BRACKET(); static int LITERAL_NAME(); static int NAME(); static int NO_TOKEN(); static int OOPS_NAME(); static int RADIX_NUMBER(); static int REAL(); static int RIGHT_ANGLE(); static int RIGHT_BRACE(); static int RIGHT_BRACKET(); static int RIGHT_PAREN(); static int STRING(); static int add_1st_decpt(); static int add_1st_digits(); static int add_char(); static int add_decpt(); static int add_digits(); static int add_e_sign(); static int add_exponent(); static int add_fraction(); static int add_r_digits(); static int add_radix(); static int add_sign(); static int next_char(); static int skip_comment(); static int skip_space(); static struct cat { int (*actionRoutineP)(); unsigned char *nextStateP; } classActionTable[] = { /* s0: Classify initial character */ /* 00 ALPHA */ {NAME, s0}, /* executable name */ /* 01 DIGIT */ {add_1st_digits, s3}, /* number? */ /* 02 WHITE_SPACE */ {skip_space, s0}, /* skip white space */ /* 03 PERCENT */ {skip_comment, s0}, /* comment? */ /* 04 SLASH */ {next_char, s1}, /* literal or imm name */ /* 05 LEFT_PAREN */ {STRING, s0}, /* string */ /* 06 LEFT_BRACE */ {LEFT_BRACE, s0}, /* begin procedure body */ /* 07 LEFT_BRACKET */ {LEFT_BRACKET, s0}, /* begin array */ /* 08 LEFT_ANGLE */ {HEX_STRING, s0}, /* hex string? */ /* 09 RIGHT_BRACE */ {RIGHT_BRACE, s0}, /* end procedure body */ /* 0A RIGHT_BRACKET */ {RIGHT_BRACKET, s0}, /* end array */ /* 0B RIGHT_PAREN */ {RIGHT_PAREN, s0}, /* unmatched right paren */ /* 0C RIGHT_ANGLE */ {RIGHT_ANGLE, s0}, /* unmatched right angle */ /* 0D SIGN */ {add_sign, s2}, /* signed number? */ /* 0E DECIMAL_POINT */ {add_1st_decpt, s4}, /* real number? */ /* 0F ANY */ {NAME, s0}, /* executable name */ /* 10 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 11 EOF */ {NO_TOKEN, s0}, /* no token found */ /* s1: Further classify a '/' */ /* 12 SLASH */ {IMMED_NAME, s0}, /* immediate name */ /* 13 ANY */ {LITERAL_NAME, s0}, /* literal name */ /* 14 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 15 EOF */ {OOPS_NAME, s0}, /* isolated sign */ /* s2: sign */ /* 16 WHITE_SPACE */ {OOPS_NAME, s0}, /* isolated sign */ /* 17 SPECIAL */ {OOPS_NAME, s0}, /* isolated sign */ /* 18 DIGIT */ {add_digits, s3}, /* number? */ /* 19 DECIMAL_POINT */ {add_decpt, s4}, /* real number? */ /* 1A ANY */ {NAME, s0}, /* executable name */ /* 1B BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 1C EOF */ {OOPS_NAME, s0}, /* isolated sign */ /* s3: sign? digit+ */ /* 1D WHITE_SPACE */ {INTEGER, s0}, /* n-digit integer */ /* 1E SPECIAL */ {INTEGER, s0}, /* n-digit integer */ /* 1F DECIMAL_POINT */ {add_char, s5}, /* real number? */ /* 20 POUND */ {add_radix, s10}, /* radix number? */ /* 21 eE */ {add_char, s7}, /* real with exponent? */ /* 22 ANY */ {AAH_NAME, s0}, /* executable name */ /* 23 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 24 EOF */ {INTEGER, s0}, /* n-digit integer */ /* s4: sign? . */ /* 25 WHITE_SPACE */ {OOPS_NAME, s0}, /* isolated +. or -. */ /* 26 SPECIAL */ {OOPS_NAME, s0}, /* isolated +. or -. */ /* 27 DIGIT */ {add_fraction, s6}, /* number? */ /* 28 ANY */ {NAME, s0}, /* executable name */ /* 29 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 2A EOF */ {OOPS_NAME, s0}, /* isolated +. or -. */ /* s5: sign? digit+ . */ /* 2B WHITE_SPACE */ {REAL, s0}, /* real with fraction */ /* 2C SPECIAL */ {REAL, s0}, /* real with fraction */ /* 2D eE */ {add_char, s7}, /* real with exponent? */ /* 2E DIGIT */ {add_fraction, s6}, /* number? */ /* 2F ANY */ {AAH_NAME, s0}, /* executable name */ /* 30 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 31 EOF */ {REAL, s0}, /* real with fraction */ /* s6: sign? (digit+ . digit+) | (. digit+) */ /* 32 WHITE_SPACE */ {REAL, s0}, /* real with fraction */ /* 33 SPECIAL */ {REAL, s0}, /* real with fraction */ /* 34 eE */ {add_char, s7}, /* real with exponent? */ /* 35 ANY */ {AAH_NAME, s0}, /* executable name */ /* 36 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 37 EOF */ {REAL, s0}, /* real with fraction */ /* s7: sign? ((digit+ (. digit*)?) | (. digit+)) Ee */ /* 38 WHITE_SPACE */ {OOPS_NAME, s0}, /* invalid real number */ /* 39 SPECIAL */ {OOPS_NAME, s0}, /* invalid real number */ /* 3A SIGN */ {add_e_sign, s8}, /* real w signed exponent? */ /* 3B DIGIT */ {add_exponent, s9}, /* real w exponent ? */ /* 3C ANY */ {AAH_NAME, s0}, /* executable name */ /* 3D BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 3E EOF */ {OOPS_NAME, s0}, /* invalid real number */ /* s8: sign? (digit+ (. digit*)? | (digit* . digit+) Ee sign */ /* 3F WHITE_SPACE */ {OOPS_NAME, s0}, /* invalid real number */ /* 40 SPECIAL */ {OOPS_NAME, s0}, /* invalid real number */ /* 41 DIGIT */ {add_exponent, s9}, /* real w exponent? */ /* 42 ANY */ {AAH_NAME, s0}, /* executable name */ /* 43 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 44 EOF */ {OOPS_NAME, s0}, /* invalid real number */ /* s9: sign? (digit+ (. digit*)? | (digit* . digit+) Ee sign? digit+ */ /* 45 WHITE_SPACE */ {REAL, s0}, /* real w exponent */ /* 46 SPECIAL */ {REAL, s0}, /* real w exponent */ /* 47 ANY */ {AAH_NAME, s0}, /* executable name */ /* 48 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 49 EOF */ {REAL, s0}, /* real w exponent */ /* s10: digit+ # */ /* 4A WHITE_SPACE */ {OOPS_NAME, s0}, /* invalid radix number */ /* 4B SPECIAL */ {OOPS_NAME, s0}, /* invalid radix number */ /* 4C R_DIGIT */ {add_r_digits, s11}, /* radix number? */ /* 4D ANY */ {AAH_NAME, s0}, /* executable name */ /* 4E BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 4F EOF */ {OOPS_NAME, s0}, /* invalid radix number */ /* s11: digit+ # r_digit+ */ /* 50 WHITE_SPACE */ {RADIX_NUMBER, s0}, /* radix number */ /* 51 SPECIAL */ {RADIX_NUMBER, s0}, /* radix number */ /* 52 ANY */ {AAH_NAME, s0}, /* executable name */ /* 53 BREAK */ {BREAK_SIGNAL, s0}, /* break signalled */ /* 54 EOF */ {RADIX_NUMBER, s0} /* radix number */ }; /* * Character Classification Tables -- * * The entries in the Character Classification Tables * map character codes to character classes. The * tables contains one entry per code. The bits in * each entry indicate which classes the character * code belongs to. * * The macros 'isInCLASS(ch)' generate code to test * whether 'ch' is a character in 'CLASS'. * */ /* Membership macros for classes defined in table 1 ... */ #define isRADIX_DIGIT(c) ((isInP1[c] & 0x80) != 0) #define isHEX_DIGIT(c) ((isInP1[c] & 0x40) != 0) #define isDECIMAL_DIGIT(c) ((isInP1[c] & 0x10) != 0) #define isOCTAL_DIGIT(c) ((isInP1[c] & 0x20) != 0) /* Membership macros for classes defined in table 2 ... */ #define isWHITE_SPACE(c) ((isInP2[c] & 0x80) != 0) #define isCOMMENT(c) ((isInP2[c] & 0x40) != 0) #define isNAME(c) ((isInP2[c] & 0x20) != 0) #define isSTRING_SPECIAL(c) ((isInP2[c] & 0x10) != 0) #define isNUMBER_ENDER(c) ((isInP2[c] & 0x08) != 0) #define isInP1 (isInT1+2) static unsigned char isInT1[258] = { 0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xD0,0xD0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; #define isInP2 (isInT2+2) static unsigned char isInT2[258] = { 0x18,0x18, 0xC8,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xC8,0x88,0x60,0x60,0x98,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, 0xC8,0x60,0x60,0x60,0x60,0x48,0x60,0x60,0x58,0x58,0x60,0x60,0x60,0x60,0x60,0x48, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x48,0x60,0x48,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x48,0x70,0x48,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x48,0x60,0x48,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60 }; #endif t1lib-5.1.2/lib/type1/t1stdio.h0000644000175000001440000000601610733501626014637 0ustar rmzusers/* $XConsortium: t1stdio.h,v 1.4 91/10/10 11:19:49 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* T1IO FILE structure and related stuff */ #include "types.h" #undef getc #undef fclose #undef ungetc #undef fgetc #undef fread #undef feof #undef ferror #undef FILE #define FILE F_FILE typedef unsigned char F_char; typedef struct F_FILE { F_char *b_base; /* Pointer to beginning of buffer */ LONG b_size; /* Size of the buffer */ F_char *b_ptr; /* Pointer to next char in buffer */ LONG b_cnt; /* Number of chars remaining in buffer */ F_char flags; /* other flags; != 0 means getc must call fgetc */ F_char ungotc; /* Place for ungotten char; flag set if present */ short error; /* error status */ int fd; /* underlying file descriptor */ } F_FILE; /* defines for flags */ #define UNGOTTENC (0x01) #define FIOEOF (0x80) #define FIOERROR (0x40) #ifndef NULL #define NULL 0 /* null pointer */ #endif #ifndef EOF #define EOF (-1) /* end of file */ #endif #define F_BUFSIZ (512) #define getc(f) \ ( \ ( ((f)->b_cnt > 0) && ((f)->flags == 0) ) ? \ ( (f)->b_cnt--, (unsigned int)*( (f)->b_ptr++ ) ) : \ T1Getc(f) \ ) extern FILE *T1Open(), *T1eexec(); extern int T1Close(F_FILE *), T1Ungetc(int,F_FILE *), T1Read(); #define fclose(f) T1Close(f) #define fopen(name,mode) T1Open(name,mode) #define ungetc(c,f) T1Ungetc(c,f) #define fgetc(f) T1Getc(f) #define fread(bufP,size,n,f) T1Read(bufP,size,n,f) #define feof(f) (((f)->flags & FIOEOF) && ((f)->b_cnt==0)) #define ferror(f) (((f)->flags & FIOERROR)?(f)->error:0) t1lib-5.1.2/lib/type1/t1io.c0000644000175000001440000004211410733501626014116 0ustar rmzusers/* $XConsortium: t1io.c,v 1.4 91/10/10 11:19:41 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Carol H. Thompson IBM Almaden Research Center */ /******************************************************************* * I/O package for Type 1 font reading ********************************************************************/ #ifndef STATIC #define STATIC static #endif #if defined(_MSC_VER) # include # include # include #else # include #endif #include #include #include #include #include #include "t1stdio.h" #include "t1hdigit.h" /* we define this to switch to decrypt-debugging mode. The stream of decrypted bytes will be written to stdout! This contains binary charstring data */ /* #define DEBUG_DECRYPTION */ /* #define DEBUG_PFB_BLOCKS */ /* Constants and variables used in the decryption */ #define c1 ((unsigned short)52845) #define c2 ((unsigned short)22719) static unsigned short r; static int asc, Decrypt; static int extrach; static int haveextrach; static int starthex80=0; static long pfbblocklen=0; static long accu=0; static unsigned long bytecnt=0; static int eexec_startOK=0; static int eexec_endOK=0; static int in_eexec=0; /* Our single FILE structure and buffer for this package */ STATIC F_FILE TheFile; STATIC unsigned char TheBuffer[F_BUFSIZ]; /* Our routines */ F_FILE *T1Open(), *T1eexec(); int T1Close(F_FILE *); int T1Read(), T1Getc(F_FILE *), T1Ungetc(int,F_FILE *); void T1io_reset(void); STATIC int T1Decrypt(), T1Fill(); /* -------------------------------------------------------------- */ /*ARGSUSED*/ F_FILE *T1Open(fn, mode) char *fn; /* Pointer to filename */ char *mode; /* Pointer to open mode string */ { F_FILE *of = &TheFile; char c; Decrypt = 0; eexec_startOK=0; eexec_endOK=0; #ifndef O_BINARY # define O_BINARY 0x0 #endif /* We know we are only reading */ if ((of->fd=open(fn, O_RDONLY | O_BINARY)) < 0) return NULL; /* We check for pfa/pfb file */ if (read( of->fd, &c, 1)!=1) { close( of->fd); return(NULL); } else if (c==(char)0x80){ starthex80=1; } lseek( of->fd, 0, SEEK_SET); /* Initialize the buffer information of our file descriptor */ of->b_base = TheBuffer; of->b_size = F_BUFSIZ; of->b_ptr = NULL; of->b_cnt = 0; of->flags = 0; of->error = 0; haveextrach = 0; return &TheFile; } /* end Open */ /* -------------------------------------------------------------- */ int T1Getc(f) /* Read one character */ F_FILE *f; /* Stream descriptor */ { if (f->b_base == NULL) return EOF; /* already closed */ if (f->flags & UNGOTTENC) { /* there is an ungotten c */ f->flags &= ~UNGOTTENC; return (int) f->ungotc; } if (f->b_cnt == 0) /* Buffer needs to be (re)filled */ f->b_cnt = T1Fill(f); if (f->b_cnt > 0) return (f->b_cnt--, (int) *(f->b_ptr++)); else { f->flags |= FIOEOF; return EOF; } } /* end Getc */ /* This function is added by RMz: T1Gets(): Read a line of the file and save it to string. At most, (size-1) bytes are read. The user *must* ensure (by making size large enough) that "eexec" does not get split between two calls because in this case, eexec-decryption does not set in. ------------------------------------------------------------ */ int T1Gets(char *string, int size, F_FILE *f) /* Read a line */ { int i=0; char *eexecP; if (string == NULL) { return( i); } if (f->b_base == NULL) return( i); /* already closed */ if (size<2) /* no bytes to be read. For size = 1 we only had room for the \0-character. */ return( i); if (f->flags & UNGOTTENC) { /* there is an ungotten c */ f->flags &= ~UNGOTTENC; string[i++]=f->ungotc; size--; } size--; /* we have to leave room for one \0-character */ while ( size>0) { if (f->b_cnt == 0) { /* Buffer needs to be (re)filled */ f->b_cnt = T1Fill(f); } if (f->b_cnt == 0) { /* no more bytes available. Put \0-char and return. */ if ( i==0) { /* we did not already store one single char to string */ f->flags |= FIOEOF; return( i); } else { f->flags |= FIOEOF; string[i]='\0'; return( i); } } /* do not skip white space as required by Adobe spec, because I have found fonts where the first encrypted byte was of white space type. */ if ( (eexec_startOK==1) && (eexec_endOK==1)) { T1eexec( f); eexec_startOK=0; eexec_endOK=0; in_eexec=1; /* we are now in the encrypted portion. */ } string[i]=*(f->b_ptr); /* Check whether eexec appears in the string just setup */ if ( (Decrypt==0) && ((eexecP=strstr( string, "eexec"))!=NULL) ) { /* if eexec is an isolated token, start decryption */ if ( (eexec_startOK==1) && (isspace( (int)string[i])!=0) ) { eexec_endOK=1; } if ( (eexec_startOK==0) && (isspace( (int)string[i-5])!=0) ) { eexec_startOK=1; } } i++; /* Under UNIX, '\n' is the accepted newline. For pfb-files it is also common to use '\r' as the newline indicator. I have, however, never seen a pfb-file which uses the sequence '\r''\n' as a newline indicator, as known from DOS. So we don't take care for this case and simply map both single characters \r and \n into \n. Of course, this can only be done in the ASCII section of the font. 2002-10-26: Well, life life is teaching me better: There *are* fonts out there, ASCII encoded pfa's, that use the crappy DOSian 0x0d 0x0a sequence as line separation. In order to make it still work, we absorb the byte 0x0a. Failure to do so result in decryption failure. The workaround is implemented T1eexec(): */ if ( *(f->b_ptr)=='\n' || *(f->b_ptr)=='\r') { if (in_eexec==0) string[i-1]='\n'; string[i]='\0'; f->b_cnt--; f->b_ptr++; return( i); } f->b_cnt--; f->b_ptr++; size--; } /* end of while (size>0) */ string[i]='\0'; /* finish string */ return( i); } /* end of T1Gets() */ int T1GetDecrypt( void) { return( in_eexec); } /* Return the optional contents after the final cleartomark token. There might appear some PostScript code which is not important for t1lib, but which becomes important if subsetted fonts are embedded in PostScript files. */ int T1GetTrailer(char *string, int size, F_FILE *f) { unsigned long off_save; char *buf; char *ctmP; int i=0, j; int datasize; int len; datasize=size; off_save=lseek( f->fd, 0, SEEK_CUR); if ((buf=(char *)malloc( size+1))==NULL ) { return( -1); } lseek( f->fd, -size, SEEK_END); read(f->fd, buf, size); buf[size]='\0'; /* to be ablo perform a strstr() on this memory */ i=datasize; j=datasize-11; /* length of "cleartomark" plus terminating white space or newline */ while ((j--)>-1) { if ((unsigned char)buf[i]==0x80) { datasize=i; /* we skip the segment marker of pfb-files */ } if ((ctmP=strstr( &(buf[j]), "cleartomark"))!=NULL) { /* buf[i-1] now is the first character after cleartomark. Advance now to the next non white character of EOF. */ len = datasize - i; while ( (isspace( (int)(buf[i-1])) != 0) && (i < datasize) ) { ++i; } memcpy( string, &(buf[i-1]), len); string[len]='\0'; lseek( f->fd, off_save, SEEK_SET); free( buf); return len; } i--; } lseek( f->fd, off_save, SEEK_SET); free( buf); return( -1); } unsigned long T1GetFileSize( F_FILE *f) { unsigned long off_save; unsigned long filesize; off_save=lseek( f->fd, 0, SEEK_CUR); filesize=lseek( f->fd, 0, SEEK_END); lseek( f->fd, off_save, SEEK_SET); return( filesize); } /* -------------------------------------------------------------- */ int T1Ungetc(c, f) /* Put back one character */ int c; F_FILE *f; /* Stream descriptor */ { if (c != EOF) { f->ungotc = c; f->flags |= UNGOTTENC; /* set flag */ f->flags &= ~FIOEOF; /* reset EOF */ } return c; } /* end Ungetc */ /* -------------------------------------------------------------- */ int T1Read(buffP, size, n, f) /* Read n items into caller's buffer */ char *buffP; /* Buffer to be filled */ int size; /* Size of each item */ int n; /* Number of items to read */ F_FILE *f; /* Stream descriptor */ { int bytelen, cnt, i; F_char *p = (F_char *)buffP; int icnt; /* Number of characters to read */ if (f->b_base == NULL) return 0; /* closed */ icnt = (size!=1)?n*size:n; /* Number of bytes we want */ if (f->flags & UNGOTTENC) { /* there is an ungotten c */ f->flags &= ~UNGOTTENC; *(p++) = f->ungotc; icnt--; bytelen = 1; } else bytelen = 0; while (icnt > 0) { /* First use any bytes we have buffered in the stream buffer */ if ((cnt=f->b_cnt) > 0) { if (cnt > icnt) cnt = icnt; for (i=0; ib_ptr++); f->b_cnt -= cnt; icnt -= cnt; bytelen += cnt; } if ((icnt == 0) || (f->flags & FIOEOF)) break; f->b_cnt = T1Fill(f); } return ((size!=1)?bytelen/size:bytelen); } /* end Read */ /* -------------------------------------------------------------- */ int T1Close(f) /* Close the file */ F_FILE *f; /* Stream descriptor */ { if (f->b_base == NULL) return 0; /* already closed */ f->b_base = NULL; /* no valid stream */ return close(f->fd); } /* end Close */ /* -------------------------------------------------------------- */ F_FILE *T1eexec(f) /* Initialization */ F_FILE *f; /* Stream descriptor */ { int i; int H; unsigned char *p; int testchar; unsigned char randomP[8]; r = 55665; /* initial key */ asc = 1; /* indicate ASCII form */ #ifdef DEBUG_DECRYPTION printf("T1eexec(1): first 20 bytes=%.20s, b_cnt=%d\n", f->b_ptr, f->b_cnt); #endif /* As the very first action we check the first byte against 0x0a. This mmight happen in context with the T1gets() function for pfa files that use DOSian linefeed style. If that character appears here, we absorb it (see also T1Gets()!). */ if ( ( testchar = T1Getc( f)) != 0x0a ) T1Ungetc( testchar, f); /* Consume the 4 random bytes, determining if we are also to ASCIIDecodeHex as we process our input. (See pages 63-64 of the Adobe Type 1 Font Format book.) */ /* Skipping over initial white space chars has been removed since it could lead to unprocessable pfb-fonts if accindentally the first cipher text byte was of the class HWHITE_SPACE. Instead, we just read ahead, this should suffice for any Type 1 font program. (RMz, 08/02/1998) */ /* If ASCII, the next 7 chars are guaranteed consecutive */ randomP[0] = getc(f); /* store first non white space char */ fread(randomP+1, 1, 3, f); /* read 3 more, for a total of 4 */ /* store first four chars */ for (i=0,p=randomP; i<4; i++) { /* Check 4 valid ASCIIEncode chars */ if (HighHexP[*p++] > LAST_HDIGIT) { /* non-ASCII byte */ asc = 0; break; } } if (asc) { /* ASCII form, convert first eight bytes to binary */ fread(randomP+4, 1, 4, f); /* Need four more */ for (i=0,p=randomP; i<4; i++) { /* Convert */ H = HighHexP[*p++]; randomP[i] = H | LowHexP[*p++]; } } /* Adjust our key */ for (i=0,p=randomP; i<4; i++) { r = (*p++ + r) * c1 + c2; } /* Decrypt the remaining buffered bytes */ f->b_cnt = T1Decrypt(f->b_ptr, f->b_cnt); Decrypt = 1; #ifdef DEBUG_DECRYPTION printf("T1eexec(2): first 120 bytes=%.120s, b_cnt=%d\n", f->b_ptr, f->b_cnt); #endif return (feof(f))?NULL:f; } /* end eexec */ /* -------------------------------------------------------------- */ STATIC int T1Decrypt(p, len) unsigned char *p; int len; { int n; int H=0, L=0; unsigned char *inp = p; unsigned char *tblP; #ifdef DEBUG_DECRYPTION printf("T1_Decrypt(): called with len=%d\n",len); #endif if (asc) { if (haveextrach) { H = extrach; tblP = LowHexP; } else tblP = HighHexP; for (n=0; len>0; len--) { L = tblP[*inp++]; #ifdef DEBUG_DECRYPTION printf("L=0x%X, %d, inp=%c (%d)\n", L,L, *(inp-1), *(inp-1)); #endif if (L == HWHITE_SPACE) { #ifdef DEBUG_DECRYPTION printf("continue\n"); #endif continue; } if (L > LAST_HDIGIT) { #ifdef DEBUG_DECRYPTION printf("L=0x%X, --> break\n", L); #endif break; } if (tblP == HighHexP) { /* Got first hexit value */ H = L; tblP = LowHexP; } else { /* Got second hexit value; compute value and store it */ n++; tblP = HighHexP; H |= L; /* H is an int, 0 <= H <= 255, so all of this will work */ *p++ = H ^ (r >> 8); r = (H + r) * c1 + c2; } } if (tblP != HighHexP) { /* We had an odd number of hexits */ extrach = H; haveextrach = 1; } else haveextrach = 0; #ifdef DEBUG_DECRYPTION printf("T1_Decrypt(): Decrypted %d bytes\n",n); #endif return n; } else { for (n = len; n>0; n--) { H = *inp++; *p++ = H ^ (r >> 8); r = (H + r) * c1 + c2; } return len; } } /* end Decrypt */ /* -------------------------------------------------------------- */ /* This function has been adapted to support pfb-files with multiple data segments */ STATIC int T1Fill(f) /* Refill stream buffer */ F_FILE *f; /* Stream descriptor */ { int rc,i; static unsigned char hdr_buf[6]; if (starthex80){ /* we have a pfb-file -> be aware of pfb-blocks */ if ( pfbblocklen-accu >= F_BUFSIZ){ /* fill the buffer */ rc = read(f->fd, f->b_base, F_BUFSIZ); bytecnt+=rc; accu +=rc; } else{ if (pfbblocklen-accu>0){ /* read the remaining of the pfb-block ... */ rc = read(f->fd, f->b_base, pfbblocklen-accu); bytecnt +=rc; accu +=rc; /* ... and examine the next header */ i=read(f->fd, hdr_buf, 6); bytecnt +=i; pfbblocklen=0; pfbblocklen += hdr_buf[2]&0xFF ; pfbblocklen += (hdr_buf[3] & 0xFF) <<8; pfbblocklen += (hdr_buf[4] & 0xFF) <<16; pfbblocklen += (hdr_buf[5] & 0xFF) <<24; #ifdef DEBUG_PFB_BLOCKS printf("t1io: New segment, length=%d, type=%d\n", pfbblocklen, hdr_buf[1]); #endif accu=0; } else{ /* We are at the beginning of a new block -> examine header */ i=read(f->fd, hdr_buf, 6); pfbblocklen=0; pfbblocklen += hdr_buf[2]&0xFF ; pfbblocklen += (hdr_buf[3] & 0xFF) <<8; pfbblocklen += (hdr_buf[4] & 0xFF) <<16; pfbblocklen += (hdr_buf[5] & 0xFF) <<24; #ifdef DEBUG_PFB_BLOCKS printf("t1io: New segment, length=%d, type=%d\n", pfbblocklen, hdr_buf[1]); #endif accu=0; /* header read, now fill the buffer */ if (pfbblocklen-accu >= F_BUFSIZ){ rc = read(f->fd, f->b_base, F_BUFSIZ); accu +=rc; } else{ /* we have the unusual case that the pfb-block size is shorter than F_BUFSIZ -> Read this block only */ rc = read(f->fd, f->b_base, pfbblocklen); accu +=rc; } } } } else{ /* We have a pfa-file -> read straight ahead and fill buffer */ rc = read(f->fd, f->b_base, F_BUFSIZ); } /* propagate any error or eof to current file */ if (rc <= 0) { if (rc == 0) /* means EOF */ f->flags |= FIOEOF; else { f->error = (short)-rc; f->flags |= FIOERROR; rc = 0; } } f->b_ptr = f->b_base; #ifdef DEBUG_DECRYPTION printf("T1_Fill(): read %d bytes\n", rc); #endif if (Decrypt){ rc = T1Decrypt(f->b_base, rc); #ifdef DEBUG_DECRYPTION printf("T1_Fill(): decrypted %d bytes\n", rc); #endif } return rc; } /* end Fill */ void T1io_reset(void) { pfbblocklen=0; accu=0; starthex80=0; eexec_startOK=0; eexec_endOK=0; in_eexec=0; } t1lib-5.1.2/lib/type1/README.RMz0000644000175000001440000000075010733501626014465 0ustar rmzusersDear Folks, this directory basically contains the Type 1 rasterizer code, donated to the X11-project by IBM and afterwards modified by Piet Tutelaers for his ps2pk-package. But there are several files modified by myself. Thus the state of this directory is not an official one and subject to further changes! Before version 0.6 of t1lib I have cleaned the sources, removed the X11-dummy function and made the sources more ANSI-C compliant. (03/09/1998, RMz) t1lib-5.1.2/lib/type1/fontstruct.h0000644000175000001440000001671310733501626015470 0ustar rmzusers/* $Header: fontstruct.h,v 1.10 91/07/22 15:37:41 keith Exp $ */ /*********************************************************** Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, and the Massachusetts Institute of Technology, Cambridge, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital or MIT not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. @(#)fontstruct.h 3.2 91/04/15 ******************************************************************/ #ifndef FONTSTR_H #define FONTSTR_H #ifdef XSERVER #include #else #include "Xstuff.h" #endif #include "font.h" /* * This version of the server font data strucutre is only for describing * the in memory data structure. The file structure is not necessarily a * copy of this. That is up to the compiler and the OS layer font loading * machinery. */ #define GLYPHPADOPTIONS 4 /* 1, 2, 4, or 8 */ typedef enum { Linear8Bit, TwoD8Bit, Linear16Bit, TwoD16Bit } FontEncoding; typedef struct _FontProp { long name; long value; /* assumes ATOM is not larger than INT32 */ } FontPropRec; typedef struct _FontResolution { unsigned short x_resolution; unsigned short y_resolution; unsigned short point_size; } FontResolutionRec; typedef struct _ExtentInfo { DrawDirection drawDirection; int fontAscent; int fontDescent; int overallAscent; int overallDescent; int overallWidth; int overallLeft; int overallRight; } ExtentInfoRec; typedef struct _CharInfo { xCharInfo metrics; /* info preformatted for Queries */ char *bits; /* pointer to glyph image */ } CharInfoRec; /* * Font is created at font load time. It is specific to a single encoding. * e.g. not all of the glyphs in a font may be part of a single encoding. */ typedef struct _FontInfo { unsigned short firstCol; unsigned short lastCol; unsigned short firstRow; unsigned short lastRow; unsigned short defaultCh; unsigned int noOverlap:1; unsigned int terminalFont:1; unsigned int constantMetrics:1; unsigned int constantWidth:1; unsigned int inkInside:1; unsigned int inkMetrics:1; unsigned int allExist:1; unsigned int drawDirection:2; unsigned int cachable:1; unsigned int anamorphic:1; short maxOverlap; short pad; xCharInfo maxbounds; xCharInfo minbounds; xCharInfo ink_maxbounds; xCharInfo ink_minbounds; short fontAscent; short fontDescent; int nprops; FontPropPtr props; char *isStringProp; } FontInfoRec; typedef struct _Font { int refcnt; FontInfoRec info; char bit; char byte; char glyph; char scan; fsBitmapFormat format; int (*get_glyphs) ( /* font, count, chars, encoding, count, glyphs */ ); int (*get_metrics) ( /* font, count, chars, encoding, count, glyphs */ ); int (*get_bitmaps) (/* client, font, flags, ranges, nranges, nextents, extents */ ); int (*get_extents) (/* client, font, format, flags, ranges, nranges, nglyphs, offsets, glyphs */ ); void (*unload_font) ( /* font */ ); FontPathElementPtr fpe; pointer svrPrivate; pointer fontPrivate; pointer fpePrivate; int maxPrivate; pointer *devPrivates; } FontRec; extern Bool _FontSetNewPrivate (/* pFont, n, ptr */); extern int AllocateFontPrivateIndex (); #define FontGetPrivate(pFont,n) ((n) > (pFont)->maxPrivate ? (pointer) 0 : \ (pFont)->devPrivates[n]) #define FontSetPrivate(pFont,n,ptr) ((n) > (pFont)->maxPrivate ? \ _FontSetNewPrivate (pFont, n, ptr) : \ ((((pFont)->devPrivates[n] = (ptr)) != 0) || TRUE)) typedef struct _FontNames { int nnames; int size; int *length; char **names; } FontNamesRec; /* External view of font paths */ typedef struct _FontPathElement { int name_length; char *name; int type; int refcount; pointer private; } FontPathElementRec; typedef struct _FPEFunctions { int (*name_check) ( /* name */ ); int (*init_fpe) ( /* fpe */ ); int (*reset_fpe) ( /* fpe */ ); int (*free_fpe) ( /* fpe */ ); int (*open_font) ( /* client, fpe, flags, name, namelen, format, fid, ppfont, alias */ ); int (*close_font) ( /* pfont */ ); int (*list_fonts) ( /* client, fpe, pattern, patlen, maxnames, paths */ ); int (*start_list_fonts_with_info) ( /* client, fpe, name, namelen, maxnames, data */ ); int (*list_next_font_with_info) ( /* client, fpe, name, namelen, info, num, data */ ); int (*wakeup_fpe) ( /* fpe, mask */ ); int (*client_died) ( /* client, fpe */ ); } FPEFunctionsRec, FPEFunctions; extern int InitFPETypes(); /* * Various macros for computing values based on contents of * the above structures */ #define GLYPHWIDTHPIXELS(pci) \ ((pci)->metrics.rightSideBearing - (pci)->metrics.leftSideBearing) #define GLYPHHEIGHTPIXELS(pci) \ ((pci)->metrics.ascent + (pci)->metrics.descent) #define GLYPHWIDTHBYTES(pci) (((GLYPHWIDTHPIXELS(pci))+7) >> 3) #define GLYPHWIDTHPADDED(bc) (((bc)+7) & ~0x7) #define BYTES_PER_ROW(bits, nbytes) \ ((nbytes) == 1 ? (((bits)+7)>>3) /* pad to 1 byte */ \ :(nbytes) == 2 ? ((((bits)+15)>>3)&~1) /* pad to 2 bytes */ \ :(nbytes) == 4 ? ((((bits)+31)>>3)&~3) /* pad to 4 bytes */ \ :(nbytes) == 8 ? ((((bits)+63)>>3)&~7) /* pad to 8 bytes */ \ : 0) #define BYTES_FOR_GLYPH(ci,pad) (GLYPHHEIGHTPIXELS(ci) * \ BYTES_PER_ROW(GLYPHWIDTHPIXELS(ci),pad)) /* * Macros for computing different bounding boxes for fonts; from * the font protocol */ #define FONT_MAX_ASCENT(pi) ((pi)->fontAscent > (pi)->ink_maxbounds.ascent ? \ (pi)->fontAscent : (pi)->ink_maxbounds.ascent) #define FONT_MAX_DESCENT(pi) ((pi)->fontDescent > (pi)->ink_maxbounds.descent ? \ (pi)->fontDescent : (pi)->ink_maxbounds.descent) #define FONT_MAX_HEIGHT(pi) (FONT_MAX_ASCENT(pi) + FONT_MAX_DESCENT(pi)) #define FONT_MIN_LEFT(pi) ((pi)->ink_minbounds.leftSideBearing < 0 ? \ (pi)->ink_minbounds.leftSideBearing : 0) #define FONT_MAX_RIGHT(pi) ((pi)->ink_maxbounds.rightSideBearing > \ (pi)->ink_maxbounds.characterWidth ? \ (pi)->ink_maxbounds.rightSideBearing : \ (pi)->ink_maxbounds.characterWidth) #define FONT_MAX_WIDTH(pi) (FONT_MAX_RIGHT(pi) - FONT_MIN_LEFT(pi)) #endif /* FONTSTR_H */ t1lib-5.1.2/lib/type1/.dependencies0000644000175000001440000000262210733501626015525 0ustar rmzusersarith.lo: arith.c types.h objects.h spaces.h arith.h bstring.lo: bstring.c curves.lo: curves.c types.h objects.h spaces.h paths.h regions.h \ curves.h lines.h arith.h fontfcn.lo: fontfcn.c t1imager.h types.h fontmisc.h util.h fontfcn.h \ paths_rmz.h spaces_rmz.h ../t1lib/parseAFM.h ../t1lib/t1types.h \ ../t1lib/sysconf.h ../t1lib/t1extern.h ../t1lib/t1misc.h \ ../t1lib/t1base.h ../t1lib/t1finfo.h hints.lo: hints.c types.h objects.h spaces.h paths.h regions.h hints.h lines.lo: lines.c types.h objects.h spaces.h paths.h regions.h lines.h objects.lo: objects.c types.h objects.h spaces.h paths.h regions.h \ fonts.h pictures.h strokes.h cluts.h paths.lo: paths.c types.h objects.h spaces.h paths.h regions.h fonts.h \ pictures.h strokes.h trig.h regions.lo: regions.c types.h objects.h spaces.h paths.h regions.h \ curves.h lines.h pictures.h fonts.h hints.h strokes.h scanfont.lo: scanfont.c t1stdio.h types.h util.h token.h fontfcn.h \ blues.h ../t1lib/t1misc.h spaces.lo: spaces.c types.h objects.h spaces.h paths.h pictures.h \ fonts.h arith.h trig.h t1io.lo: t1io.c t1stdio.h types.h t1hdigit.h t1snap.lo: t1snap.c objects.h types.h spaces.h paths.h t1stub.lo: t1stub.c objects.h types.h token.lo: token.c types.h t1stdio.h util.h digit.h token.h tokst.h \ hdigit.h type1.lo: type1.c types.h objects.h spaces.h paths.h fonts.h pictures.h \ util.h fontfcn.h blues.h util.lo: util.c types.h util.h fontmisc.h t1lib-5.1.2/lib/type1/t1intf.h0000644000175000001440000000311610733501626014453 0ustar rmzusers/* $XConsortium: t1intf.h,v 1.2 91/10/10 11:19:39 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ #define FIRSTCOL 0 struct type1font { CharInfoPtr pDefault; CharInfoRec glyphs[256-FIRSTCOL]; }; t1lib-5.1.2/lib/type1/type1.c0000644000175000001440000046143610733501626014320 0ustar rmzusers/* $XConsortium: type1.c,v 1.5 91/10/10 11:20:06 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * Portions Copyright (c) 1990 Adobe Systems Incorporated. * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark or Adobe * not be used in advertising or publicity pertaining to distribution of * the software without specific, written prior permission. * * IBM, LEXMARK, AND ADOBE PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY * WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE * ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING * ANY DUTY TO SUPPORT OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY * PORTION OF THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM, * LEXMARK, OR ADOBE) ASSUMES THE ENTIRE COST OF ALL SERVICING, REPAIR AND * CORRECTION. IN NO EVENT SHALL IBM, LEXMARK, OR ADOBE BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /*********************************************************************/ /* */ /* Type 1 module - Converting fonts in Adobe Type 1 Font Format */ /* to scaled and hinted paths for rasterization. */ /* Files: type1.c, type1.h, and blues.h. */ /* */ /* Authors: Sten F. Andler, IBM Almaden Research Center */ /* (Type 1 interpreter, stem & flex hints) */ /* */ /* Patrick A. Casey, Lexmark International, Inc. */ /* (Font level hints & stem hints) */ /* */ /*********************************************************************/ /* Write debug info into a PostScript file? */ /* #define DUMPDEBUGPATH */ /* If Dumping a debug path, should we dump both character and outline path? Warning: Do never enable this, unless, your name is Rainer Menzner and you know what you are doing! */ /* #define DUMPDEBUGPATHBOTH */ /* Generate a bunch of stderr output to understand and debug the generation of outline surrounding curves */ /* #define DEBUG_OUTLINE_SURROUNDING */ #define SUBPATH_CLOSED 1 #define SUBPATH_OPEN 0 /******************/ /* Include Files: */ /******************/ #include "types.h" #include /* a system-dependent include, usually */ #include #include #include "objects.h" #include "spaces.h" #include "paths.h" #include "fonts.h" /* understands about TEXTTYPEs */ #include "pictures.h" /* understands about handles */ typedef struct xobject xobject; #include "util.h" /* PostScript objects */ #include "fontfcn.h" #include "blues.h" /* Blues structure for font-level hints */ /* Considerations about hinting (2002-07-11, RMz (Author of t1lib)) It turns out that the hinting code as used until now produces some artifacts in which may show up in suboptimal bitmaps. I have therefore redesigned the algorithm. It is generally a bad idea to hint every point that falls into a stem hint. The idea is to hint only points for which at least one of the two neighboring curve/line segments is aligned with the stem in question. For curves, we are speaking about the tangent line, that is, the line defined by (p1-p2) or (p3-p4). For vertical stems this means, that only points which are connected exactly into vertical direction are hinted. That is, the dx of the respective curve vanishes. For horizontal stems, accordingly, dy must vanish at least on one hand side of the point in order to be considered as a stem. Unfortunately this principle requires information about both sides of the neighborhood of the point in question. In other words, it is not possible to define a segment completely until the next segment has been inspected. The idea thus is not compatible with the code in this file. Furthermore, if certain points of a character outline are hinted according to the stem hint info from the charstring, the non-hinted points may not be left untouched. This would lead to very strong artifacts at small sizes, especially if characters are defined in terms of curves. This is predominantly the case for ComputerModern, for example. To conclude, it is best to build a point list from the character description adjust the non-hinted points after hinting has been completely finished. Another rule we should state is We can work around this by not directly connecting the path segments at the end of the lineto/curveto's, but rather deferring this to the beginning of the next path constructing function. It's not great but it should work. The functions that produce segments are 1) RMoveTo() 2) RLineto() 3) RRCurveTo() 4) DoClosePath() Their code is moved into the switch statement of the new function handleCurrentSegment(). This function is called when a new segment generating operation has been decoded from the charstring. At this point a serious decision about how to hint the points is possible. ... */ /* The following struct is used to record points that define a path in absolute charspace coordinates. x and y describe the location and hinted, if greater 0, indicates that this point has been hinted. Bit 0 (0x1) indicates vertically adjusted and Bit 1 (0x2) indicates horizontally adjusted. If hinted == -1, this point is not to be hinted at all. This, for example, is the case for a a (H)SBW command. The member type can be one of PPOINT_SBW --> initial path point as setup by (H)SBW PPOINT_MOVE --> point that finishes a MOVE segment PPOINT_LINE --> point that finishes a LINE segment PPOINT_BEZIER_B --> second point of a BEZIER segment PPOINT_BEZIER_C --> third point of a BEZIER segment PPOINT_BEZIER_D --> fourth point of a BEZIER segment PPOINT_CLOSEPATH --> a ClosePath command PPOINT_ENDCHAR --> an EndChar command PPOINT_SEAC --> a Standard Encoding Accented Char command PPOINT_NONE --> an invalid entry Note: BEZIER_B and BEZIER_C points generally cannot be flagged as being hinted because are off-curve points. */ typedef struct { double x; /* x-coordinate */ double y; /* y-coordinate */ double ax; /* adjusted x-coordinate */ double ay; /* adjusted y-coordinate */ double dxpr; /* x-shift in right path due to incoming segment (previous) */ double dypr; /* y-shift in right path due to incoming segment (previous) */ double dxnr; /* x-shift in right path due to outgoing segment (next) */ double dynr; /* y-shift in right path due to incoming segment (next) */ double dxir; /* x-shift in right path resulting from prologation of the linkend tangents (intersect) */ double dyir; /* y-shift in right path resulting from prologation of the linkend tangents (intersect) */ double dist2prev; /* distance to the previous point in path (used only for stroking) */ double dist2next; /* distance to the next point in path (used only for stroking) */ enum { PPOINT_SBW, PPOINT_MOVE, PPOINT_LINE, PPOINT_BEZIER_B, PPOINT_BEZIER_C, PPOINT_BEZIER_D, PPOINT_CLOSEPATH, PPOINT_ENDCHAR, PPOINT_SEAC, PPOINT_NONE } type; /* type of path point */ signed char hinted; /* is this point hinted? */ unsigned char shape; /* is the outline concave or convex or straight at this point? This flag is only relevant for onCurve points in the context of stroking! */ } PPOINT; #define CURVE_NONE 0x00 #define CURVE_STRAIGHT 0x01 #define CURVE_CONVEX 0x02 #define CURVE_CONCAVE 0x03 #ifdef DEBUG_OUTLINE_SURROUNDING static char* pptypes[] = { "PPOINT_SBW", "PPOINT_MOVE", "PPOINT_LINE", "PPOINT_BEZIER_B", "PPOINT_BEZIER_C", "PPOINT_BEZIER_D", "PPOINT_CLOSEPATH", "PPOINT_ENDCHAR", "PPOINT_SEAC" }; static char* ppshapes[] = { "SHAPE_OFFCURVE", "SHAPE_STRAIGHT", "SHAPE_CONVEX", "SHAPE_CONCAVE" }; #endif /* The PPOINT structs are organized in an array which is allocated in chunks of 256 entries. A new point is allocated by a call to nextPPoint and returns the index in the array of the newly allocated point. */ static PPOINT* ppoints = NULL; static long numppoints = 0; static long numppointchunks = 0; static int closepathatfirst = 0; static long nextPPoint( void) { ++numppoints; /* Check whether to reallocate */ if ( numppoints > (numppointchunks * 256) ) { ++numppointchunks; ppoints = (PPOINT*) realloc( ppoints, (numppointchunks * 256) * sizeof( PPOINT)); } /* return the current index */ return numppoints-1; } static void createFillPath( void); static void createStrokePath( double strokewidth, int subpathclosed); static void createClosedStrokeSubPath( long startind, long stopind, double strokewidth, int subpathclosed); static long computeDistances( long startind, long stopind, int subpathclosed); static void transformOnCurvePathPoint( double strokewidth, long prevind, long currind, long lastind); static void transformOffCurvePathPoint( double strokewidth, long currind); /* values for flag: INTERSECT_PREVIOUS: only take previous path segment into account. INTERSECT_NEXT: only take next path segment into account. INTERSECT_BOTH: do a real intersection */ #define INTERSECT_PREVIOUS -1 #define INTERSECT_NEXT 1 #define INTERSECT_BOTH 0 static void intersectRight( long index, double halfwidth, long flag); /* values for orientation: PATH_LEFT: we are constructing the left path. PATH_RIGHT: we are constructing the right path. */ #define PATH_LEFT 1 #define PATH_RIGHT 0 /* values for position: PATH_START: current point starts the current path (use next-values). PATH_END: current point ends the current path (use prev-values). */ #define PATH_START 0 #define PATH_END 1 static void linkNode( long index, int position, int orientation); static long handleNonSubPathSegments( long pindex); static void handleCurrentSegment( long pindex); static void adjustBezier( long pindex); static double size; static double scxx, scyx, scxy, scyy; static double up; #ifdef DUMPDEBUGPATH static FILE* psfile = NULL; static void PSDumpProlog( FILE* fp); static void PSDumpEpilog( FILE* fp); #endif /* variables for querying SEAC from external */ static int isseac = 0; static unsigned char seacbase = 0; static unsigned char seacaccent = 0; /**********************************/ /* Type1 Constants and Structures */ /**********************************/ #define MAXSTACK 24 /* Adobe Type1 limit */ #define MAXCALLSTACK 10 /* Adobe Type1 limit */ #define MAXPSFAKESTACK 32 /* Max depth of fake PostScript stack (local) */ #define MAXSTRLEN 512 /* Max length of a Type 1 string (local) */ #define MAXLABEL 256 /* Maximum number of new hints */ #define MAXSTEMS 512 /* Maximum number of VSTEM and HSTEM hints */ #define EPS 0.001 /* Small number for comparisons */ /************************************/ /* Adobe Type 1 CharString commands */ /************************************/ #define HSTEM 1 #define VSTEM 3 #define VMOVETO 4 #define RLINETO 5 #define HLINETO 6 #define VLINETO 7 #define RRCURVETO 8 #define CLOSEPATH 9 #define CALLSUBR 10 #define RETURN 11 #define ESCAPE 12 #define HSBW 13 #define ENDCHAR 14 #define RMOVETO 21 #define HMOVETO 22 #define VHCURVETO 30 #define HVCURVETO 31 /* The following charstring code appears in some old Adobe font files in space and .notdef character and does not seems to do anything useful aside from taking two args from the stack. We allow this command and ignore it. The source code of ghostscript states that this command is obsolete *and* undocumented. This code may also appear in an Escape-sequence! */ #define UNKNOWN_15 15 /*******************************************/ /* Adobe Type 1 CharString Escape commands */ /*******************************************/ #define DOTSECTION 0 #define VSTEM3 1 #define HSTEM3 2 #define SEAC 6 #define SBW 7 #define DIV 12 #define CALLOTHERSUBR 16 #define POP 17 #define SETCURRENTPOINT 33 /* Note: We use routines from libm because in the original macro definitions, the evaluation order of tmpx is undefined by C-standard! */ #define USE_MATHLIB_ROUTINES #ifdef USE_MATHLIB_ROUTINES #define FABS(x) (fabs (x)) #define CEIL(x) ((LONG) ceil (x)) #define FLOOR(x) ((LONG) floor (x)) #else /*****************/ /* Useful macros */ /*****************/ static DOUBLE tmpx; /* Store macro argument in tmpx to avoid re-evaluation */ static LONG tmpi; /* Store converted value in tmpi to avoid re-evaluation */ #define FABS(x) (((tmpx = (x)) < 0.0) ? -tmpx : tmpx) #define CEIL(x) (((tmpi = (LONG) (tmpx = (x))) < tmpx) ? ++tmpi : tmpi) #define FLOOR(x) (((tmpi = (LONG) (tmpx = (x))) > tmpx) ? --tmpi : tmpi) #endif #define ROUND(x) FLOOR((x) + 0.5) #define ODD(x) (((int)(x)) & 01) #define CC IfTrace1(TRUE, "Char \"%s\": ", currentchar) /* To make some compiler happy we have to care about return types! */ #define Errori {errflag = TRUE; return 0;} /* integer */ #define Errord {errflag = TRUE; return 0.0;} /* double */ #define Errorv {errflag = TRUE; return;} /* void */ #define Error0i(errmsg) { CC; IfTrace0(TRUE, errmsg); Errori;} #define Error0d(errmsg) { CC; IfTrace0(TRUE, errmsg); Errord;} #define Error0v(errmsg) { CC; IfTrace0(TRUE, errmsg); Errorv;} #define Error1i(errmsg,arg) { CC; IfTrace1(TRUE, errmsg, arg); Errori;} #define Error1d(errmsg,arg) { CC; IfTrace1(TRUE, errmsg, arg); Errord;} #define Error1v(errmsg,arg) { CC; IfTrace1(TRUE, errmsg, arg); Errorv;} /********************/ /* global variables */ /********************/ struct stem { /* representation of a STEM hint */ int vertical; /* TRUE if vertical, FALSE otherwise */ DOUBLE x, dx; /* interval of vertical stem */ DOUBLE y, dy; /* interval of horizontal stem */ DOUBLE alx, aldx; /* interval of grid-aligned vertical stem */ DOUBLE aly, aldy; /* interval of grid-aligned horizontal stem */ double lbhintval; /* adjustment value for left or bottom hint */ double rthintval; /* adjustment value for right ir top hint */ }; /******************************************************/ /* Subroutines and statics for the Type1Char routines */ /******************************************************/ static int strindex; /* index into PostScript string being interpreted */ static double currx, curry; /* accumulated x and y values */ static double hcurrx, hcurry; /* accumulated values with hinting */ struct callstackentry { psobj *currstrP; /* current CharStringP */ int currindex; /* current strindex */ unsigned short currkey; /* current decryption key */ }; static DOUBLE Stack[MAXSTACK]; static int Top; static struct callstackentry CallStack[MAXCALLSTACK]; static int CallTop; static DOUBLE PSFakeStack[MAXPSFAKESTACK]; static int PSFakeTop; extern struct XYspace *IDENTITY; static DOUBLE escapementX, escapementY; static DOUBLE sidebearingX, sidebearingY; static DOUBLE accentoffsetX, accentoffsetY; static struct segment *path; /* path of basechar */ static struct segment *apath; /* pass of accent char */ static int errflag; /*************************************************/ /* Global variables to hold Type1Char parameters */ /*************************************************/ static char *Environment; static char *currentchar; static struct XYspace *CharSpace; static psobj *CharStringP, *SubrsP, *OtherSubrsP; static int *ModeP; /************************/ /* Forward declarations */ /************************/ static DOUBLE Div(); static DOUBLE PSFakePop(); static int DoCommand(); static int Escape(); static int HStem(); static int VStem(); static int RLineTo(); static int RRCurveTo(); static int DoClosePath(); static int CallSubr(); static int Return(); static int EndChar(); static int RMoveTo(); static int DotSection(); static int Seac(); static int Sbw(); static int CallOtherSubr(); static int SetCurrentPoint(); /******************************************************/ /* statics for Font level hints (Blues) (see blues.h) */ /******************************************************/ static struct blues_struct *blues; /* the blues structure */ static struct alignmentzone alignmentzones[MAXALIGNMENTZONES]; int numalignmentzones; /* total number of alignment zones */ /****************************************************************/ /* Subroutines for the Font level hints (Alignment zones, etc.) */ /****************************************************************/ /* Flags to control the rasterizer */ #define T1_IGNORE_FORCEBOLD 0x0001 #define T1_IGNORE_FAMILYALIGNMENT 0x0002 #define T1_IGNORE_HINTING 0x0004 #define T1_DEBUG_LINE 0x0100 #define T1_DEBUG_REGION 0x0200 #define T1_DEBUG_PATH 0x0400 #define T1_DEBUG_FONT 0x0800 #define T1_DEBUG_HINT 0x1000 int T1_Type1OperatorFlags; /* for manipulation from t1lib */ static void SetRasterFlags( void) { if (T1_Type1OperatorFlags & T1_IGNORE_HINTING) ProcessHints=0; else ProcessHints=1; if ( T1_Type1OperatorFlags & T1_DEBUG_LINE) LineDebug=1; else LineDebug=0; if ( T1_Type1OperatorFlags & T1_DEBUG_REGION) RegionDebug=1; else RegionDebug=0; if ( T1_Type1OperatorFlags & T1_DEBUG_PATH) PathDebug=1; else PathDebug=0; if ( T1_Type1OperatorFlags & T1_DEBUG_FONT) FontDebug=1; else FontDebug=0; if ( T1_Type1OperatorFlags & T1_DEBUG_HINT) HintDebug=1; else HintDebug=0; return; } /******************************************/ /* Fill in the alignment zone structures. */ /******************************************/ static int ComputeAlignmentZones() { int i; DOUBLE dummy, bluezonepixels, familyzonepixels; struct segment *p; numalignmentzones = 0; /* initialize total # of zones */ /* Remarks by RMz (Author of t1lib): The handling of substitution of the BlueValues by the FamilyBlues and correspondingly for the OtherBlues and FamilyOtherBlues is not clearly documented. These are the problems: 1) Does the number of FamilyBlues entries need to be identical to that of BlueValues? 2) Obviously, the order of the alignment zones in the BlueValues and the FamilyBlues need not be same (see TimesBold.pfa) 3) Is it wise/recommended to make the substitution on a per alignment-zone level or global, i.e., if once then for all zones? 4) The principle found below, checking the delta-height of an alignment-zone and making a decision based on this is incorrect. The decision has to be done according to absolute pixel values at which a feature would be rendered with the BlueValues and the FamilyBlues respectively. To conclude, it seems better to disable the Family-feature until these things are well-known/defined. */ /* do the BlueValues zones */ for (i = 0; i < blues->numBlueValues; i +=2, ++numalignmentzones) { /* the 0th & 1st numbers in BlueValues are for a bottom zone */ /* the rest are topzones */ if (i == 0) /* bottom zone */ alignmentzones[numalignmentzones].topzone = FALSE; else /* top zone */ alignmentzones[numalignmentzones].topzone = TRUE; /* Check FamilyAlignment suppression */ if ( (T1_Type1OperatorFlags & T1_IGNORE_FAMILYALIGNMENT)==0) { if (i < blues->numFamilyBlues) { /* we must consider FamilyBlues */ p = ILoc(CharSpace,0,blues->BlueValues[i] - blues->BlueValues[i+1]); QueryLoc(p, IDENTITY, &dummy, &bluezonepixels); Destroy(p); p = ILoc(CharSpace,0,blues->FamilyBlues[i] - blues->FamilyBlues[i+1]); QueryLoc(p, IDENTITY, &dummy, &familyzonepixels); Destroy(p); /* is the difference in size of the zones less than 1 pixel? */ if (FABS(bluezonepixels - familyzonepixels) < 1.0) { /* use the Family zones */ alignmentzones[numalignmentzones].bottomy = blues->FamilyBlues[i]; alignmentzones[numalignmentzones].topy = blues->FamilyBlues[i+1]; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { if ( alignmentzones[numalignmentzones].topzone == TRUE ) fprintf( psfile, "%f %f t1topzone\n", (blues->FamilyBlues[i])*up, (blues->BlueValues[i+1])*up); else fprintf( psfile, "%f %f t1bottomzone\n", (blues->FamilyBlues[i])*up, (blues->BlueValues[i+1])*up); } #endif continue; } } } /* use this font's Blue zones */ alignmentzones[numalignmentzones].bottomy = blues->BlueValues[i]; alignmentzones[numalignmentzones].topy = blues->BlueValues[i+1]; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { if ( alignmentzones[numalignmentzones].topzone == TRUE ) fprintf( psfile, "%f %f t1topzone\n", (blues->BlueValues[i])*up, (blues->BlueValues[i+1])*up); else fprintf( psfile, "%f %f t1bottomzone\n", (blues->BlueValues[i])*up, (blues->BlueValues[i+1])*up); } #endif } /* do the OtherBlues zones */ for (i = 0; i < blues->numOtherBlues; i +=2, ++numalignmentzones) { /* all of the OtherBlues zones are bottom zones */ alignmentzones[numalignmentzones].topzone = FALSE; /* Check FamilyAlignment suppression */ if ( (T1_Type1OperatorFlags & T1_IGNORE_FAMILYALIGNMENT)==0) { if (i < blues->numFamilyOtherBlues) {/* consider FamilyOtherBlues */ p = ILoc(CharSpace,0,blues->OtherBlues[i] - blues->OtherBlues[i+1]); QueryLoc(p, IDENTITY, &dummy, &bluezonepixels); Destroy(p); p = ILoc(CharSpace,0,blues->FamilyOtherBlues[i] - blues->FamilyOtherBlues[i+1]); QueryLoc(p, IDENTITY, &dummy, &familyzonepixels); Destroy(p); /* is the difference in size of the zones less than 1 pixel? */ if (FABS(bluezonepixels - familyzonepixels) < 1.0) { /* use the Family zones */ alignmentzones[numalignmentzones].bottomy = blues->FamilyOtherBlues[i]; alignmentzones[numalignmentzones].topy = blues->FamilyOtherBlues[i+1]; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { fprintf( psfile, "%f %f t1bottomzone\n", (blues->FamilyOtherBlues[i])*up, (blues->FamilyOtherBlues[i+1])*up); } #endif continue; } } } /* use this font's Blue zones (as opposed to the Family Blues */ alignmentzones[numalignmentzones].bottomy = blues->OtherBlues[i]; alignmentzones[numalignmentzones].topy = blues->OtherBlues[i+1]; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { fprintf( psfile, "%f %f t1bottomzone\n", (blues->OtherBlues[i])*up, (blues->OtherBlues[i+1])*up); } #endif } return(0); } /**********************************************************************/ /* Subroutines and statics for handling of the VSTEM and HSTEM hints. */ /**********************************************************************/ int InDotSection; /* DotSection flag */ struct stem stems[MAXSTEMS]; /* All STEM hints */ int numstems; /* Number of STEM hints */ int currstartstem; /* The current starting stem. */ int oldvert, oldhor; /* Remember hint in effect */ int oldhorhalf, oldverthalf; /* Remember which half of the stem */ DOUBLE wsoffsetX, wsoffsetY; /* White space offset - for VSTEM3,HSTEM3 */ int wsset; /* Flag for whether we've set wsoffsetX,Y */ static int InitStems() /* Initialize the STEM hint data structures */ { InDotSection = FALSE; currstartstem = numstems = 0; oldvert = oldhor = -1; return(0); } /*******************************************************************/ /* Compute the dislocation that a stemhint should cause for points */ /* inside the stem. */ /*******************************************************************/ static int ComputeStem(stemno) int stemno; { int verticalondevice, idealwidth; DOUBLE stemstart, stemwidth; struct segment *p; int i; DOUBLE stembottom, stemtop, flatposition; DOUBLE Xpixels, Ypixels; DOUBLE unitpixels, onepixel; int suppressovershoot, enforceovershoot; DOUBLE stemshift, flatpospixels, overshoot; DOUBLE widthdiff; /* Number of character space units to adjust width */ DOUBLE lbhintvalue, rthintvalue; DOUBLE cxx, cyx, cxy, cyy; /* Transformation matrix */ int rotated; /* TRUE if character is on the side, FALSE if upright */ /************************************************/ /* DETERMINE ORIENTATION OF CHARACTER ON DEVICE */ /************************************************/ QuerySpace(CharSpace, &cxx, &cyx, &cxy, &cyy); /* Transformation matrix */ if (FABS(cxx) < 0.00001 || FABS(cyy) < 0.00001) rotated = TRUE; /* Char is on side (90 or 270 degrees), possibly oblique. */ else if (FABS(cyx) < 0.00001 || FABS(cxy) < 0.00001) rotated = FALSE; /* Char is upright (0 or 180 degrees), possibly oblique. */ else { stems[stemno].lbhintval = 0.0; /* Char is at non-axial angle, ignore hints. */ stems[stemno].rthintval = 0.0; ProcessHints = 0; return(0); } /* Determine orientation of stem */ if (stems[stemno].vertical) { verticalondevice = !rotated; stemstart = stems[stemno].x; stemwidth = stems[stemno].dx; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1vstem\n", stemstart*up, stemwidth*up); #endif } else { verticalondevice = rotated; stemstart = stems[stemno].y; stemwidth = stems[stemno].dy; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1hstem\n", stemstart*up, stemwidth*up); #endif } /* Determine how many pixels (non-negative) correspond to 1 character space unit (unitpixels), and how many character space units (non-negative) correspond to one pixel (onepixel). */ if (stems[stemno].vertical) p = ILoc(CharSpace, 1, 0); else p = ILoc(CharSpace, 0, 1); QueryLoc(p, IDENTITY, &Xpixels, &Ypixels); Destroy(p); if (verticalondevice) unitpixels = FABS(Xpixels); else unitpixels = FABS(Ypixels); onepixel = 1.0 / unitpixels; /**********************/ /* ADJUST STEM WIDTHS */ /**********************/ widthdiff = 0.0; /* Find standard stem with smallest width difference from this stem */ if (stems[stemno].vertical) { /* vertical stem */ if (blues->StdVW != 0) /* there is an entry for StdVW */ widthdiff = blues->StdVW - stemwidth; for (i = 0; i < blues->numStemSnapV; ++i) { /* now look at StemSnapV */ if (FABS(blues->StemSnapV[i] - stemwidth) < FABS(widthdiff)) /* this standard width is the best match so far for this stem */ widthdiff = blues->StemSnapV[i] - stemwidth; } } else { /* horizontal stem */ if (blues->StdHW != 0) /* there is an entry for StdHW */ widthdiff = blues->StdHW - stemwidth; for (i = 0; i < blues->numStemSnapH; ++i) { /* now look at StemSnapH */ if (FABS(blues->StemSnapH[i] - stemwidth) < FABS(widthdiff)) /* this standard width is the best match so far for this stem */ widthdiff = blues->StemSnapH[i] - stemwidth; } } /* Only expand or contract stems if they differ by less than 1 pixel from the closest standard width, otherwise make the width difference = 0. */ if (FABS(widthdiff) > onepixel) widthdiff = 0.0; /* Expand or contract stem to the nearest integral number of pixels. */ idealwidth = ROUND((stemwidth + widthdiff) * unitpixels); /* Ensure that all stems are at least one pixel wide. */ if (idealwidth == 0) idealwidth = 1; /* Apply ForceBold to vertical stems. */ if (blues->ForceBold && stems[stemno].vertical && ((T1_Type1OperatorFlags & T1_IGNORE_FORCEBOLD)==0)) /* Force this vertical stem to be at least DEFAULTBOLDSTEMWIDTH wide. */ if (idealwidth < DEFAULTBOLDSTEMWIDTH) idealwidth = DEFAULTBOLDSTEMWIDTH; /* Now compute the number of character space units necessary */ widthdiff = idealwidth * onepixel - stemwidth; /*********************************************************************/ /* ALIGNMENT ZONES AND OVERSHOOT SUPPRESSION - HORIZONTAL STEMS ONLY */ /*********************************************************************/ stemshift = 0.0; if ( !stems[stemno].vertical ) { /* Get bottom and top boundaries of the stem. */ stembottom = stemstart; stemtop = stemstart + stemwidth; /* Find out if this stem intersects an alignment zone (the BlueFuzz */ /* entry in the Private dictionary specifies the number of character */ /* units to extend (in both directions) the effect of an alignment */ /* zone on a horizontal stem. The default value of BlueFuzz is 1. */ for (i = 0; i < numalignmentzones; ++i) { if (alignmentzones[i].topzone) { if (stemtop >= alignmentzones[i].bottomy && stemtop <= alignmentzones[i].topy + blues->BlueFuzz) { break; /* We found a top-zone */ } } else { if (stembottom <= alignmentzones[i].topy && stembottom >= alignmentzones[i].bottomy - blues->BlueFuzz) { break; /* We found a bottom-zone */ } } } if (i < numalignmentzones) { /* We found an intersecting zone (number i). */ suppressovershoot = FALSE; enforceovershoot = FALSE; /* When 1 character space unit is rendered smaller than BlueScale device units (pixels), we must SUPPRESS overshoots. Otherwise, if the top (or bottom) of this stem is more than BlueShift character space units away from the flat position, we must ENFORCE overshoot. */ if (unitpixels < blues->BlueScale){ suppressovershoot = TRUE; } else{ if (alignmentzones[i].topzone){ if (stemtop >= alignmentzones[i].bottomy + blues->BlueShift){ enforceovershoot = TRUE; } else if (stembottom <= alignmentzones[i].topy - blues->BlueShift){ enforceovershoot = TRUE; } } } /*************************************************/ /* ALIGN THE FLAT POSITION OF THE ALIGNMENT ZONE */ /*************************************************/ /* Compute the position of the alignment zone's flat position in device space and the amount of shift needed to align it on a pixel boundary. Move all stems this amount. */ if (alignmentzones[i].topzone) flatposition = alignmentzones[i].bottomy; else flatposition = alignmentzones[i].topy; /* Find the flat position in pixels */ flatpospixels = flatposition * unitpixels; /* Find the stem shift necessary to align the flat position on a pixel boundary, and use this shift for all stems */ stemshift = (ROUND(flatpospixels) - flatpospixels) * onepixel; /************************************************/ /* HANDLE OVERSHOOT ENFORCEMENT AND SUPPRESSION */ /************************************************/ /* Compute overshoot amount (non-negative) */ if (alignmentzones[i].topzone) overshoot = stemtop - flatposition; else overshoot = flatposition - stembottom; if (overshoot > 0.0) { /* ENFORCE overshoot by shifting the entire stem (if necessary) so that it falls at least one pixel beyond the flat position. */ if (enforceovershoot){ if (overshoot < onepixel){ if (alignmentzones[i].topzone) stemshift += onepixel - overshoot; else stemshift -= onepixel - overshoot; } } /* SUPPRESS overshoot by aligning the stem to the alignment zone's flat position. */ if (suppressovershoot){ if (alignmentzones[i].topzone) stemshift -= overshoot; else stemshift += overshoot; } } /************************************************************/ /* COMPUTE HINT VALUES FOR EACH SIDE OF THE HORIZONTAL STEM */ /************************************************************/ /* If the stem was aligned by a topzone, we expand or contract the stem only at the bottom - since the stem top was aligned by the zone. If the stem was aligned by a bottomzone, we expand or contract the stem only at the top - since the stem bottom was aligned by the zone. */ if (alignmentzones[i].topzone) { lbhintvalue = stemshift - widthdiff; /* bottom */ rthintvalue = stemshift; /* top */ } else { lbhintvalue = stemshift; /* bottom */ rthintvalue = stemshift + widthdiff; /* top */ } stems[stemno].lbhintval = lbhintvalue; stems[stemno].rthintval = rthintvalue; /* store grid-aligned stems values */ stems[stemno].aly = stemstart + lbhintvalue; stems[stemno].aldy = stemwidth + widthdiff; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1alignedhstem\n", (stems[stemno].aly)*up, (stems[stemno].aldy)*up); #endif return(0); } /* endif (i < numalignmentzones) */ /* We didn't find any alignment zones intersecting this stem, so proceed with normal stem alignment below. */ } /* endif (!stems[stemno].vertical) */ /* Align stem with pixel boundaries on device */ stemstart = stemstart - widthdiff / 2; stemshift = ROUND(stemstart * unitpixels) * onepixel - stemstart; /* Adjust the boundaries of the stem */ lbhintvalue = stemshift - widthdiff / 2; /* left or bottom */ rthintvalue = stemshift + widthdiff / 2; /* right or top */ if (stems[stemno].vertical) { stems[stemno].lbhintval = lbhintvalue; stems[stemno].rthintval = rthintvalue; /* store grid-aligned stem values */ stems[stemno].alx = stemstart + stemshift; stems[stemno].aldx = stemwidth + widthdiff; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1alignedvstem\n", (stems[stemno].alx)*up, (stems[stemno].aldx)*up); #endif } else { stems[stemno].lbhintval = lbhintvalue; stems[stemno].rthintval = rthintvalue; /* store grid-aligned stem values */ stems[stemno].aly = stemstart + stemshift; stems[stemno].aldy = stemwidth + widthdiff; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1alignedhstem\n", (stems[stemno].aly)*up, (stems[stemno].aldy)*up); #endif } return(0); } #define LEFT 1 #define RIGHT 2 #define BOTTOM 3 #define TOP 4 /***********************************************************************/ /* Find the vertical and horizontal stems that the current point */ /* (x, y) may be involved in. At most one horizontal and one vertical */ /* stem can apply to a single point, since there are no overlaps */ /* allowed. */ /* The point list updated by this function. */ /* Hints are ignored inside a DotSection. */ /***********************************************************************/ static void FindStems( double x, double y, double dx, double dy, double nextdx, double nextdy) { int i; int newvert, newhor; int newhorhalf, newverthalf; /* The following values will be used to decide whether a curve crosses or touches a stem in an aligned manner or not */ double dtana = 0.0; /* tangent of pre-delta against horizontal line */ double dtanb = 0.0; /* tangent of pre-delta against vertical line */ double nextdtana = 0.0; /* tangent of post-delta against horizontal line */ double nextdtanb = 0.0; /* tangent of post-delta against vertical line */ /* setup default hinted position */ ppoints[numppoints-1].ax = ppoints[numppoints-1].x; ppoints[numppoints-1].ay = ppoints[numppoints-1].y; if ( ppoints[numppoints-1].hinted == -1 ) /* point is not to be hinted! */ return; else ppoints[numppoints-1].hinted = 0; if ( InDotSection ) return; if ( ProcessHints == 0 ) { return; } /* setup (absolute) tangent values and define limits that indicate nearly horizontal or nearly vertical alignment */ #define NEARLYVERTICAL 0.2 /* This corresponds to about 11.3 degress deviation */ #define NEARLYHORIZONTAL 0.2 /* from the ideal direction. */ if ( dy != 0 ) { dtana = dx/dy; if ( dtanb < 0.0 ) dtana = -dtana; } else dtana = NEARLYHORIZONTAL; if ( dx != 0 ) { dtanb = dy/dx; if ( dtanb < 0.0 ) dtanb = -dtanb; } else dtanb = NEARLYVERTICAL; if ( nextdy != 0 ) { nextdtana = nextdx/nextdy; if ( nextdtana < 0.0 ) nextdtana = -nextdtana; } else nextdtana = NEARLYHORIZONTAL; if ( nextdx != 0 ) { nextdtanb = nextdy/nextdx; if ( nextdtanb < 0.0 ) nextdtanb = -nextdtanb; } else nextdtanb = NEARLYVERTICAL; newvert = newhor = -1; newhorhalf = newverthalf = -1; for (i = currstartstem; i < numstems; i++) { if (stems[i].vertical) { /* VSTEM hint */ /* OK, stem is crossed in an aligned way */ if ( (dtana <= NEARLYVERTICAL) || (nextdtana <= NEARLYVERTICAL)) { if ((x >= stems[i].x ) && (x <= stems[i].x+stems[i].dx )) { newvert = i; if (x < stems[i].x+stems[i].dx / 2) newverthalf = LEFT; else newverthalf = RIGHT; } } } else { /* HSTEM hint */ if ( (dtanb <= NEARLYHORIZONTAL) || (nextdtanb <= NEARLYHORIZONTAL)) { /* OK, stem is crossed in an aligned way */ if ((y >= stems[i].y ) && (y <= stems[i].y+stems[i].dy )) { newhor = i; if (y < stems[i].y+stems[i].dy / 2) newhorhalf = BOTTOM; else newhorhalf = TOP; } } } } if ( newvert != -1 ) { /* mark the latest point in the point list to be v-hinted! */ if ( newverthalf == LEFT ) { /* left hint */ ppoints[numppoints-1].ax += stems[newvert].lbhintval; } else { /* right hint */ ppoints[numppoints-1].ax += stems[newvert].rthintval; } ppoints[numppoints-1].hinted |= 0x01; } if ( newhor != -1 ) { /* mark the latest point in the point list to be h-hinted! */ if ( newhorhalf == BOTTOM ) { /* bottom hint */ ppoints[numppoints-1].ay += stems[newhor].lbhintval; } else { /* top hint */ ppoints[numppoints-1].ay += stems[newhor].rthintval; } ppoints[numppoints-1].hinted |= 0x02; } return; } /* Type 1 internal functions */ static int ClearStack() { Top = -1; return(0); } static int Push(Num) DOUBLE Num; { if (++Top < MAXSTACK) Stack[Top] = Num; else Error0i("Push: Stack full\n"); return(0); } static int ClearCallStack() { CallTop = -1; return(0); } static int PushCall(CurrStrP, CurrIndex, CurrKey) psobj *CurrStrP; int CurrIndex; unsigned short CurrKey; { if (++CallTop < MAXCALLSTACK) { CallStack[CallTop].currstrP = CurrStrP; /* save CharString pointer */ CallStack[CallTop].currindex = CurrIndex; /* save CharString index */ CallStack[CallTop].currkey = CurrKey; /* save decryption key */ } else Error0i("PushCall: Stack full\n"); return(0); } static int PopCall(CurrStrPP, CurrIndexP, CurrKeyP) psobj **CurrStrPP; int *CurrIndexP; unsigned short *CurrKeyP; { if (CallTop >= 0) { *CurrStrPP = CallStack[CallTop].currstrP; /* restore CharString pointer */ *CurrIndexP = CallStack[CallTop].currindex; /* restore CharString index */ *CurrKeyP = CallStack[CallTop--].currkey; /* restore decryption key */ } else Error0i("PopCall: Stack empty\n"); return(0); } static int ClearPSFakeStack() { PSFakeTop = -1; return(0); } /* PSFakePush: Pushes a number onto the fake PostScript stack */ static int PSFakePush(Num) DOUBLE Num; { if (++PSFakeTop < MAXPSFAKESTACK) PSFakeStack[PSFakeTop] = Num; else Error0i("PSFakePush: Stack full\n"); return(0); } /* PSFakePop: Removes a number from the top of the fake PostScript stack */ static DOUBLE PSFakePop () { if (PSFakeTop >= 0) return(PSFakeStack[PSFakeTop--]); else Error0d("PSFakePop : Stack empty\n"); /*NOTREACHED*/ } /***********************************************************************/ /* Center a stem on the pixel grid -- used by HStem3 and VStem3 */ /***********************************************************************/ static struct segment *CenterStem(edge1, edge2) DOUBLE edge1; DOUBLE edge2; { int idealwidth, verticalondevice; DOUBLE leftx, lefty, rightx, righty, center, width; DOUBLE widthx, widthy; DOUBLE shift, shiftx, shifty; DOUBLE Xpixels, Ypixels; struct segment *p; p = Loc(CharSpace, edge1, 0.0); QueryLoc(p, IDENTITY, &leftx, &lefty); p = Join(p, Loc(CharSpace, edge2, 0.0)); QueryLoc(p, IDENTITY, &rightx, &righty); Destroy(p); widthx = FABS(rightx - leftx); widthy = FABS(righty - lefty); if (widthy <= EPS) { /* verticalondevice hint */ verticalondevice = TRUE; center = (rightx + leftx) / 2.0; width = widthx; } else if (widthx <= EPS) { /* horizontal hint */ verticalondevice = FALSE; center = (righty + lefty) / 2.0; width = widthy; } else { /* neither horizontal nor verticalondevice and not oblique */ return (NULL); } idealwidth = ROUND(width); if (idealwidth == 0) idealwidth = 1; if (ODD(idealwidth)) { /* is ideal width odd? */ /* center stem over pixel */ shift = FLOOR(center) + 0.5 - center; } else { /* align stem on pixel boundary */ shift = ROUND(center) - center; } if (verticalondevice) { shiftx = shift; shifty = 0.0; } else { shifty = shift; shiftx = 0.0; } p = Loc(IDENTITY, shiftx, shifty); QueryLoc(p, CharSpace, &Xpixels, &Ypixels); wsoffsetX = Xpixels; wsoffsetY = Ypixels; currx += wsoffsetX; curry += wsoffsetY; return (p); } /*----------------------------------------------------------------------- Decrypt - From Adobe Type 1 book page 63, with some modifications -----------------------------------------------------------------------*/ #define KEY 4330 /* Initial key (seed) for CharStrings decryption */ #define C1 52845 /* Multiplier for pseudo-random number generator */ #define C2 22719 /* Constant for pseudo-random number generator */ static unsigned short r; /* Pseudo-random sequence of keys */ static unsigned char Decrypt(cipher) unsigned char cipher; { unsigned char plain; plain = cipher ^ (r >> 8); r = (cipher + r) * C1 + C2; return plain; } /* Get the next byte from the codestring being interpreted */ static int DoRead(CodeP) int *CodeP; { if (strindex >= CharStringP->len) return(FALSE); /* end of string */ /* We handle the non-documented Adobe convention to use lenIV=-1 to suppress charstring encryption. */ if (blues->lenIV==-1) { *CodeP = (unsigned char) CharStringP->data.stringP[strindex++]; } else { *CodeP = Decrypt((unsigned char) CharStringP->data.stringP[strindex++]); } return(TRUE); } /* Strip blues->lenIV bytes from CharString and update encryption key */ /* (the lenIV entry in the Private dictionary specifies the number of */ /* random bytes at the beginning of each CharString; default is 4) */ static void StartDecrypt() { int Code; r = KEY; /* Initial key (seed) for CharStrings decryption */ for (strindex = 0; strindex < blues->lenIV;){ if (!DoRead(&Code)) /* Read a byte and update decryption key */ Error0v("StartDecrypt: Premature end of CharString\n"); } } #undef DecodeDebug static int Decode(Code) int Code; { int Code1, Code2, Code3, Code4; if (Code <= 31){ /* Code is [0,31] */ #ifdef DecodeDebug fprintf(stderr, "Decode: Code=%d -> Command\n", Code); #endif DoCommand(Code); } else if (Code <= 246){ /* Code is [32,246] */ #ifdef DecodeDebug fprintf(stderr, "Decode: Code=%d -> number=%f\n", Code, (DOUBLE)(Code-139)); #endif Push((DOUBLE)(Code - 139)); } else if (Code <= 250) { /* Code is [247,250] */ if (!DoRead(&Code2)) goto ended; #ifdef DecodeDebug fprintf(stderr, "Decode: Code=%d next Code=%d -> number=%f\n", Code, Code2, (DOUBLE)(((Code - 247) << 8) + Code2 + 108)); #endif Push((DOUBLE)(((Code - 247) << 8) + Code2 + 108)); } else if (Code <= 254) { /* Code is [251,254] */ if (!DoRead(&Code2)) goto ended; #ifdef DecodeDebug fprintf(stderr, "Decode: Code=%d, next Code=%d -> number=%f\n", Code, Code2, (DOUBLE)( -((Code - 251) << 8) - Code2 - 108)); #endif Push((DOUBLE)( -((Code - 251) << 8) - Code2 - 108)); } else { /* Code is 255 */ if (!DoRead(&Code1)) goto ended; if (!DoRead(&Code2)) goto ended; if (!DoRead(&Code3)) goto ended; if (!DoRead(&Code4)) goto ended; #ifdef DecodeDebug fprintf(stderr, "Decode: Code=255, Code1=%d, Code2=%d, Code3=%d, Code4=%d -> number=%f\n", Code1, Code2, Code3, Code4, (DOUBLE)((((((Code1<<8) + Code2)<<8) + Code3)<<8) + Code4)); #endif Push((DOUBLE)((((((Code1<<8) + Code2)<<8) + Code3)<<8) + Code4)); } return(0); ended: Error0i("Decode: Premature end of Type 1 CharString"); } #undef DoCommandDebug /* Interpret a command code */ static int DoCommand(Code) int Code; { switch(Code) { case HSTEM: /* |- y dy HSTEM |- */ #ifdef DoCommandDebug printf("DoCommand: HStem\n"); #endif /* Vertical range of a horizontal stem zone */ if (Top < 1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); HStem(Stack[0], Stack[1]); ClearStack(); break; case VSTEM: /* |- x dx VSTEM |- */ #ifdef DoCommandDebug printf("DoCommand: VStem\n"); #endif /* Horizontal range of a vertical stem zone */ if (Top < 1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); VStem(Stack[0], Stack[1]); ClearStack(); break; case VMOVETO: /* |- dy VMOVETO |- */ #ifdef DoCommandDebug printf("DoCommand: VMoveto\n"); #endif /* Vertical MOVETO, equivalent to 0 dy RMOVETO */ if (Top < 0) Error1i("DoCommand: Stack low (Code=%d)\n", Code); RMoveTo(0.0, Stack[0]); ClearStack(); break; case RLINETO: /* |- dx dy RLINETO |- */ #ifdef DoCommandDebug printf("DoCommand: RLineto\n"); #endif /* Like RLINETO in PostScript */ if (Top < 1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); RLineTo(Stack[0], Stack[1]); ClearStack(); break; case HLINETO: /* |- dx HLINETO |- */ #ifdef DoCommandDebug printf("DoCommand: HLineto\n"); #endif /* Horizontal LINETO, equivalent to dx 0 RLINETO */ if (Top < 0) Error1i("DoCommand: Stack low (Code=%d)\n", Code); RLineTo(Stack[0], 0.0); ClearStack(); break; case VLINETO: /* |- dy VLINETO |- */ #ifdef DoCommandDebug printf("DoCommand: VLineto\n"); #endif /* Vertical LINETO, equivalent to 0 dy RLINETO */ if (Top < 0) Error1i("DoCommand: Stack low (Code=%d)\n", Code); RLineTo(0.0, Stack[0]); ClearStack(); break; case RRCURVETO: #ifdef DoCommandDebug printf("DoCommand: RRCurveto\n"); #endif /* |- dx1 dy1 dx2 dy2 dx3 dy3 RRCURVETO |- */ /* Relative RCURVETO, equivalent to dx1 dy1 */ /* (dx1+dx2) (dy1+dy2) (dx1+dx2+dx3) */ /* (dy1+dy2+dy3) RCURVETO in PostScript */ if (Top < 5) Error1i("DoCommand: Stack low (Code=%d)\n", Code); RRCurveTo(Stack[0], Stack[1], Stack[2], Stack[3], Stack[4], Stack[5]); ClearStack(); break; case CLOSEPATH: /* - CLOSEPATH |- */ #ifdef DoCommandDebug printf("DoCommand: ClosePath\n"); #endif /* Closes a subpath without repositioning the */ /* current point */ DoClosePath(); ClearStack(); break; case CALLSUBR: /* subr# CALLSUBR - */ #ifdef DoCommandDebug printf("DoCommand: CallSubr\n"); #endif /* Calls a CharString subroutine with index */ /* subr# from the Subrs array */ if (Top < 0) Error1i("DoCommand: Stack low\n (Code=%d)", Code); CallSubr((int)Stack[Top--]); break; case RETURN: /* - RETURN - */ #ifdef DoCommandDebug printf("DoCommand: Return\n"); #endif /* Returns from a Subrs array CharString */ /* subroutine called with CALLSUBR */ Return(); break; case ESCAPE: /* ESCAPE to two-byte command code */ #ifdef DoCommandDebug printf("DoCommand: Escape to 2 Byte Code (Code=%d)\n", Code); #endif if (!DoRead(&Code)) Error0i("DoCommand: ESCAPE is last byte\n"); Escape(Code); break; case HSBW: /* |- sbx wx HSBW |- */ #ifdef DoCommandDebug printf("DoCommand: HSBW\n"); #endif /* Set the left sidebearing point to (sbx,0), */ /* set the character width vector to (wx,0). */ /* Equivalent to sbx 0 wx 0 SBW. Space */ /* character should have sbx = 0 */ if (Top < 1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); Sbw(Stack[0], 0.0, Stack[1], 0.0); ClearStack(); break; case ENDCHAR: /* - ENDCHAR |- */ #ifdef DoCommandDebug printf("DoCommand: EndChar\n"); #endif /* Finishes a CharString outline */ EndChar(); ClearStack(); break; case RMOVETO: /* |- dx dy RMOVETO |- */ #ifdef DoCommandDebug printf("DoCommand: RMoveto\n"); #endif /* Behaves like RMOVETO in PostScript */ if (Top < 1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); RMoveTo(Stack[0], Stack[1]); ClearStack(); break; case HMOVETO: /* |- dx HMOVETO |- */ #ifdef DoCommandDebug printf("DoCommand: HMovetoUnassigned\n"); #endif /* Horizontal MOVETO. Equivalent to dx 0 RMOVETO */ if (Top < 0) Error1i("DoCommand: Stack low (Code=%d)\n", Code); RMoveTo(Stack[0], 0.0); ClearStack(); break; case VHCURVETO: /* |- dy1 dx2 dy2 dx3 VHCURVETO |- */ #ifdef DoCommandDebug printf("DoCommand: VHCurveto\n"); #endif /* Vertical-Horizontal CURVETO, equivalent to */ /* 0 dy1 dx2 dy2 dx3 0 RRCURVETO */ if (Top < 3) Error1i("DoCommand: Stack low (Code=%d)\n", Code); RRCurveTo(0.0, Stack[0], Stack[1], Stack[2], Stack[3], 0.0); ClearStack(); break; case HVCURVETO: /* |- dx1 dx2 dy2 dy3 HVCURVETO |- */ #ifdef DoCommandDebug printf("DoCommand: HCurveto\n"); #endif /* Horizontal-Vertical CURVETO, equivalent to */ /* dx1 0 dx2 dy2 0 dy3 RRCURVETO */ if (Top < 3) Error1i("DoCommand: Stack low (Code=%d)\n", Code); RRCurveTo(Stack[0], 0.0, Stack[1], Stack[2], 0.0, Stack[3]); ClearStack(); break; case UNKNOWN_15: if (Top < 1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); ClearStack(); break; default: /* Unassigned command code */ #ifdef DoCommandDebug printf("DoCommand: Unassigned\n"); #endif ClearStack(); Error1i("DoCommand: Unassigned code %d\n", Code); } return(0); } static int Escape(Code) int Code; { int i, Num; struct segment *p; switch(Code) { case DOTSECTION: /* - DOTSECTION |- */ /* Brackets an outline section for the dots in */ /* letters such as "i", "j", and "!". */ DotSection(); ClearStack(); break; case VSTEM3: /* |- x0 dx0 x1 dx1 x2 dx2 VSTEM3 |- */ /* Declares the horizontal ranges of three */ /* vertical stem zones between x0 and x0+dx0, */ /* x1 and x1+dx1, and x2 and x2+dx2. */ if (Top < 5) Error1i("DoCommand: Stack low (Code=%d)\n", Code); if (!wsset && ProcessHints) { /* Shift the whole character so that the middle stem is centered. */ p = CenterStem(Stack[2] + sidebearingX, Stack[3]); path = Join(path, p); wsset = 1; } VStem(Stack[0], Stack[1]); VStem(Stack[2], Stack[3]); VStem(Stack[4], Stack[5]); ClearStack(); break; case HSTEM3: /* |- y0 dy0 y1 dy1 y2 dy2 HSTEM3 |- */ /* Declares the vertical ranges of three hori- */ /* zontal stem zones between y0 and y0+dy0, */ /* y1 and y1+dy1, and y2 and y2+dy2. */ if (Top < 5) Error1i("DoCommand: Stack low (Code=%d)\n", Code); HStem(Stack[0], Stack[1]); HStem(Stack[2], Stack[3]); HStem(Stack[4], Stack[5]); ClearStack(); break; case SEAC: /* |- asb adx ady bchar achar SEAC |- */ /* Standard Encoding Accented Character. */ if (Top < 4) Error1i("DoCommand: Stack low (Code=%d)\n", Code); Seac(Stack[0], Stack[1], Stack[2], (unsigned char) Stack[3], (unsigned char) Stack[4]); ClearStack(); break; case SBW: /* |- sbx sby wx wy SBW |- */ /* Set the left sidebearing point to (sbx,sby), */ /* set the character width vector to (wx,wy). */ if (Top < 3) Error1i("DoCommand: Stack low (Code=%d)\n", Code); Sbw(Stack[0], Stack[1], Stack[2], Stack[3]); ClearStack(); break; case DIV: /* num1 num2 DIV quotient */ /* Behaves like DIV in the PostScript language */ if (Top < 1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); Stack[Top-1] = Div(Stack[Top-1], Stack[Top]); Top--; break; case CALLOTHERSUBR: /* arg1 ... argn n othersubr# CALLOTHERSUBR - */ /* Make calls on the PostScript interpreter */ if (Top < 1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); Num = Stack[Top-1]; if (Top < Num+1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); for (i = 0; i < Num; i++) PSFakePush(Stack[Top - i - 2]); Top -= Num + 2; CallOtherSubr((int)Stack[Top + Num + 2]); break; case POP: /* - POP number */ /* Removes a number from the top of the */ /* PostScript interpreter stack and pushes it */ /* onto the Type 1 BuildChar operand stack */ Push(PSFakePop()); break; case SETCURRENTPOINT: /* |- x y SETCURRENTPOINT |- */ /* Sets the current point to (x,y) in absolute */ /* character space coordinates without per- */ /* forming a CharString MOVETO command */ if (Top < 1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); SetCurrentPoint(Stack[0], Stack[1]); ClearStack(); break; case UNKNOWN_15: if (Top < 1) Error1i("DoCommand: Stack low (Code=%d)\n", Code); ClearStack(); break; default: /* Unassigned escape code command */ ClearStack(); Error1i("Escape: Unassigned code %d\n", Code); } return(0); } /* |- y dy HSTEM |- */ /* Declares the vertical range of a horizontal stem zone */ /* between coordinates y and y + dy */ /* y is relative to the left sidebearing point */ static int HStem(y, dy) DOUBLE y, dy; { IfTrace2((FontDebug), "Hstem %f %f\n", y, dy); if (ProcessHints) { if (numstems >= MAXSTEMS) Error0i("HStem: Too many hints\n"); if (dy < 0.0) {y += dy; dy = -dy;} stems[numstems].vertical = FALSE; stems[numstems].x = 0.0; stems[numstems].y = sidebearingY + y + wsoffsetY; stems[numstems].dx = 0.0; stems[numstems].dy = dy; ComputeStem(numstems); numstems++; } return(0); } /* |- x dx VSTEM |- */ /* Declares the horizontal range of a vertical stem zone */ /* between coordinates x and x + dx */ /* x is relative to the left sidebearing point */ static int VStem(x, dx) DOUBLE x, dx; { IfTrace2((FontDebug), "Vstem %f %f\n", x, dx); if (ProcessHints) { if (numstems >= MAXSTEMS) Error0i("VStem: Too many hints\n"); if (dx < 0.0) {x += dx; dx = -dx;} stems[numstems].vertical = TRUE; stems[numstems].x = sidebearingX + x + wsoffsetX; stems[numstems].y = 0.0; stems[numstems].dx = dx; stems[numstems].dy = 0.0; ComputeStem(numstems); numstems++; } return(0); } /* |- dx dy RLINETO |- */ /* Behaves like RLINETO in PostScript */ static int RLineTo(dx, dy) DOUBLE dx, dy; { long pindex = 0; /* compute hinting for previous segment! */ FindStems( currx, curry, currx-ppoints[numppoints-2].x, curry-ppoints[numppoints-2].y, dx, dy); /* Allocate a new path point and pre-setup data */ pindex = nextPPoint(); ppoints[pindex].x = currx + dx; ppoints[pindex].y = curry + dy; ppoints[pindex].ax = ppoints[pindex].x; ppoints[pindex].ay = ppoints[pindex].y; ppoints[pindex].type = PPOINT_LINE; ppoints[pindex].hinted = 0; /* update ideal position */ currx += dx; curry += dy; return(0); } /* |- dx1 dy1 dx2 dy2 dx3 dy3 RRCURVETO |- */ /* Relative RCURVETO, equivalent to dx1 dy1 */ /* (dx1+dx2) (dy1+dy2) (dx1+dx2+dx3) */ /* (dy1+dy2+dy3) RCURVETO in PostScript */ static int RRCurveTo(dx1, dy1, dx2, dy2, dx3, dy3) DOUBLE dx1, dy1, dx2, dy2, dx3, dy3; { long pindex = 0; /* compute hinting for previous point! */ FindStems( currx, curry, currx-ppoints[numppoints-2].x, curry-ppoints[numppoints-2].y, dx1, dy1); /* Allocate three new path points and pre-setup data */ pindex = nextPPoint(); ppoints[pindex].x = currx + dx1; ppoints[pindex].y = curry + dy1; ppoints[pindex].ax = ppoints[pindex].x; ppoints[pindex].ay = ppoints[pindex].y; ppoints[pindex].type = PPOINT_BEZIER_B; ppoints[pindex].hinted = 0; /* update ideal position */ currx += dx1; curry += dy1; /* compute hinting for previous point! */ FindStems( currx, curry, currx-ppoints[numppoints-2].x, curry-ppoints[numppoints-2].y, dx2, dy2); pindex = nextPPoint(); ppoints[pindex].x = currx + dx2; ppoints[pindex].y = curry + dy2; ppoints[pindex].ax = ppoints[pindex].x; ppoints[pindex].ay = ppoints[pindex].y; ppoints[pindex].type = PPOINT_BEZIER_C; ppoints[pindex].hinted = 0; /* update ideal position */ currx += dx2; curry += dy2; /* compute hinting for previous point! */ FindStems( currx, curry, currx-ppoints[numppoints-2].x, curry-ppoints[numppoints-2].y, dx3, dy3); pindex = nextPPoint(); ppoints[pindex].x = currx + dx3; ppoints[pindex].y = curry + dy3; ppoints[pindex].ax = ppoints[pindex].x; ppoints[pindex].ay = ppoints[pindex].y; ppoints[pindex].type = PPOINT_BEZIER_D; ppoints[pindex].hinted = 0; /* update ideal position */ currx += dx3; curry += dy3; return(0); } /* - CLOSEPATH |- */ /* Closes a subpath WITHOUT repositioning the */ /* current point */ static int DoClosePath() { long pindex = 0; long i = 0; long tmpind; double deltax = 0.0; double deltay = 0.0; /* If this ClosePath command together with the starting point of this path completes to a segment aligned to a stem, we would miss hinting for this point. --> Check and explicitly care for this! */ /* 1. Step back in the point list to the last moveto-point */ i = numppoints - 1; while ( (i > 0) && (ppoints[i].type != PPOINT_MOVE ) ) { --i; } /* 2. Re-hint starting point and hint current point */ if ( ppoints[i].type == PPOINT_MOVE) { deltax = ppoints[i].x - ppoints[numppoints-1].x; deltay = ppoints[i].y - ppoints[numppoints-1].y; /* save nummppoints and reset to move point */ tmpind = numppoints; numppoints = i + 1; /* re-hint starting point of current subpath (uses the value of numppoints!) */ FindStems( ppoints[i].x, ppoints[i].y, deltax, deltay, ppoints[i+1].x-ppoints[i].x, ppoints[i+1].y-ppoints[i].y); /* restore numppoints and setup hinting for current point */ numppoints = tmpind; FindStems( currx, curry, currx-ppoints[numppoints-2].x, curry-ppoints[numppoints-2].y, deltax, deltay); } /* Allocate a new path point and pre-setup data */ pindex = nextPPoint(); ppoints[pindex].x = currx; ppoints[pindex].y = curry; ppoints[pindex].ax = ppoints[pindex-1].x; ppoints[pindex].ay = ppoints[pindex-1].y; ppoints[pindex].type = PPOINT_CLOSEPATH; ppoints[pindex].hinted = 0; return(0); } /* subr# CALLSUBR - */ /* Calls a CharString subroutine with index */ /* subr# from the Subrs array */ static int CallSubr(subrno) int subrno; { IfTrace2((FontDebug), "CallSubr %d (CallStackSize=%d)\n", subrno, CallTop); if ((subrno < 0) || (subrno >= SubrsP->len)) Error0i("CallSubr: subrno out of range\n"); PushCall(CharStringP, strindex, r); CharStringP = &SubrsP->data.arrayP[subrno]; StartDecrypt(); return(0); } /* - RETURN - */ /* Returns from a Subrs array CharString */ /* subroutine called with CALLSUBR */ static int Return() { IfTrace0((FontDebug), "Return\n"); PopCall(&CharStringP, &strindex, &r); return(0); } /* - ENDCHAR |- */ /* Finishes a CharString outline */ /* Executes SETCHACHEDEVICE using a bounding box */ /* it computes directly from the character outline */ /* and using the width information acquired from a previous */ /* HSBW or SBW. It then calls a special version of FILL */ /* or STROKE depending on the value of PaintType in the */ /* font dictionary */ static int EndChar() { long pindex = 0; IfTrace0((FontDebug), "EndChar\n"); /* There is no need to compute and set bounding box for the cache, since XIMAGER does that on the fly. */ /* Allocate a new path point and pre-setup data. Note: For this special case, we use the variables that usually store hinted coordinates for the escapement of the character. It is required in handleCurrentSegment(). */ pindex = nextPPoint(); ppoints[pindex].x = currx; ppoints[pindex].y = curry; ppoints[pindex].ax = escapementX; ppoints[pindex].ay = escapementY; ppoints[pindex].type = PPOINT_ENDCHAR; ppoints[pindex].hinted = -1; return(0); } /* |- dx dy RMOVETO |- */ /* Behaves like RMOVETO in PostScript */ static int RMoveTo(dx,dy) DOUBLE dx,dy; { long pindex = 0; /* Compute hinting for this path point! */ if ( numppoints == 1 ) { /* Since RMoveTo for this case starts a new path segment (flex-constructs have already been handled), the current point is hinted here only taking the next point into account, but not the previous. Later on, in DoClosePath(), we'll step back to this point and the position might be rehinted. */ FindStems( currx, curry, 0, 0, dx, dy); } else { FindStems( currx, curry, ppoints[numppoints-2].x, ppoints[numppoints-2].y, dx, dy); } /* Allocate a new path point and pre-setup data */ pindex = nextPPoint(); ppoints[pindex].x = currx + dx; ppoints[pindex].y = curry + dy; ppoints[pindex].ax = ppoints[pindex].x; ppoints[pindex].ay = ppoints[pindex].y; ppoints[pindex].type = PPOINT_MOVE; ppoints[pindex].hinted = 0; /* update ideal position */ currx += dx; curry += dy; return 0; } /* - DOTSECTION |- */ /* Brackets an outline section for the dots in */ /* letters such as "i", "j", and "!". */ static int DotSection() { IfTrace0((FontDebug), "DotSection\n"); InDotSection = !InDotSection; return(0); } /* |- asb adx ady bchar achar SEAC |- */ /* Standard Encoding Accented Character. */ static int Seac(asb, adx, ady, bchar, achar) DOUBLE asb, adx, ady; unsigned char bchar, achar; { int Code; long pindex = 0; isseac = 1; seacaccent = achar; seacbase = bchar; IfTrace4((FontDebug), "SEAC %f %f %f %d ", asb, adx, ady, bchar); IfTrace1((FontDebug), "%d\n", achar); /* Move adx - asb, ady over and up from base char's sbpoint. */ /* (We use adx - asb to counteract the accents sb shift.) */ /* The variables accentoffsetX/Y modify sidebearingX/Y in Sbw(). */ /* Note that these incorporate the base character's sidebearing shift by */ /* using the current sidebearingX, Y values. */ accentoffsetX = adx - asb; accentoffsetY = ady; /* Set path = NULL to avoid complaints from Sbw(). */ path = NULL; /* Go find the CharString for the accent's code via an upcall */ CharStringP = GetType1CharString(Environment, achar); if (CharStringP == NULL) { Error1i("Invalid accent ('%03o) in SEAC\n", achar); } StartDecrypt(); ClearStack(); ClearPSFakeStack(); ClearCallStack(); for (;;) { if (!DoRead(&Code)) break; Decode(Code); if (errflag) return(0); } /* Allocate a new path point. Data in this case is not relevant in handleSegment(), we merely insert a snap() in order to return to origin of the accent char. */ pindex = nextPPoint(); ppoints[pindex].x = accentoffsetX; ppoints[pindex].y = accentoffsetY; ppoints[pindex].ax = accentoffsetX; ppoints[pindex].ay = accentoffsetY; ppoints[pindex].type = PPOINT_SEAC; ppoints[pindex].hinted = 0; /* We must reset these to null now. */ accentoffsetX = accentoffsetY = 0; /* go find the CharString for the base char's code via an upcall */ CharStringP = GetType1CharString(Environment, bchar); StartDecrypt(); ClearStack(); ClearPSFakeStack(); ClearCallStack(); InitStems(); for (;;) { if (!DoRead(&Code)) break; Decode(Code); if (errflag) return(0); } return(0); } /* |- sbx sby wx wy SBW |- */ /* Set the left sidebearing point to (sbx,sby), */ /* set the character width vector to (wx,wy). */ static int Sbw(sbx, sby, wx, wy) DOUBLE sbx, sby, wx, wy; { long pindex = 0; IfTrace4((FontDebug), "SBW %f %f %f %f\n", sbx, sby, wx, wy); escapementX = wx; /* Character width vector */ escapementY = wy; /* Sidebearing values are sbx, sby args, plus accent offset from Seac(). */ sidebearingX = sbx + accentoffsetX; sidebearingY = sby + accentoffsetY; currx = sidebearingX; curry = sidebearingY; /* path = Join(path, Loc(CharSpace, sidebearingX, sidebearingY)); if (ProcessHints) { hcurrx = sidebearingX; hcurry = sidebearingY; } */ /* Allocate a path point and setup. Note: In this special case, we store the char escapement in the members ax and ay. They are required in handleCurrentSegment(). Hinting is not required for SBW, anyhow! */ pindex = nextPPoint(); ppoints[pindex].x = currx; ppoints[pindex].y = curry; ppoints[pindex].ax = wx; ppoints[pindex].ay = wy; ppoints[pindex].type = PPOINT_SBW; ppoints[pindex].hinted = -1; /* indicate that point is not to be hinted */ return(0); } /* num1 num2 DIV quotient */ /* Behaves like DIV in the PostScript language */ static DOUBLE Div(num1, num2) DOUBLE num1, num2; { IfTrace2((FontDebug), "Div %f %f\n", num1, num2); return(num1 / num2); } /* The following four subroutines (FlxProc, FlxProc1, FlxProc2, and HintReplace) are C versions of the OtherSubrs Programs, which were were published in the Adobe Type 1 Font Format book. The Flex outline fragment is described by c1: (x0, y0) = c3: (x0, yshrink(y0)) or (xshrink(x0), y0) " (x1, y1) = " (x1, yshrink(y1)) or (xshrink(x1), y1) " (x2, y2) - reference point c2: (x0, y0) = c4: (x0, yshrink(y0)) or (xshrink(x0), y0) " (x1, y1) = " (x1, yshrink(y1)) or (xshrink(x1), y1) " (x2, y2) = " (x2, y2), rightmost endpoint c3: (x0, y0) - control point, 1st Bezier curve " (x1, y1) - control point, -"- " (x2, y2) - end point, -"- c4: (x0, y0) - control point, 2nd Bezier curve " (x1, y1) - control point, -"- " (x2, y2) - end point, -"- ep: (epY, epX) - final endpoint (should be same as c4: (x2, y2)) idmin - minimum Flex height (1/100 pixel) at which to render curves */ #define dtransform(dxusr,dyusr,dxdev,dydev) { \ register struct segment *point = Loc(CharSpace, dxusr, dyusr); \ QueryLoc(point, IDENTITY, dxdev, dydev); \ Destroy(point); \ } #define itransform(xdev,ydev,xusr,yusr) { \ register struct segment *point = Loc(IDENTITY, xdev, ydev); \ QueryLoc(point, CharSpace, xusr, yusr); \ Destroy(point); \ } #define transform(xusr,yusr,xdev,ydev) dtransform(xusr,yusr,xdev,ydev) #define PaintType (0) #define xshrink(x) ((x - c4x2) * shrink +c4x2) #define yshrink(y) ((y - c4y2) * shrink +c4y2) #define PickCoords(flag) \ if (flag) { /* Pick "shrunk" coordinates */ \ x0 = c1x0; y0 = c1y0; \ x1 = c1x1; y1 = c1y1; \ x2 = c1x2; y2 = c1y2; \ x3 = c2x0; y3 = c2y0; \ x4 = c2x1; y4 = c2y1; \ x5 = c2x2; y5 = c2y2; \ } else { /* Pick original coordinates */ \ x0 = c3x0; y0 = c3y0; \ x1 = c3x1; y1 = c3y1; \ x2 = c3x2; y2 = c3y2; \ x3 = c4x0; y3 = c4y0; \ x4 = c4x1; y4 = c4y1; \ x5 = c4x2; y5 = c4y2; \ } /* FlxProc() = OtherSubrs[0]; Main part of Flex */ /* Calling sequence: 'idmin epX epY 3 0 callothersubr' */ /* Computes Flex values, and renders the Flex path, */ /* and returns (leaves) ending coordinates on stack */ static void FlxProc(c1x2, c1y2, c3x0, c3y0, c3x1, c3y1, c3x2, c3y2, c4x0, c4y0, c4x1, c4y1, c4x2, c4y2, epY, epX, idmin) DOUBLE c1x2, c1y2; DOUBLE c3x0, c3y0, c3x1, c3y1, c3x2, c3y2; DOUBLE c4x0, c4y0, c4x1, c4y1, c4x2, c4y2; DOUBLE epX, epY; int idmin; { DOUBLE dmin; DOUBLE c1x0, c1y0, c1x1, c1y1; DOUBLE c2x0, c2y0, c2x1, c2y1, c2x2, c2y2; char yflag; DOUBLE x0, y0, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5; DOUBLE cxx, cyx, cxy, cyy; /* Transformation matrix */ int flipXY; DOUBLE x, y; DOUBLE erosion = 1; /* Device parameter */ /* Erosion may have different value specified in 'internaldict' */ DOUBLE shrink; DOUBLE dX, dY; char erode; DOUBLE eShift; DOUBLE cx, cy; DOUBLE ex, ey; /* Our PPOINT list now contains 7 moveto commands which are about to be consumed by the Flex mechanism. --> Remove these seven elements (their values already reside on the PSFakeStack!) and approriately restore the current accumulated position. */ numppoints -= 7; currx = ppoints[numppoints-1].x; curry = ppoints[numppoints-1].y; if (ProcessHints) { dmin = TYPE1_ABS(idmin) / 100.0; /* Minimum Flex height in pixels */ c2x2 = c4x2; c2y2 = c4y2; /* Point c2 = c4 */ yflag = FABS(c1y2 - c3y2) > FABS(c1x2 - c3x2); /* Flex horizontal? */ QuerySpace(CharSpace, &cxx, &cyx, &cxy, &cyy); /* Transformation matrix */ if (FABS(cxx) < 0.00001 || FABS(cyy) < 0.00001) flipXY = -1; /* Char on side */ else if (FABS(cyx) < 0.00001 || FABS(cxy) < 0.00001) flipXY = 1; /* Char upright */ else flipXY = 0; /* Char at angle */ if (yflag) { /* Flex horizontal */ if (flipXY == 0 || c3y2 == c4y2) { /* Char at angle or Flex height = 0 */ PickCoords(FALSE); /* Pick original control points */ } else { shrink = FABS((c1y2 - c4y2) / (c3y2 - c4y2)); /* Slope */ c1x0 = c3x0; c1y0 = yshrink(c3y0); c1x1 = c3x1; c1y1 = yshrink(c3y1); c2x0 = c4x0; c2y0 = yshrink(c4y0); c2x1 = c4x1; c2y1 = yshrink(c4y1); dtransform(0.0, ROUND(c3y2-c1y2), &x, &y); /* Flex height in pixels */ dY = FABS((flipXY == 1) ? y : x); PickCoords(dY < dmin); /* If Flex small, pick 'shrunk' control points */ if (FABS(y2 - c1y2) > 0.001) { /* Flex 'non-zero'? */ transform(c1x2, c1y2, &x, &y); if (flipXY == 1) { cx = x; cy = y; } else { cx = y; cy = x; } dtransform(0.0, ROUND(y2-c1y2), &x, &y); dY = (flipXY == 1) ? y : x; if (ROUND(dY) != 0) dY = ROUND(dY); else dY = (dY < 0) ? -1 : 1; erode = PaintType != 2 && erosion >= 0.5; if (erode) cy -= 0.5; ey = cy + dY; ey = CEIL(ey) - ey + FLOOR(ey); if (erode) ey += 0.5; if (flipXY == 1) { itransform(cx, ey, &x, &y); } else { itransform(ey, cx, &x, &y); } eShift = y - y2; y1 += eShift; y2 += eShift; y3 += eShift; } } } else { /* Flex vertical */ if (flipXY == 0 || c3x2 == c4x2) { /* Char at angle or Flex height = 0 */ PickCoords(FALSE); /* Pick original control points */ } else { shrink = FABS((c1x2 - c4x2) / (c3x2 - c4x2)); /* Slope */ c1x0 = xshrink(c3x0); c1y0 = c3y0; c1x1 = xshrink(c3x1); c1y1 = c3y1; c2x0 = xshrink(c4x0); c2y0 = c4y0; c2x1 = xshrink(c4x1); c2y1 = c4y1; dtransform(ROUND(c3x2 - c1x2), 0.0, &x, &y); /* Flex height in pixels */ dX = FABS((flipXY == -1) ? y : x); PickCoords(dX < dmin); /* If Flex small, pick 'shrunk' control points */ if (FABS(x2 - c1x2) > 0.001) { transform(c1x2, c1y2, &x, &y); if (flipXY == -1) { cx = y; cy = x; } else { cx = x; cy = y; } dtransform(ROUND(x2-c1x2), 0.0, &x, &y); dX = (flipXY == -1) ? y : x; if (ROUND(dX) != 0) dX = ROUND(dX); else dX = (dX < 0) ? -1 : 1; erode = PaintType != 2 && erosion >= 0.5; if (erode) cx -= 0.5; ex = cx + dX; ex = CEIL(ex) - ex + FLOOR(ex); if (erode) ex += 0.5; if (flipXY == -1) { itransform(cy, ex, &x, &y); } else { itransform(ex, cy, &x, &y); } eShift = x - x2; x1 += eShift; x2 += eShift; x3 += eShift; } } } if (x2 == x5 || y2 == y5) { RLineTo( x5 - currx, y5 - curry); \ } else { RRCurveTo( x0 - currx, y0 - curry, x1 - x0, y1 - y0, x2 - x1, y2 - y1); RRCurveTo( x3 - currx, y3 - curry, x4 - x3, y4 - y3, x5 - x4, y5 - y4); } } else { /* ProcessHints is off */ PickCoords(FALSE); /* Pick original control points */ RRCurveTo( x0 - currx, y0 - curry, x1 - x0, y1 - y0, x2 - x1, y2 - y1); RRCurveTo( x3 - currx, y3 - curry, x4 - x3, y4 - y3, x5 - x4, y5 - y4); } PSFakePush(epY); PSFakePush(epX); } /* FlxProc1() = OtherSubrs[1]; Part of Flex */ /* Calling sequence: '0 1 callothersubr' */ /* Saves and clears path, then restores currentpoint */ static void FlxProc1() { /* Since we are now building the path point list, there's nothing to do here! */ return; } /* FlxProc2() = OtherSubrs[2]; Part of Flex */ /* Calling sequence: '0 2 callothersubr' */ /* Returns currentpoint on stack */ static void FlxProc2() { /* Push CurrentPoint on fake PostScript stack */ PSFakePush( ppoints[numppoints-1].x); PSFakePush( ppoints[numppoints-1].y); } /* HintReplace() = OtherSubrs[3]; Hint Replacement */ /* Calling sequence: 'subr# 1 3 callothersubr pop callsubr' */ /* Reinitializes stem hint structure */ static void HintReplace() { /* Effectively retire the current stems, but keep them around for */ /* revhint use in case we are in a stem when we replace hints. */ currstartstem = numstems; /* 'subr#' is left on PostScript stack (for 'pop callsubr') */ } /* arg1 ... argn n othersubr# CALLOTHERSUBR - */ /* Make calls on the PostScript interpreter (or call equivalent C code) */ /* NOTE: The n arguments have been pushed on the fake PostScript stack */ static int CallOtherSubr(othersubrno) int othersubrno; { IfTrace1((FontDebug), "CallOtherSubr %d\n", othersubrno); switch(othersubrno) { case 0: /* OtherSubrs[0]; Main part of Flex */ if (PSFakeTop < 16) Error0i("CallOtherSubr: PSFakeStack low"); ClearPSFakeStack(); FlxProc( PSFakeStack[0], PSFakeStack[1], PSFakeStack[2], PSFakeStack[3], PSFakeStack[4], PSFakeStack[5], PSFakeStack[6], PSFakeStack[7], PSFakeStack[8], PSFakeStack[9], PSFakeStack[10], PSFakeStack[11], PSFakeStack[12], PSFakeStack[13], PSFakeStack[14], PSFakeStack[15], (int) PSFakeStack[16] ); break; case 1: /* OtherSubrs[1]; Part of Flex */ FlxProc1(); break; case 2: /* OtherSubrs[2]; Part of Flex */ FlxProc2(); break; case 3: /* OtherSubrs[3]; Hint Replacement */ HintReplace(); break; case 12: /* OtherSubrs[12]: Counter Control Hinting */ /* We do nothing, because later OtherSubrs[13] will remove data from the PS-stack */ break; case 13: /* We pop all elements from PSFakeStack. They may either have been left from previous calls to OtherSubr #12 or have been pushed for this call */ ClearPSFakeStack(); break; default: { /* call OtherSubrs[4] or higher if PostScript is present */ } } return(0); } /* |- x y SETCURRENTPOINT |- */ /* Sets the current point to (x,y) in absolute */ /* character space coordinates without per- */ /* forming a CharString MOVETO command */ static int SetCurrentPoint(x, y) DOUBLE x, y; { IfTrace2((FontDebug), "SetCurrentPoint %f %f\n", x, y); currx = x; curry = y; return(0); } /* The Type1Char routine for use by PostScript. */ /************************************************/ struct xobject *Type1Char(psfont *env, struct XYspace *S, psobj *charstrP, psobj *subrsP, psobj *osubrsP, struct blues_struct *bluesP, int *modeP, char *charname, float strokewidth, int decodeonly) { int Code; long i = 0; double xp, yp; #ifdef DUMPDEBUGPATH char fnbuf[128]; #endif struct segment* p; /* Reset SEAC querying variables */ isseac = 0; seacbase = 0; seacaccent = 0; /* Reset point list */ ppoints = NULL; numppoints = 0; numppointchunks = 0; /* disable hinting for stroking */ if ( strokewidth != 0.0f ) ProcessHints = 0; if ( env->fontInfoP[PAINTTYPE].value.data.integer == 1 ) ProcessHints = 0; path = NULL; apath = NULL; errflag = FALSE; if ( S == NULL ) { S=(struct XYspace *) IDENTITY; } /* Make parameters available to all Type1 routines */ currentchar=charname; Environment = (char *)env; CharSpace = S; /* used when creating path elements */ CharStringP = charstrP; SubrsP = subrsP; OtherSubrsP = osubrsP; ModeP = modeP; blues = bluesP; if ( decodeonly == 0 ) { QuerySpace( S, &scxx, &scyx, &scxy, &scyy); /* Transformation matrix */ p = ILoc( S, 1, 0); QueryLoc(p, IDENTITY, &xp, &yp); up = FABS(xp); size = scxx * 1000.0; #ifdef DUMPDEBUGPATH sprintf( fnbuf, "t1dump_%s_%f.eps", charname, size); psfile = fopen( fnbuf, "wb"); if ( psfile != NULL ) { PSDumpProlog( psfile); fprintf( psfile, "T1LibDict begin\n\ngsave\n%f t1SetupSize\nt1PreparePage\n", size); } #endif } /* compute the alignment zones */ SetRasterFlags(); ComputeAlignmentZones(); StartDecrypt(); ClearStack(); ClearPSFakeStack(); ClearCallStack(); InitStems(); /* reset variables */ currx = curry = 0.0; hcurrx = hcurry = 0.0; escapementX = escapementY = 0; sidebearingX = sidebearingY = 0; accentoffsetX = accentoffsetY = 0; wsoffsetX = wsoffsetY = 0; /* No shift to preserve whitspace. */ wsset = 0; /* wsoffsetX,Y haven't been set yet. */ for (;;) { if (!DoRead(&Code)) break; Decode(Code); if (errflag) break; } if ( decodeonly != 0 ) { /* OK, character description is now on stack, finish ... */ return NULL; } /* We now have a point list in absolute charspace coordinates. Adjust non-hinted points to suppress hinting artifacts and generate path. */ for ( i=0; ifontInfoP[PAINTTYPE].value.data.integer == 0 ) { /* For this special debug case, we generate both a filled and a stroked path!. */ createStrokePath( strokewidth, SUBPATH_CLOSED); createFillPath(); } else if ( env->fontInfoP[PAINTTYPE].value.data.integer == 1 ) { /* PaintType = 1 indicates stroked font. If strokewidth is 0.0f, we stroke using the font's internal strokewidth. Otherwise, the user supplied value is used. */ if ( strokewidth != 0.0f ) createStrokePath( strokewidth, SUBPATH_OPEN); else createStrokePath( env->fontInfoP[STROKEWIDTH].value.data.real, SUBPATH_OPEN); } #else if ( env->fontInfoP[PAINTTYPE].value.data.integer == 0 ) { /* PaintType = 0 indicates filled font. Hence, a strokewidth value other than 0.0 indicates the character is to be stroked instead of to be filled. */ if ( strokewidth != 0.0f ) createStrokePath( strokewidth, SUBPATH_CLOSED); else createFillPath(); } else if ( env->fontInfoP[PAINTTYPE].value.data.integer == 1 ) { /* PaintType = 1 indicates stroked font. If strokewidth is 0.0f, we stroke using the font's internal strokewidth. Otherwise, the user supplied value is used. */ if ( strokewidth != 0.0f ) createStrokePath( strokewidth, SUBPATH_OPEN); else createStrokePath( env->fontInfoP[STROKEWIDTH].value.data.real, SUBPATH_OPEN); } #endif /* check and handle accented char */ if ( apath != NULL ) { path = Join( apath, path); } /* Report a possible error: */ *modeP=errflag; /* Clean up if an error has occurred */ if (errflag) { if (path != NULL) { Destroy(path); /* Reclaim storage */ path = NULL; /* Indicate that character could not be built */ } } #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { PSDumpEpilog( psfile); fclose( psfile); psfile = 0; } #endif /* Cleanup ppoints */ if ( ppoints != NULL ) { free( ppoints); ppoints = NULL; numppoints = 0; } return((struct xobject *) path); } /* We add a function to implement underlining in Type1-Routines. */ struct xobject *Type1Line(psfont *env, struct XYspace *S, float line_position, float line_thickness, float line_length, float strokewidth) { /* Reset point list */ ppoints = NULL; numppoints = 0; numppointchunks = 0; path = NULL; apath = NULL; errflag = FALSE; /* Make parameters available to all Type1 routines */ Environment = (char *)env; CharSpace = S; /* used when creating path elements */ currx = curry = 0; escapementX = escapementY = 0; sidebearingX = sidebearingY = 0; /* We have to initialize the stems-structures because the lineto commands refer to them! */ SetRasterFlags(); InitStems(); /* Draw Character */ Sbw(-1.0*line_length, 0.0, 0.0, 0.0); RMoveTo( 0.0, (double) (line_position+0.5*line_thickness)); RLineTo( 0.0, (double) -line_thickness); RLineTo( (double) line_length, 0.0); RLineTo( 0.0, (double) line_thickness); DoClosePath(); EndChar(); /* Create path */ if ( strokewidth != 0.0f ) createStrokePath( strokewidth, SUBPATH_CLOSED); else createFillPath(); /* Cleanup ppoints */ if ( ppoints != NULL ) { free( ppoints); ppoints = NULL; } return((struct xobject *)path); } /* Adjust the points of a given cubic Bezier Spline so that the geometric relation of points B and C to A and D remain qualitatively the same. This reduces hinting artifacts at low resolutions. */ static void adjustBezier( long pindex) { double deltax = 0.0; /* x distance between point A and D */ double deltay = 0.0; /* y distance between point A and D */ double adeltax = 0.0; /* x distance between hinted point A and D */ double adeltay = 0.0; /* y distance between hinted point A and D */ deltax = ppoints[pindex].x - ppoints[pindex-3].x; deltay = ppoints[pindex].y - ppoints[pindex-3].y; adeltax = ppoints[pindex].ax - ppoints[pindex-3].ax; adeltay = ppoints[pindex].ay - ppoints[pindex-3].ay; if ( deltax == 0 || deltay == 0 ) return; ppoints[pindex-1].ax = ppoints[pindex-3].ax + (adeltax / deltax * (ppoints[pindex-1].x - ppoints[pindex-3].x)); ppoints[pindex-1].ay = ppoints[pindex-3].ay + (adeltay / deltay * (ppoints[pindex-1].y - ppoints[pindex-3].y)); ppoints[pindex-2].ax = ppoints[pindex-3].ax + (adeltax / deltax * (ppoints[pindex-2].x - ppoints[pindex-3].x)); ppoints[pindex-2].ay = ppoints[pindex-3].ay + (adeltay / deltay * (ppoints[pindex-2].y - ppoints[pindex-3].y)); return; } /* This function actually generates path segments. It is called after all hinting and adjustments have been performed. */ static void handleCurrentSegment( long pindex) { struct segment* B; struct segment* C; struct segment* D; struct segment* tmpseg; double dx1; double dy1; double dx2; double dy2; double dx3; double dy3; double adx1; double ady1; double adx2; double ady2; double adx3; double ady3; /* handle the different segment types in a switch-statement */ switch ( ppoints[pindex].type ) { case PPOINT_MOVE: /* handle a move segment */ dx1 = ppoints[pindex].x - ppoints[pindex-1].x; dy1 = ppoints[pindex].y - ppoints[pindex-1].y; adx1 = ppoints[pindex].ax - ppoints[pindex-1].ax; ady1 = ppoints[pindex].ay - ppoints[pindex-1].ay; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1rmoveto %% pindex = %ld\n", dx1*up, dy1*up, pindex); #endif if ( ProcessHints ) { IfTrace2((FontDebug), "RMoveTo(h) %f %f\n", adx1, ady1); B = Loc(CharSpace, adx1, ady1); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { fprintf( psfile, "%f %f t1hintedrmoveto %% pindex = %ld\n", adx1*up, ady1*up, pindex); } #endif } else { IfTrace2((FontDebug), "RMoveTo %f %f\n", dx1, dy1); B = Loc(CharSpace, dx1, dy1); } path = Join(path, B); break; case PPOINT_LINE: /* handle a line segment */ dx1 = ppoints[pindex].x - ppoints[pindex-1].x; dy1 = ppoints[pindex].y - ppoints[pindex-1].y; adx1 = ppoints[pindex].ax - ppoints[pindex-1].ax; ady1 = ppoints[pindex].ay - ppoints[pindex-1].ay; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1rlineto %% pindex = %ld\n", dx1*up, dy1*up, pindex); #endif if ( ProcessHints ) { IfTrace2((FontDebug), "RLineTo(h) %f %f\n", adx1, ady1); B = Loc(CharSpace, adx1, ady1); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { fprintf( psfile, "%f %f t1hintedrlineto %% pindex = %ld\n", adx1*up, ady1*up, pindex); } #endif } else { IfTrace2((FontDebug), "RLineTo %f %f\n", dx1, dy1); B = Loc(CharSpace, dx1, dy1); } path = Join(path, Line(B)); break; case PPOINT_BEZIER_B: /* handle a bezier segment (given by this and the following points) */ dx1 = ppoints[pindex].x - ppoints[pindex-1].x; dy1 = ppoints[pindex].y - ppoints[pindex-1].y; adx1 = ppoints[pindex].ax - ppoints[pindex-1].ax; ady1 = ppoints[pindex].ay - ppoints[pindex-1].ay; dx2 = ppoints[pindex+1].x - ppoints[pindex].x; dy2 = ppoints[pindex+1].y - ppoints[pindex].y; adx2 = ppoints[pindex+1].ax - ppoints[pindex].ax; ady2 = ppoints[pindex+1].ay - ppoints[pindex].ay; dx3 = ppoints[pindex+2].x - ppoints[pindex+1].x; dy3 = ppoints[pindex+2].y - ppoints[pindex+1].y; adx3 = ppoints[pindex+2].ax - ppoints[pindex+1].ax; ady3 = ppoints[pindex+2].ay - ppoints[pindex+1].ay; #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f %f %f %f %f t1rrcurveto %% pindex = %ld\n", dx1*up, dy1*up, dx2*up, dy2*up, dx3*up, dy3*up, pindex); #endif if (ProcessHints) { IfTrace4((FontDebug), "RRCurveTo %f %f %f %f ", adx1, ady1, adx2, ady2); IfTrace2((FontDebug), "%f %f\n", adx3, ady3); B = Loc(CharSpace, adx1, ady1); C = Loc(CharSpace, adx2, ady2); D = Loc(CharSpace, adx3, ady3); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { fprintf( psfile, "%f %f %f %f %f %f t1hintedrrcurveto %% pindex = %ld\n", adx1*up, ady1*up, adx2*up, ady2*up, adx3*up, ady3*up, pindex); } #endif } else { IfTrace4((FontDebug), "RRCurveTo %f %f %f %f ", dx1, dy1, dx2, dy2); IfTrace2((FontDebug), "%f %f\n", dx3, dy3); B = Loc(CharSpace, dx1, dy1); C = Loc(CharSpace, dx2, dy2); D = Loc(CharSpace, dx3, dy3); } /* Since XIMAGER is not completely relative, */ /* we need to add up the delta values */ C = Join(C, (struct segment *)Dup(B)); D = Join(D, (struct segment *)Dup(C)); path = Join(path, (struct segment *)Bezier(B, C, D)); break; case PPOINT_SBW: #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f %f %f t1sbw %% pindex = %ld\n", ppoints[pindex].x*up, ppoints[pindex].y*up, /* sidebearings */ ppoints[pindex].ax*up, ppoints[pindex].ay*up, /* escapements */ pindex ); #endif path = Join(path, Loc(CharSpace, ppoints[pindex].x, ppoints[pindex].y)); break; case PPOINT_CLOSEPATH: IfTrace0((FontDebug), "DoClosePath\n"); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { fprintf( psfile, "t1closepath %% pindex = %ld\n", pindex); if ( ProcessHints ) fprintf( psfile, "t1hintedclosepath %% pindex = %ld\n", pindex); } #endif tmpseg = Phantom(path); path = ClosePath(path); path = Join(Snap(path), tmpseg); break; case PPOINT_ENDCHAR: /* Perform a Closepath just in case the command was left out */ path = ClosePath(path); /* Set character width / escapement. It is stored in the vars for hinted coordinates. */ path = Join(Snap(path), Loc(CharSpace, ppoints[pindex].ax, ppoints[pindex].ay)); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "t1FinishPage\ngrestore %% pindex = %ld\n", pindex); #endif break; case PPOINT_SEAC: /* return to origin of accent */ apath = Snap(path); /* reset path to NULL */ path = NULL; break; default: /* We must be at the beginning of the path, that is, there is nothing to do! */ ; } return; } #ifdef DUMPDEBUGPATH static void PSDumpProlog( FILE* fp) { #include "t1chardump" } static void PSDumpEpilog( FILE* fp) { fputs( "\nend\n", fp); } #endif /* #ifdef DUMPDEBUGPATH */ /* Take the accumulated path point list and construct the path that is to be filled. */ static void createFillPath( void) { long i; for ( i=0; i stroked font */ if ( i == startind ) { intersectRight( i, 0.5*strokewidth, INTERSECT_NEXT); } else if ( i == lastind ) { intersectRight( i, 0.5*strokewidth, INTERSECT_PREVIOUS); } else { intersectRight( i, 0.5*strokewidth, INTERSECT_BOTH); } } else { intersectRight( i, 0.5*strokewidth, INTERSECT_BOTH); } #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "\nCurrent PathPoint: PP %ld (%s): (%f,%f), shape=%s;\n", i, pptypes[ppoints[i].type], ppoints[i].x, ppoints[i].y, ppshapes[ppoints[i].shape]); fprintf( stderr, " RightPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n", ppoints[i].x+ppoints[i].dxpr, ppoints[i].y+ppoints[i].dypr, ppoints[i].x+ppoints[i].dxnr, ppoints[i].y+ppoints[i].dynr, ppoints[i].x+ppoints[i].dxir, ppoints[i].y+ppoints[i].dyir); fprintf( stderr, " LeftPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n\n", ppoints[i].x-ppoints[i].dxpr, ppoints[i].y-ppoints[i].dypr, ppoints[i].x-ppoints[i].dxnr, ppoints[i].y-ppoints[i].dynr, ppoints[i].x-ppoints[i].dxir, ppoints[i].y-ppoints[i].dyir); #endif break; case PPOINT_LINE: transformOnCurvePathPoint( strokewidth, iprev, i, inext); if ( subpathclosed == 0 ) { /* open subpath --> stroked font */ if ( i == startind ) intersectRight( i, 0.5*strokewidth, INTERSECT_NEXT); else if ( i == lastind ) intersectRight( i, 0.5*strokewidth, INTERSECT_PREVIOUS); else intersectRight( i, 0.5*strokewidth, INTERSECT_BOTH); } else { intersectRight( i, 0.5*strokewidth, INTERSECT_BOTH); } #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "\nCurrent PathPoint: PP %ld (%s): (%f,%f), shape=%s;\n", i, pptypes[ppoints[i].type], ppoints[i].x, ppoints[i].y, ppshapes[ppoints[i].shape]); fprintf( stderr, " RightPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n", ppoints[i].x+ppoints[i].dxpr, ppoints[i].y+ppoints[i].dypr, ppoints[i].x+ppoints[i].dxnr, ppoints[i].y+ppoints[i].dynr, ppoints[i].x+ppoints[i].dxir, ppoints[i].y+ppoints[i].dyir); fprintf( stderr, " LeftPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n\n", ppoints[i].x-ppoints[i].dxpr, ppoints[i].y-ppoints[i].dypr, ppoints[i].x-ppoints[i].dxnr, ppoints[i].y-ppoints[i].dynr, ppoints[i].x-ppoints[i].dxir, ppoints[i].y-ppoints[i].dyir); #endif break; case PPOINT_BEZIER_B: break; case PPOINT_BEZIER_C: break; case PPOINT_BEZIER_D: transformOnCurvePathPoint( strokewidth, iprev, i, inext); if ( subpathclosed == 0 ) { /* open subpath --> stroked font */ if ( i == startind ) intersectRight( i, 0.5*strokewidth, INTERSECT_NEXT); else if ( i == lastind ) intersectRight( i, 0.5*strokewidth, INTERSECT_PREVIOUS); else intersectRight( i, 0.5*strokewidth, INTERSECT_BOTH); } else { intersectRight( i, 0.5*strokewidth, INTERSECT_BOTH); } #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "\nCurrent PathPoint: PP %ld (%s): (%f,%f), shape=%s;\n", i, pptypes[ppoints[i].type], ppoints[i].x, ppoints[i].y, ppshapes[ppoints[i].shape]); fprintf( stderr, " RightPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n", ppoints[i].x+ppoints[i].dxpr, ppoints[i].y+ppoints[i].dypr, ppoints[i].x+ppoints[i].dxnr, ppoints[i].y+ppoints[i].dynr, ppoints[i].x+ppoints[i].dxir, ppoints[i].y+ppoints[i].dyir); fprintf( stderr, " LeftPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n\n", ppoints[i].x-ppoints[i].dxpr, ppoints[i].y-ppoints[i].dypr, ppoints[i].x-ppoints[i].dxnr, ppoints[i].y-ppoints[i].dynr, ppoints[i].x-ppoints[i].dxir, ppoints[i].y-ppoints[i].dyir); #endif /* transform the preceding two offCurve points */ transformOffCurvePathPoint( strokewidth, i-2); break; case PPOINT_CLOSEPATH: break; default: break; } ++i; } /* copy the shift values from starting point to ending points that have not yet been handled */ for ( ; i<=stopind; i++) { ppoints[i].dxpr = ppoints[startind].dxpr; ppoints[i].dypr = ppoints[startind].dypr; ppoints[i].dxnr = ppoints[startind].dxnr; ppoints[i].dynr = ppoints[startind].dynr; ppoints[i].dxir = ppoints[startind].dxir; ppoints[i].dyir = ppoints[startind].dyir; ppoints[i].dist2prev = ppoints[startind].dist2prev; ppoints[i].dist2next = ppoints[startind].dist2next; if ( ppoints[i].type == PPOINT_BEZIER_D ) { transformOffCurvePathPoint( strokewidth, i-2); } ppoints[i].shape = ppoints[startind].shape; } #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "\nTransformation of PathPoints finished. Starting to construct paths ...\n\n"); #endif /* We now have computed the resulting shift values for each path point of the current subpath's right path. The values for the left path follow by negation. The path is still to be build! */ /******************************************************************************** ******************************************************************************** ***** ***** Construction of right path ***** ******************************************************************************** ********************************************************************************/ /* The leading move segment is treated separately. First check from which point the leading Moveto was called. This is safe even in cases where multiple moveto appear in a series. */ i = startind; while ( ppoints[i].type == PPOINT_MOVE ) --i; dx1 = ppoints[startind].x - (ppoints[i].x); dy1 = ppoints[startind].y - (ppoints[i].y); /* If the first node in the subpath is not concave, we may directly jump to the intersection right path point. Otherwise, we remain at the onCurve point because later, prolongation will happen. */ if ( ppoints[startind].shape != CURVE_CONCAVE ) { dx1 += ppoints[startind].dxir; dy1 += ppoints[startind].dyir; } #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1srmoveto %% pindex = %ld\n", dx1*up, dy1*up, startind); #endif B = Loc(CharSpace, dx1, dy1); path = Join(path, B); /* Now, handle the remaining path in a loop */ for ( i=startind+1; i<=stopind; ) { switch ( ppoints[i].type ) { case PPOINT_LINE: /* handle a line segment */ /* 1. Check and handle starting node */ linkNode( i-1, PATH_START, PATH_RIGHT); /* 2. Draw ideal isolated line segment */ #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "RP: Line from point %ld to %ld\n", i-1, i); #endif dx1 = ppoints[i].x + ppoints[i].dxpr - (ppoints[i-1].x + ppoints[i-1].dxnr); dy1 = ppoints[i].y + ppoints[i].dypr - (ppoints[i-1].y + ppoints[i-1].dynr); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1srlineto %% pindex = %ld\n", dx1*up, dy1*up, i); #endif B = Loc(CharSpace, dx1, dy1); path = Join(path, Line(B)); /* 3. Check and handle ending node */ linkNode( i, PATH_END, PATH_RIGHT); break; case PPOINT_BEZIER_B: break; case PPOINT_BEZIER_C: break; case PPOINT_BEZIER_D: /* handle a bezier segment (given by this and the previous 3 path points)! */ /* 1. Check and handle starting node */ linkNode( i-3, PATH_START, PATH_RIGHT); /* 2. Draw curve based on ideal point locations */ #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "RP: Curve from PP %ld to PP %ld to PP %ld to PP %ld\n", i-3, i-2, i-1, i); #endif dx1 = ppoints[i-2].x + ppoints[i-2].dxir - (ppoints[i-3].x + ppoints[i-3].dxnr); dy1 = ppoints[i-2].y + ppoints[i-2].dyir - (ppoints[i-3].y + ppoints[i-3].dynr); dx2 = ppoints[i-1].x + ppoints[i-1].dxir - (ppoints[i-2].x + ppoints[i-2].dxir); dy2 = ppoints[i-1].y + ppoints[i-1].dyir - (ppoints[i-2].y + ppoints[i-2].dyir); dx3 = ppoints[i].x + ppoints[i].dxpr - (ppoints[i-1].x + ppoints[i-1].dxir); dy3 = ppoints[i].y + ppoints[i].dypr - (ppoints[i-1].y + ppoints[i-1].dyir); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f %f %f %f %f t1srrcurveto %% pindex = %ld\n", dx1*up, dy1*up, dx2*up, dy2*up, dx3*up, dy3*up, i); #endif IfTrace4((FontDebug), "RRCurveTo %f %f %f %f ", dx1, dy1, dx2, dy2); IfTrace2((FontDebug), "%f %f\n", dx3, dy3); B = Loc(CharSpace, dx1, dy1); C = Loc(CharSpace, dx2, dy2); D = Loc(CharSpace, dx3, dy3); C = Join(C, (struct segment *)Dup(B)); D = Join(D, (struct segment *)Dup(C)); path = Join(path, (struct segment *)Bezier(B, C, D)); /* 3. Check and handle starting node */ linkNode( i, PATH_END, PATH_RIGHT); break; case PPOINT_CLOSEPATH: #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "RP: ClosePath command ignored\n"); #endif break; default: break; } ++i; } /******************************************************************************** ******************************************************************************** ***** ***** Close right path ***** ******************************************************************************** ********************************************************************************/ if ( subpathclosed != 0 ) { /* We are stroking an outline font to be filled */ if ( closepathatfirst == 0 ) { /* Because of the concavity issue, we may not simply use the closepath operator here. Instead we have to manage a possible prolongation manually if the closepath would cause a line segment. */ /* 1. Check and handle starting node */ linkNode( lastind, PATH_START, PATH_RIGHT); /* 2. Draw ideal isolated line segment */ dx1 = ppoints[startind].x + ppoints[startind].dxpr - (ppoints[lastind].x + ppoints[lastind].dxnr); dy1 = ppoints[startind].y + ppoints[startind].dypr - (ppoints[lastind].y + ppoints[lastind].dynr); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1srlineto %% pindex = %ld\n", dx1*up, dy1*up, startind); #endif B = Loc(CharSpace, dx1, dy1); path = Join(path, Line(B)); /* 3. Check and handle ending node */ linkNode( startind, PATH_END, PATH_RIGHT); } /* if ( closepathatfirst == 0) */ /* Now close path formally. Anyhow, this won't cause a line segment! */ #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { fprintf( psfile, "t1sclosepath %% Right Path finished, stepping to Left Path\n"); } #endif tmpseg = Phantom(path); path = ClosePath(path); path = Join(Snap(path), tmpseg); /******************************************************************************** ******************************************************************************** ***** ***** Stepping to beginning of left path ***** ******************************************************************************** ********************************************************************************/ /* If curve is concave at the subpath's starting point, the location is onCurve and the left path is convex, there. Conversely, if the curve is convex, the location is at the right intersection point and the left path will be concave so that the initial location must be onCurve. Hence, for both cases, we have to translate back once the intersection shift. If the curve is straight at the starting point, we directly jump from the right intersection point ot he left intersection point. */ if ( (ppoints[startind].shape == CURVE_CONCAVE) || (ppoints[startind].shape == CURVE_CONVEX) ) { dx1 = - ppoints[startind].dxir; dy1 = - ppoints[startind].dyir; } else { dx1 = - 2.0 * ppoints[startind].dxir; dy1 = - 2.0 * ppoints[startind].dyir; } #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1srmoveto %% pindex = %ld\n", dx1*up, dy1*up, startind); #endif B = Loc(CharSpace, dx1, dy1); path = Join(path, B); } /* if ( subpathclose != 0 */ else { /* We have a stroked font. In this case, a line segment has to be drawn */ if ( (ppoints[stopind].shape == CURVE_CONCAVE) || (ppoints[stopind].shape == CURVE_CONVEX) ) { dx1 = - ppoints[stopind].dxir; dy1 = - ppoints[stopind].dyir; } else { dx1 = - 2.0 * ppoints[stopind].dxir; dy1 = - 2.0 * ppoints[stopind].dyir; } #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1srlineto %% pindex = %ld\n", dx1*up, dy1*up, stopind); #endif B = Loc(CharSpace, dx1, dy1); path = Join(path, Line(B)); } /******************************************************************************** ******************************************************************************** ***** ***** Construction of left path ***** ******************************************************************************** ********************************************************************************/ /* Create left path. This is somewhat more complicated, because the order/direction has to be exchanged. */ #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "Constructing LeftPath: stopind=%ld, lastind=%ld, closepathatfirst=%d\n", stopind, lastind, closepathatfirst); #endif for ( i=stopind; i>=startind; ) { if ( subpathclosed != 0 ) { /* closed subpath --> filled font */ if ( i == stopind ) { ip = startind; if ( (closepathatfirst != 0) ) type = ppoints[ip].type; else type = PPOINT_NONE; } else if ( i == startind ) { ip = startind + 1; type = ppoints[ip].type; } else { ip = i + 1; type = ppoints[ip].type; } } else { /* open subpath --> stroked font */ type = ppoints[i].type; in = i - 1; } /* Step through path in inverted direction. Note: - ip is the index of the starting point, i the index of the ending point of the current segment. - If the path point is flagged "concave", then this reverts into "convex" in the left path and vice versa! - there is an index shift of 1 between closed and open subpaths. */ switch ( type ) { case PPOINT_MOVE: break; case PPOINT_LINE: /* handle a line segment */ if ( subpathclosed != 0 ) { segendind = i; segstartind = ip; } else { segstartind = i; segendind = in; } /* 1. Check and handle starting node */ linkNode( segstartind, PATH_START, PATH_LEFT); /* 2. Draw ideal isolated line segment */ #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "LP: Line from point %ld to %ld\n", segstartind, segendind); #endif dx1 = ppoints[segendind].x - ppoints[segendind].dxnr - (ppoints[segstartind].x - ppoints[segstartind].dxpr); dy1 = ppoints[segendind].y - ppoints[segendind].dynr - (ppoints[segstartind].y - ppoints[segstartind].dypr); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1srlineto %% pindex = %ld\n", dx1*up, dy1*up, segendind); #endif B = Loc(CharSpace, dx1, dy1); path = Join(path, Line(B)); /* 3. Check and handle ending node */ linkNode( segendind, PATH_END, PATH_LEFT); break; case PPOINT_BEZIER_B: break; case PPOINT_BEZIER_C: break; case PPOINT_BEZIER_D: /* handle a bezier segment (given by this and the previous 3 path points)! For bezier segments, we may not simply apply the intersection of previous and next candidate because that would damage the curve's layout. Instead, in cases where the candidate produced by intersection is not identical to the ideal point, we prolongate and link the distance with a line segment. */ /* 1. Check and handle starting node */ linkNode( ip, PATH_START, PATH_LEFT); /* 2. Draw ideal curve segment */ #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "LP: Curve from PP %ld to PP %ld to PP %ld to PP %ld\n", ip, ip-1, ip-2, ip-3); #endif /* Use ideal point locations for curve at starting and ending point: */ dx1 = ppoints[ip-1].x - ppoints[ip-1].dxir - (ppoints[ip].x - ppoints[ip].dxpr); dy1 = ppoints[ip-1].y - ppoints[ip-1].dyir - (ppoints[ip].y - ppoints[ip].dypr); dx2 = ppoints[ip-2].x - ppoints[ip-2].dxir - (ppoints[ip-1].x - ppoints[ip-1].dxir); dy2 = ppoints[ip-2].y - ppoints[ip-2].dyir - (ppoints[ip-1].y - ppoints[ip-1].dyir); dx3 = ppoints[ip-3].x - ppoints[ip-3].dxnr - (ppoints[ip-2].x - ppoints[ip-2].dxir); dy3 = ppoints[ip-3].y - ppoints[ip-3].dynr - (ppoints[ip-2].y - ppoints[ip-2].dyir); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f %f %f %f %f t1srrcurveto %% pindex = %ld\n", dx1*up, dy1*up, dx2*up, dy2*up, dx3*up, dy3*up, i); #endif IfTrace4((FontDebug), "RRCurveTo %f %f %f %f ", dx1, dy1, dx2, dy2); IfTrace2((FontDebug), "%f %f\n", dx3, dy3); B = Loc(CharSpace, dx1, dy1); C = Loc(CharSpace, dx2, dy2); D = Loc(CharSpace, dx3, dy3); C = Join(C, (struct segment *)Dup(B)); D = Join(D, (struct segment *)Dup(C)); path = Join(path, (struct segment *)Bezier(B, C, D)); /* 3. Check and handle ending node */ linkNode( ip-3, PATH_END, PATH_LEFT); break; case PPOINT_CLOSEPATH: /* Handle a ClosePath segment, if it had caused a line segment. Hence, actually, we handle a line segment here. */ if ( closepathatfirst == 1 ) { /* ignore this command */ break; } /* 1. Check and handle starting node */ linkNode( startind, PATH_START, PATH_LEFT); /* 2. Draw ideal isolated line segment */ #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "LP: Inverted ClosePath from point %ld to %ld\n", startind, lastind); #endif if ( subpathclosed != 0 ) { dx1 = ppoints[lastind].x - ppoints[lastind].dxnr - (ppoints[startind].x - ppoints[startind].dxpr); dy1 = ppoints[lastind].y - ppoints[lastind].dynr - (ppoints[startind].y - ppoints[startind].dypr); } else { dx1 = -(ppoints[i].x - ppoints[i].dxnr - (ppoints[ip].x - ppoints[ip].dxpr)); dy1 = -(ppoints[i].y - ppoints[i].dynr - (ppoints[ip].y - ppoints[ip].dypr)); } #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { if ( subpathclosed != 0 ) { fprintf( psfile, "%f %f t1srlineto %% (Inverted ClosePath, subpathclosed=1) pindex = %ld\n", dx1*up, dy1*up, lastind); } else { fprintf( psfile, "%f %f t1srlineto %% (Inverted ClosePath, subpathclosed=0) pindex = %ld\n", dx1*up, dy1*up, i); } } #endif B = Loc(CharSpace, dx1, dy1); path = Join(path, Line(B)); /* 3. Check and handle ending node */ linkNode( lastind, PATH_END, PATH_LEFT); break; default: break; } --i; } #ifdef DUMPDEBUGPATH if ( psfile != NULL ) { fprintf( psfile, "t1sclosepath\n"); } #endif tmpseg = Phantom(path); path = ClosePath(path); path = Join(Snap(path), tmpseg); /******************************************************************************** ******************************************************************************** ***** ***** Move to final position ***** ******************************************************************************** ********************************************************************************/ /* Step to back to starting point of this subpath. If closepathatfirst==0, the final closepath caused a line segment. In this case, we first have to step back that segment and proceed from this point. */ if ( ppoints[startind].shape == CURVE_CONVEX ) { /* In this case, left path is concave and the current location is at the onCurve point */ dx1 = 0.0; dy1 = 0.0; } else { /* OK, it seems to be the intersection point */ dx1 = ppoints[startind].dxir; dy1 = ppoints[startind].dyir; } /* We are now onCurve. If necessary step to the point where the closepath appeared. */ if ( closepathatfirst == 0 ) { dx1 += ppoints[lastind].x - ppoints[startind].x; dy1 += ppoints[lastind].y - ppoints[startind].y; } #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1srmoveto %% pindex = %ld\n", dx1*up, dy1*up, lastind); #endif B = Loc(CharSpace, dx1, dy1); path = Join(path, B); return; } /* Compute distance from OnCurve-points to their neighbouring points, fill in the respective entries dist2prev and dist2next in the ppoints[] structures and return the index of the last point in the current subpath which has a location different from the starting point of the subpath. */ static long computeDistances( long startind, long stopind, int subpathclosed) { long lastind = 0; double dx = 0.0; double dy = 0.0; long i = 0; int neighboured = 0; /* Handle first point as a special case */ /* distance to previous point. First, get index of previous point. */ lastind = stopind; if ( subpathclosed != 0 ) { if ( (ppoints[startind].x == ppoints[stopind].x) && (ppoints[startind].y == ppoints[stopind].y) ) { while ( (ppoints[lastind].x == ppoints[stopind].x) && (ppoints[lastind].y == ppoints[stopind].y)) --lastind; } else { lastind = stopind - 1; } } #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "computeDistance(): startind=%ld stopind=%ld, lastind=%ld, start.x=%f, start.y=%f, last.x=%f, last.y=%f\n", startind, stopind, lastind, ppoints[startind].x, ppoints[startind].y, ppoints[lastind].x, ppoints[lastind].y); #endif dx = ppoints[startind].x - ppoints[lastind].x; dy = ppoints[startind].y - ppoints[lastind].y; ppoints[startind].dist2prev = sqrt( dx*dx + dy*dy ); /* distance to next point */ dx = ppoints[startind+1].x - ppoints[startind].x; dy = ppoints[startind+1].y - ppoints[startind].y; ppoints[startind].dist2next = sqrt( dx*dx + dy*dy ); #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "Pre: Distance at point %ld: Prev=%f Next=%f\n", startind, ppoints[startind].dist2prev, ppoints[startind].dist2next); #endif for ( i = startind+1; i < lastind; i++ ) { if ( (ppoints[i].type == PPOINT_MOVE) || (ppoints[i].type == PPOINT_LINE) || (ppoints[i].type == PPOINT_BEZIER_D) ) { if ( neighboured ) { ppoints[i].dist2prev = ppoints[i-1].dist2next; } else { /* distance to previous point */ dx = ppoints[i].x - ppoints[i-1].x; dy = ppoints[i].y - ppoints[i-1].y; /* Take care of degenerated curves */ if ( (dx == 0.0) && (dy == 0.0) ) { dx = ppoints[i].x - ppoints[i-2].x; dy = ppoints[i].y - ppoints[i-2].y; if ( (dx == 0.0) && (dy == 0.0) ) { dx = ppoints[i].x - ppoints[i-3].x; dy = ppoints[i].y - ppoints[i-3].y; } } ppoints[i].dist2prev = sqrt( dx*dx + dy*dy ); } /* distance to next point */ dx = ppoints[i+1].x - ppoints[i].x; dy = ppoints[i+1].y - ppoints[i].y; /* Take care of degenerated curves */ if ( (dx == 0.0) && (dy == 0.0) ) { dx = ppoints[i+2].x - ppoints[i].x; dy = ppoints[i+2].y - ppoints[i].y; if ( (dx == 0.0) && (dy == 0.0) ) { dx = ppoints[i+3].x - ppoints[i].x; dy = ppoints[i+3].y - ppoints[i].y; } } ppoints[i].dist2next = sqrt( dx*dx + dy*dy ); neighboured = 1; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " Distance at point %ld: Prev=%f Next=%f\n", i, ppoints[i].dist2prev, ppoints[i].dist2next); #endif } else { neighboured = 0; } } /* We still have to handle the last point */ /* distance to previous point */ dx = ppoints[lastind].x - ppoints[lastind-1].x; dy = ppoints[lastind].y - ppoints[lastind-1].y; /* Take care of degenerated curves */ if ( (dx == 0.0) && (dy == 0.0) ) { dx = ppoints[lastind].x - ppoints[lastind-2].x; dy = ppoints[lastind].y - ppoints[lastind-2].y; if ( (dx == 0.0) && (dy == 0.0) ) { dx = ppoints[lastind].x - ppoints[lastind-3].x; dy = ppoints[lastind].y - ppoints[lastind-3].y; } } ppoints[lastind].dist2prev = sqrt( dx*dx + dy*dy ); /* distance to next point */ ppoints[lastind].dist2next = ppoints[startind].dist2prev; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "End: Distance at point %ld: Prev=%f Next=%f\n", lastind, ppoints[lastind].dist2prev, ppoints[lastind].dist2next); #endif return lastind; } /* */ static long handleNonSubPathSegments( long pindex) { /* handle the different segment types in a switch-statement */ switch ( ppoints[pindex].type ) { case PPOINT_SBW: #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f %f %f t1sbw %% pindex = %ld\n", ppoints[pindex].x*up, ppoints[pindex].y*up, /* sidebearings */ ppoints[pindex].ax*up, ppoints[pindex].ay*up, /* escapements */ pindex ); #endif path = Join(path, Loc(CharSpace, ppoints[pindex].x, ppoints[pindex].y)); return 1; break; case PPOINT_ENDCHAR: /* Perform a Closepath just in case the command was left out */ path = ClosePath(path); /* Set character width / escapement. It is stored in the vars for hinted coordinates. */ path = Join(Snap(path), Loc(CharSpace, ppoints[pindex].ax, ppoints[pindex].ay)); #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fputs( "t1FinishPage\n", psfile); #endif return 1; break; case PPOINT_SEAC: /* return to origin of accent */ apath = Snap(path); /* reset path to NULL */ path = NULL; return 1; break; default: /* not handled, return 0! */ ; } return 0; } /* Transform a path point according to the path's incoming angle, the path's outgoing angle and the parameter strokewidth. The computation is based on simple geometric considerations and makes use of the distance from the current point to the previous point and the next point respectively. Generally, each link to a path point induces its own candidate by simply widening the respective link orthogonally to strokewidth/2. This yields two displacement vectors (dx,dy) for the link from the previous point to the point under consideration (dxp, dyp) and and for the link from the current point to the next point (dxn, dyn). Later on, the two candidates are used to compute the resulting displacement as the intersection of the prolongated lines from before and behind the current point. Additionally, check whether the curve is concave or convex at this point. This is required for prolongation in the context of stroking. */ static void transformOnCurvePathPoint( double strokewidth, long prevind, long currind, long nextind) { double distxp; double distyp; double distxn; double distyn; double det; /* distxp = (ppoints[currind].y - ppoints[prevind].y); distyp = -(ppoints[currind].x - ppoints[prevind].x); distxn = (ppoints[nextind].y - ppoints[currind].y); distyn = -(ppoints[nextind].x - ppoints[currind].x); ppoints[currind].dxpr = distxp * strokewidth * 0.5 / ppoints[currind].dist2prev; ppoints[currind].dypr = distyp * strokewidth * 0.5 / ppoints[currind].dist2prev; ppoints[currind].dxnr = distxn * strokewidth * 0.5 / ppoints[currind].dist2next; ppoints[currind].dynr = distyn * strokewidth * 0.5 / ppoints[currind].dist2next; */ /* Note: When computing transformations of OnCurve points, we consider two special cases: 1) The OnCurve beginning or end point is equal to the neighboring control point of a Bezier-Segment. 2) This holds for beginning *and* end point. In this case the curve degenerates to a straight lines. Although this is deprecated by Adobe, fonts that use such constructions exist (e.g.m lower case 'n' of Univers 55). However, we do not care for segments that do not any escapement at all! */ distxp = (ppoints[currind].y - ppoints[prevind].y); distyp = -(ppoints[currind].x - ppoints[prevind].x); if ( (distxp == 0.0) && (distyp == 0.0) ) { distxp = (ppoints[currind].y - ppoints[prevind-1].y); distyp = -(ppoints[currind].x - ppoints[prevind-1].x); if ( (distxp == 0.0) && (distyp == 0.0) ) { distxp = (ppoints[currind].y - ppoints[prevind-2].y); distyp = -(ppoints[currind].x - ppoints[prevind-2].x); } } ppoints[currind].dxpr = distxp * strokewidth * 0.5 / ppoints[currind].dist2prev; ppoints[currind].dypr = distyp * strokewidth * 0.5 / ppoints[currind].dist2prev; distxn = (ppoints[nextind].y - ppoints[currind].y); distyn = -(ppoints[nextind].x - ppoints[currind].x); if ( (distxn == 0.0) && (distyn == 0.0) ) { distxn = (ppoints[nextind+1].y - ppoints[currind].y); distyn = -(ppoints[nextind+1].x - ppoints[currind].x); if ( (distxn == 0.0) && (distyn == 0.0) ) { distxn = (ppoints[nextind+2].y - ppoints[currind].y); distyn = -(ppoints[nextind+2].x - ppoints[currind].x); } } ppoints[currind].dxnr = distxn * strokewidth * 0.5 / ppoints[currind].dist2next; ppoints[currind].dynr = distyn * strokewidth * 0.5 / ppoints[currind].dist2next; /* Consider determinant of the two tangent vectors at this node in order to decide whether the curve is convex or cancave at this point. */ if ( (det = ((distxp * distyn) - (distxn * distyp))) < 0.0 ) { /* curve turns to the right */ ppoints[currind].shape = CURVE_CONCAVE; } else if ( det > 0.0 ) { /* curve turns to the left */ ppoints[currind].shape = CURVE_CONVEX; } else { /* curve is straight */ ppoints[currind].shape = CURVE_STRAIGHT; } return; } /* Compute a displacement for offCurve points, that is, for Bezier B and C points. This computation is not as simple as it might appear at a first glance and, depending on the actual curve parameters and the parameter strokewidth, it might be necessary to subdivide the curve. My mathematical background is not actually reliable in this context but it seems that in particular the angle that the curve runs through is important in this context. Since the Adobe Type 1 recommendations on font design include a rule which states that curves' end points should be located at extreme values, and consequently, that the angle of a curve segment should not be larger than 90 degrees, I have decided not to implement curve subdivision. This might lead to some deviations if fonts do not adhere to the Adobe recommendations. Anyways, I have never seen such fonts. This function is called for Bezier_B points and computes displacements for the B and C points at once. Fortunately, index cycling cannot happen here. When computing the B' C' off-curve points, special care against numerical instability is required. We assume that at least one of the two points can be computed in a stable way. The new Bezier B' and C' points can be considered as four degrees of freedom and we have to find 4 equations to be able to compute them. 1) We require the tangents slope at point A' to be identical to the slope at the point A of the ideally thin mathematical curve. 2) The same holds for the tangents slope at point D' with respect to point D. 3) We compute the following points P1: Equally subdivides the line A - B P2: Equally subdivides the line B - C P3: Equally subdivides the line C - D P4: Equally subdivides the line P1 - P2 P5: Equally subdivides the line P1 - P3 P6: Equally subdivides the line P4 - P5 This latter point is part of the curve and, moreover, the line P4 - P5 is tangent to the curve at that point. From this point, we compute a displacement for P6, orthogonally to the curve at that point and with length strokewidth/2. The resulting point is part of the delimiting path that makes up the thick curve. 4) We require that the tangent's slope at P6' equals the tangents slope at P6. Then, under certain further constraints as mentioned above, we compute the points B' and C' making use of the points A' and D' which have been transformed as onCurve points. By definition, for offCurve points, there is only one candidate. */ static void transformOffCurvePathPoint( double strokewidth, long currind) { double dtmp; double diameter; double dx; double dy; /* points defining the curve */ double pax; double pay; double pbx; double pby; double pcx; double pcy; double pdx; double pdy; /* auxiliary points from iterative Bezier construction */ double p1x; double p1y; double p2x; double p2y; double p3x; double p3y; double p4x; double p4y; double p5x; double p5y; double p6x; double p6y; /* already displaced / shifted onCurve points and the ones we are going to compute. */ double paxs; double pays; double pbxs; double pbys; double pcxs; double pcys; double pdxs; double pdys; /* The normal vector on the curve at t=1/2 */ double nabs; double nx; double ny; /* some variables for computations at point B' */ double bloc1x; double bloc1y; double bdir1x; double bdir1y; double bloc2x; double bloc2y; double bdir2x; double bdir2y; double bdet; double binvdet; double binvdir1x; double binvdir1y; /**/ double binvdir2x; double binvdir2y; /**/ double bmu; double bnu; /**/ /* some variables for computations at point C' */ double cloc1x; double cloc1y; double cdir1x; double cdir1y; double cloc2x; double cloc2y; double cdir2x; double cdir2y; double cdet; double cinvdet; double cinvdir1x; double cinvdir1y; /**/ double cinvdir2x; double cinvdir2y; /**/ double cmu; double cnu; /**/ diameter = strokewidth * 0.5; pax = ppoints[currind-1].x; pay = ppoints[currind-1].y; pbx = ppoints[currind].x; pby = ppoints[currind].y; pcx = ppoints[currind+1].x; pcy = ppoints[currind+1].y; pdx = ppoints[currind+2].x; pdy = ppoints[currind+2].y; p1x = (pax + pbx) * 0.5; p1y = (pay + pby) * 0.5; p2x = (pbx + pcx) * 0.5; p2y = (pby + pcy) * 0.5; p3x = (pcx + pdx) * 0.5; p3y = (pcy + pdy) * 0.5; p4x = (p1x + p2x) * 0.5; p4y = (p1y + p2y) * 0.5; p5x = (p2x + p3x) * 0.5; p5y = (p2y + p3y) * 0.5; p6x = (p4x + p5x) * 0.5; p6y = (p4y + p5y) * 0.5; /* We start by computing the shift of the onCurve points. It is not possible to use dxr / dyr of the ppoints-stucture entries. These values have been computed by intersection of both links to a path point. Here we need the ideal points of the thick isolated curve segment. We are aware that for Bezier splines, control point and OnCurve point might be identical! */ dx = (ppoints[currind].y - ppoints[currind-1].y) * strokewidth * 0.5 / ppoints[currind-1].dist2next; dy = - (ppoints[currind].x - ppoints[currind-1].x) * strokewidth * 0.5 / ppoints[currind-1].dist2next; if ( (dx == 0.0) && (dy == 0.0) ) { /* Bezier_A and Bezier_B are identical */ dx = (ppoints[currind+1].y - ppoints[currind-1].y) * strokewidth * 0.5 / ppoints[currind-1].dist2next; dy = - (ppoints[currind+1].x - ppoints[currind-1].x) * strokewidth * 0.5 / ppoints[currind-1].dist2next; } paxs = ppoints[currind-1].x + dx; pays = ppoints[currind-1].y + dy; dx = (ppoints[currind+2].y - ppoints[currind+1].y) * strokewidth * 0.5 / ppoints[currind+2].dist2prev; dy = - (ppoints[currind+2].x - ppoints[currind+1].x) * strokewidth * 0.5 / ppoints[currind+2].dist2prev; if ( (dx == 0.0) && (dy == 0.0) ) { /* Bezier_C and Bezier_D are identical */ dx = (ppoints[currind+2].y - ppoints[currind].y) * strokewidth * 0.5 / ppoints[currind+2].dist2prev; dy = - (ppoints[currind+2].x - ppoints[currind].x) * strokewidth * 0.5 / ppoints[currind+2].dist2prev; } pdxs = ppoints[currind+2].x + dx; pdys = ppoints[currind+2].y + dy; /* Next, we compute the right side normal vector at the curve point t=1/2, that is, at P6. */ nabs = diameter / sqrt(((p5x - p4x) * (p5x - p4x)) + ((p5y - p4y) * (p5y - p4y))); nx = (p5y - p4y) * nabs; ny = (p4x - p5x) * nabs; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "transformOffCurvePathPoint():\n"); fprintf( stderr, " A=(%f,%f), B=(%f,%f), C=(%f,%f), D=(%f,%f)\n", pax, pay, pbx, pby, pcx, pcy, pdx, pdy); fprintf( stderr, " PathInfo: Curve from PP %ld ... PP %ld ... PP %ld ... PP %ld. StrokeWidth=%f.\n", currind-1, currind, currind+1, currind+2, strokewidth); /* fprintf( stderr, "/xa %f def\n/ya %f def\n/xb %f def\n/yb %f def\n/xc %f def\n/yc %f def\n/xd %f def\n/yd %f def\n", pax, pay, pbx, pby, pcx, pcy, pdx, pdy); */ fprintf( stderr, " As=(%f,%f), Ds=(%f,%f)\n", paxs, pays, pdxs, pdys); fprintf( stderr, " p6=(%f,%f)\n", p6x, p6y); fprintf( stderr, " nx=%f, ny=%f, nabs=%f\n", nx, ny, nabs); fprintf( stderr, " p6s=(%f,%f)\n", p6x+nx, p6y+ny); #endif /* Compute two lines whose intersection will define point B' */ bloc1x = (4.0 * (nx + p6x) - (2 * paxs) + pdxs) / 3.0; bloc1y = (4.0 * (ny + p6y) - (2 * pays) + pdys) / 3.0; bdir1x = pcx + pdx - pax - pbx; bdir1y = pcy + pdy - pay - pby; bloc2x = paxs; bloc2y = pays; bdir2x = pbx - pax; bdir2y = pby - pay; bdet = (bdir2x * bdir1y) - (bdir2y * bdir1x); #define DET_QUOTIENT_UPPER_THRESHOLD (1.05) #define DET_QUOTIENT_LOWER_THRESHOLD (1.0/DET_QUOTIENT_UPPER_THRESHOLD) /* Life has shown, that the "reliability" of the determinant has to be ensured. Otherwise, serious distortions might be introduced. In order to ensure numerical stability, we do not only check whether the detrminant is about zero, but we also check whether the two partial expressions that are subtracted when computing the determinant are of about the same size. If this is the case, we explicitly reset the determinant and eventually compute this off-curve point based on the other off-curve point later. */ if ( (bdir2x != 0.0) && (bdir1y != 0.0) ) { dtmp = (bdir2y*bdir1x)/(bdir2x*bdir1y); if ( (DET_QUOTIENT_LOWER_THRESHOLD < dtmp) && (DET_QUOTIENT_UPPER_THRESHOLD > dtmp) ) { /* Determinant appears to be unreliable, reset it exactly to zero. */ bdet = 0.0; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " Warning: Determinant quotient check for bdet failed: dtmp=%16.16f, lower limit=%f, upper limit=%f.\n --> Determinant does not seem to be stable, resetting to zero.\n", dtmp, DET_QUOTIENT_LOWER_THRESHOLD, DET_QUOTIENT_UPPER_THRESHOLD); #endif } } else if ( (bdir2y != 0.0) && (bdir1x != 0.0) ) { dtmp = (bdir2x*bdir1y)/(bdir2y*bdir1x); if ( (DET_QUOTIENT_LOWER_THRESHOLD < dtmp) && (DET_QUOTIENT_UPPER_THRESHOLD > dtmp) ) { /* Determinant appears to be unreliable, reset it exactly to zero. */ bdet = 0.0; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " Warning: Determinant quotient check for bdet failed: dtmp=%16.16f, lower limit=%f, upper limit=%f.\n --> Determinant does not seem to be stable, resetting to zero.\n", dtmp, DET_QUOTIENT_LOWER_THRESHOLD, DET_QUOTIENT_UPPER_THRESHOLD); #endif } } #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " bloc1x=%f, bloc1y=%f, bloc2x,=%f bloc2y=%f\n", bloc1x, bloc1y, bloc2x, bloc2y); fprintf( stderr, " bdir1x=%f, bdir1y=%f, bdir2x,=%f bdir2y=%f\n", bdir1x, bdir1y, bdir2x, bdir2y); #endif /* Switch if determinant is zero; we then actually have a straight line */ if ( fabs(bdet) < 0.001 ) { pbxs = pbx + nx; pbys = pby + ny; bmu = 0.0; bnu = 0.0; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " Warning: Determinant check for bdet failed: bdet=%16.16f. Computing Bs based on normal vector, resetting bmu, bnu.\n", bdet); #endif } else { /* Calculate required part of inverse matrix */ binvdet = 1.0 / bdet; binvdir2x = bdir1y * binvdet; binvdir2y = - bdir2y * binvdet; /**/ binvdir1x = - bdir1x * binvdet; binvdir1y = bdir2x * binvdet; /**/ /* Calculate coefficient that describes intersection */ bmu = (binvdir2x * (bloc1x - bloc2x)) + (binvdir1x * (bloc1y - bloc2y)); bnu = (binvdir2y * (bloc1x - bloc2x)) + (binvdir1y * (bloc1y - bloc2y)); /**/ /* Calculate B' */ pbxs = bloc2x + (bmu * bdir2x); pbys = bloc2y + (bmu * bdir2y); } /* Compute two lines whose intersection will define point C' */ cloc1x = (4.0 * (nx + p6x) - (2 * pdxs) + paxs) / 3.0; cloc1y = (4.0 * (ny + p6y) - (2 * pdys) + pays) / 3.0; cdir1x = bdir1x; cdir1y = bdir1y; cloc2x = pdxs; cloc2y = pdys; cdir2x = pcx - pdx; cdir2y = pcy - pdy; cdet = (cdir2x * cdir1y) - (cdir2y * cdir1x); /* Life has shown, that the "reliability" of the determinant has to be ensured. Otherwise, serious distortions might be introduced. In order to ensure numerical stability, we do not only check whether the detrminant is about zero, but we also check whether the two partial expressions that are subtracted when computing the determinant are of about the same size. If this is the case, we explicitly reset the determinant and eventually compute this off-curve point based on the other off-curve point later. */ if ( (cdir2x != 0.0) && (cdir1y != 0.0) ) { dtmp = (cdir2y*cdir1x)/(cdir2x*cdir1y); if ( (DET_QUOTIENT_LOWER_THRESHOLD < dtmp) && (DET_QUOTIENT_UPPER_THRESHOLD > dtmp) ) { /* Determinant appears to be unreliable, reset it exactly to zero. */ cdet = 0.0; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " Warning: Determinant quotient check for cdet failed: dtmp=%16.16f, lower limit=%f, upper limit=%f.\n --> Determinant does not seem to be stable, resetting to zero.\n", dtmp, DET_QUOTIENT_LOWER_THRESHOLD, DET_QUOTIENT_UPPER_THRESHOLD); #endif } } else if ( (cdir2y != 0.0) && (cdir1x != 0.0) ) { dtmp = (cdir2x*cdir1y)/(cdir2y*cdir1x); if ( (DET_QUOTIENT_LOWER_THRESHOLD < dtmp) && (DET_QUOTIENT_UPPER_THRESHOLD > dtmp) ) { /* Determinant appears to be unreliable, reset it exactly to zero. */ cdet = 0.0; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " Warning: Determinant quotient check for cdet failed: dtmp=%16.16f, lower limit=%f, upper limit=%f.\n --> Determinant does not seem to be stable, resetting to zero.\n", dtmp, DET_QUOTIENT_LOWER_THRESHOLD, DET_QUOTIENT_UPPER_THRESHOLD); #endif } } #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " cloc1x=%f, cloc1y=%f, cloc2x,=%f cloc2y=%f\n", cloc1x, cloc1y, cloc2x, cloc2y); fprintf( stderr, " cdir1x=%f, cdir1y=%f, cdir2x,=%f cdir2y=%f\n", cdir1x, cdir1y, cdir2x, cdir2y); #endif /* Switch if determinant is zero; we then actually have a straight line */ if ( fabs( cdet) < 0.001 ) { pcxs = pcx + nx; pcys = pcy + ny; cmu = 0.0; cnu = 0.0; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " Warning: Determinant check for cdet failed: cdet=%16.16f. Computing Cs based on normal vector, resetting cmu, cnu.\n", cdet); #endif } else { /* Calculate required part of inverse matrix */ cinvdet = 1.0 / cdet; cinvdir2x = cdir1y * cinvdet; cinvdir2y = - cdir2y * cinvdet; /**/ cinvdir1x = - cdir1x * cinvdet; cinvdir1y = cdir2x * cinvdet; /**/ /* Calculate coefficient that describes intersection */ cmu = (cinvdir2x * (cloc1x - cloc2x)) + (cinvdir1x * (cloc1y - cloc2y)); cnu = (cinvdir2y * (cloc1x - cloc2x)) + (cinvdir1y * (cloc1y - cloc2y)); /**/ /* Calculate C' */ pcxs = cloc2x + (cmu * cdir2x); pcys = cloc2y + (cmu * cdir2y); } #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " bdet=%f, cdet=%f, bmu=%f, bnu=%f, cmu=%f, cnu=%f\n", bdet, cdet, bmu, bnu, cmu, cnu); #endif /* Analyse coefficients and decide on numerical stability. If suggesting, overwrite, using another relation. Here, we assume that at least the solution at *one* end of the curve is stable. */ if ( fabs(bmu) < 0.1 ) { pbxs = ((8 * (nx + p6x) - paxs - pdxs) / 3.0) - pcxs; pbys = ((8 * (ny + p6y) - pays - pdys) / 3.0) - pcys; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " Warning: Coefficient check for bmu failed: bmu=%16.16f. Computing Bs based on Cs.\n", bmu); #endif } if ( fabs(cmu) < 0.1 ) { pcxs = ((8 * (nx + p6x) - paxs - pdxs) / 3.0) - pbxs; pcys = ((8 * (ny + p6y) - pays - pdys) / 3.0) - pbys; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " Warning: Coefficient check for cmu failed: cmu=%16.16f. Computing Cs based on Bs.\n", cmu); #endif } /* Store the resulting displacement values in the ppoints-struct so they can be used for path construction. We use the "intersect" member because in this case nothing is related to "previous" or "next".*/ #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, " pbx=%f, pbxs=%f, bxshift=%f, pby=%f, pbys=%f, byshift=%f\n", pbx, pbxs, pbxs-pbx, pby, pbys, pbys-pby); fprintf( stderr, " pcx=%f, pcxs=%f, cxshift=%f, pcy=%f, pcys=%f, cyshift=%f\n", pcx, pcxs, pcxs-pcx, pcy, pcys, pcys-pcy); fprintf( stderr, " Summary: A =(%f,%f), B =(%f,%f), C =(%f,%f), D =(%f,%f)\n", pax, pay, pbx, pby, pcx, pcy, pdx, pdy); fprintf( stderr, " As=(%f,%f), Bs=(%f,%f), Cs=(%f,%f), Ds=(%f,%f)\n\n", paxs, pays, pbxs, pbys, pcxs, pcys, pdxs, pdys); #endif ppoints[currind].dxir = pbxs - pbx; ppoints[currind].dyir = pbys - pby; ppoints[currind+1].dxir = pcxs - pcx; ppoints[currind+1].dyir = pcys - pcy; return; } static void intersectRight( long index, double halfwidth, long flag) { double r2 = 0.0; double det = 0.0; double dxprev; double dyprev; double dxnext; double dynext; /* In order to determine the intersection between the two prolongations at the path point under consideration, we use the Hesse Normal Form, multiplied with r. dx * x + dy * y + r^2 = 0 Here, r is the distance from the origin, that is, from the path point under consideration. */ /* Check for start and ending of non-closed paths */ if ( flag == INTERSECT_PREVIOUS ) { ppoints[index].dxir = ppoints[index].dxpr; ppoints[index].dyir = ppoints[index].dypr; /* Correct shape to be "straight" at ending point! */ ppoints[index].shape = CURVE_STRAIGHT; return; } if ( flag == INTERSECT_NEXT ) { ppoints[index].dxir = ppoints[index].dxnr; ppoints[index].dyir = ppoints[index].dynr; /* Correct shape to be "straight" at starting point! */ ppoints[index].shape = CURVE_STRAIGHT; return; } /* OK, we actually compute an intersection */ dxprev = ppoints[index].dxpr; dyprev = ppoints[index].dypr; dxnext = ppoints[index].dxnr; dynext = ppoints[index].dynr; /* Compute distance square */ r2 = halfwidth * halfwidth; /* Check the determinant. If it is zero, the two lines are parallel and also must touch at atleast one location, so that there are an infinite number of solutions. In this case, we compute the average position and are done. */ if ( fabs( (det = ((dyprev * dxnext) - (dynext * dxprev))) ) < 0.00001 ) { ppoints[index].dxir = 0.5 * (dxprev + dxnext); ppoints[index].dyir = 0.5 * (dyprev + dynext); #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "intersectRight(0):\n dxprev=%f, dxnext=%f, dxres=%f,\n dyprev=%f, dynext=%f, dyres=%f,\n det=%16.16f\n", dxprev, dxnext, ppoints[index].dxir, dyprev, dynext, ppoints[index].dyir, det); fprintf( stderr, " --> Computation based on averaging [dxprev,dyprev] and [dxnext,dynext]\n"); fprintf( stderr, " Right intersection point shift: (%f,%f), absolute shift length: %f.\n\n", ppoints[index].dxir, ppoints[index].dyir, sqrt(ppoints[index].dxir*ppoints[index].dxir + ppoints[index].dyir*ppoints[index].dyir)); #endif return; } /* OK, there seems to be a unique solution, compute it */ if ( dxprev != 0.0 ) { ppoints[index].dyir = r2 * (dxnext - dxprev) / det; ppoints[index].dxir = (r2 - (dyprev * ppoints[index].dyir)) / dxprev; /* - ? */ #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "intersectRight(1):\n dxprev=%f, dxnext=%f, dxres=%f,\n dyprev=%f, dynext=%f, dyres=%f,\n det=%16.16f\n", dxprev, dxnext, ppoints[index].dxir, dyprev, dynext, ppoints[index].dyir, det); fprintf( stderr, " --> Computation based on previous path point.\n"); fprintf( stderr, " Right intersection point shift: (%f,%f), absolute shift length: %f.\n\n", ppoints[index].dxir, ppoints[index].dyir, sqrt(ppoints[index].dxir*ppoints[index].dxir + ppoints[index].dyir*ppoints[index].dyir)); #endif } else { ppoints[index].dyir = -r2 * (dxprev - dxnext) / det; ppoints[index].dxir = (r2 - (dynext * ppoints[index].dyir)) / dxnext; /* - ? */ #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "intersectRight(2):\n dxprev=%f, dxnext=%f, dxres=%f,\n dyprev=%f, dynext=%f, dyres=%f,\n det=%16.16f\n", dxprev, dxnext, ppoints[index].dxir, dyprev, dynext, ppoints[index].dyir, det); fprintf( stderr, " --> Computation based on next path point.\n"); fprintf( stderr, " Right intersection point shift: (%f,%f), absolute shift length: %f.\n\n", ppoints[index].dxir, ppoints[index].dyir, sqrt(ppoints[index].dxir*ppoints[index].dxir + ppoints[index].dyir*ppoints[index].dyir)); #endif } return; } /* linkNode(): Insert prolongation lines at nodes. */ static void linkNode( long index, int position, int orientation) { struct segment* B; double dx = 0.0; double dy = 0.0; if ( orientation == PATH_RIGHT ) { /* We are constructing the right hand side path */ if ( position == PATH_START ) { /* We are starting a new segment. Link from current point to ideally next-shifted point of segment. */ if ( ppoints[index].shape == CURVE_CONCAVE ) { /* prolongate from original curve point to ideally next-shifted point */ dx = ppoints[index].dxnr; dy = ppoints[index].dynr; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "RP: Concave at PP %ld. Prolongation from onCurve to ideal: (%f,%f)\n", index, dx, dy); #endif } else if ( ppoints[index].shape == CURVE_CONVEX ) { /* prolongate from intersecion point to ideally next-shifted point */ dx = ppoints[index].dxnr - ppoints[index].dxir; dy = ppoints[index].dynr - ppoints[index].dyir; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "RP: Convex at PP %ld. Prolongation from intersection to ideal: (%f,%f)\n", index, dx, dy); #endif } } else if ( position == PATH_END ) { /* We are ending the current segment. Link from ideally prev-shifted point to the appropriate ending point. */ if ( ppoints[index].shape == CURVE_CONCAVE ) { /* prolongate from ideally prev-shifted point to original curve point. */ dx = - ppoints[index].dxpr; dy = - ppoints[index].dypr; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "RP: Concave at PP %ld. Prolongation from ideal to onCurve: (%f,%f)\n", index, dx, dy); #endif } else if ( ppoints[index].shape == CURVE_CONVEX ) { /* prolongate from ideally prev-shifted point to intersection point. */ dx = ppoints[index].dxir - ppoints[index].dxpr; dy = ppoints[index].dyir - ppoints[index].dypr; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "RP: Convex at PP %ld. Prolongation from ideal to intersection: (%f,%f)\n", index, dx, dy); #endif } } /* if ( PATH_END ) */ } /* if ( PATH_RIGHT ) */ else if ( orientation == PATH_LEFT ) { /* We are constructing the left hand side path. Some notions have to be reverted (e.g. concavity vs. convexity and next vs. previous)! */ if ( position == PATH_START ) { /* We are starting a new segment. Link from current point to ideally next-shifted point of segment. */ if ( ppoints[index].shape == CURVE_CONVEX ) { /* prolongate from original curve point to ideally next-shifted point. Remember: next --> prev! */ dx = - (ppoints[index].dxpr); dy = - (ppoints[index].dypr); #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "LP: Concave at PP %ld. Prolongation from onCurve to ideal: (%f,%f)\n", index, dx, dy); #endif } else if ( ppoints[index].shape == CURVE_CONCAVE ) { /* prolongate from intersecion point to ideally next-shifted point */ dx = - (ppoints[index].dxpr - ppoints[index].dxir); dy = - (ppoints[index].dypr - ppoints[index].dyir); #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "LP: Convex at PP %ld. Prolongation from intersection to ideal: (%f,%f)\n", index, dx, dy); #endif } }/* if ( PATH_START ) */ else if ( position == PATH_END ) { /* We are ending the current segment. Link from ideally prev-shifted point to the appropriate ending point. */ if ( ppoints[index].shape == CURVE_CONVEX ) { /* prolongate from ideally prev-shifted point to original curve point. */ dx = ppoints[index].dxnr; dy = ppoints[index].dynr; #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "LP: Concave at PP %ld. Prolongation from ideal to onCurve: (%f,%f)\n", index, dx, dy); #endif } else if ( ppoints[index].shape == CURVE_CONCAVE ) { /* prolongate from ideally prev-shifted point to intersection point. */ dx = - (ppoints[index].dxir - ppoints[index].dxnr); dy = - (ppoints[index].dyir - ppoints[index].dynr); #ifdef DEBUG_OUTLINE_SURROUNDING fprintf( stderr, "LP: Convex at PP %ld. Prolongation from ideal to intersection: (%f,%f)\n", index, dx, dy); #endif } } /* if ( PATH_END ) */ } /* if ( PATH_LEFT ) */ if ( (dx != 0.0) || (dy != 0.0) ) { #ifdef DUMPDEBUGPATH if ( psfile != NULL ) fprintf( psfile, "%f %f t1sprolongate %% pindex = %ld\n", dx*up, dy*up, index); #endif B = Loc( CharSpace, dx, dy); path = Join(path, Line(B)); } return; } int T1int_Type1QuerySEAC( unsigned char* base, unsigned char* accent) { if ( isseac == 0 ) { return 0; } *base = seacbase; *accent = seacaccent; return isseac; } t1lib-5.1.2/lib/type1/types.h0000644000175000001440000000174010733501626014413 0ustar rmzusers/* * File: types.h * Purpose: define basic types so that program is portable to non 32 bits * platforms * Version: 1.0 (Dec. 1993) * Author: Piet Tutelaers */ #ifndef __TYPES__ #define __TYPES__ #if defined(WORD16) typedef unsigned short USHORT; /* 16 bits */ typedef short SHORT; /* 16 bits */ typedef long LONG; /* 32 bits */ typedef unsigned long ULONG; /* 32 bits */ typedef double DOUBLE; /* 64 bits */ #elif defined(WORD64) typedef unsigned short USHORT; /* 16 bits */ typedef short SHORT; /* 16 bits */ typedef int LONG; /* 32 bits */ typedef unsigned long ULONG; /* 32 bits */ typedef double DOUBLE; /* 64 bits */ #else /* default: WORD32 */ typedef unsigned short USHORT; /* 16 bits */ typedef short SHORT; /* 16 bits */ typedef int LONG; /* 32 bits */ typedef unsigned int ULONG; /* 32 bits */ typedef double DOUBLE; /* 64 bits */ #endif #endif /* __TYPES__ */ t1lib-5.1.2/lib/type1/objects.c0000644000175000001440000012127210733501626014676 0ustar rmzusers/* $XConsortium: objects.c,v 1.5 92/03/20 15:56:06 eswu Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /* OBJECTS CWEB V0025 ******** */ /* :h1.OBJECTS Module - TYPE1IMAGER Objects Common Routines This module defines and implements the C structures that represent objects in the TYPE1IMAGER. All common routines for manipulating these objects are defined in this module. Specific routines for specific objects are defined in the modules that deal with that object type. &author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com) :h3.Include Files The included files are: */ #define GLOBALS 1 /* see :hdref refid=debugvar. */ /* The following two includes are C standards; we include them because we use 'toupper' and the 'str'-type functions in this module. Potentially these may be defined as macros; if these ".h" files do not exist on your system it is a pretty safe bet that these are external entry points and you do do not need to include these header files. */ #include "types.h" #include #include #include #include #include /* override incorrect system functions; for example you might define a macro for "strcpy" that diverts it to "my_strcpy". */ /* moved these includes from above the */ /* was included first (it contains com- */ /* piler defines). dsr 081291 */ #include "objects.h" #include "spaces.h" #include "paths.h" #include "regions.h" #include "fonts.h" #include "pictures.h" #include "strokes.h" #include "cluts.h" static char *TypeFmt(); static int ObjectPostMortem(); /* :h3.The "pointer" Macro - Define a Generic Pointer Sadly, many compilers will give a warning message when a pointer to one structure is assigned to a pointer to another. We've even seen some that give severe errors (when the wrong pointer type is used as an initializer or returned from a function). TYPE1IMAGER has routines like Dup and Allocate that are perfectly willing to duplicate or allocate any of a number of different types of structures. How to declare them in a truely portable way? Well, there is no single good answer that I've found. You can always beg the question and "cast" everything. I find this distracting and the resulting code ugly. On the other hand, we have found at least one compiler that will accept "void *" as a generic pointer that can assigned to any other pointer type without error or warning (apparently this is also the ANSI standard). So, we define "void *" to be a generic pointer. (You might have to change this for your compiler; the "ifndef" allows the change to be made on the command line if you want.) :i1/portability assumptions/ */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Functions Provided to the TYPE1IMAGER User This module provides the following TYPE1IMAGER entry points: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* Note that entry points that are intended for use external to TYPE1IMAGER begin with the characters :q/xi/. Macros are used to make the names more mnemonic. */ /* :h3.Functions Provided to Other Modules This module provides the following functions for other modules: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* Note that entry points that intended for use within TYPE1IMAGER, but which must be global because they are used across module boundaries, begin with the characters :q/I_/. Macros are used to make the names more mnemonic. Entry points totally within a module use mnemonic names and are declared :hp2/static/. One of the compilers I used had a bug when static functions were passed as addresses. Thus, some functions which are logically "static" are not so declared. Note also the trick of declaring routines, like Consume(), with a variable number of arguments. To avoid the restrictions on variable numbers of arguments in the macro processor, we just replace the text 'Consume' with 'I_Consume'. */ /* :h3.Macros Provided to Other Modules This is the module where we define all the useful constants like TRUE, FALSE, and NULL, and simple expressions like TYPE1_MIN(), TYPE1_MAX(), and TYPE1_ABS(). We might as well get to it right here: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* Notice that upper case is used for constant values and macro definitions. I generally follow that convention. Many more global macros are defined later in this module. */ /* :h2.Basic TYPE1IMAGER Object Structure All TYPE1IMAGER objects which are available to the user have a common header. This header is defined below: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* The following define is an attempt to centralize the definition of the common xobject data shared by structures that are derived from the generic xobject structure. For example, the structure font, defined in fonts.shr : &code. struct font { char type; char flag; int references; ... other data types & structs ... } &ecode. would now be defined as: &code. struct font { XOBJ_COMMON ... other data types & structs ... } &ecode. Thus we have a better-structured inheritance mechanism. 3-26-91 PNM */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Object Type Definitions These constants define the values which go in the 'type' field of an TYPE1IMAGER object structure: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Flag Byte Definitions Many programmers define flag bits as a mask (for example, 0x04), and test, set, and reset them as follows: &code. if ((flag & PERMANENT) != 0) flag |= PERMANENT; flag &= &inv.PERMANENT; :exmp. I favor a style where the 'if' statement can ask a question: &code. if (ISPERMANENT(flag)) flag |= ISPERMANENT(ON); flag &= &inv.ISPERMANENT(ON); :exmp. This said, we now define two bit settings of the flag byte of the object. "ISPERMANENT" will be set by the user, when he calls Permanent(). "ISIMMORTAL" will be used for compiled-in objects that we don't want the user to ever destroy. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* Flag bit definitions that apply to all objects are assigned starting with the least significant (0x01) bit. Flag bit definitions specific to a certain object type are assigned starting with the most significant (0x80) bit. We hope they never meet. */ /* :h3 id=preserve.PRESERVE() Macro Occasionally an TYPE1IMAGER operator is implemented by calling other TYPE1IMAGER operators. For example, Arc2() calls Conic(). When we call more than one operator as a subroutine, we have to be careful of temporary objects. A temporary object will be consumed by the subroutine operator and then is no longer available for the caller. This can be prevented simply by bumping a temporary object's reference count. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.RefRoll() Macro to Detect References Count Rollover The following macro is designed to check for reference count rollover. A return value of TRUE means rollover has not occurred; a return value of FALSE means we cannot increment the reference count. Note also that those functions that use this macro must decrement the reference count afterwards. 3-26-91 PNM */ #define RefRoll(obj) (++(obj)->references > 0) /* :h2.TYPE1IMAGER Object Functions :h3.LONGCOPY() - Macro to Copy "long" Aligned Data Copying arbitrary bytes in C is a bit of a problem. "strcpy" can't be used, because 0 bytes are special-cased. Most environments have a routine "memcopy" or "bcopy" or "bytecopy" that copies memory containing zero bytes. Sadly, there is no standard on the name of such a routine, which makes it impossible to write truely portable code to use it. It turns out that TYPE1IMAGER, when it wants to copy data, frequently knows that both the source and destination are aligned on "long" boundaries. This allows us to copy by using "long *" pointers. This is usually very efficient on almost all processors. Frequently, it is more efficient than using general-purpose assembly language routines. So, we define a macro to do this in a portable way. "dest" and "source" must be long-aligned, and "bytes" must be a multiple of "sizeof(long)": */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Allocate() - Allocating a Memory Block Allocate returns a pointer to memory object that is a copy of the template passed (if any). In addition, extra bytes may be allocated contiguously with the object. (This may be useful for variable size objects such as edge lists. See :hdref refid=regions..) Allocate() always returns a non-immortal object, even if the template is immortal. Therefore a non-NULL template must have a "flag" byte. If the template is NULL, then 'size' bytes are cleared to all NULLs. If the template is non-NULL, a new object is allocated in memory. It therefore seems logical that its reference count field should be set to 1. So, a nun-NULL template must also have a "references" field. PNM 3-26-91 */ /* to pacify gcc we put the externals here ... */ extern struct XYspace *USER; extern jmp_buf stck_state; struct xobject *t1_Allocate(size, template, extra) /* non-ANSI; type checking was too strict */ register int size; /* number of bytes to allocate & initialize */ register struct xobject *template; /* example structure to allocate */ register int extra; /* any extra uninitialized bytes needed contiguously */ { register struct xobject *r; /* * round up 'size' and 'extra' to be an integer number of 'long's: */ size = (size + sizeof(LONG) - 1) & -sizeof(LONG); extra = (extra + sizeof(LONG) - 1) & -sizeof(LONG); if (size + extra <= 0) abort("Non-positive allocate?", 15); r = (struct xobject *) malloc(size + extra); while (r == NULL) { if (!GimeSpace()) { IfTrace1(TRUE, "malloc attempted %d bytes.\n", size + extra); abort("We have REALLY run out of memory", 16); } r = (struct xobject *) malloc(size + extra); } /* * copy the template into the new memory: */ if (template != NULL) { /* Added references count decrement if template is not permanent. This is for the case where Allocate is called by a Dupxxxx function, which was in turn called by Unique(). (PNM) */ if (!ISPERMANENT(template->flag)) --template->references; LONGCOPY(r, template, size); r->flag &= ~(ISPERMANENT(ON) | ISIMMORTAL(ON)); /* added reference field 3-2-6-91 PNM */ r->references = 1; } else { register char **p1; for (p1=(char **)r; size > 0; size -= sizeof(char *)) *p1++ = NULL; } if (MemoryDebug > 1) { register int *L; L = (int *) r; IfTrace4(TRUE, "Allocating at %p: %x %x %x\n", L, L[-1], L[0], L[1]); } return(r); } /* :h3.Free() - Frees an Allocated Object This routine makes a sanity check to make sure the "type" field of the standard object structure has not been cleared. If the object is not a standard structure, then the macro "NonObjectFree" is available that does not perform this check. In either case, the object must not be the NULL pointer. This preserves portability, as the C system Xfree() will not always accept NULL. */ void Free(obj) /* non-ANSI to avoid overly strict type checking */ register struct xobject *obj; /* structure to free */ { if (obj->type == INVALIDTYPE) abort("Free of already freed object?", 17); obj->type = INVALIDTYPE; if (MemoryDebug > 1) { register int *L; L = (int *) obj; IfTrace4(TRUE,"Freeing at %p: %x %x %x\n", L, L[-1], L[0], L[1]); } free(obj); } /* :h3.Permanent() - Makes an Object Permanent Real simple--just set a flag. Every routine that consumes its objects (which is almost every user entry) must check this flag, and not consume the object if it is set. If a temporary object is made permanent, and there is more than one reference to it, we must first Copy() it, then set the ISPERMANENT flag. Note also that the reference count must be incremented when an object is changed from temporary to permanent (see the ISUNIQUE macro). Note that the purpose of this function is to convert an object into a permanent object: If it was permanent to begin with, we do nothing; If it was temporary and unique, we set the PERMANENT flag and increment the reference count; If it was temporary and nonunique, we must make a unique Copy(), set the PERMANENT flag, and set the reference count to 2. We must also decrement the original object's reference count, because what we have done is to change one of the old temporary handles to a permanent one. 3-26-91 PNM */ struct xobject *t1_Permanent(obj) /* non-ANSI to avoid overly strict type checking */ register struct xobject *obj; /* object to be made permanent */ { IfTrace1((MustTraceCalls),"Permanent(%p)\n", obj); if ( (obj != NULL) && ( !(ISPERMANENT(obj->flag)) ) ) { /* there is a non-NULL, temporary object to be made permanent. If there are multiple references to this object, first get a new COPY(). Note also that we have to decrement the reference count if we do a Copy() here, because we are consuming the temporary argument passed, and returning a unique, permanent one. */ if ( obj->references > 1) { obj = Copy(obj); } /* now set the permanent flag, and increment the reference count, since a temporary object has now become permanent. */ obj->references++; obj->flag |= ISPERMANENT(ON); } return(obj); } /* :h3.Temporary() - Undoes the Effect of "Permanent()" This simply resets the "ISPERMANENT" flag. If a permanent object is made temporary, and there is more than one reference to it, we must first Copy() it, then reset the ISPERMANENT flag. However, if the permanent object has obly one reference, we need only decrement the reference count ( and reset the flag). Note that this function, in the case of a PERMANENT argument, basically converts the PERMANENT handle to a TEMPORARY one. Thus, in the case of a nonunique, permanent argument passed, we not only make a Copy(), we also decrement the reference count, to reflect the fact that we have lost a permanent handle and gained a temporary one. PNM 3-2-6-91 */ struct xobject *xiTemporary(obj) /* non-ANSI to avoid overly strict type checking */ register struct xobject *obj; /* object to be made permanent */ { IfTrace1((MustTraceCalls),"Temporary(%p)\n", obj); if (obj != NULL) { /* if it's already temporary, there's nothing to do. */ if ISPERMANENT(obj->flag) { /* if there are multiple references to this object, get a Copy we can safely alter. Recall that the reference count is incremented for permanent objects. Recall further that Copy returns an object with the same flag state and a reference count of 2 (for PERMANENT objects). Thus, regardless of whether or not we need to copy a permanent object, we still decrement its reference count and reset the flag. */ if (obj->references != 2 || ISIMMORTAL(obj->flag)) { /* not unique; consume handle, get a temporary Copy! */ obj = Copy(obj); } /* else decrement the reference count (since it's going from permanent to temporary) and clear the flag. */ else { obj->references--; obj->flag &= ~ISPERMANENT(ON); } } } return(obj); } /* :h3.Dup() - Duplicate an Object Dup will increment the reference count of an object, only making a Copy() if needed. Note that Dup() retains the state of the permanent flag. 3-26-91 PNM */ struct xobject *t1_Dup(obj) /* non-ANSI avoids overly strict type checking */ register struct xobject *obj; /* object to be duplicated */ { register char oldflag; /* copy of original object's flag byte */ IfTrace1((MustTraceCalls),"Dup(%p)\n", obj); if (obj == NULL) return(NULL); /* An immortal object must be Copy'ed, so that we get a mortal copy of it, since we try not to destroy immortal objects. */ if (ISIMMORTAL(obj->flag)) return(Copy(obj)); /* if incrementing the reference count doesn't cause the count to wrap, simply return the object with the count bumped. Note that the RefRoll macro increments the count to perform the rollover check, so we must decrement the count. */ if (RefRoll(obj)) return(obj); /* that didn't work out, so put the count back and call Copy(). */ --obj->references; oldflag = obj->flag; obj = Copy(obj); if (ISPERMANENT(oldflag)) obj = Permanent(obj); return(obj); } /* :h3.Copy() - Make a New Copy of an Object This is the generic Copy() where the object type is unknown. There are specific Copyxxx functions for known object types. Copy will create a NEW temporary object, and WILL NOT simply bump the reference count. Sometimes duplicating an object is just as simple as Allocating with it as a template. But other objects are complicated linked lists. So, we let each module provide us a routine (or macro) that duplicates the objects it knows about. */ struct xobject *t1_Copy(obj) register struct xobject *obj; /* object to be Copy'ed */ { if (obj == NULL) return(NULL); if (ISPATHTYPE(obj->type)) obj = (struct xobject *) CopyPath((struct segment *)obj); else switch (obj->type) { case SPACETYPE: obj = (struct xobject *) CopySpace(obj); break; case FONTTYPE: obj = (struct xobject *) CopyFont(obj); break; case REGIONTYPE: obj = (struct xobject *) CopyRegion(obj); break; case PICTURETYPE: obj = (struct xobject *) CopyPicture(obj); break; case LINESTYLETYPE: obj = (struct xobject *) CopyLineStyle(obj); break; case STROKEPATHTYPE: obj = (struct xobject *) CopyStrokePath(obj); break; case CLUTTYPE: obj = (struct xobject *) CopyCLUT(obj); break; default: return(ArgErr("Copy: invalid object", obj, NULL)); } return(obj); } /* :h3.Destroy() - Destroys an Object This can get complicated. Just like with Copy(), we let the experts handle it. */ struct xobject *Destroy(obj) /* non-ANSI avoids overly strict type checking */ register struct xobject *obj; /* object to be destroyed */ { IfTrace1((MustTraceCalls),"Destroy(%p)\n", obj); if (obj == NULL) return(NULL); if (ISIMMORTAL(obj->flag)) { IfTrace1(TRUE,"Destroy of immortal object %p ignored\n", obj); return(NULL); } if (ISPATHTYPE(obj->type)) KillPath((struct segment *)obj); else { switch (obj->type) { case REGIONTYPE: KillRegion(obj); break; case SPACETYPE: KillSpace(obj); break; case LINESTYLETYPE: KillLineStyle(obj); break; case FONTTYPE: KillFont(obj); break; case PICTURETYPE: /* KillPicture macro removed from sources (RMz, 2001-04-01) KillPicture(obj); */ break; case STROKEPATHTYPE: KillStrokePath(obj); break; case CLUTTYPE: KillCLUT(obj); break; default: return(ArgErr("Destroy: invalid object", obj, NULL)); } } return(NULL); } /* :h2.Generally Useful Macros :h3.FOLLOWING() - Macro to Point to the Data Following a Structure There are several places in TYPE1IMAGER where we will allocate variable data that belongs to a structure immediately after that structure. This is a performance technique, because it reduces the number of trips we have to take through Xalloc() and Xfree(). It turns out C has a very convenient way to point past a structure--if 'p' is a pointer to a structure, 'p+1' is a pointer to the data after it. This behavior of C is somewhat startling and somewhat hard to follow, if you are not used to it, so we define a macro to point to the data following a structure: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.TYPECHECK() - Verify the Type of an Argument This macro tests the type of an argument. If the test fails, it consumes any other arguments as necessary and causes the imbedding routine to return the value 'whenBAD'. Note that the consumeables list should be an argument list itself, for example (0) or (2,A,B). See :hdref refid=consume. below. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.ARGCHECK() - Perform an Arbitrary Check on an Argument This macro is a generalization of TYPECHECK to take an arbitrary predicate. If the error occurs (i.e., the predicate is true), the arbitrary message 'msg' is returned. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.TYPENULLCHECK() - Extension of TYPECHECK() for NULL arguments Many routines allow NULLs to be passed as arguments. 'whenBAD' will be returned in this case, too. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.MAKECONSUME() - Create a "Consume"-type Macro Consuming an object means destroying it if it is not permanent. This logic is so common to all the routines, that it is immortalized in this macro. For example, ConsumePath(p) can be simply defined as MAKECONSUME(p,KillPath(p)). In effect, this macro operates on a meta-level. :i1/consuming objects/ */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.MAKEUNIQUE() - Create a "Unique"-type Macro Many routines are written to modify their arguments in place. Thus, they want to insure that they duplicate an object if it is permanent. This is called making an object "unique". For example, UniquePath(p) can be simply defined as MAKEUNIQUE(p,DupPath(p)). :i1/unique objects/ */ /*SHARED LINE(S) ORIGINATED HERE*/ /* An object is unique (and directly alterable) if there is only one reference to it, and it is not permanent (in which case we increment the reference count, so we don't have to check the permanent bit). 3-26-91 PNM Note the rules for making a unique object: &drawing. IF (obj->references = 1) return(obj); ELSE (references > 1) IF (ISPERMANENT(obj->flag)) return(Dupxxx(obj)); ELSE (nonunique, temporary object!) obj->references--; return(Dupxxx(obj)); &edrawing. If we must make a Copy of a nonunique, temporary object, we decrement reference count of the original object! */ /* :h3.Unique() - Make a Unique Object Here is a generic 'Unique' function if the object type is not known. Why didn't we build it with the MAKEUNIQUE macro, you ask? Well, we used to, but there is at least one damn compiler in the world that raises errors if the types of an "(a) ? b : c" expression do not match. Also, when we changed Dup() to retain the permanent/temporary flag, we wanted to make sure "Unique" always returned a temporary object. Note that we cannot use Dup() to create a copy of the object in question, because Dup() may simply bump the reference count, and not return a unique copy to us. That is why we use t1_Copy(). The purpose of this function is to make sure we have a copy of an object that we can safely alter: :ol. :li.If we have a unique, temporary object, we simply return the argument. :li.If we have a nonunique, temporary object, we have to make a new copy of it, and decrement the reference count of the original object, to reflect the fact that we traded temporary handles. :li.If we have a permanent object, we make a temporary copy of it, but we do not decrement the reference count of the original permanent object, because permanent objects, by definition, are persistent. 3-2-6-91 PNM :eol. */ struct xobject *t1_Unique(obj) struct xobject *obj; { /* if the original object is not already unique, make a unique copy...Note also that if the object was not permanent, we must consume the old handle! 3-26-91 PNM NOTE : consumption of the old handle moved to Allocate. 4-18-91 */ if (!obj || obj->references == 1) return(obj); obj = Copy(obj); /* and make sure we return a temporary object ! */ if (ISPERMANENT(obj->flag)) { obj->flag &= ~ISPERMANENT(ON); obj->references--; } return(obj); } /* :h2.Initialization, Error, and Debug Routines :h3 id=debugvar.Declarations for Debug Purposes We declare all the debug flags here. Some link editors make the not unreasonable restriction that only one module may declare and initialize global variables; all the rest must declare the variable 'extern'. This is logical, but is somewhat awkward to implement with C include files. We solve the problem by temporarily making the name 'extern' a null name if GLOBALS is defined. (GLOBALS is only defined in this OBJECTS module.) Since 'externs' can't be initialized, we have to handle that with #defines too. :i1/GLOBALS (&#define.)/ */ /*SHARED LINE(S) ORIGINATED HERE*/ static char *ErrorMessage = NULL; /* :h3.Pragmatics() - Set/Reset Debug Flags We provide a controlled way for the TYPE1IMAGER user to set and reset our debugging and tracing: */ void Pragmatics(username, value) char *username; /* name of the flag */ int value; /* value to set it to */ { register char *p; /* temporary loop variable */ #define NAMESIZE 40 char name[NAMESIZE]; /* buffer to store my copy of 'username' */ if (strlen(username) >= NAMESIZE) abort("Pragmatics name too large", 18); strcpy(name, username); for (p = name; *p != '\0'; p++) *p = toupper(*p); if (!strcmp(name, "ALL")) MustTraceCalls = InternalTrace = /* MustCrash = */ LineIOTrace = value; else if (!strcmp(name, "LINEIOTRACE")) LineIOTrace = value; else if (!strcmp(name, "TRACECALLS")) MustTraceCalls = value; else if (!strcmp(name, "CHECKARGS")) MustCheckArgs = value; else if (!strcmp(name, "PROCESSHINTS")) ProcessHints = value; else if (!strcmp(name, "SAVEFONTPATHS")) SaveFontPaths = value; else if (!strcmp(name, "CRASTERCOMPRESSIONTYPE")) CRASTERCompressionType = value; else if (!strcmp(name, "CRASHONUSERERROR")) MustCrash = value; else if (!strcmp(name, "DEBUG")) StrokeDebug = SpaceDebug = PathDebug = ConicDebug = LineDebug = RegionDebug = MemoryDebug = FontDebug = HintDebug = ImageDebug = OffPageDebug = value; else if (!strcmp(name, "CONICDEBUG")) ConicDebug = value; else if (!strcmp(name, "LINEDEBUG")) LineDebug = value; else if (!strcmp(name, "REGIONDEBUG")) RegionDebug = value; else if (!strcmp(name, "PATHDEBUG")) PathDebug = value; else if (!strcmp(name, "SPACEDEBUG")) SpaceDebug = value; else if (!strcmp(name, "STROKEDEBUG")) StrokeDebug = value; else if (!strcmp(name, "MEMORYDEBUG")) MemoryDebug = value; else if (!strcmp(name, "FONTDEBUG")) FontDebug = value; else if (!strcmp(name, "HINTDEBUG")) HintDebug = value; else if (!strcmp(name, "IMAGEDEBUG")) ImageDebug = value; else if (!strcmp(name, "OFFPAGEDEBUG")) OffPageDebug = value; #ifdef MC68000 /* The following pragmatics flag turns on or off instruction histograming for performance analysis. It is only defined in the Delta card environment. */ else if (!strcmp(name, "PROFILE")) { if (value) StartProfile(); else StopProfile(); } #endif /* GimeSpace() is define as false ... */ /* else if (!strcmp(name, "FLUSHCACHE")) { while (GimeSpace()) { ; } } */ else if (!strcmp(name, "CACHEDCHARS")) CachedChars = (value <= 0) ? 1 : value; else if (!strcmp(name, "CACHEDFONTS")) CachedFonts = (value <= 0) ? 1 : value; else if (!strcmp(name, "CACHEBLIMIT")) CacheBLimit = value; else if (!strcmp(name, "CONTINUITY")) Continuity = value; else { printf("Pragmatics flag = '%s'\n", name); ArgErr("Pragmatics: flag not known", NULL, NULL); } return; } /* :h3.Consume() - Consume a List of Arguments This general purpose routine is provided in the case where the object type(s) to be consumed are unknown or not yet verified, and/or it is not known whether the object is permanent. If the type of the argument is known, it is faster to directly consume that type, for example, ConsumeRegion() or ConsumePath(). Furthermore, if it is already known that the object is temporary, it is faster to just kill it rather than consume it, for example, KillSpace(). */ void Consume(n, obj1, obj2, obj3) /* non-ANSI avoids overly strict type checking */ int n; struct xobject *obj1,*obj2,*obj3; { switch(n) { case 0: return; case 1: if (obj1 != NULL && !ISPERMANENT(obj1->flag)) Destroy(obj1); return; case 2: if (obj1 != NULL && !ISPERMANENT(obj1->flag)) Destroy(obj1); if (obj2 != NULL && !ISPERMANENT(obj2->flag)) Destroy(obj2); return; case 3: if (obj1 != NULL && !ISPERMANENT(obj1->flag)) Destroy(obj1); if (obj2 != NULL && !ISPERMANENT(obj2->flag)) Destroy(obj2); if (obj3 != NULL && !ISPERMANENT(obj3->flag)) Destroy(obj3); return; default: abort("Consume: too many objects", 19); } } /* :h3.TypeErr() - Handles "Invalid Object Type" Errors */ struct xobject *TypeErr(name, obj, expect, ret) /* non-ANSI avoids overly strict type checking */ char *name; /* Name of routine (for error message) */ struct xobject *obj; /* Object in error */ int expect; /* type expected */ struct xobject *ret; /* object to return to caller */ { static char typemsg[80]; if (MustCrash) LineIOTrace = TRUE; sprintf(typemsg, "Wrong object type in %s; expected %s, found %s.\n", name, TypeFmt(expect), TypeFmt(obj->type)); IfTrace0(TRUE,typemsg); ObjectPostMortem(obj); if (MustCrash) abort("Terminating because of CrashOnUserError...", 20); else ErrorMessage = typemsg; /* changed ISPERMANENT to ret->references > 1 3-26-91 PNM */ if (ret != NULL && (ret->references > 1)) ret = Dup(ret); return(ret); } /* :h4.TypeFmt() - Returns Pointer to English Name of Object Type This is a subroutine of TypeErr(). */ static char *TypeFmt(type) int type; /* type field */ { char *r; if (ISPATHTYPE(type)) if (type == TEXTTYPE) r = "path or region (from TextPath)"; else r = "path"; else { switch (type) { case INVALIDTYPE: r = "INVALID (previously consumed?)"; break; case REGIONTYPE: r = "region"; break; case SPACETYPE: r = "XYspace"; break; case LINESTYLETYPE: r = "linestyle"; break; case FONTTYPE: r = "font"; break; case PICTURETYPE: r = "picture"; break; case STROKEPATHTYPE: r = "path (from StrokePath)"; break; default: r = "UNKNOWN"; break; } } return(r); } /* :h4.ObjectPostMortem() - Prints as Much as We Can About a Bad Object This is a subroutine of TypeErr() and ArgErr(). */ /*ARGSUSED*/ static int ObjectPostMortem(obj) /* non-ANSI avoids overly strict type checking */ register struct xobject *obj; { Pragmatics("Debug", 10); IfTrace2(TRUE,"Bad object is of %s type %p\n", TypeFmt(obj->type), obj); IfTrace0((obj == (struct xobject *) USER), "Suspect that InitImager() was omitted.\n"); Pragmatics("Debug", 0); /* We return a value to make ANSI-compiler happy */ return(0); } /* :h3.ArgErr() - Invalid Argument Passed to a Routine A common routine to report argument errors. It is usually called is returned to the caller in case MustCrash is FALSE and ArgErr returns to its caller. */ struct xobject *ArgErr(string, obj, ret) /* non-ANSI avoids overly strict type checking */ char *string; /* description of error */ struct xobject *obj; /* object, if any, that was in error */ struct xobject *ret; /* object returned to caller or NULL */ { if (MustCrash) LineIOTrace = TRUE; IfTrace1(TRUE,"ARGUMENT ERROR-- %s.\n", string); if (obj != NULL) ObjectPostMortem(obj); if (MustCrash) abort("Terminating because of CrashOnUserError...", 21); else ErrorMessage = string; return(ret); } /* :h3.abort() - Crash Due to Error We divide by zero, and if that doesn't work, call exit(), the results of which is system dependent (and thus is part of the Hourglass required environment). */ /* RMz: We now do a longjmp in order to be able to recover from the error */ /*ARGSUSED*/ void abort(string, no) char *string; int no; { LineIOTrace = TRUE; TraceClose(); longjmp( stck_state, no); } /* By RMz: Return the abort string to t1lib! */ char *t1_get_abort_message( int number) { static char *err_msgs[]={ "DLdiv: dividend too large", /* 1 */ "divide algorithm error", /* 2 */ "Beziers this big not yet supported", /* 3 */ "ComputeHint: invalid orientation", /* 4 */ "ComputeHint: invalid hinttype", /* 5 */ "ComputeHint: invalid orientation", /* 6 */ "ProcessHint: invalid label", /* 7 */ "ProcessHint: label is not in use", /* 8 */ "ProcessHint: invalid label", /* 9 */ "ProcessHint: invalid adjusttype", /* 10 */ "bad subpath chain", /* 11 */ "ImpliedHorizontalLine: why ask?", /* 12 */ "disjoint subpath?", /* 13 */ "unable to fix subpath break?", /* 14 */ "Non-positive allocate?", /* 15 */ "We have REALLY run out of memory", /* 16 */ "Free of already freed object?", /* 17 */ "Pragmatics name too large", /* 18 */ "Consume: too many objects", /* 19 */ "Terminating because of CrashOnUserError...", /* 20 */ "Terminating because of CrashOnUserError...", /* 21 */ "Fundamental TYPE1IMAGER assumptions invalid in this port", /* 22 */ "Reverse: bad path segment", /* 23 */ "UnClose: no LASTCLOSED", /* 24 */ "PathTransform: invalid segment", /* 25 */ "QueryPath: unknown segment", /* 26 */ "QueryBounds: unknown type", /* 27 */ "KillRegion: negative reference count", /* 28 */ "newedge: height not positive", /* 29 */ "Interior: path type error", /* 30 */ "Unwind: uneven edges", /* 31 */ "negative sized edge?", /* 32 */ "splitedge: above top of list", /* 33 */ "splitedge: would be null", /* 34 */ "null splitedge", /* 35 */ "vertjoin not disjoint", /* 36 */ "SwathUnion: 0 height swath?", /* 37 */ "discard(): ran off end", /* 38 */ "UnJumble: unpaired edge?", /* 39 */ "Tighten: existing edge bound was bad", /* 40 */ "Tighten: existing region bound was bad", /* 41 */ "EDGE ERROR: non EDGETYPE in list", /* 42 */ "EDGE ERROR: overlapping swaths", /* 43 */ "Context: QueryDeviceState didn't work", /* 44 */ "QueryDeviceState returned invalid orientation", /* 45 */ "Context: out of them", /* 46 */ "MatrixInvert: can't", /* 47 */ "xiStub called", /* 48 */ "Illegal access type1 abort() message" /* 49 */ }; /* no is valid from 1 to 48 */ if ( (number<1)||(number>48)) number=49; return( err_msgs[number-1]); } /* :h3.REAL Miscellaneous Stuff :h4.ErrorMsg() - Return the User an Error Message */ char *ErrorMsg() { register char *r; r = ErrorMessage; ErrorMessage = NULL; return(r); } /* :h4.InitImager() - Initialize TYPE1IMAGER We check that a short is 16 bits and a long 32 bits; we have made those assumptions elsewhere in the code. (This is almost a C standard, anyway.) Note that TYPE1IMAGER makes no assumptions about the size of an 'int'! :i1/portability assumptions/ */ void InitImager() { /* Check to see if we have been using our own malloc. If so,*/ /* Undef malloc so that we can get to the system call. */ /* All other calls to malloc are defined to Xalloc. */ if (sizeof(SHORT) != 2 || sizeof(LONG) != 4) abort("Fundamental TYPE1IMAGER assumptions invalid in this port", 22); InitSpaces(); InitFonts(); InitFiles(); /* In some environments, constants and/or exception handling need to be */ LibInit(); } /* :h4.TermImager() - Terminate TYPE1IMAGER This only makes sense in a server environment; true TYPE1IMAGER needs do nothing. */ void TermImager() { return; } /* :h4.reportusage() - A Stub to Get a Clean Link with Portable PMP */ void reportusage( void) { return; } t1lib-5.1.2/lib/type1/objects.h0000644000175000001440000002450110733501626014700 0ustar rmzusers/* $XConsortium: objects.h,v 1.6 92/03/20 14:35:56 keith Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /*SHARED*/ /*END SHARED*/ /*SHARED*/ #include "types.h" #define Permanent(obj) t1_Permanent(obj) #define Temporary(obj) t1_Temporary(obj) #define Destroy(obj) t1_Destroy(obj) #define Dup(obj) t1_Dup(obj) #define InitImager() t1_InitImager() #define TermImager() t1_TermImager() #define Pragmatics(f,v) t1_Pragmatics(f,v) #define ErrorMsg() t1_ErrorMsg() struct xobject *t1_Permanent(); /* make an object permanent */ struct xobject *t1_Temporary(); /* make an object temporary */ struct xobject *t1_Destroy(); /* destroy an object */ struct xobject *t1_Dup(); /* duplicate an object */ void t1_InitImager(); /* initialize TYPE1IMAGER */ void t1_TermImager(); /* terminate TYPE1IMAGER */ void t1_Pragmatics(); /* set debug flags, etc. */ char *t1_ErrorMsg(); /* return last TYPE1IMAGER error message */ /*END SHARED*/ /*SHARED*/ #define abort(line,no) t1_abort(line,no) #define Allocate(n,t,s) t1_Allocate(n,t,s) #define Free(obj) t1_Free(obj) #define NonObjectFree(a) free(a) #define Consume t1_Consume #define ArgErr(s,o,r) t1_ArgErr(s,o,r) #define TypeErr(n,o,e,r) t1_TypeErr(n,o,e,r) #define Copy(obj) t1_Copy(obj) #define Unique(obj) t1_Unique(obj) void t1_abort(); /* crash; software logic error */ struct xobject *t1_Allocate(); /* allocate memory */ void t1_Free(); /* free memory */ struct xobject *t1_Unique(); /* make a unique temporary copy of an object */ struct xobject *t1_ArgErr(); /* handle argument errors */ struct xobject *t1_TypeErr(); /* handle 'bad type' argument errors */ void t1_Consume(); /* consume a variable number of arguments */ struct xobject *t1_Copy(); /* make a new copy, not reference bump PNM */ /*END SHARED*/ /*SHARED*/ #define ON (~0) /* all bits on */ #ifndef FALSE #define FALSE 0 /* handy zero value */ #endif #ifndef TRUE #define TRUE 1 /* handy non-zero value */ #endif #ifndef NULL #define NULL 0 /* The NULL pointer is system specific. (Most systems, however, use 0.) TYPE1IMAGER could have its own NULL, independent of the rest of the system, were it not for malloc(). The system call malloc() returns NULL when out of memory. :i1/portibility assumptions/ */ #endif #define TYPE1_MIN(a,b) (((a)<(b)) ? a : b) #define TYPE1_MAX(a,b) (((a)>(b)) ? a : b) #define TYPE1_ABS(a) (((a)>=0)?(a):-(a)) /*END SHARED*/ /*SHARED*/ struct xobject { char type; /* encoded type of object */ unsigned char flag; /* flag byte for temporary object characteristics */ short references; /* count of pointers to this object (plus 1 for permanent objects) PNM */ } ; /*END SHARED*/ /*SHARED*/ #define XOBJ_COMMON char type; unsigned char flag; short references; /*END SHARED*/ /*SHARED*/ #define INVALIDTYPE 0 #define FONTTYPE 1 #define REGIONTYPE 3 #define PICTURETYPE 4 #define SPACETYPE 5 #define LINESTYLETYPE 6 #define EDGETYPE 7 #define STROKEPATHTYPE 8 #define CLUTTYPE 9 #define ISPATHTYPE(type) ((type)&0x10) /* all path segments have this bit on */ #define LINETYPE (0+ISPATHTYPE(ON)) #define CONICTYPE (1+ISPATHTYPE(ON)) #define BEZIERTYPE (2+ISPATHTYPE(ON)) #define HINTTYPE (3+ISPATHTYPE(ON)) #define MOVETYPE (5+ISPATHTYPE(ON)) #define TEXTTYPE (6+ISPATHTYPE(ON)) /*END SHARED*/ /*SHARED*/ #define ISPERMANENT(flag) ((flag)&0x01) #define ISIMMORTAL(flag) ((flag)&0x02) /*END SHARED*/ /*SHARED*/ #define PRESERVE(obj) if (!ISPERMANENT((obj)->flag)) \ (obj)->references++; /*END SHARED*/ /*SHARED*/ #define LONGCOPY(dest,source,bytes) { \ register LONG *p1 = (LONG *)dest; register LONG *p2 = (LONG *)source; \ register int count = (bytes) / sizeof(LONG); \ while (--count >= 0) *p1++ = *p2++; } /*END SHARED*/ /*SHARED*/ #define FOLLOWING(p) ((p)+1) /*END SHARED*/ /*SHARED*/ #define TYPECHECK(name, obj, expect, whenBAD, consumables, rettype) { \ if (obj->type != expect) { \ (Consume)consumables; \ return((rettype)TypeErr(name, obj, expect, whenBAD)); \ } \ } /*END SHARED*/ /*SHARED*/ #define ARGCHECK(test,msg,obj,whenBAD,consumables,rettype) { \ if (test) { \ (Consume)consumables; \ return((rettype)ArgErr(msg, obj, whenBAD)); \ } \ } /*END SHARED*/ /*SHARED*/ /* Changed use of Dup() below to Temporary(Copy()) because Dup() does not necessarily return a Unique Copy anymore! 3-26-91 */ #define TYPENULLCHECK(name, obj, expect, whenBAD, consumables,rettype) \ if (obj == NULL) { \ (Consume)consumables; \ if (whenBAD != NULL && ISPERMANENT(whenBAD->flag)) \ return((rettype)Temporary(Copy(whenBAD))); \ else return((rettype)whenBAD); \ } else { \ if (obj->type != expect) { \ (Consume)consumables; \ return((rettype)TypeErr(name, obj, expect, whenBAD)); \ } \ } /*END SHARED*/ /*SHARED*/ #define MAKECONSUME(obj,stmt) { if (!ISPERMANENT(obj->flag)) stmt; } /*END SHARED*/ /*SHARED*/ #define MAKEUNIQUE(obj,stmt) ( ( (obj)->references > 1 ) ? stmt : obj ) /*END SHARED*/ /*SHARED*/ /* NDW: personally, I want to see status and error messages! */ #define IfTrace0(condition,model) \ {if (condition) printf(model);} #define IfTrace1(condition,model,arg0) \ {if (condition) printf(model,arg0);} #define IfTrace2(condition,model,arg0,arg1) \ {if (condition) printf(model,arg0,arg1);} #define IfTrace3(condition,model,arg0,arg1,arg2) \ {if (condition) printf(model,arg0,arg1,arg2);} #define IfTrace4(condition,model,arg0,arg1,arg2,arg3) \ {if (condition) printf(model,arg0,arg1,arg2,arg3);} #define IfTrace5(condition,model,arg0,arg1,arg2,arg3,arg4) \ {if (condition) printf(model,arg0,arg1,arg2,arg3,arg4);} #define IfTrace6(condition,model,arg0,arg1,arg2,arg3,arg4,arg5) \ {if (condition) printf(model,arg0,arg1,arg2,arg3,arg4,arg5);} /* NDW: patch ends */ void Trace0(); char *Trace1(),*Trace2(),*Trace3(),*Trace4(),*Trace5(),*Trace6(); #ifdef GLOBALS #define extern #define INITIALIZED(value) = value #else #define INITIALIZED(value) #endif extern char MustCheckArgs INITIALIZED(TRUE); extern char MustTraceCalls INITIALIZED(FALSE); extern char MustCrash INITIALIZED(TRUE); extern char InternalTrace INITIALIZED(TRUE); extern char LineIOTrace INITIALIZED(TRUE); extern char ProcessHints INITIALIZED(TRUE); extern char SaveFontPaths INITIALIZED(TRUE); extern short CRASTERCompressionType INITIALIZED(1); extern char ConicDebug INITIALIZED(0); extern char LineDebug INITIALIZED(0); extern char RegionDebug INITIALIZED(0); extern char PathDebug INITIALIZED(0); extern char FontDebug INITIALIZED(0); extern char SpaceDebug INITIALIZED(0); extern char StrokeDebug INITIALIZED(0); extern char MemoryDebug INITIALIZED(0); extern char HintDebug INITIALIZED(0); extern char ImageDebug INITIALIZED(0); extern char OffPageDebug INITIALIZED(0); extern short CachedChars INITIALIZED(0x7FFF); extern short CachedFonts INITIALIZED(0x7FFF); extern int CacheBLimit INITIALIZED(12500); extern char Continuity INITIALIZED(2); #ifdef extern #undef extern #endif /* We define other routines formatting parameters */ #define DumpArea(area) t1_DumpArea(area) #define DumpText(text) t1_DumpText(text) /* #define DumpPath(path) t1_DumpPath(path) */ /* commented by RMz, 1999-06-10 */ #define DumpSpace(space) t1_DumpSpace(space) #define DumpEdges(e) t1_DumpEdges(e) #define FormatFP(s,p) t1_FormatFP(s,p) void t1_DumpArea(); /* dump a region structure */ void t1_DumpText(); /* dump a textpath structure */ void T1_DumpPath(); /* dump a path list */ void t1_DumpSpace(); /* dump a coordinate space structure */ void t1_DumpEdges(); /* dump a region's edge list */ void t1_FormatFP(); /* dump a format a "fractpel" coordinate */ /*END SHARED*/ t1lib-5.1.2/lib/type1/paths_rmz.h0000644000175000001440000002130510733501626015255 0ustar rmzusers/* $XConsortium: paths.h,v 1.2 91/10/10 11:18:50 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /*SHARED*/ #include "types.h" #define XOBJ_COMMON char type; unsigned char flag; short references; #include "spaces_rmz.h" /* #define Loc(S,x,y) t1_Loc(S,(DOUBLE)x,(DOUBLE)y) #define ILoc(S,x,y) t1_ILoc(S,x,y) #define Line(P) t1_Line(P) #define Join(p1,p2) t1_Join(p1,p2) #define ClosePath(p) t1_ClosePath(p,0) #define CloseLastSubPath(p) t1_ClosePath(p,1) #define Conic(B,C,s) t1_Conic(B,C,(DOUBLE)s) #define RoundConic(M,C,r) t1_RoundConic(M,C,(DOUBLE)r) #define ArcP3(S,P2,P3) t1_ArcP3(S,P2,P3) #define ArcCA(S,C,d) t1_ArcCA(S,C,(DOUBLE)d) #define Bezier(B,C,D) t1_Bezier(B,C,D) #define Hint(S,r,w,o,h,a,d,l) t1_Hint(S,r,w,o,h,a,d,l) #define Reverse(p) t1_Reverse(p) #define ReverseSubPaths(p) t1_ReverseSubPaths(p) #define AddLoc(p1,p2) t1_Join(p1,p2) #define SubLoc(p1,p2) t1_SubLoc(p1,p2) #define DropSegment(p) t1_DropSegment(p) #define HeadSegment(p) t1_HeadSegment(p) #define QueryLoc(P,S,x,y) t1_QueryLoc(P,S,x,y) #define QueryPath(p,t,B,C,D,r) t1_QueryPath(p,t,B,C,D,r) #define QueryBounds(p,S,x1,y1,x2,y2) t1_QueryBounds(p,S,x1,y1,x2,y2) */ /* struct segment *t1_Loc(); struct segment *t1_ILoc(); struct segment *t1_Line(); struct segment *t1_Join(); struct segment *t1_ClosePath(); struct conicsegment *t1_Conic(); struct conicsegment *t1_RoundConic(); struct conicsegment *t1_ArcP3(); struct conicsegment *t1_ArcCA(); struct beziersegment *t1_Bezier(); struct hintsegment *t1_Hint(); struct segment *t1_Reverse(); struct segment *t1_ReverseSubPaths(); struct segment *t1_SubLoc(); struct segment *t1_DropSegment(); struct segment *t1_HeadSegment(); void t1_QueryLoc(); void t1_QueryPath(); void t1_QueryBounds(); */ /*END SHARED*/ /*SHARED*/ #define CopyPath(p) t1_CopyPath(p) #define KillPath(p) t1_KillPath(p) #define PathTransform(p,m) t1_PathXform(p,m) #define PathDelta(p,pt) t1_PathDelta(p,pt) #define BoundingBox(h,w) t1_BoundingBox(h,w) #define PathSegment(t,x,y) t1_PathSegment(t,(fractpel)x,(fractpel)y) #define JoinSegment(b,t,x,y,a) t1_JoinSegment(b,t,(fractpel)x,(fractpel)y,a) #define Hypoteneuse(dx,dy) t1_Hypoteneuse(dx,dy) #define BoxPath(S,h,w) t1_BoxPath(S,h,w) struct segment *t1_CopyPath(); /* duplicate a path */ void t1_KillPath(); /* destroy a path */ struct segment *t1_PathXform(); /* transform a path arbitrarily */ void t1_PathDelta(); /* calculate the ending point of a path */ struct segment *t1_PathSegment(); /* produce a MOVE or LINE segment */ struct segment *t1_JoinSegment(); /* join a MOVE or LINE segment to a path */ DOUBLE t1_Hypoteneuse(); /* returns the length of a line */ struct segment *t1_BoxPath(); /* returns a rectangular path */ /*END SHARED*/ /*SHARED*/ #define ConsumePath(p) MAKECONSUME(p,KillPath(p)) #define UniquePath(p) MAKEUNIQUE(p,CopyPath(p)) /*END SHARED*/ /*SHARED*/ struct segment { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ unsigned char size; /* size of the structure */ unsigned char context; /* index to device context */ struct segment *link; /* pointer to next structure in linked list */ struct segment *last; /* pointer to last structure in list */ struct fractpoint dest; /* relative ending location of path segment */ } ; #define ISCLOSED(flag) ((flag)&0x80) /* subpath is closed */ #define LASTCLOSED(flag) ((flag)&0x40) /* last segment in closed subpath */ /* NOTE: The ISCLOSED flag is set on the MOVETYPE segment before the subpath proper; the LASTCLOSED flag is set on the last segment (LINETYPE) in the subpath We define the ISPATHANCHOR predicate to test that a path handle passed by the user is valid: */ #define ISPATHANCHOR(p) (ISPATHTYPE(p->type)&&p->last!=NULL) /* For performance reasons, a user's "location" object is identical to a path whose only segment is a move segment. We define a predicate to test for this case. See also :hdref refid=location.. */ #define ISLOCATION(p) ((p)->type == MOVETYPE && (p)->link == NULL) /*END SHARED*/ /*SHARED*/ struct conicsegment { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = CONICTYPE */ unsigned char size; /* as with any 'segment' type */ unsigned char context; /* as with any 'segment' type */ struct segment *link; /* as with any 'segment' type */ struct segment *last; /* as with any 'segment' type */ struct fractpoint dest; /* Ending point (C point) */ struct fractpoint M; /* "midpoint" of conic explained above */ float roundness; /* explained above */ } ; /*END SHARED*/ /*SHARED*/ struct beziersegment { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = BEZIERTYPE */ unsigned char size; /* as with any 'segment' type */ unsigned char context; /* as with any 'segment' type */ struct segment *link; /* as with any 'segment' type */ struct segment *last; /* as with any 'segment' type */ struct fractpoint dest; /* ending point (D) */ struct fractpoint B; /* control point B */ struct fractpoint C; /* control point C */ } ; /*END SHARED*/ /*SHARED*/ struct hintsegment { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = HINTTYPE */ unsigned char size; /* size of the structure */ unsigned char context; /* device context */ struct segment *link; /* pointer to next structure in linked list */ struct segment *last; /* pointer to last structure in list */ struct fractpoint dest; /* ALWAYS 0,0 */ struct fractpoint ref; struct fractpoint width; char orientation; char hinttype; char adjusttype; char direction; int label; } ; /*END SHARED*/ /*SHARED*/ /* CONCAT links the 'p2' path chain on the end of the 'p1' chain. (This macro is also used by the STROKES module.) */ #define CONCAT(p1, p2) { \ (struct segment *)(p1)->last->link = (struct segment *)p2; \ (struct segment *)(p1)->last = p2->last; \ (struct segment *)(p2)->last = NULL; } /*END SHARED*/ t1lib-5.1.2/lib/type1/trig.h0000644000175000001440000000311610733501626014213 0ustar rmzusers/* $XConsortium: trig.h,v 1.2 91/10/10 11:20:04 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /*SHARED*/ #define DegreeCos(d) xiStub() #define DegreeSin(d) xiStub() #define sqrt(d) xiStub() t1lib-5.1.2/lib/type1/hints.c0000644000175000001440000007756010733501626014404 0ustar rmzusers/* $XConsortium: hints.c,v 1.4 91/10/10 11:18:13 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /* HINTS CWEB V0006 ******** */ /* :h1.HINTS Module - Processing Rasterization Hints &author. Sten F. Andler; continuity by Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com) and Duaine W. Pryor, Jr. :h3.Include Files The included files are: */ #include #include "types.h" #include "objects.h" #include "spaces.h" #include "paths.h" #include "regions.h" #include "hints.h" /* :h3.Functions Provided to the TYPE1IMAGER User None. */ /* :h3.Functions Provided to Other Modules This module provides the following entry point to other modules: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Macros Provided to Other Modules None. */ /* :h2.InitHints() - Initialize hint data structure */ #define MAXLABEL 20 static struct { int inuse; int computed; struct fractpoint hint; } oldHint[MAXLABEL]; #define ODD(x) (((int)(x)) & 01) #define FPFLOOR(fp) TOFRACTPEL((fp) >> FRACTBITS) #define FPROUND(fp) FPFLOOR((fp) + FPHALF) void InitHints() { int i; for (i = 0; i < MAXLABEL; i++) { oldHint[i].inuse = FALSE; oldHint[i].computed = FALSE; } } /* :h3.CloseHints(hintP) - Reverse hints that are still open */ void CloseHints(hintP) struct fractpoint *hintP; { int i; for (i = 0; i < MAXLABEL; i++) { if (oldHint[i].inuse) { hintP->x -= oldHint[i].hint.x; hintP->y -= oldHint[i].hint.y; oldHint[i].inuse = FALSE; IfTrace3((HintDebug > 1)," Hint %d was open, hint=(%d,%d)\n", i, hintP->x, hintP->y); } } } /* :h3.ComputeHint(hP, currX, currY, hintP) - Compute the value of a hint */ static void ComputeHint(hP, currX, currY, hintP) struct hintsegment *hP; fractpel currX, currY; struct fractpoint *hintP; { fractpel currRef=0, currWidth=0; int idealWidth; fractpel hintValue=0; char orientation; /* By construction, width is never zero. Therefore we can use the width value to determine if the hint has been rotated by a multiple of 90 degrees. */ if (hP->width.y == 0) { orientation = 'v'; /* vertical */ IfTrace0((HintDebug > 0)," vertical hint\n"); } else if (hP->width.x == 0) { orientation = 'h'; /* horizontal */ IfTrace0((HintDebug > 0)," horizontal hint\n"); } else { IfTrace0((HintDebug > 0)," hint not vertical or horizontal\n"); hintP->x = hintP->y = 0; return; } /* Compute currRef and currWidth with a unit of 1 pel */ if (orientation == 'v') /* vertical */ { currRef = hP->ref.x + currX; currWidth = TYPE1_ABS(hP->width.x); } else if (orientation == 'h') /* horizontal */ { currRef = hP->ref.y + currY; currWidth = TYPE1_ABS(hP->width.y); } else /* error */ { abort("ComputeHint: invalid orientation", 4); } IfTrace4((HintDebug > 1), " currX=%d, currY=%d, currRef=%d, currWidth=%d\n", currX, currY, currRef, currWidth); if ((hP->hinttype == 'b') /* Bar or stem */ || (hP->hinttype == 's')) /* Serif */ { idealWidth = NEARESTPEL(currWidth); if (idealWidth == 0) idealWidth = 1; if (ODD(idealWidth)) /* Is ideal width odd? */ { /* center "ref" over pel */ hintValue = FPFLOOR(currRef) + FPHALF - currRef; } else { /* align "ref" on pel boundary */ hintValue = FPROUND(currRef) - currRef; } if (HintDebug > 2) { IfTrace1(TRUE," idealWidth=%d, ", idealWidth); } } else if (hP->hinttype == 'c') /* Curve extrema */ { /* align "ref" on pel boundary */ hintValue = FPROUND(currRef) - currRef; } else /* error */ { abort("ComputeHint: invalid hinttype", 5); } IfTrace1((HintDebug > 1)," hintValue=%d", hintValue); if (orientation == 'v') /* vertical */ { hintP->x = hintValue; hintP->y = 0; } else if (orientation == 'h') /* horizontal */ { hintP->x = 0; hintP->y = hintValue; } else /* error */ { abort("ComputeHint: invalid orientation", 6); } } /* :h3.ProcessHint(hP, currX, currY, hintP) - Process a rasterization hint */ void ProcessHint(hP, currX, currY, hintP) struct hintsegment *hP; fractpel currX, currY; struct fractpoint *hintP; { struct fractpoint thisHint; IfTrace4((HintDebug > 1)," ref=(%d,%d), width=(%d,%d)", hP->ref.x, hP->ref.y, hP->width.x, hP->width.y); IfTrace4((HintDebug > 1),", %c %c %c %c", hP->orientation, hP->hinttype, hP->adjusttype, hP->direction); IfTrace1((HintDebug > 1),", label=%d\n", hP->label); if ((hP->adjusttype == 'm') /* Move */ || (hP->adjusttype == 'a')) /* Adjust */ { /* Look up hint in oldHint table */ if ((hP->label >= 0) && (hP->label < MAXLABEL)) { if (oldHint[hP->label].computed) /* Use old hint value if already computed */ { thisHint.x = oldHint[hP->label].hint.x; thisHint.y = oldHint[hP->label].hint.y; oldHint[hP->label].inuse = TRUE; } else /* Compute new value for hint and store it for future use */ { ComputeHint(hP, currX, currY, &thisHint); oldHint[hP->label].hint.x = thisHint.x; oldHint[hP->label].hint.y = thisHint.y; oldHint[hP->label].inuse = TRUE; oldHint[hP->label].computed = TRUE; } } else /* error */ { abort("ProcessHint: invalid label", 7); } } else if (hP->adjusttype == 'r') /* Reverse */ { /* Use the inverse of the existing hint value to reverse hint */ if ((hP->label >= 0) && (hP->label < MAXLABEL)) { if (oldHint[hP->label].inuse) { thisHint.x = -oldHint[hP->label].hint.x; thisHint.y = -oldHint[hP->label].hint.y; oldHint[hP->label].inuse = FALSE; } else /* error */ { abort("ProcessHint: label is not in use", 8); } } else /* error */ { abort("ProcessHint: invalid label", 9); } } else /* error */ { abort("ProcessHint: invalid adjusttype", 10); } IfTrace3((HintDebug > 1)," label=%d, thisHint=(%d,%d)\n", hP->label, thisHint.x, thisHint.y); hintP->x += thisHint.x; hintP->y += thisHint.y; IfTrace2((HintDebug > 1)," hint=(%d,%d)\n", hintP->x, hintP->y); } /* :h2 id=subpath.Navigation Through Edge Lists For continuity checking purposes, we need to navigate through edge lists by the "subpath" chains and answer questions about edges. The subpath chain links together edges that were part of the same subpath (no intervening move segments) when the interior of the path was calculated. Here we use the term "edge" to mean every edge list that was created in between changes of direction. The subpath chains are singly-linked circular chains. For the convenience of building them, they direction of the list (from edge to edge) is the reverse of the order in which they were built. Within any single edge, the subpath chain goes from top-to-bottom. (There might be a violation of this because of the way the user started the first chain; see :hdref refid=fixsubp..). :h3.ISTOP() and ISBOTTOM() - Flag Bits for Edge Lists at the Top and Bottom of Their SubPaths */ #define ISTOP(flag) ((flag)&0x20) #define ISBOTTOM(flag) ((flag)&0x10) /* :h3.ISLEFT() - Flag Bit for Left Edges */ #define ISLEFT(flag) ((flag)&0x08) /* :h3.XofY() - Macro to Find X Value at Given Y This macro can only be used if it is known that the Y is within the given edgelist's ymin and ymax. */ #define XofY(edge, y) edge->xvalues[y - edge->ymin] /* :h3.findXofY() - Like XofY(), Except not Restricted If the Y is out of bounds of the given edgelist, this macro will call SearchXofY to search the edge's subpath chain for the correct Y range. If the Y value is off the edge, MINPEL is returned. */ #define findXofY(edge, y) ((y < edge->ymin || y >= edge->ymax) ? SearchXofY(edge, y) : XofY(edge, y)) /* :h4.SearchXofY() - Routine Called by FindXofY() for Difficult Cases The concept of this routine is to follow the subpath chain to find the edge just below (i.e., next in chain) or just above (i.e., immediately before in chain. It is assumed that the Y value is no more than one off of the edge's range; XofY() could be replace by FindXofY() to call ourselves recursively if this were not true. */ static pel SearchXofY(edge, y) register struct edgelist *edge; /* represents edge */ register pel y; /* 'y' value to find edge for */ { register struct edgelist *e; /* loop variable */ if (y < edge->ymin) { if (ISTOP(edge->flag)) { return(MINPEL); } for (e = edge->subpath; e->subpath != edge; e = e->subpath) { ; } if (e->ymax == edge->ymin) { return(XofY(e, y)); } } else if (y >= edge->ymax) { if (ISBOTTOM(edge->flag)) { return(MINPEL); } e = edge->subpath; if (e->ymin == edge->ymax) { return(XofY(e, y)); } } else { return(XofY(edge, y)); } abort("bad subpath chain", 11); /*NOTREACHED*/ /* To make ANSI-C-compiler happy: */ return(y); } /* :h3.ISBREAK() Macro - Tests if an Edge List is at a "Break" The subpath chains are organized top to bottom. When the bottom of a given edge is reached, the subpath chain points to the top of the next edge. We call this a "break" in the chain. The following macro is the simple test for the break condition: */ #define ISBREAK(top,bot) (top->ymax != bot->ymin) /* :h3.ImpliedHorizontalLine() - Tests for Horizontal Connectivity This function returns true if two edges are connected horizontally. They are connected horizontally if they are consecutive in the subpath, and either we are at the bottom and the first edge is going down or we are at the top and the first edge is going up. */ #define BLACKABOVE -1 #define BLACKBELOW +1 #define NONE 0 static int ImpliedHorizontalLine(e1, e2, y) register struct edgelist *e1,*e2; /* two edges to check */ register int y; /* y where they might be connected */ { register struct edgelist *e3,*e4; if (ISDOWN(e1->flag) == ISDOWN(e2->flag)) return(NONE); /* can't be consecutive unless different directions */ /* Now we check for consecutiveness: Can we get from 'e1' to 'e2' with only one intervening break? Can we get from 'e2' to 'e1' with only one intervening break? 'e3' will be as far as we can get after 'e1'; 'e4' will be has far as we can get after 'e2': */ for (e3 = e1; !ISBREAK(e3, e3->subpath); e3 = e3->subpath) { ; } for (e3 = e3->subpath; e3 != e2; e3 = e3->subpath) if (ISBREAK(e3, e3->subpath)) break; for (e4 = e2; !ISBREAK(e4, e4->subpath); e4 = e4->subpath) { ; } for (e4 = e4->subpath; e4 != e1; e4 = e4->subpath) if (ISBREAK(e4, e4->subpath)) break; /* If the edges are mutually consecutive, we must have horizontal lines both top and bottom: */ if (e3 == e2 && e4 == e1) return(TRUE); /* If the edges are not consecutive either way, no horizontal lines are possible: */ if (e3 != e2 && e4 != e1) return(NONE); /* Now let's swap 'e1' and 'e2' if necessary to enforce the rule that 'e2' follows 'e1'. Remember that subpath chains go in the opposite direction from the way the subpaths were built; this led to the simplest way do build them. */ if (e4 != e1) { e2 = e1; e1 = e3; /* remember e3 == e2, this just swaps 'e1' and 'e2' */ } /* Now we have everything to return the answer: */ if (ISTOP(e1->flag) && y == e1->ymin) return(ISDOWN(e2->flag)); else if (ISBOTTOM(e1->flag) && y == e1->ymax) return(!ISDOWN(e2->flag)); else abort("ImpliedHorizontalLine: why ask?", 12); /*NOTREACHED*/ /* To make ANSI-C-compiler happy */ return(0); } /* :h3 id=fixsubp.FixSubPaths() - Must be Called to Organize Subpath Chains The region-building code in Interior(), in particular splitedge(), maintains the rule that sub-paths are linked top-to-bottom except at breaks. However, it is possible that there may be a "false break" because the user started the subpath in the middle of an edge (and went in the "wrong" direction from there, up instead of down). This routine finds and fixes false breaks. Also, this routine sets the ISTOP and ISBOTTOM flags in the edge lists. */ static void FixSubPaths(R) register struct region *R; /* anchor of region */ { register struct edgelist *e; /* fast loop variable */ register struct edgelist *edge; /* current edge in region */ register struct edgelist *next; /* next in subpath after 'edge' */ register struct edgelist *break1; /* first break after 'next' */ register struct edgelist *break2=NULL; /* last break before 'edge' */ register struct edgelist *prev; /* previous edge for fixing links */ int left = TRUE; for (edge = R->anchor; edge != NULL; edge = edge->link) { if (left) edge->flag |= ISLEFT(ON); left = !left; next = edge->subpath; if (!ISBREAK(edge, next)) continue; if (edge->ymax < next->ymin) abort("disjoint subpath?", 13); /* 'edge' now contains an edgelist at the bottom of an edge, and 'next' contains the next subsequent edgelist in the subpath, which must be at the top. We refer to this a "break" in the subpath. */ next->flag |= ISTOP(ON); edge->flag |= ISBOTTOM(ON); if (ISDOWN(edge->flag) != ISDOWN(next->flag)) continue; /* We are now in the unusual case; both edges are going in the same direction so this must be a "false break" due to the way that the user created the path. We'll have to fix it. */ for (break1 = next; !ISBREAK(break1, break1->subpath); break1 = break1->subpath) { ; } for (e = break1->subpath; e != edge; e = e->subpath) if (ISBREAK(e, e->subpath)) break2 = e; /* Now we've set up 'break1' and 'break2'. I've found the following diagram invaluable. 'break1' is the first break after 'next'. 'break2' is the LAST break before 'edge'. &drawing. next +------+ +---->+------+ +--->| >-----+ | | >-----+ | | | | | | | | | +-------------+ | +-------------+ | | |break1| | | | | | +->| >-------+ +->| >-----+ | | | | | | | | | +-------------+ | +------+ | | | | +----------------+ | | | | | +------+ | +->| >-----+ | +->| >-----+ | | | | | | | | | +-------------+ | +-------------+ | | | | | | |edge | | | |break2| | +->| >-----+ | +->| >-----+ | | | | | | | | | | | | | | | | | | | | | | | | | +------+ | | +------+ | | | | | +---------------+ +---------------+ &edrawing. We want to fix this situation by having 'edge' point to where 'break1' now points, and having 'break1' point to where 'break2' now points. Finally, 'break2' should point to 'next'. Also, we observe that 'break1' can't be a bottom, and is also not a top unless it is the same as 'next': */ edge->subpath = break1->subpath; break1->subpath = break2->subpath; if (ISBREAK(break1, break1->subpath)) abort("unable to fix subpath break?", 14); break2->subpath = next; break1->flag &= ~ISBOTTOM(ON); if (break1 != next) break1->flag &= ~ISTOP(ON); } /* This region might contain "ambiguous" edges; edges exactly equal to edge->link. Due to the random dynamics of where they get sorted into the list, they can yield false crossings, where the edges appear to cross. This confuses our continuity logic no end. Since we can swap them without changing the region, we do. */ for (edge = R->anchor, prev = NULL; VALIDEDGE(edge); prev = edge, edge = prev->link) { if (! ISAMBIGUOUS(edge->flag)) { continue; } next = edge->subpath; while (ISAMBIGUOUS(next->flag) && next != edge) { next = next->subpath; } /* We've finally found a non-ambiguous edge; we make sure it is left/right compatible with 'edge': */ if ( (ISLEFT(edge->flag) == ISLEFT(next->flag) && ISDOWN(edge->flag) == ISDOWN(next->flag) ) || (ISLEFT(edge->flag) != ISLEFT(next->flag) && ISDOWN(edge->flag) != ISDOWN(next->flag) ) ) { continue; } /* Incompatible, we will swap 'edge' and the following edge in the list. You may think that there must be a next edge in this swath. So did I. No! If there is a totally ambiguous inner loop, for example, we could get all the way to the outside without resolving ambiguity. */ next = edge->link; /* note new meaning of 'next' */ if (next == NULL || edge->ymin != next->ymin) { continue; } /* printf(" Swap: \n"); printf(" Edge=0x%x, ymin=%d, ymax=%d, xmin=%d, xmax=%d, fpx1=%ld, fpx2=%ld\n", edge, edge->ymin, edge->ymax, edge->xmin, edge->xmax, edge->fpx1, edge->fpx2); printf(" Link=0x%x, ymin=%d, ymax=%d, xmin=%d, xmax=%d, fpx1=%ld, fpx2=%ld\n", next, next->ymin, next->ymax, next->xmin, next->xmax, next->fpx1, next->fpx2); printf(" Edge=0x%x (amb=%d), x[ymin]=%d, x[ymax]=%d, px1=%ld, px2=%ld\n", edge, ISAMBIGUOUS(edge->flag), edge->xvalues[0], edge->xvalues[edge->ymax - edge->ymin], edge->fpx1>>FRACTBITS, edge->fpx2>>FRACTBITS); printf(" Link=0x%x (amb=%d), x[ymin]=%d, x[ymax]=%d, px1=%ld, px2=%ld\n", next, ISAMBIGUOUS(next->flag), next->xvalues[0], next->xvalues[next->ymax - next->ymin], next->fpx1>>FRACTBITS, next->fpx2>>FRACTBITS); */ /* Check ambiguity also for link edge (RMz) */ if ( !ISAMBIGUOUS(next->flag) ) { continue; } if (prev == NULL) R->anchor = next; else prev->link = next; edge->link = next->link; next->link = edge; edge->flag ^= ISLEFT(ON); edge->flag &= ~ISAMBIGUOUS(ON); next->flag ^= ISLEFT(ON); next->flag &= ~ISAMBIGUOUS(ON); edge = next; } } /* :h3.DumpSubPaths() A debug tool. */ static struct edgelist *before(); /* subroutine of DumpSubPaths */ static void DumpSubPaths(anchor) struct edgelist *anchor; { register struct edgelist *edge,*e,*e2; pel y; for (edge = anchor; VALIDEDGE(edge); edge = edge->link) { if (ISPERMANENT(edge->flag)) continue; IfTrace0(TRUE, "BEGIN Subpath\n"); for (e2 = edge; !ISPERMANENT(e2->flag);) { if (ISDOWN(e2->flag)) { IfTrace1(TRUE, ". Downgoing edge's top at %p\n", e2); for (e = e2;; e = e->subpath) { IfTrace4(TRUE, ". . [%5d] %5d @ %p[%x]\n", e->ymin, *e->xvalues, e, e->flag); for (y=e->ymin+1; y < e->ymax; y++) IfTrace2(TRUE, ". . [%5d] %5d \"\n", y, e->xvalues[y-e->ymin]); e->flag |= ISPERMANENT(ON); if (ISBREAK(e, e->subpath)) break; } } else { IfTrace1(TRUE, ". Upgoing edge's top at %p\n", e2); for (e = e2; !ISBREAK(e, e->subpath); e = e->subpath) { ; } for (;; e=before(e)) { IfTrace4(TRUE, ". . [%5d] %5d @ %p[%x]\n", e->ymax-1, e->xvalues[e->ymax-1-e->ymin], e, e->flag); for (y=e->ymax-2; y >= e->ymin; y--) IfTrace2(TRUE, ". . [%5d] %5d \"\n", y, e->xvalues[y-e->ymin]); e->flag |= ISPERMANENT(ON); if (e == e2) break; } } do { e2 = before(e2); } while (!ISBREAK(before(e2), e2)); } } } static struct edgelist *before(e) struct edgelist *e; { struct edgelist *r; for (r = e->subpath; r->subpath != e; r = r->subpath) { ; } return(r); } /* :h2.Fixing Region Continuity Problems Small regions may become disconnected when their connecting segments are less than a pel wide. This may be correct in some applications, but in many (especially small font characters), it is more pleasing to keep connectivity. ApplyContinuity() (invoked by +CONTINUITY on the Interior() fill rule) fixes connection breaks. The resulting region is geometrically less accurate, but may be more pleasing to the eye. */ /* Here are some macros which we will need: */ #define IsValidPel(j) (j!=MINPEL) /* :h3.writeXofY() - Stuffs an X Value Into an "edgelist" writeXofY writes an x value into an edge at position 'y'. It must update the edge's xmin and xmax. If there is a possibility that this new x might exceed the region's bounds, updating those are the responsibility of the caller. */ static void writeXofY(e, y, x) struct edgelist *e; /* relevant edgelist */ int y; /* y value */ int x; /* new x value */ { if (e->xmin > x) e->xmin = x; if (e->xmax < x) e->xmax = x; e->xvalues[y - e->ymin] = x; } /*-------------------------------------------------------------------------*/ /* the following three macros tell us whether we are at a birth point, a */ /* death point, or simply in the middle of the character */ /*-------------------------------------------------------------------------*/ #define WeAreAtTop(e,i) (ISTOP(e->flag) && e->ymin == i) #define WeAreAtBottom(e,i) (ISBOTTOM(e->flag) && e->ymax-1 == i) #define WeAreInMiddle(e,i) \ ((!ISTOP(e->flag) && !ISBOTTOM(e->flag))||(i < e->ymax-1 && i > e->ymin)) /* The following macro tests if two "edgelist" structures are in the same swath: */ #define SAMESWATH(e1,e2) (e1->ymin == e2->ymin) /* :h3.CollapseWhiteRun() - Subroutine of ApplyContinuity() When we have a white run with an implied horizontal line above or below it, we better have black on the other side of this line. This function both tests to see if black is there, and adjusts the end points (collapses) the white run as necessary if it is not. The goal is to collapse the white run as little as possible. */ static void CollapseWhiteRun(anchor, yblack, left, right, ywhite) struct edgelist *anchor; /* anchor of edge list */ pel yblack; /* y of (hopefully) black run above or below */ struct edgelist *left; /* edgelist at left of WHITE run */ struct edgelist *right; /* edgelist at right of WHITE run */ pel ywhite; /* y location of white run */ { struct edgelist *edge; struct edgelist *swathstart = anchor; register pel x; if (XofY(left, ywhite) >= XofY(right, ywhite)) return; /* Find the swath with 'yblack'. If we don't find it, completely collapse the white run and return: */ while (VALIDEDGE(swathstart)) { if (yblack < swathstart->ymin) { writeXofY(left, ywhite, XofY(right, ywhite)); return; } if (yblack < swathstart->ymax) break; swathstart = swathstart->link->link; } if(!VALIDEDGE(swathstart)) { writeXofY(left, ywhite, XofY(right, ywhite)); return; } /* Now we are in the swath that contains 'y', the reference line above or below that we are trying to maintain continuity with. If black in this line begins in the middle of our white run, we must collapse the white run from the left to that point. If black ends in the middle of our white run, we must collapse the white run from the right to that point. */ for (edge = swathstart; VALIDEDGE(edge); edge = edge->link) { if (!SAMESWATH(swathstart,edge)) break; if( XofY(edge, yblack) > XofY(left, ywhite)) { if (ISLEFT(edge->flag)) { x = XofY(edge, yblack); if (XofY(right, ywhite) < x) x = XofY(right, ywhite); writeXofY(left, ywhite, x); } else { x = XofY(edge, yblack); while (edge->link != NULL && SAMESWATH(edge, edge->link) && x >= XofY(edge->link, yblack) ) { edge = edge->link->link; x = XofY(edge, yblack); } if (x < XofY(right, ywhite)) writeXofY(right, ywhite, x); return; } } } writeXofY(left, ywhite, XofY(right, ywhite)); } /* :h3.ApplyContinuity() - Fix False Breaks in a Region This is the externally visible routine called from the REGIONS module when the +CONTINUITY flag is on the Interior() fill rule. */ void ApplyContinuity(R) struct region *R; { struct edgelist *left; struct edgelist *right; struct edgelist *edge,*e2; pel rightXabove,rightXbelow,leftXabove,leftXbelow; pel leftX,rightX; int i; long edgecnt = 0; fractpel xavrg = 0; LONG newcenter,abovecenter,belowcenter; FixSubPaths(R); if ( RegionDebug >= 3) DumpSubPaths(R->anchor); left = R->anchor; /* loop through and do all of the easy checking. ( no tops or bottoms) */ while(VALIDEDGE(left)) { right = left->link; for(i=left->ymin;iymax;++i) { leftX = findXofY(left,i); rightX = findXofY(right,i); leftXbelow = findXofY(left,i+1); rightXbelow = findXofY(right,i+1); if(rightX <= leftX) { /* then, we have a break in a near vertical line */ leftXabove = findXofY(left,i-1); rightXabove = findXofY(right,i-1); /* Check above current scanline */ if ( IsValidPel(leftXabove) && IsValidPel(rightXabove) ) { abovecenter = leftXabove + rightXabove; } else { /* We are at the top. We can assume that the current edge list is just started --> Inspect the stored start fractpel values in order to decide about to which side to extend. --> Compute arithmetic average between left and right edge at high resolution */ xavrg = ((left->fpx1 + right->fpx1) >> 1); /* round down to get left (not nearest!) and get right edge by adding one pel. */ leftXabove = (xavrg >> FRACTBITS); rightXabove = leftXabove + 1; abovecenter = leftXabove + rightXabove; belowcenter = leftXabove + rightXabove; } /* Check below current scanline */ if ( IsValidPel(leftXbelow) && IsValidPel(rightXbelow) ) { belowcenter = leftXbelow + rightXbelow; } else { /* We are at the bottom. We can assume that the current edge list terminates here --> Inspect the stored end fractpel values in order to decide about to which side to extend. --> Compute arithmetic average between left and right edge at high resolution */ xavrg = ((left->fpx2 + right->fpx2) >> 1); /* round down to get left (not nearest!) and get right edge by adding one pel. */ leftXbelow = (xavrg >> FRACTBITS); rightXbelow = leftXbelow + 1; abovecenter = leftXbelow + rightXbelow; belowcenter = leftXbelow + rightXbelow; } newcenter = abovecenter + belowcenter; if( newcenter > 4*leftX ) { rightX = rightX + 1; writeXofY(right,i,rightX); } else if( newcenter < 4*leftX) { leftX = leftX - 1; writeXofY(left,i,leftX); } else { rightX = rightX + 1; writeXofY(right,i,rightX); } if ( rightX > R->xmax ) { R->xmax = rightX; } if ( leftX < R->xmin ) { R->xmin = leftX; } } if( !WeAreAtBottom(left,i) && (leftXbelow>=rightX)) { /* then we have a break in a near horizontal line in the middle */ writeXofY(right,i,leftXbelow); } if( !WeAreAtBottom(right,i) && (leftX >=rightXbelow)) { /* then we have a break in a near horizontal line in the middle */ writeXofY(left,i,rightXbelow); } } left = right->link; ++edgecnt; } /* There may be "implied horizontal lines" between edges that have implications for continuity. This loop looks for white runs that have implied horizontal lines on the top or bottom, and calls CollapseWhiteRuns to check and fix any continuity problems from them. */ for (edge = R->anchor; VALIDEDGE(edge); edge = edge->link) { if ((!ISTOP(edge->flag) && !ISBOTTOM(edge->flag)) || ISLEFT(edge->flag)) continue; /* at some future date we may want left edge logic here too */ for (e2 = edge->link; VALIDEDGE(e2) && SAMESWATH(edge,e2); e2 = e2->link) { if (ISTOP(e2->flag) && ISTOP(edge->flag) && NONE != ImpliedHorizontalLine(edge,e2,edge->ymin)) { if (ISLEFT(e2->flag)) CollapseWhiteRun(R->anchor, edge->ymin-1, edge, e2, edge->ymin); } if (ISBOTTOM(e2->flag) && ISBOTTOM(edge->flag) && NONE != ImpliedHorizontalLine(edge,e2, edge->ymax)) { if (ISLEFT(e2->flag)) CollapseWhiteRun(R->anchor, edge->ymax, edge, e2, edge->ymax-1); } } } } t1lib-5.1.2/lib/type1/hints.h0000644000175000001440000000412210733501626014371 0ustar rmzusers/* $XConsortium: hints.h,v 1.2 91/10/10 11:18:19 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /*SHARED*/ #define InitHints() t1_InitHints() void t1_InitHints(); /* Initialize hint data structure */ #define CloseHints(hintP) t1_CloseHints(hintP) void t1_CloseHints(); /* Reverse hints that are still open */ #define ProcessHint(hP, currX, currY, hintP) t1_ProcessHint(hP, currX, currY, hintP) void t1_ProcessHint(); /* Process a rasterization hint */ #define ApplyContinuity(R) t1_ApplyContinuity(R) void t1_ApplyContinuity(); /* fix false connection breaks in a region */ /*END SHARED*/ t1lib-5.1.2/lib/type1/util.c0000644000175000001440000001172510733501626014223 0ustar rmzusers/* $XConsortium: util.c,v 1.6 92/03/26 16:42:26 eswu Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* Author: Katherine A. Hitchcock IBM Almaden Research Laboratory */ #include "types.h" #include #include #include "util.h" #include "fontmisc.h" static char *vm_base = NULL; /* Start of virtual memory area */ char *vm_next = NULL; /* Pointer to first free byte */ LONG vm_free = 0; /* Count of free bytes */ LONG vm_size = 0; /* Total size of memory */ /* The following global variable is for detecting a trial to allocate a second chunk---not to be done with the t1lib, since a later reallocation would lead to segmentation faults! */ int vm_init_count; /* This is the amount of VM, the font is tried to be loaded in. */ int vm_init_amount; /* * Initialize memory. */ extern char *tokenMaxP; /* Pointer to end of VM we may use + 1 */ boolean vm_init() { /* Check whether it is the first piece of memory for the current font or not. If so, simulate lacking memory to indicate that the font should be tried to load with a vitual memory twice as large! */ if (vm_init_count>0){ vm_init_count++; return(FALSE); } vm_init_count++; vm_next = vm_base = (char *) calloc( vm_init_amount, sizeof(char)); if (vm_base != NULL) { vm_free = vm_init_amount; vm_size = vm_init_amount; tokenMaxP = vm_next_byte() + vm_init_amount; return(TRUE); } else return(FALSE); } char *vm_alloc(bytes) unsigned int bytes; { char *answer; /* Align returned bytes to 64-bit boundary */ bytes = (bytes + 7) & ~7; /* take space from what is left otherwise allocate another CHUNK */ if (bytes > vm_free){ if (!vm_init()) return NULL; } else{ answer = vm_next; vm_free -= bytes; vm_next += bytes; return answer; } /* Never reached, but compiler is happy: */ return NULL; } /* * Format an Integer object */ void objFormatInteger( psobj *objP, int value) { if (objP != NULL) { objP->type = OBJ_INTEGER; objP->len = 0; objP->data.integer = value; } } /* * Format a Real object */ void objFormatReal(psobj *objP, float value) { if (objP != NULL) { objP->type = OBJ_REAL; objP->len = 0; objP->data.real = value; } } /* * Format a Boolean object */ void objFormatBoolean(psobj *objP, boolean value) { if (objP != NULL) { objP->type = OBJ_BOOLEAN; objP->len = 0; objP->data.boolean = value; } } /* * Format an Encoding object */ void objFormatEncoding(psobj *objP, int length, psobj *valueP) { if (objP != NULL) { objP->type = OBJ_ENCODING; objP->len = length; objP->data.arrayP = valueP; } } /* * Format an Array object */ void objFormatArray(psobj *objP, int length, psobj *valueP) { if (objP != NULL) { objP->type = OBJ_ARRAY; objP->len = length; objP->data.arrayP = valueP; } } /* * Format a String object */ void objFormatString(psobj *objP, int length, char *valueP) { if (objP != NULL) { objP->type = OBJ_STRING; objP->len = length; objP->data.valueP = valueP; } } /* * Format a Name object */ void objFormatName( psobj *objP, int length, char *valueP) { if (objP != NULL) { objP->type = OBJ_NAME; objP->len = length; objP->data.nameP = valueP; } } /* * Format a File object */ void objFormatFile(psobj *objP, FILE *valueP) { if (objP != NULL) { objP->type = OBJ_FILE; objP->len = 0; objP->data.fileP = valueP; } } t1lib-5.1.2/lib/type1/util.h0000644000175000001440000001715110733501626014227 0ustar rmzusers/* $XConsortium: util.h,v 1.3 92/03/26 16:42:29 eswu Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ #ifndef UTIL_H #define UTIL_H #include "types.h" #ifndef boolean typedef int boolean; #endif #ifndef TRUE #define TRUE (1) #endif #ifndef FALSE #define FALSE (0) #endif /***================================================================***/ /* Portable definitions for 2's complement machines. * NOTE: These really should be based on PostScript types, * for example, sizeof(ps_integer), or sizeof(ps_unsigned) */ #define MAX_ULONG (~(ULONG)(0)) /* This code is portable, assuming K&R C and 2's complement arithmetic */ #define MAX_INTEGER \ ((LONG)((((ULONG) 1)<<(sizeof(ULONG)*8-1))-1)) #define MIN_INTEGER ((-MAX_INTEGER)-1) #define MAX_ARRAY_CNT (65535) #define MAX_DICT_CNT (65535) #define MAX_STRING_LEN (65535) #define MAX_NAME_LEN (128) /* this is the size of memory allocated for reading fonts */ #define VM_SIZE (50*1024) /***================================================================***/ #ifndef TYPE1_MIN #define TYPE1_MIN(a,b) (((a)<(b)) ? a : b ) #endif /***================================================================***/ /* Routines for managing virtual memory */ /***================================================================***/ extern boolean vm_init(); extern LONG vm_free; extern LONG vm_size; extern char *vm_next; extern char *vm_alloc(); /***================================================================***/ /* Macros for managing virtual memory */ /***================================================================***/ #define vm_next_byte() (vm_next) #define vm_free_bytes() (vm_free) #define vm_avail(B) (B <= vm_free) /***================================================================***/ /* Types of PostScript objects */ /***================================================================***/ #define OBJ_INTEGER (0) #define OBJ_REAL (1) #define OBJ_BOOLEAN (2) #define OBJ_ARRAY (3) #define OBJ_STRING (4) #define OBJ_NAME (5) #define OBJ_FILE (6) #define OBJ_ENCODING (7) /***================================================================***/ /* Value of PostScript objects */ /***================================================================***/ typedef union ps_value { char *valueP; /* value pointer for unspecified type */ int value; /* value for unspecified type */ int integer; /* when type is OBJ_INTEGER */ float real; /* when type is OBJ_REAL */ int boolean; /* when type is OBJ_BOOLEAN */ struct ps_obj *arrayP; /* when type is OBJ_ARRAY */ unsigned char *stringP; /* when type is OBJ_STRING */ char *nameP; /* when type is OBJ_NAME */ FILE *fileP; /* when type is OBJ_FILE */ } psvalue; /***================================================================***/ /* Definition of a PostScript object */ /***================================================================***/ typedef struct ps_obj { char type; char unused; unsigned short len; union ps_value data; } psobj; /***================================================================***/ /* Definition of a PostScript Dictionary Entry */ /***================================================================***/ typedef struct ps_dict { psobj key; psobj value; } psdict; /***================================================================***/ /* Macros for testing type of PostScript objects */ /***================================================================***/ #define objIsInteger(o) ((o).type == OBJ_INTEGER) #define objIsReal(o) ((o).type == OBJ_REAL) #define objIsBoolean(o) ((o).type == OBJ_BOOLEAN) #define objIsArray(o) ((o).type == OBJ_ARRAY) #define objIsString(o) ((o).type == OBJ_STRING) #define objIsName(o) ((o).type == OBJ_NAME) #define objIsFile(o) ((o).type == OBJ_FILE) /***================================================================***/ /* Macros for setting type of PostScript objects */ /***================================================================***/ #define objSetInteger(o) ((o).type = OBJ_INTEGER) #define objSetReal(o) ((o).type = OBJ_REAL) #define objSetBoolean(o) ((o).type = OBJ_BOOLEAN) #define objSetArray(o) ((o).type = OBJ_ARRAY) #define objSetString(o) ((o).type = OBJ_STRING) #define objSetName(o) ((o).type = OBJ_NAME) #define objSetFile(o) ((o).type = OBJ_FILE) /***================================================================***/ /* Macros for testing type of PostScript objects (pointer access) */ /***================================================================***/ #define objPIsInteger(o) ((o)->type == OBJ_INTEGER) #define objPIsReal(o) ((o)->type == OBJ_REAL) #define objPIsBoolean(o) ((o)->type == OBJ_BOOLEAN) #define objPIsArray(o) ((o)->type == OBJ_ARRAY) #define objPIsString(o) ((o)->type == OBJ_STRING) #define objPIsName(o) ((o)->type == OBJ_NAME) #define objPIsFile(o) ((o)->type == OBJ_FILE) /***================================================================***/ /* Macros for setting type of PostScript objects (pointer access) */ /***================================================================***/ #define objPSetInteger(o) ((o)->type = OBJ_INTEGER) #define objPSetReal(o) ((o)->type = OBJ_REAL) #define objPSetBoolean(o) ((o)->type = OBJ_BOOLEAN) #define objPSetArray(o) ((o)->type = OBJ_ARRAY) #define objPSetString(o) ((o)->type = OBJ_STRING) #define objPSetName(o) ((o)->type = OBJ_NAME) #define objPSetFile(o) ((o)->type = OBJ_FILE) /***================================================================***/ /* Entry point for Type1Char to get entry from CharStrings */ /***================================================================***/ extern psobj *GetType1CharString(); #endif t1lib-5.1.2/lib/type1/paths.c0000644000175000001440000014524410733501626014371 0ustar rmzusers/* $XConsortium: paths.c,v 1.4 91/10/10 11:18:40 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /* PATHS CWEB V0021 ******** */ /* :h1 id=paths.PATHS Module - Path Operator Handler This is the module that is responsible for building and transforming path lists. &author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com) :h3.Include Files The included files are: */ #include #include /* after the system includes (dsr) */ #include "types.h" #include "objects.h" #include "spaces.h" #include "paths.h" #include "regions.h" /* understands about Union */ #include "fonts.h" /* understands about TEXTTYPEs */ #include "pictures.h" /* understands about handles */ #include "strokes.h" /* understands how to coerce stroke paths */ #include "trig.h" static int UnClose(); /* :h3.Routines Available to the TYPE1IMAGER User The PATHS routines that are made available to the outside user are: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Functions Provided to Other Modules The path routines that are made available to other TYPE1IMAGER modules are defined here: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* NOTE: because of the casts put in the macros for Loc, ArcCA, Conic, RoundConic, PathSegment, and JoinSegment, we cannot use the macro names when the functions are actually defined. We have to use the unique names with their unique first two characters. Thus, if anyone in the future ever decided to change the first two characters, it would not be enough just to change the macro (as it would for most other functions). He would have to also change the function definition. */ /* :h3.Macros Provided to Other Modules The CONCAT macro is defined here and used in the STROKES module. See :hdref refid=pathmac.. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h2.Path Segment Structures A path is represented as a linked list of the following structure: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* When 'link' is NULL, we are at the last segment in the path (surprise!). 'last' is only non-NULL on the first segment of a path, for all the other segments 'last' == NULL. We test for a non-NULL 'last' (ISPATHANCHOR predicate) when we are given an alleged path to make sure the user is not trying to pull a fast one on us. A path may be a collection of disjoint paths. Every break in the disjoint path is represented by a MOVETYPE segment. Closed paths are discussed in :hdref refid=close.. :h3.CopyPath() - Physically Duplicating a Path This simple function illustrates moving through the path linked list. Duplicating a segment just involves making a copy of it, except for text, which has some auxilliary things involved. We don't feel competent to duplicate text in this module, so we call someone who knows how (in the FONTS module). */ struct segment *CopyPath(p0) register struct segment *p0; /* path to duplicate */ { register struct segment *p,*n=NULL,*last=NULL,*anchor; for (p = p0, anchor = NULL; p != NULL; p = p->link) { ARGCHECK((!ISPATHTYPE(p->type) || (p != p0 && p->last != NULL)), "CopyPath: invalid segment", p, NULL, (0), struct segment *); if (p->type == TEXTTYPE) n = (struct segment *) CopyText(p); else n = (struct segment *)Allocate(p->size, p, 0); n->last = NULL; if (anchor == NULL) anchor = n; else last->link = n; last = n; } /* At this point we have a chain of newly allocated segments hanging off 'anchor'. We need to make sure the first segment points to the last: */ if (anchor != NULL) { n->link = NULL; anchor->last = n; } return(anchor); } /* :h3.KillPath() - Destroying a Path Destroying a path is simply a matter of freeing each segment in the linked list. Again, we let the experts handle text. */ void KillPath(p) register struct segment *p; /* path to destroy */ { register struct segment *linkp; /* temp register holding next segment*/ /* return conditional based on reference count 3-26-91 PNM */ if ( (--(p->references) > 1) || ( (p->references == 1) && !ISPERMANENT(p->flag) ) ) return; while (p != NULL) { if (!ISPATHTYPE(p->type)) { ArgErr("KillPath: bad segment", p, NULL); return; } linkp = p->link; if (p->type == TEXTTYPE) KillText(p); else Free(p); p = linkp; } } /* :h2 id=location."location" Objects The TYPE1IMAGER user creates and destroys objects of type "location". These objects locate points for the primitive path operators. We play a trick here and store these objects in the same "segment" structure used for paths, with a type field == MOVETYPE. This allows the Line() operator, for example, to be very trivial: It merely stamps its input structure as a LINETYPE and returns it to the caller--assuming, of course, the input structure was not permanent (as it usually isn't). :h3.The "movesegment" Template Structure This template is used as a generic segment structure for Allocate: */ /* added reference field 1 to temporary template below 3-26-91 PNM */ static struct segment movetemplate = { MOVETYPE, 0, 1, sizeof(struct segment), 0, NULL, NULL, {0, 0} }; /* :h3.Loc() - Create an "Invisible Line" Between (0,0) and a Point */ struct segment *t1_Loc(S, x, y) register struct XYspace *S; /* coordinate space to interpret X,Y */ DOUBLE x,y; /* destination point */ { register struct segment *r; IfTrace3((MustTraceCalls),"..Loc(S=%p, x=%f, y=%f)\n", S, x, y); r = (struct segment *)Allocate(sizeof(struct segment), &movetemplate, 0); TYPECHECK("Loc", S, SPACETYPE, r, (0), struct segment *); r->last = r; r->context = S->context; (*S->convert)(&r->dest, S, x, y); ConsumeSpace(S); return(r); } /* :h3.ILoc() - Loc() With Integer Arguments */ struct segment *ILoc(S, x, y) register struct XYspace *S; /* coordinate space to interpret X,Y */ register int x,y; /* destination point */ { register struct segment *r; IfTrace3((MustTraceCalls),"..ILoc(S=%p, x=%d, y=%d)\n", S, (LONG) x, (LONG) y); r = (struct segment *)Allocate(sizeof(struct segment), &movetemplate, 0); TYPECHECK("Loc", S, SPACETYPE, r, (0), struct segment *); r->last = r; r->context = S->context; (*S->iconvert)(&r->dest, S, (LONG) x, (LONG) y); ConsumeSpace(S); return(r); } /* :h3.SubLoc() - Vector Subtraction of Two Locition Objects This user operator subtracts two location objects, yielding a new location object that is the result. The symmetrical function AddLoc() is totally redundent with Join(), so it is not provided. */ struct segment *SubLoc(p1, p2) register struct segment *p1; register struct segment *p2; { IfTrace2((MustTraceCalls),"SubLoc(%p, %p)\n", p1, p2); ARGCHECK(!ISLOCATION(p1), "SubLoc: bad first arg", p1, NULL, (0), struct segment *); ARGCHECK(!ISLOCATION(p2), "SubLoc: bad second arg", p2, NULL, (0), struct segment *); p1 = UniquePath(p1); p1->dest.x -= p2->dest.x; p1->dest.y -= p2->dest.y; ConsumePath(p2); return(p1); } /* :h2.Straight Line Segments :h3.PathSegment() - Create a Generic Path Segment Many routines need a LINETYPE or MOVETYPE path segment, but do not want to go through the external user's interface, because, for example, they already know the "fractpel" destination of the segment and the conversion is unnecessary. PathSegment() is an internal routine provided to the rest of TYPE1IMAGER for handling these cases. */ struct segment *t1_PathSegment(type, x, y) int type; /* LINETYPE or MOVETYPE */ fractpel x,y; /* where to go to, if known */ { register struct segment *r; /* newly created segment */ r = (struct segment *)Allocate(sizeof(struct segment), &movetemplate, 0); r->type = type; r->last = r; /* last points to itself for singleton */ r->dest.x = x; r->dest.y = y; return(r); } /* :h3.Line() - Create a Line Segment Between (0,0) and a Point P This involves just creating and filling out a segment structure: */ struct segment *Line(P) register struct segment *P; /* relevant coordinate space */ { IfTrace1((MustTraceCalls),"..Line(%p)\n", P); ARGCHECK(!ISLOCATION(P), "Line: arg not a location", P, NULL, (0), struct segment *); P = UniquePath(P); P->type = LINETYPE; return(P); } /* :h2.Curved Path Segments We need more points to describe curves. So, the structures for curved path segments are slightly different. The first part is identical; the curved structures are larger with the extra points on the end. :h3.Bezier Segment Structure We support third order Bezier curves. They are specified with four control points A, B, C, and D. The curve starts at A with slope AB and ends at D with slope CD. The curvature at the point A is inversely related to the length |AB|, and the curvature at the point D is inversely related to the length |CD|. Point A is always point (0,0). */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Bezier() - Generate a Bezier Segment This is just a simple matter of filling out a 'beziersegment' structure: */ struct beziersegment *Bezier(B, C, D) register struct segment *B; /* second control point */ register struct segment *C; /* third control point */ register struct segment *D; /* fourth control point (ending point) */ { /* added reference field of 1 to temporary template below 3-26-91 PNM */ static struct beziersegment template = { BEZIERTYPE, 0, 1, sizeof(struct beziersegment), 0, NULL, NULL, { 0, 0 }, { 0, 0 }, { 0, 0 } }; register struct beziersegment *r; /* output segment */ IfTrace3((MustTraceCalls),"..Bezier(%p, %p, %p)\n", B, C, D); ARGCHECK(!ISLOCATION(B), "Bezier: bad B", B, NULL, (2,C,D), struct beziersegment *); ARGCHECK(!ISLOCATION(C), "Bezier: bad C", C, NULL, (2,B,D), struct beziersegment *); ARGCHECK(!ISLOCATION(D), "Bezier: bad D", D, NULL, (2,B,C), struct beziersegment *); r = (struct beziersegment *)Allocate(sizeof(struct beziersegment), &template, 0); r->last = (struct segment *) r; r->dest.x = D->dest.x; r->dest.y = D->dest.y; r->B.x = B->dest.x; r->B.y = B->dest.y; r->C.x = C->dest.x; r->C.y = C->dest.y; ConsumePath(B); ConsumePath(C); ConsumePath(D); return(r); } /* :h2.Font "Hint" Segments :h3.Hint() - A Font 'Hint' Segment This is temporary code while we experiment with hints. */ /*SHARED LINE(S) ORIGINATED HERE*/ struct hintsegment *Hint(S, ref, width, orientation, hinttype, adjusttype, direction, label) struct XYspace *S; float ref; float width; char orientation; char hinttype; char adjusttype; char direction; int label; { /* added reference field of 1 to hintsegment template below 3-26-91 PNM */ static struct hintsegment template = { HINTTYPE, 0, 1, sizeof(struct hintsegment), 0, NULL, NULL, { 0, 0 }, { 0, 0 }, { 0, 0 }, ' ', ' ', ' ', ' ', 0}; register struct hintsegment *r; r = (struct hintsegment *)Allocate(sizeof(struct hintsegment), &template, 0); r->orientation = orientation; if (width == 0.0) width = 1.0; if (orientation == 'h') { (*S->convert)(&r->ref, S, 0.0, ref); (*S->convert)(&r->width, S, 0.0, width); } else if (orientation == 'v') { (*S->convert)(&r->ref, S, ref, 0.0); (*S->convert)(&r->width, S, width, 0.0); } else return((struct hintsegment *)ArgErr("Hint: orient not 'h' or 'v'", NULL, NULL)); if (r->width.x < 0) r->width.x = - r->width.x; if (r->width.y < 0) r->width.y = - r->width.y; r->hinttype = hinttype; r->adjusttype = adjusttype; r->direction = direction; r->label = label; r->last = (struct segment *) r; ConsumeSpace(S); return(r); } /* */ /*SHARED LINE(S) ORIGINATED HERE*/ /* POP removes the first segment in a path 'p' and Frees it. 'p' is left pointing to the end of the path: */ #define POP(p) \ { register struct segment *linkp; \ linkp = p->link; \ if (linkp != NULL) \ linkp->last = p->last; \ Free(p); \ p = linkp; } /* INSERT inserts a single segment in the middle of a chain. 'b' is the segment before, 'p' the segment to be inserted, and 'a' the segment after. */ #define INSERT(b,p,a) b->link=p; p->link=a; p->last=NULL /* :h3.Join() - Join Two Objects Together If these are paths, this operator simply invokes the CONCAT macro. Why so much code then, you ask? Well we have to check for object types other than paths, and also check for certain path consistency rules. */ struct segment *Join(p1, p2) register struct segment *p1,*p2; { IfTrace2((MustTraceCalls && PathDebug > 1),"..Join(%p, %p)\n", p1, p2); IfTrace2((MustTraceCalls && PathDebug <=1),"..Join(%p, %p)\n", p1, p2); /* We start with a whole bunch of very straightforward argument tests: */ if (p2 != NULL) { if (!ISPATHTYPE(p2->type)) { if (p1 == NULL) return((struct segment *)Unique(p2)); switch (p1->type) { case REGIONTYPE: case STROKEPATHTYPE: p1 = CoercePath(p1); break; default: return((struct segment *)BegHandle(p1, p2)); } } ARGCHECK((p2->last == NULL), "Join: right arg not anchor", p2, NULL, (1,p1), struct segment *); p2 = UniquePath(p2); /* In certain circumstances, we don't have to duplicate a permanent location. (We would just end up destroying it anyway). These cases are when 'p2' begins with a move-type segment: */ if (p2->type == TEXTTYPE || p2->type == MOVETYPE) { if (p1 == NULL) return(p2); if (ISLOCATION(p1)) { p2->dest.x += p1->dest.x; p2->dest.y += p1->dest.y; ConsumePath(p1); return(p2); } } } else return((struct segment *)Unique(p1)); if (p1 != NULL) { if (!ISPATHTYPE(p1->type)) switch (p2->type) { case REGIONTYPE: case STROKEPATHTYPE: p2 = CoercePath(p2); break; default: return((struct segment *)EndHandle(p1, p2)); } ARGCHECK((p1->last == NULL), "Join: left arg not anchor", p1, NULL, (1,p2), struct segment *); p1 = UniquePath(p1); } else return(p2); /* At this point all the checking is done. We have two temporary non-null path types in 'p1' and 'p2'. If p1 ends with a MOVE, and p2 begins with a MOVE, we collapse the two MOVEs into one. We enforce the rule that there may not be two MOVEs in a row: */ if (p1->last->type == MOVETYPE && p2->type == MOVETYPE) { p1->last->flag |= p2->flag; p1->last->dest.x += p2->dest.x; p1->last->dest.y += p2->dest.y; POP(p2); if (p2 == NULL) return(p1); } /* Now we check for another silly rule. If a path has any TEXTTYPEs, then it must have only TEXTTYPEs and MOVETYPEs, and furthermore, it must begin with a TEXTTYPE. This rule makes it easy to check for the special case of text. If necessary, we will coerce TEXTTYPEs into paths so we don't mix TEXTTYPEs with normal paths. */ if (p1->type == TEXTTYPE) { if (p2->type != TEXTTYPE && !ISLOCATION(p2)) p1 = CoerceText(p1); } else { if (p2->type == TEXTTYPE) { if (ISLOCATION(p1)) { p2->dest.x += p1->dest.x; p2->dest.y += p1->dest.y; Free(p1); return(p2); } else p2 = CoerceText(p2); } } /* Thank God! Finally! It's hard to believe, but we are now able to actually do the join. This is just invoking the CONCAT macro: */ CONCAT(p1, p2); return(p1); } /* :h3.JoinSegment() - Create a Path Segment and Join It to a Known Path This internal function is quicker than a full-fledged join because it can do much less checking. */ struct segment *t1_JoinSegment(before, type, x, y, after) register struct segment *before; /* path to join before new segment */ int type; /* type of new segment (MOVETYPE or LINETYPE) */ fractpel x,y; /* x,y of new segment */ register struct segment *after; /* path to join after new segment */ { register struct segment *r; /* returned path built here */ r = PathSegment(type, x, y); if (before != NULL) { CONCAT(before, r); r = before; } else r->context = after->context; if (after != NULL) CONCAT(r, after); return(r); } /* :h2.Other Path Functions */ struct segment *t1_ClosePath(p0,lastonly) register struct segment *p0; /* path to close */ register int lastonly; /* flag deciding to close all subpaths or... */ { register struct segment *p,*last=NULL,*start; /* used in looping through path */ register fractpel x,y; /* current position in path */ register fractpel firstx=0,firsty=0; /* start position of sub path */ register struct segment *lastnonhint=NULL; /* last non-hint segment in path */ IfTrace1((MustTraceCalls),"ClosePath(%p)\n", p0); if (p0 != NULL && p0->type == TEXTTYPE) return(UniquePath(p0)); if (p0->type == STROKEPATHTYPE) return((struct segment *)Unique(p0)); /* * NOTE: a null closed path is different from a null open path * and is denoted by a closed (0,0) move segment. We make * sure this path begins and ends with a MOVETYPE: */ if (p0 == NULL || p0->type != MOVETYPE) p0 = JoinSegment(NULL, MOVETYPE, 0, 0, p0); TYPECHECK("ClosePath", p0, MOVETYPE, NULL, (0), struct segment *); if (p0->last->type != MOVETYPE) p0 = JoinSegment(p0, MOVETYPE, 0, 0, NULL); p0 = UniquePath(p0); /* We now begin a loop through the path, incrementing current 'x' and 'y'. We are searching for MOVETYPE segments (breaks in the path) that are not already closed. At each break, we insert a close segment. */ for (p = p0, x = y = 0, start = NULL; p != NULL; x += p->dest.x, y += p->dest.y, last = p, p = p->link) { if (p->type == MOVETYPE) { if (start != NULL && (lastonly?p->link==NULL:TRUE) && !(ISCLOSED(start->flag) && LASTCLOSED(last->flag))) { register struct segment *r; /* newly created */ start->flag |= ISCLOSED(ON); r = PathSegment(LINETYPE, firstx - x, firsty - y); INSERT(last, r, p); r->flag |= LASTCLOSED(ON); /*< adjust 'last' if possible for a 0,0 close >*/ { #define CLOSEFUDGE 3 /* if we are this close, let's change last segment */ if (r->dest.x != 0 || r->dest.y != 0) { if (r->dest.x <= CLOSEFUDGE && r->dest.x >= -CLOSEFUDGE && r->dest.y <= CLOSEFUDGE && r->dest.y >= -CLOSEFUDGE) { IfTrace2((PathDebug), "ClosePath forced closed by (%d,%d)\n", r->dest.x, r->dest.y); lastnonhint->dest.x += r->dest.x; lastnonhint->dest.y += r->dest.y; r->dest.x = r->dest.y = 0; } } } if (p->link != NULL) { p->dest.x += x - firstx; p->dest.y += y - firsty; x = firstx; y = firsty; } } start = p; firstx = x + p->dest.x; firsty = y + p->dest.y; } else if (p->type != HINTTYPE) lastnonhint = p; } return(p0); } /* */ /* :h2.Reversing the Direction of a Path This turned out to be more difficult than I thought at first. The trickiness was due to the fact that closed paths must remain closed, etc. We need three subroutines: */ static struct segment *SplitPath(); /* break a path at any point */ static struct segment *DropSubPath(); /* breaks a path after first sub-path */ static struct segment *ReverseSubPath(); /* reverses a single sub-path */ /* :h3.Reverse() - User Operator to Reverse a Path This operator reverses the entire path. */ struct segment *Reverse(p) register struct segment *p; /* full path to reverse */ { register struct segment *r; /* output path built here */ register struct segment *nextp; /* contains next sub-path */ IfTrace1((MustTraceCalls),"Reverse(%p)\n", p); if (p == NULL) return(NULL); ARGCHECK(!ISPATHANCHOR(p), "Reverse: invalid path", p, NULL, (0), struct segment *); if (p->type == TEXTTYPE) p = CoerceText(p); p = UniquePath(p); r = NULL; do { nextp = DropSubPath(p); p = ReverseSubPath(p); r = Join(p, r); p = nextp; } while (p != NULL); return(r); } /* :h4.ReverseSubPath() - Subroutine to Reverse a Single Sub-Path */ static struct segment *ReverseSubPath(p) register struct segment *p; /* input path */ { register struct segment *r; /* reversed path will be created here */ register struct segment *nextp; /* temporary variable used in loop */ register int wasclosed; /* flag, path was closed */ if (p == NULL) return(NULL); wasclosed = ISCLOSED(p->flag); r = NULL; do { /* First we reverse the direction of this segment and clean up its flags: */ p->dest.x = - p->dest.x; p->dest.y = - p->dest.y; p->flag &= ~(ISCLOSED(ON) | LASTCLOSED(ON)); switch (p->type) { case LINETYPE: case MOVETYPE: break; case CONICTYPE: { /* The logic of this is that the new M point (stored relative to the new beginning) is (M - C). However, C ("dest") has already been reversed So, we add "dest" instead of subtracting it: */ register struct conicsegment *cp = (struct conicsegment *) p; cp->M.x += p->dest.x; cp->M.y += p->dest.y; } break; case BEZIERTYPE: { register struct beziersegment *bp = (struct beziersegment *) p; bp->B.x += p->dest.x; bp->B.y += p->dest.y; bp->C.x += p->dest.x; bp->C.y += p->dest.y; } break; case HINTTYPE: { register struct hintsegment *hp = (struct hintsegment *) p; hp->ref.x = -hp->ref.x; hp->ref.y = -hp->ref.y; } break; default: abort("Reverse: bad path segment", 23); } /* We need to reverse the order of segments too, so we break this segment off of the input path, and tack it on the front of the growing path in 'r': */ nextp = p->link; p->link = NULL; p->last = p; if (r != NULL) CONCAT(p,r); /* leaves result in 'p'... not what we want */ r = p; p = nextp; /* advance to next segment in input path */ } while (p != NULL); if (wasclosed) r = ClosePath(r); return(r); } /* :h4.DropSubPath() - Drops the First Sub-Path Off a Path This subroutine returns the remaining sub-path(s). While doing so, it breaks the input path after the first sub-path so that a pointer to the original path now contains the first sub-path only. */ static struct segment *DropSubPath(p0) register struct segment *p0; /* original path */ { register struct segment *p; /* returned remainder here */ for (p = p0; p->link != NULL; p = p->link) { if (p->link->type == MOVETYPE) break; } return(SplitPath(p0, p)); } static struct segment *SplitPath(anchor, before) register struct segment *anchor; register struct segment *before; { register struct segment *r; if (before == anchor->last) return(NULL); r = before->link; r->last = anchor->last; anchor->last = before; before->link = NULL; return(r); } /* :h3.ReverseSubPaths() - Reverse the Direction of Sub-paths Within a Path This user operator reverses the sub-paths in a path, but leaves the 'move' segments unchanged. It builds on top of the subroutines already established. */ struct segment *ReverseSubPaths(p) register struct segment *p; /* input path */ { register struct segment *r; /* reversed path will be created here */ register struct segment *nextp; /* temporary variable used in loop */ int wasclosed; /* flag; subpath was closed */ register struct segment *nomove; /* the part of sub-path without move segment */ struct fractpoint delta; IfTrace1((MustTraceCalls),"ReverseSubPaths(%p)\n", p); if (p == NULL) return(NULL); ARGCHECK(!ISPATHANCHOR(p), "ReverseSubPaths: invalid path", p, NULL, (0), struct segment *); if (p->type == TEXTTYPE) p = CoerceText(p); if (p->type != MOVETYPE) p = JoinSegment(NULL, MOVETYPE, 0, 0, p); p = UniquePath(p); r = NULL; for (; p != NULL;) { nextp = DropSubPath(p); wasclosed = ISCLOSED(p->flag); if (wasclosed) UnClose(p); nomove = SplitPath(p, p); r = Join(r, p); PathDelta(nomove, &delta); nomove = ReverseSubPath(nomove); p->dest.x += delta.x; p->dest.y += delta.y; if (nextp != NULL) { nextp->dest.x += delta.x; nextp->dest.y += delta.y; } if (wasclosed) { nomove = ClosePath(nomove); nextp->dest.x -= delta.x; nextp->dest.y -= delta.y; } r = Join(r, nomove); p = nextp; } return(r); } static int UnClose(p0) register struct segment *p0; { register struct segment *p; for (p=p0; p->link->link != NULL; p=p->link) { ; } if (!LASTCLOSED(p->link->flag)) abort("UnClose: no LASTCLOSED", 24); Free(SplitPath(p0, p)); p0->flag &= ~ISCLOSED(ON); return(0); } /* :h2.Transforming and Putting Handles on Paths :h3.PathTransform() - Transform a Path Transforming a path involves transforming all the points. In order that closed paths do not become "unclosed" when their relative positions are slightly changed due to loss of arithmetic precision, all point transformations are in absolute coordinates. (It might be better to reset the "absolute" coordinates every time a move segment is encountered. This would mean that we could accumulate error from subpath to subpath, but we would be less likely to make the "big error" where our fixed point arithmetic "wraps". However, I think I'll keep it this way until something happens to convince me otherwise.) The transform is described as a "space", that way we can use our old friend the "iconvert" function, which should be very efficient. */ struct segment *PathTransform(p0, S) register struct segment *p0; /* path to transform */ register struct XYspace *S; /* pseudo space to transform in */ { register struct segment *p; /* to loop through path with */ register fractpel newx,newy; /* current transformed position in path */ register fractpel oldx,oldy; /* current untransformed position in path */ register fractpel savex,savey; /* save path delta x,y */ p0 = UniquePath(p0); newx = newy = oldx = oldy = 0; for (p=p0; p != NULL; p=p->link) { savex = p->dest.x; savey = p->dest.y; (*S->iconvert)(&p->dest, S, p->dest.x + oldx, p->dest.y + oldy); p->dest.x -= newx; p->dest.y -= newy; switch (p->type) { case LINETYPE: case MOVETYPE: break; case CONICTYPE: { register struct conicsegment *cp = (struct conicsegment *) p; (*S->iconvert)(&cp->M, S, cp->M.x + oldx, cp->M.y + oldy); cp->M.x -= newx; cp->M.y -= newy; /* * Note roundness doesn't change... linear transform */ break; } case BEZIERTYPE: { register struct beziersegment *bp = (struct beziersegment *) p; (*S->iconvert)(&bp->B, S, bp->B.x + oldx, bp->B.y + oldy); bp->B.x -= newx; bp->B.y -= newy; (*S->iconvert)(&bp->C, S, bp->C.x + oldx, bp->C.y + oldy); bp->C.x -= newx; bp->C.y -= newy; break; } case HINTTYPE: { register struct hintsegment *hp = (struct hintsegment *) p; (*S->iconvert)(&hp->ref, S, hp->ref.x + oldx, hp->ref.y + oldy); hp->ref.x -= newx; hp->ref.y -= newy; (*S->iconvert)(&hp->width, S, hp->width.x, hp->width.y); /* Note: width is not relative to origin */ break; } case TEXTTYPE: { XformText(p,S); break; } default: IfTrace1(TRUE,"path = %p\n", p); abort("PathTransform: invalid segment", 25); } oldx += savex; oldy += savey; newx += p->dest.x; newy += p->dest.y; } return(p0); } /* :h3.PathDelta() - Return a Path's Ending Point */ void PathDelta(p, pt) register struct segment *p; /* input path */ register struct fractpoint *pt; /* pointer to x,y to set */ { register fractpel x,y; /* working variables for path current point */ for (x=y=0; p != NULL; p=p->link) { x += p->dest.x; y += p->dest.y; if (p->type == TEXTTYPE) { struct fractpoint mypoint; mypoint.x = mypoint.y = 0; TextDelta(p, &mypoint); x += mypoint.x; y += mypoint.y; } } pt->x = x; pt->y = y; } /* :h3.BoundingBox() - Produce a Bounding Box Path This function is called by image code, when we know the size of the image in pels, and need to get a bounding box path that surrounds it. The starting/ending handle is in the lower right hand corner. */ struct segment *BoundingBox(h, w) register pel h,w; /* size of box */ { register struct segment *path; path = PathSegment(LINETYPE, -TOFRACTPEL(w), 0); path = JoinSegment(NULL, LINETYPE, 0, -TOFRACTPEL(h), path); path = JoinSegment(NULL, LINETYPE, TOFRACTPEL(w), 0, path); path = ClosePath(path); return(path); } /* :h2.Querying Locations and Paths :h3.QueryLoc() - Return the X,Y of a Locition */ void QueryLoc(P, S, xP, yP) register struct segment *P; /* location to query, not consumed */ register struct XYspace *S; /* XY space to return coordinates in */ register DOUBLE *xP,*yP; /* coordinates returned here */ { IfTrace4((MustTraceCalls),"QueryLoc(P=%p, S=%p, (%f, %f))\n", P, S, *xP, *yP); if (!ISLOCATION(P)) { ArgErr("QueryLoc: first arg not a location", P, NULL); return; } if (S->type != SPACETYPE) { ArgErr("QueryLoc: second arg not a space", S, NULL); return; } UnConvert(S, &P->dest, xP, yP); } /* :h3.QueryPath() - Find Out the Type of Segment at the Head of a Path This is a very simple routine that looks at the first segment of a path and tells the caller what it is, as well as returning the control point(s) of the path segment. Different path segments have different number of control points. If the caller knows that the segment is a move segment, for example, he only needs to pass pointers to return one control point. */ void QueryPath(path, typeP, Bp, Cp, Dp, fP) register struct segment *path; /* path to check */ register int *typeP; /* return the type of path here */ register struct segment **Bp; /* return location of first point */ register struct segment **Cp; /* return location of second point */ register struct segment **Dp; /* return location of third point */ register DOUBLE *fP; /* return Conic sharpness */ { register int coerced = FALSE; /* did I coerce a text path? */ IfTrace3((MustTraceCalls), "QueryPath(%p, %p, %p, ...)\n", path, typeP, Bp); if (path == NULL) { *typeP = -1; return; } if (!ISPATHANCHOR(path)) { ArgErr("QueryPath: arg not a valid path", path, NULL); } if (path->type == TEXTTYPE) { path = CoerceText(path); coerced = TRUE; } switch (path->type) { case MOVETYPE: *typeP = 0; *Bp = PathSegment(MOVETYPE, path->dest.x, path->dest.y); break; case LINETYPE: *typeP = (LASTCLOSED(path->flag)) ? 4 : 1; *Bp = PathSegment(MOVETYPE, path->dest.x, path->dest.y); break; case CONICTYPE: { register struct conicsegment *cp = (struct conicsegment *) path; *typeP = 2; *Bp = PathSegment(MOVETYPE, cp->M.x, cp->M.y); *Cp = PathSegment(MOVETYPE, cp->dest.x, cp->dest.y); *fP = cp->roundness; } break; case BEZIERTYPE: { register struct beziersegment *bp = (struct beziersegment *) path; *typeP = 3; *Bp = PathSegment(MOVETYPE, bp->B.x, bp->B.y); *Cp = PathSegment(MOVETYPE, bp->C.x, bp->C.y); *Dp = PathSegment(MOVETYPE, bp->dest.x, bp->dest.y); } break; case HINTTYPE: *typeP = 5; break; default: abort("QueryPath: unknown segment", 26); } if (coerced) KillPath(path); } /* :h3.QueryBounds() - Return the Bounding Box of a Path Returns the bounding box by setting the user's variables. */ void QueryBounds(p0, S, xminP, yminP, xmaxP, ymaxP) register struct segment *p0; /* object to check for bound */ struct XYspace *S; /* coordinate space of returned values */ DOUBLE *xminP,*yminP; /* lower left hand corner (set by routine) */ DOUBLE *xmaxP,*ymaxP; /* upper right hand corner (set by routine) */ { register struct segment *path; /* loop variable for path segments */ register fractpel lastx,lasty; /* loop variables: previous endingpoint */ register fractpel x,y; /* loop variables: current ending point */ struct fractpoint min; /* registers to keep lower left hand corner */ struct fractpoint max; /* registers to keep upper right hand corner */ int coerced = FALSE; /* we have coerced the path from another object */ DOUBLE x1,y1,x2,y2,x3,y3,x4,y4; /* corners of rectangle in space X */ IfTrace2((MustTraceCalls), "QueryBounds(%p, %p,", p0, S); IfTrace4((MustTraceCalls), " %p, %p, %p, %p)\n", xminP, yminP, xmaxP, ymaxP); if (S->type != SPACETYPE) { ArgErr("QueryBounds: bad XYspace", S, NULL); return; } min.x = min.y = max.x = max.y = 0; if (p0 != NULL) { if (!ISPATHANCHOR(p0)) { switch(p0->type) { case STROKEPATHTYPE: /* replaced DupStrokePath() with Dup() 3-26-91 PNM */ p0 = (struct segment *) DoStroke(Dup(p0)); /* no break here, we have a region in p0 */ case REGIONTYPE: p0 = RegionBounds(p0); break; case PICTURETYPE: p0 = PictureBounds(p0); break; default: ArgErr("QueryBounds: bad object", p0, NULL); return; } coerced = TRUE; } if (p0->type == TEXTTYPE) { /* replaced CopyPath() with Dup() 3-26-91 PNM */ p0 = (struct segment *)CoerceText(Dup(p0)); /* there are faster ways */ coerced = TRUE; } if (p0->type == MOVETYPE) { min.x = max.x = p0->dest.x; min.y = max.y = p0->dest.y; } } lastx = lasty = 0; for (path = p0; path != NULL; path = path->link) { x = lastx + path->dest.x; y = lasty + path->dest.y; switch (path->type) { case LINETYPE: break; case CONICTYPE: { register struct conicsegment *cp = (struct conicsegment *) path; register fractpel Mx = lastx + cp->M.x; register fractpel My = lasty + cp->M.y; register fractpel deltax = 0.5 * cp->roundness * cp->dest.x; register fractpel deltay = 0.5 * cp->roundness * cp->dest.y; register fractpel Px = Mx - deltax; register fractpel Py = My - deltay; register fractpel Qx = Mx + deltax; register fractpel Qy = My + deltay; if (Mx < min.x) min.x = Mx; else if (Mx > max.x) max.x = Mx; if (My < min.y) min.y = My; else if (My > max.y) max.y = My; if (Px < min.x) min.x = Px; else if (Px > max.x) max.x = Px; if (Py < min.y) min.y = Py; else if (Py > max.y) max.y = Py; if (Qx < min.x) min.x = Qx; else if (Qx > max.x) max.x = Qx; if (Qy < min.y) min.y = Qy; else if (Qy > max.y) max.y = Qy; } break; case MOVETYPE: /* * We can't risk adding trailing Moves to the * bounding box: */ if (path->link == NULL) goto done; /* God forgive me */ break; case BEZIERTYPE: { register struct beziersegment *bp = (struct beziersegment *) path; register fractpel Bx = lastx + bp->B.x; register fractpel By = lasty + bp->B.y; register fractpel Cx = lastx + bp->C.x; register fractpel Cy = lasty + bp->C.y; if (Bx < min.x) min.x = Bx; else if (Bx > max.x) max.x = Bx; if (By < min.y) min.y = By; else if (By > max.y) max.y = By; if (Cx < min.x) min.x = Cx; else if (Cx > max.x) max.x = Cx; if (Cy < min.y) min.y = Cy; else if (Cy > max.y) max.y = Cy; } break; case HINTTYPE: break; default: abort("QueryBounds: unknown type", 27); } if (x < min.x) min.x = x; else if (x > max.x) max.x = x; if (y < min.y) min.y = y; else if (y > max.y) max.y = y; lastx = x; lasty = y; } done: UnConvert(S, &min, &x1, &y1); UnConvert(S, &max, &x4, &y4); x = min.x; min.x = max.x; max.x = x; UnConvert(S, &min, &x2, &y2); UnConvert(S, &max, &x3, &y3); *xminP = *xmaxP = x1; if (x2 < *xminP) *xminP = x2; else if (x2 > *xmaxP) *xmaxP = x2; if (x3 < *xminP) *xminP = x3; else if (x3 > *xmaxP) *xmaxP = x3; if (x4 < *xminP) *xminP = x4; else if (x4 > *xmaxP) *xmaxP = x4; *yminP = *ymaxP = y1; if (y2 < *yminP) *yminP = y2; else if (y2 > *ymaxP) *ymaxP = y2; if (y3 < *yminP) *yminP = y3; else if (y3 > *ymaxP) *ymaxP = y3; if (y4 < *yminP) *yminP = y4; else if (y4 > *ymaxP) *ymaxP = y4; if (coerced) Destroy(p0); } /* :h3.BoxPath() */ struct segment *BoxPath(S, h, w) struct XYspace *S; int h,w; { struct segment *path; path = Join( Line(ILoc(S, w, 0)), Line(ILoc(S, 0, h)) ); path = JoinSegment(path, LINETYPE, -path->dest.x, -path->dest.y, NULL); return(ClosePath(path)); } /* :h3.DropSegment() - Drop the First Segment in a Path This routine takes the path and returns a new path that is one segment shorter. It can be used in conjunction with QueryPath(), for example, to ask about an entire path. */ struct segment *DropSegment(path) register struct segment *path; { IfTrace1((MustTraceCalls),"DropSegment(%p)\n", path); if (path != NULL && path->type == STROKEPATHTYPE) path = CoercePath(path); ARGCHECK((path == NULL || !ISPATHANCHOR(path)), "DropSegment: arg not a non-null path", path, path, (0), struct segment *); if (path->type == TEXTTYPE) path = CoerceText(path); path = UniquePath(path); POP(path); return(path); } /* :h3.HeadSegment() - Return the First Segment in a Path This routine takes the path and returns a new path consists of the first segment only. */ struct segment *HeadSegment(path) register struct segment *path; /* input path */ { IfTrace1((MustTraceCalls),"HeadSegment(%p)\n", path); if (path == NULL) return(NULL); if (path->type == STROKEPATHTYPE) path = CoercePath(path); ARGCHECK(!ISPATHANCHOR(path), "HeadSegment: arg not a path", path, path, (0), struct segment *); if (path->type == TEXTTYPE) path = CoerceText(path); path = UniquePath(path); if (path->link != NULL) KillPath(path->link); path->link = NULL; path->last = path; return(path); } /* :h2.Path Debug Routines :h3.DumpPath() - Display a Path on the Trace File removed by RMz, 1999-06-07 */ /* void DumpPath(p) register struct segment *p; { register fractpel x,y; register fractpel lastx,lasty; DOUBLE roundness; IfTrace1(TRUE,"Dumping path, anchor=%p:\n", p); lastx = lasty = 0; for (;p != NULL; p=p->link) { IfTrace0(TRUE,". "); x = p->dest.x; y = p->dest.y; switch (p->type) { case LINETYPE: IfTrace1(TRUE,". line<%x> to", (LONG) p->flag); IfTrace4(TRUE," (%d,%d), delta=(%d,%d)", x + lastx, y + lasty, x, y); break; case MOVETYPE: IfTrace1(TRUE,"MOVE<%x> to", (LONG) p->flag); IfTrace4(TRUE,"(%d,%d), delta=(%d,%d)", x + lastx, y + lasty, x, y); break; case CONICTYPE: { register struct conicsegment *cp = (struct conicsegment *) p; roundness = cp->roundness; IfTrace2(TRUE, ". conic to (%d,%d),", x + lastx, y + lasty); IfTrace3(TRUE," M=(%d,%d), r=%p", cp->M.x + lastx, cp->M.y + lasty, &roundness); } break; case BEZIERTYPE: { register struct beziersegment *bp = (struct beziersegment *) p; IfTrace4(TRUE,". bezier to (%d,%d), B=(%d,%d)", x + lastx, y + lasty, bp->B.x + lastx, bp->B.y + lasty); IfTrace2(TRUE, ", C=(%d,%d)", bp->C.x + lastx, bp->C.y + lasty); } break; case HINTTYPE: { register struct hintsegment *hp = (struct hintsegment *) p; IfTrace4(TRUE,". hint ref=(%d,%d), width=(%d,%d)", hp->ref.x + lastx, hp->ref.y + lasty, hp->width.x, hp->width.y); IfTrace4(TRUE, ", %c %c %c %c", hp->orientation, hp->hinttype, hp->adjusttype, hp->direction); IfTrace1(TRUE, ", %d", (LONG) hp->label); } break; case TEXTTYPE: DumpText(p); break; default: IfTrace0(TRUE, "bad path segment?"); } IfTrace1(TRUE," at %p\n", p); lastx += x; lasty += y; } } */ t1lib-5.1.2/lib/type1/paths.h0000644000175000001440000002313710733501626014372 0ustar rmzusers/* $XConsortium: paths.h,v 1.2 91/10/10 11:18:50 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /*SHARED*/ #include "types.h" #define Loc(S,x,y) t1_Loc(S,(DOUBLE)x,(DOUBLE)y) #define ILoc(S,x,y) t1_ILoc(S,x,y) #define Line(P) t1_Line(P) #define Join(p1,p2) t1_Join(p1,p2) #define ClosePath(p) t1_ClosePath(p,0) #define CloseLastSubPath(p) t1_ClosePath(p,1) #define Conic(B,C,s) t1_Conic(B,C,(DOUBLE)s) #define RoundConic(M,C,r) t1_RoundConic(M,C,(DOUBLE)r) #define ArcP3(S,P2,P3) t1_ArcP3(S,P2,P3) #define ArcCA(S,C,d) t1_ArcCA(S,C,(DOUBLE)d) #define Bezier(B,C,D) t1_Bezier(B,C,D) #define Hint(S,r,w,o,h,a,d,l) t1_Hint(S,r,w,o,h,a,d,l) #define Reverse(p) t1_Reverse(p) #define ReverseSubPaths(p) t1_ReverseSubPaths(p) #define AddLoc(p1,p2) t1_Join(p1,p2) #define SubLoc(p1,p2) t1_SubLoc(p1,p2) #define DropSegment(p) t1_DropSegment(p) #define HeadSegment(p) t1_HeadSegment(p) #define QueryLoc(P,S,x,y) t1_QueryLoc(P,S,x,y) #define QueryPath(p,t,B,C,D,r) t1_QueryPath(p,t,B,C,D,r) #define QueryBounds(p,S,x1,y1,x2,y2) t1_QueryBounds(p,S,x1,y1,x2,y2) /*SHARED*/ struct segment { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ unsigned char size; /* size of the structure */ unsigned char context; /* index to device context */ struct segment *link; /* pointer to next structure in linked list */ struct segment *last; /* pointer to last structure in list */ struct fractpoint dest; /* relative ending location of path segment */ }; #define ISCLOSED(flag) ((flag)&0x80) /* subpath is closed */ #define LASTCLOSED(flag) ((flag)&0x40) /* last segment in closed subpath */ /* NOTE: The ISCLOSED flag is set on the MOVETYPE segment before the subpath proper; the LASTCLOSED flag is set on the last segment (LINETYPE) in the subpath We define the ISPATHANCHOR predicate to test that a path handle passed by the user is valid: */ #define ISPATHANCHOR(p) (ISPATHTYPE(p->type)&&p->last!=NULL) /* For performance reasons, a user's "location" object is identical to a path whose only segment is a move segment. We define a predicate to test for this case. See also :hdref refid=location.. */ #define ISLOCATION(p) ((p)->type == MOVETYPE && (p)->link == NULL) /*END SHARED*/ struct segment *t1_Loc(); /* create a location object (or "move" segment) */ struct segment *t1_ILoc(); /* integer argument version of same */ struct segment *t1_Line(); /* straight line path segment */ struct segment *t1_Join(struct segment *,struct segment *); /* join two paths or regions together */ struct segment *t1_ClosePath(); /* close a path or path set */ struct conicsegment *t1_Conic(); /* conic curve path segment */ struct conicsegment *t1_RoundConic(); /* ditto, specified another way */ struct conicsegment *t1_ArcP3(); /* circular path segment with three points */ struct conicsegment *t1_ArcCA(); /* ditto, with center point and angle */ struct beziersegment *t1_Bezier(); /* Bezier third order curve path segment */ struct hintsegment *t1_Hint(); /* produce a font 'hint' path segment */ struct segment *t1_Reverse(); /* reverse the complete order of paths */ struct segment *t1_ReverseSubPaths(); /* reverse only sub-paths; moves unchanged */ struct segment *t1_SubLoc(); /* subtract two location objects */ struct segment *t1_DropSegment(); /* Drop the first segment in a path */ struct segment *t1_HeadSegment(); /* return the first segment in a path */ void t1_QueryLoc(); /* Query location; return its (x,y) */ void t1_QueryPath(); /* Query segment at head of a path */ void t1_QueryBounds(); /* Query the bounding box of a path */ /*END SHARED*/ /*SHARED*/ #define CopyPath(p) t1_CopyPath(p) #define KillPath(p) t1_KillPath(p) #define PathTransform(p,m) t1_PathXform(p,m) #define PathDelta(p,pt) t1_PathDelta(p,pt) #define BoundingBox(h,w) t1_BoundingBox(h,w) #define PathSegment(t,x,y) t1_PathSegment(t,(fractpel)x,(fractpel)y) #define JoinSegment(b,t,x,y,a) t1_JoinSegment(b,t,(fractpel)x,(fractpel)y,a) #define Hypoteneuse(dx,dy) t1_Hypoteneuse(dx,dy) #define BoxPath(S,h,w) t1_BoxPath(S,h,w) struct segment *t1_CopyPath(struct segment *); /* duplicate a path */ void t1_KillPath(struct segment *); /* destroy a path */ struct segment *t1_PathXform(); /* transform a path arbitrarily */ void t1_PathDelta(); /* calculate the ending point of a path */ struct segment *t1_PathSegment(); /* produce a MOVE or LINE segment */ struct segment *t1_JoinSegment(); /* join a MOVE or LINE segment to a path */ DOUBLE t1_Hypoteneuse(); /* returns the length of a line */ struct segment *t1_BoxPath(); /* returns a rectangular path */ /*END SHARED*/ /*SHARED*/ #define ConsumePath(p) MAKECONSUME(p,KillPath(p)) #define UniquePath(p) MAKEUNIQUE(p,CopyPath(p)) /*END SHARED*/ /*SHARED*/ struct conicsegment { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = CONICTYPE */ unsigned char size; /* as with any 'segment' type */ unsigned char context; /* as with any 'segment' type */ struct segment *link; /* as with any 'segment' type */ struct segment *last; /* as with any 'segment' type */ struct fractpoint dest; /* Ending point (C point) */ struct fractpoint M; /* "midpoint" of conic explained above */ float roundness; /* explained above */ } ; /*END SHARED*/ /*SHARED*/ struct beziersegment { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = BEZIERTYPE */ unsigned char size; /* as with any 'segment' type */ unsigned char context; /* as with any 'segment' type */ struct segment *link; /* as with any 'segment' type */ struct segment *last; /* as with any 'segment' type */ struct fractpoint dest; /* ending point (D) */ struct fractpoint B; /* control point B */ struct fractpoint C; /* control point C */ } ; /*END SHARED*/ /*SHARED*/ struct hintsegment { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = HINTTYPE */ unsigned char size; /* size of the structure */ unsigned char context; /* device context */ struct segment *link; /* pointer to next structure in linked list */ struct segment *last; /* pointer to last structure in list */ struct fractpoint dest; /* ALWAYS 0,0 */ struct fractpoint ref; struct fractpoint width; char orientation; char hinttype; char adjusttype; char direction; int label; } ; /*END SHARED*/ /*SHARED*/ /* CONCAT links the 'p2' path chain on the end of the 'p1' chain. (This macro is also used by the STROKES module.) */ #define CONCAT(p1, p2) { \ p1->last->link = p2; /* link p2 on end of p1 */ \ p1->last = p2->last; /* last of new is last of p2 */ \ p2->last = NULL; } /* only first segment has non-NULL "last" */ /*END SHARED*/ t1lib-5.1.2/lib/type1/t1snap.c0000644000175000001440000000520510733501626014450 0ustar rmzusers/* $XConsortium: t1snap.c,v 1.3 91/10/10 11:19:47 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ #include "objects.h" #include "spaces.h" #include "paths.h" /* :h2.Handle Functions :h3.Phantom() - Returns a Move Segment Equivalent to Handles This is a user operator. Its new name is QueryHandle. */ struct segment *t1_Phantom(obj) register struct xobject *obj; /* object to take the Phantom of */ { struct fractpoint pt; /* handle size will built here */ if (obj == NULL) pt.x = pt.y = 0; else PathDelta(obj, &pt); return(PathSegment(MOVETYPE, pt.x, pt.y)); } /* :h3.Snap() - Force Ending Handle of Object to Origin This is a user operator. */ struct xobject *t1_Snap(p) register struct segment *p; /* path to snap */ { struct fractpoint pt; /* for finding length of path */ if (p == NULL) return(NULL); p = UniquePath(p); PathDelta(p, &pt); if (p->last->type == MOVETYPE) { p->last->dest.x -= pt.x; p->last->dest.y -= pt.y; } else p = JoinSegment(p, MOVETYPE, -pt.x, -pt.y, NULL); return((struct xobject *)p); } t1lib-5.1.2/lib/type1/t1stub.c0000644000175000001440000000331710733501626014466 0ustar rmzusers/* $XConsortium: t1stub.c,v 1.3 92/03/20 15:58:40 eswu Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ #include #include "objects.h" /* get #define for abort() */ int xiStub( void) { printf("xiStub called\n"); abort("xiStub called", 48); return(0); } void t1_DumpText( void) { xiStub(); } t1lib-5.1.2/lib/type1/arith.c0000644000175000001440000003344710733501626014362 0ustar rmzusers/* $XConsortium: arith.c,v 1.2 91/10/10 11:14:06 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /* ARITH CWEB V0006 ******** */ /* :h1.ARITH Module - Portable Module for Multiple Precision Fixed Point Arithmetic This module provides division and multiplication of 64-bit fixed point numbers. (To be more precise, the module works on numbers that take two 'longs' to store. That is almost always equivalent to saying 64-bit numbers.) Note: it is frequently easy and desirable to recode these functions in assembly language for the particular processor being used, because assembly language, unlike C, will have 64-bit multiply products and 64-bit dividends. This module is offered as a portable version. &author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com) and Sten F. Andler :h3.Include Files The included files are: */ #include #include "types.h" #include "objects.h" #include "spaces.h" #include "arith.h" /* :h3. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* Reference for all algorithms: Donald E. Knuth, "The Art of Computer Programming, Volume 2, Semi-Numerical Algorithms," Addison-Wesley Co., Massachusetts, 1969, pp. 229-279. Knuth talks about a 'digit' being an arbitrary sized unit and a number being a sequence of digits. We'll take a digit to be a 'short'. The following assumption must be valid for these algorithms to work: :ol. :li.A 'long' is two 'short's. :eol. The following code is INDEPENDENT of: :ol. :li.The actual size of a short. :li.Whether shorts and longs are stored most significant byte first or least significant byte first. :eol. SHORTSIZE is the number of bits in a short; LONGSIZE is the number of bits in a long; MAXSHORT is the maximum unsigned short: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* ASSEMBLE concatenates two shorts to form a long: */ #define ASSEMBLE(hi,lo) ((((ULONG)hi)<>SHORTSIZE) #define LOWDIGIT(u) ((u)&MAXSHORT) /* SIGNBITON tests the high order bit of a long 'w': */ #define SIGNBITON(w) (((LONG)w)<0) /*SHARED LINE(S) ORIGINATED HERE*/ /* :h2.Double Long Arithmetic :h3.DLmult() - Multiply Two Longs to Yield a Double Long The two multiplicands must be positive. */ void DLmult(product, u, v) register doublelong *product; register ULONG u; register ULONG v; { register ULONG u1, u2; /* the digits of u */ register ULONG v1, v2; /* the digits of v */ register unsigned int w1, w2, w3, w4; /* the digits of w */ register ULONG t; /* temporary variable */ /* printf("DLmult(? ?, %x, %x)\n", u, v); */ u1 = HIGHDIGIT(u); u2 = LOWDIGIT(u); v1 = HIGHDIGIT(v); v2 = LOWDIGIT(v); if (v2 == 0) w4 = w3 = w2 = 0; else { t = u2 * v2; w4 = LOWDIGIT(t); t = u1 * v2 + HIGHDIGIT(t); w3 = LOWDIGIT(t); w2 = HIGHDIGIT(t); } if (v1 == 0) w1 = 0; else { t = u2 * v1 + w3; w3 = LOWDIGIT(t); t = u1 * v1 + w2 + HIGHDIGIT(t); w2 = LOWDIGIT(t); w1 = HIGHDIGIT(t); } product->high = ASSEMBLE(w1, w2); product->low = ASSEMBLE(w3, w4); } /* :h2.DLdiv() - Divide Two Longs by One Long, Yielding Two Longs Both the dividend and the divisor must be positive. */ void DLdiv(quotient, divisor) doublelong *quotient; /* also where dividend is, originally */ ULONG divisor; { register ULONG u1u2 = quotient->high; register ULONG u3u4 = quotient->low; register LONG u3; /* single digit of dividend */ register int v1,v2; /* divisor in registers */ register LONG t; /* signed copy of u1u2 */ register int qhat; /* guess at the quotient digit */ register ULONG q3q4; /* low two digits of quotient */ register int shift; /* holds the shift value for normalizing */ register int j; /* loop variable */ /* printf("DLdiv(%x %x, %x)\n", quotient->high, quotient->low, divisor); */ /* * Knuth's algorithm works if the dividend is smaller than the * divisor. We can get to that state quickly: */ if (u1u2 >= divisor) { quotient->high = u1u2 / divisor; u1u2 %= divisor; } else quotient->high = 0; if (divisor <= MAXSHORT) { /* * This is the case where the divisor is contained in one * 'short'. It is worthwhile making this fast: */ u1u2 = ASSEMBLE(u1u2, HIGHDIGIT(u3u4)); q3q4 = u1u2 / divisor; u1u2 %= divisor; u1u2 = ASSEMBLE(u1u2, LOWDIGIT(u3u4)); quotient->low = ASSEMBLE(q3q4, u1u2 / divisor); return; } /* * At this point the divisor is a true 'long' so we must use * Knuth's algorithm. * * Step D1: Normalize divisor and dividend (this makes our 'qhat' * guesses more accurate): */ for (shift=0; !SIGNBITON(divisor); shift++, divisor <<= 1) { ; } shift--; divisor >>= 1; if ((u1u2 >> (LONGSIZE - shift)) != 0 && shift != 0) abort("DLdiv: dividend too large", 1); u1u2 = (u1u2 << shift) + ((shift == 0) ? 0 : u3u4 >> (LONGSIZE - shift)); u3u4 <<= shift; /* * Step D2: Begin Loop through digits, dividing u1,u2,u3 by v1,v2, * then shifting U left by 1 digit: */ v1 = HIGHDIGIT(divisor); v2 = LOWDIGIT(divisor); q3q4 = 0; u3 = HIGHDIGIT(u3u4); for (j=0; j < 2; j++) { /* * Step D3: make a guess (qhat) at the next quotient denominator: */ qhat = (HIGHDIGIT(u1u2) == v1) ? MAXSHORT : u1u2 / v1; /* * At this point Knuth would have us further refine our * guess, since we know qhat is too big if * * v2 * qhat > ASSEMBLE(u1u2 % v, u3) * * That would make sense if u1u2 % v was easy to find, as it * would be in assembly language. I ignore this step, and * repeat step D6 if qhat is too big. */ /* * Step D4: Multiply v1,v2 times qhat and subtract it from * u1,u2,u3: */ u3 -= qhat * v2; /* * The high digit of u3 now contains the "borrow" for the * rest of the substraction from u1,u2. * Sometimes we can lose the sign bit with the above. * If so, we have to force the high digit negative: */ t = HIGHDIGIT(u3); if (t > 0) t |= -1 << SHORTSIZE; t += u1u2 - qhat * v1; /* printf("..>divide step qhat=%x t=%x u3=%x u1u2=%x v1=%x v2=%x\n", qhat, t, u3, u1u2, v1, v2); */ while (t < 0) { /* Test is Step D5. */ /* * D6: Oops, qhat was too big. Add back in v1,v2 and * decrease qhat by 1: */ u3 = LOWDIGIT(u3) + v2; t += HIGHDIGIT(u3) + v1; qhat--; /* printf("..>>qhat correction t=%x u3=%x qhat=%x\n", t, u3, qhat); */ } /* * Step D7: shift U left one digit and loop: */ u1u2 = t; if (HIGHDIGIT(u1u2) != 0) abort("divide algorithm error", 2); u1u2 = ASSEMBLE(u1u2, LOWDIGIT(u3)); u3 = LOWDIGIT(u3u4); q3q4 = ASSEMBLE(q3q4, qhat); } quotient->low = q3q4; /* printf("DLdiv returns %x %x\n", quotient->high, quotient->low); */ return; } /* :h3.DLadd() - Add Two Double Longs In this case, the doublelongs may be signed. The algorithm takes the piecewise sum of the high and low longs, with the possibility that the high should be incremented if there is a carry out of the low. How to tell if there is a carry? Alex Harbury suggested that if the sum of the lows is less than the max of the lows, there must have been a carry. Conversely, if there was a carry, the sum of the lows must be less than the max of the lows. So, the test is "if and only if". */ void DLadd(u, v) doublelong *u; /* u = u + v */ doublelong *v; { register ULONG lowmax = TYPE1_MAX(u->low, v->low); /* printf("DLadd(%x %x, %x %x)\n", u->high, u->low, v->high, v->low); */ u->high += v->high; u->low += v->low; if (lowmax > u->low) u->high++; } /* :h3.DLsub() - Subtract Two Double Longs Testing for a borrow is even easier. If the v.low is greater than u.low, there must be a borrow. */ void DLsub(u, v) doublelong *u; /* u = u - v */ doublelong *v; { /* printf("DLsub(%x %x, %x %x)\n", u->high, u->low, v->high, v->low);*/ u->high -= v->high; if (v->low > u->low) u->high--; u->low -= v->low; } /* :h3.DLrightshift() - Macro to Shift Double Long Right by N */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h2.Fractional Pel Arithmetic */ /* :h3.FPmult() - Multiply Two Fractional Pel Values This funtion first calculates w = u * v to "doublelong" precision. It then shifts w right by FRACTBITS bits, and checks that no overflow will occur when the resulting value is passed back as a fractpel. */ fractpel FPmult(u, v) register fractpel u,v; { doublelong w; register int negative = FALSE; /* sign flag */ int maxshort = MAXSHORT; /* To avoid that overflow warning (RMz) */ if ((u == 0) || (v == 0)) return (0); if (u < 0) {u = -u; negative = TRUE;} if (v < 0) {v = -v; negative = !negative;} if (u == TOFRACTPEL(1)) return ((negative) ? -v : v); if (v == TOFRACTPEL(1)) return ((negative) ? -u : u); DLmult(&w, u, v); DLrightshift(w, FRACTBITS); if (w.high != 0 || SIGNBITON(w.low)) { IfTrace2(TRUE,"FPmult: overflow, %dx%d\n", u, v); w.low = TOFRACTPEL(maxshort); } return ((negative) ? -w.low : w.low); } /* :h3.FPdiv() - Divide Two Fractional Pel Values These values may be signed. The function returns the quotient. */ fractpel FPdiv(dividend, divisor) register fractpel dividend; register fractpel divisor; { doublelong w; /* result will be built here */ int negative = FALSE; /* flag for sign bit */ int maxshort = MAXSHORT; /* To avoid that overflow warning (RMz) */ if (dividend < 0) { dividend = -dividend; negative = TRUE; } if (divisor < 0) { divisor = -divisor; negative = !negative; } w.low = dividend << FRACTBITS; w.high = dividend >> (LONGSIZE - FRACTBITS); DLdiv(&w, divisor); if (w.high != 0 || SIGNBITON(w.low)) { IfTrace2(TRUE,"FPdiv: overflow, %d/%d\n", dividend, divisor); w.low = TOFRACTPEL(maxshort); } return( (negative) ? -w.low : w.low); } /* :h3.FPstarslash() - Multiply then Divide Borrowing a chapter from the language Forth, it is useful to define an operator that first multiplies by one constant then divides by another, keeping the intermediate result in extended precision. */ fractpel FPstarslash(a, b, c) register fractpel a,b,c; /* result = a * b / c */ { doublelong w; /* result will be built here */ int negative = FALSE; int maxshort = MAXSHORT; /* To avoid that overflow warning (RMz) */ if (a < 0) { a = -a; negative = TRUE; } if (b < 0) { b = -b; negative = !negative; } if (c < 0) { c = -c; negative = !negative; } DLmult(&w, a, b); DLdiv(&w, c); if (w.high != 0 || SIGNBITON(w.low)) { IfTrace3(TRUE,"FPstarslash: overflow, %d*%d/%d\n", a, b, c); w.low = TOFRACTPEL(maxshort); } return((negative) ? -w.low : w.low); } t1lib-5.1.2/lib/type1/arith.h0000644000175000001440000000420510733501626014355 0ustar rmzusers/* $XConsortium: arith.h,v 1.2 91/10/10 11:17:49 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /*SHARED*/ #include "types.h" void DLmult(),DLdiv(),DLadd(),DLsub(); fractpel FPmult(); fractpel FPdiv(); fractpel FPstarslash(); /*END SHARED*/ /*SHARED*/ #define SHORTSIZE (sizeof(SHORT)*8) #define LONGSIZE (SHORTSIZE*2) #define MAXSHORT ((1<> N) + (((ULONG) dl.high) << (LONGSIZE - N)); \ dl.high >>= N; \ } /*END SHARED*/ t1lib-5.1.2/lib/type1/hdigit.h0000644000175000001440000001237210733501626014522 0ustar rmzusers/* $XConsortium: hdigit.h,v 1.2 91/10/10 11:18:11 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* -------------------------------------- */ /* --- MACHINE GENERATED, DO NOT EDIT --- */ /* -------------------------------------- */ /* ... and yet, I did it. The code would fail on ASCII-encrypted files if the lines were separated by instead of (which is typical DOSian, but appearently such files exist). Setting the 13th element in the two LUTs to HWHITE_SPACE cures the problem. (RMz (Author of t1lib), 2000-05-18) */ #ifndef HDIGIT #define HDIGIT 1 /* * Hex Digit Value Table -- * * The entries in the Digit Value Table map character codes in the set * {0-9,a-f,A-F} to their numeric values for readhexstring * (00 10...F0 for the high hex digit and 00 01...0F for the low). * The white-space and hex string termination characters are. * mapped to codes > 0xf0 to enable usage by several modules. * 2 tables are build HighHex and LowHex. * */ /* Indicators for special characters in these tables */ #define HERROR (0xfe) #define HWHITE_SPACE (0xfd) #define HRIGHT_ANGLE (0xfc) #define LAST_HDIGIT (0xf0) #define HighHexP (HighHex+1) unsigned char HighHex[257] = { 0xFF, 0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFE,0xFE,0xFD,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xFE,0xFE,0xFE,0xFE,0xFC,0xFE, 0xFE,0xA0,0xB0,0xC0,0xD0,0xE0,0xF0,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xA0,0xB0,0xC0,0xD0,0xE0,0xF0,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE }; #define LowHexP (LowHex+1) unsigned char LowHex[257] = { 0xFF, 0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFE,0xFE,0xFD,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xFE,0xFE,0xFE,0xFE,0xFC,0xFE, 0xFE,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE }; #endif t1lib-5.1.2/lib/type1/CHANGES0000644000175000001440000000723410733501626014075 0ustar rmzusersThis are the sources as I have found them on the X11R5 distribution. In order to use them for my purpose (ps2pk: conversion tool for Type1 fonts to packed TeX fonts) a number of changes were needed (see Changelog). --Piet internet: rcpt@urc.tue.nl | Piet Tutelaers bitnet: rcpt@heitue5.BITNET | Computer Center Room RC 1.90 phone: +31 (0)40 474541 | Eindhoven University of Technology fax: +31 (0)40 434438 | P.O. Box 513, 5600 MB Eindhoven, NL Changelog (the main-line): -------------------------- 92-02: Start of ps2pk project - decoupling Type1 library from X11 (changes in t1intf.h + t1funcs.h; added Xstuff.h to replace X header files) - user definable encoding schemes (removed hardwired ISOLatin1 and Symbol encodings from t1funcs.c and replaced by encoding paramater in Type1OpenScalable) 92-03: First release 1.0 (pre-release) 92-04: - added expansion and slanting features as suggested by Lee Hetherington (changes in spaces.c, t1funcs.c) - changed t1test.c in order to test above features; added ISOLatin1 encoding vector. - README2 replaced by CHANGES (this file) - MSDOS concession (thanks to Sebastian Rahtz): renamed fontfilest.h to ffilest.h so it does not clash with fontfile.h (affects: fontfilest.h (->ffilest.h), t1funcs.c, t1info.c and t1test.c). - MSDOS concession: all file extensions .c.orig and .h.orig renamed to .crg respectivally .hrg - patch to handle /negationslash and /mapsto from LucidaMath-Symbol correctly in t1funcs.c (ILH: Lee Hetherington). 92-05: AMIGA/Aztec: - added type1.ami (contains order of objects in library) - added Makefile.ami - added bstring.c (contains a bzero()) 92-05: - fixed a reference to a NULL pointer in t1info.c - more verbose error messages in type1 library (NDW: Norman Walsh) - changed memory heuristic in type1 library from static (one chunk) into dynamic (up to a maximum of 10 chunks). This was needed for big fonts like daysrib.pfa (reported by Norman Walsh). (Changes in t1funcs.c and t1malloc.c) - added Makefile.tcc for MSDOS/Turbo C, removed Makefile.dos 92-06: - added Makefile.djg for MSDOS/GCC 386 (djgpp) - fixed bug in t1io.c so MSDOS can read its own .pfb format 92-08: - fixed alligment problem for machines with wordlength other than 32 bits (patch in util.c). Reported by J"urgen Marenda for DataGeneral AViiON (Motorola M88k machine) - The type1 library did not render Oblique fonts correctly. Erik Schenk provided a patch for this problem (patches in fontfcn.c and t1util.c). - Official X11.5 patches (Stephen Gildea 920728) merged in the type1 library version of ps2pk. These patches were available on: export.lcs.mit.edu:/pub/R5/contrib-fixes/Type1.patch - portability: index() in t1info.c replaced by strchr() 94-01: Version 1.4 (bug fix release) - types.h: added basic type definitions for non 32-bit platforms - fontfcn.c: made `virtual memory' management dynamically (reported by Norman Walsh, needed for complicated fonts) - Makefile.*: improved - original X11R5 sources no longer included (see X11R5 sources if you want to see them) - t1malloc.c removed, not longer needed. 95-11 Version 1.5 - Makefile.bcc, Makefile.djg and Makefile.wat removed in favour of Makefile.unx and Makefile.emx - bzero() dropped in favour of ANSI C's memset() - Improved cooperation between the master makefile and its depending makefiles (thanks ) t1lib-5.1.2/lib/type1/t1chardump0000644000175000001440000005102010733501626015065 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: t1chardump ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2003-03-02 ----- Description: This file is part of the t1-library. It contains code responsible for dumping outline data to a PostScript file (used only for debugging. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ fputs( "\ %!PS-Adobe-2.0 EPSF-1.2\n\ %%Creator: t1lib\n\ %%Title: Type1Char Character Dump\n\ %%Pages: 1\n\ %%PageOrder: Ascend\n\ %%BoundingBox: 0 0 596 842\n\ %%DocumentPaperSizes: a4\n\ %%EndComments\n\ %!\n\ /T1LibDict 100 dict def \n\ T1LibDict begin\n\ % Setup the size from the type1 module\n\ /t1SetupSize {\n\ /size exch def\n\ } def\n\ \n\ % Prepare the page. Compute scales and fill the charspace unit square\n\ % background\n\ /t1PreparePage {\n\ \n\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\ %\n\ % Start of Customizable Section\n\ %\n\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\ \n\ % Setup a standard linewidth\n\ /t1dumpstdlinewidth 1.0 def\n\ % Setup a scale for drawing direction arrows\n\ /arrowscale 3.0 def\n\ \n\ % Should we draw the device pixel grid? (1=yes, otherwise no)\n\ /t1drawgrid 1 def\n\ % Should we draw stems? (1=yes, otherwise no)\n\ /t1drawstems 1 def\n\ % Should we draw alignment zones? (1=yes, otherwise no)\n\ /t1drawzones 1 def\n\ % Should we fill the charspace unit square? (1=yes, otherwise no)\n\ /t1fillunitsquare 1 def\n\ % Should we fill the device page? (1=yes, otherwise no)\n\ /t1fillpage 1 def\n\ % Should we show path segment On-Curve points? (1=yes, otherwise no)\n\ /t1showoncurvepoints 1 def\n\ % Should we show path segment Off Curve points? (1=yes, otherwise no)\n\ /t1showoffcurvepoints 1 def\n\ % Should we show Bezier tangets and their defining points? (1=yes, otherwise no)\n\ /t1showbeziertangents 1 def\n\ \n\ % Define a few colors\n\ /t1linecolor { 0.0 0.0 0.0 } def\n\ /t1hlinecolor { 1.0 0.0 0.0 } def\n\ /t1slinecolor { 1.0 1.0 1.0 } def\n\ /t1movecolor { 0.0 0.0 0.0 } def\n\ /t1hmovecolor { 1.0 0.0 0.0 } def\n\ /t1smovecolor { 1.0 1.0 1.0 } def\n\ /t1curvecolor { 0.0 0.0 0.0 } def\n\ /t1hcurvecolor { 1.0 0.0 0.0 } def\n\ /t1scurvecolor { 0.0 0.0 1.0 } def\n\ /t1sprolongatecolor { 1.0 0.0 1.0 } def\n\ /t1stemcolor { 0.0 0.0 1.0 } def\n\ /t1alignedstemcolor { 1.0 0.0 1.0 } def\n\ /t1bottomzonecolor { 1.0 1.0 0.0 } def\n\ /t1topzonecolor { 1.0 1.0 0.0 } def\n\ /t1arrowcolor { 0.0 0.0 0.0 } def\n\ /t1harrowcolor { 1.0 0.0 0.0 } def\n\ /t1sarrowcolor { 0.0 0.0 1.0 } def\n\ /t1sbwcolor { 0.0 0.0 0.0 } def\n\ /t1closepathcolor { 0.0 0.0 0.0 } def\n\ /t1hclosepathcolor { 1.0 0.0 0.0 } def\n\ /t1sclosepathcolor { 0.0 0.0 1.0 } def\n\ /t1pagecolor { 0.7 0.7 0.7 } def\n\ /t1unitsquarecolor { 0.4 0.4 0.4 } def\n\ /t1gridcolor { 0.0 0.0 0.0 } def\n\ \n\ % Line scale relative to the standard linewidth /t1linescale 0.4 def\n\ /t1hlinescale 0.4 def\n\ /t1slinescale 0.4 def\n\ /t1movescale 0.4 def\n\ /t1hmovescale 0.4 def\n\ /t1smovescale 0.4 def\n\ /t1curvescale 0.4 def\n\ /t1hcurvescale 0.4 def\n\ /t1scurvescale 0.4 def\n\ /t1curvetangentscale 0.5 def\n\ /t1sprolongatescale 0.4 def\n\ /t1stemscale 0.5 def\n\ /t1alignedstemscale 0.5 def\n\ /t1bottomzonescale 0.5 def\n\ /t1topzonescale 0.5 def\n\ /t1closepathscale 0.4 def\n\ /t1hclosepathscale 0.4 def\n\ /t1sclosepathscale 0.4 def\n\ /t1gridscale 0.5 def\n\ \n\ % Line dash specifications (stems and zones are not configurable!) /t1linedash { [] 0 } def\n\ /t1hlinedash { [] 0 } def\n\ /t1slinedash { [] 0 } def\n\ /t1movedash { [2 2] 0 } def\n\ /t1hmovedash { [2 2] 0 } def\n\ /t1smovedash { [2 2] 0 } def\n\ /t1curvedash { [] 0 } def\n\ /t1hcurvedash { [] 0 } def\n\ /t1scurvedash { [] 0 } def\n\ /t1sprolongatedash { [1 1] 0 }def\n\ /t1closepathdash { [] 0 } def\n\ /t1hclosepathdash { [] 0 } def\n\ /t1sclosepathdash { [] 0 } def\n\ /t1griddash { [3 3] 0 } def\n\ \n\ % Define a clipping rectangle ROI (in charspace coordinates)\n\ /t1ROIxmin -200 def\n\ /t1ROIxmax 1200 def\n\ /t1ROIymin -500 def\n\ /t1ROIymax 1200 def\n\ \n\ % Device values (in bp). These must match the Bounding Box Statement!\n\ /xmindev 0 neg def\n\ /xmaxdev 596 def\n\ /ymindev 0 neg def\n\ /ymaxdev 842 def\n\ /dxdev 1 def\n\ /dydev 1 def\n\ \n\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\ %\n\ % End of Customizable Section\n\ %\n\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\ \n\ % logical pixel values\n\ /xminpixel t1ROIxmin 1000.0 div size mul def\n\ /xmaxpixel t1ROIxmax 1000.0 div size mul def\n\ /yminpixel t1ROIymin 1000.0 div size mul def\n\ /ymaxpixel t1ROIymax 1000.0 div size mul def\n\ /dxpixel 1 def\n\ /dypixel 1 def\n\ \n\ % compute scales and set minimum scale\n\ /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def\n\ /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def\n\ scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse\n\ \n\ % Fill device page\n\ xmindev ymindev moveto\n\ xmaxdev 0 rlineto\n\ 0 ymaxdev rlineto\n\ xmaxdev neg 0 rlineto\n\ 0 ymaxdev neg rlineto\n\ closepath\n\ clip\n\ t1fillpage 1 eq\n\ {\n\ t1pagecolor setrgbcolor\n\ fill\n\ } if\n\ \n\ % reassign device values\n\ /xmindev xminpixel scale mul def\n\ /xmaxdev xmaxpixel scale mul def\n\ /ymindev yminpixel scale mul def\n\ /ymaxdev ymaxpixel scale mul def\n\ /dxdev dxpixel scale mul def\n\ /dydev dypixel scale mul def\n\ \n\ % translate coordinate system \n\ xminpixel scale mul neg yminpixel scale mul neg translate\n\ \n\ % Fill unit square of charspace coordinate system \n\ t1fillunitsquare 1 eq\n\ {\n\ t1unitsquarecolor setrgbcolor\n\ 0 0 moveto\n\ size scale mul 0 rlineto\n\ 0 size scale mul rlineto\n\ size scale mul neg 0 rlineto\n\ 0 size scale mul neg rlineto\n\ closepath fill\n\ } if\n\ } def\n\ \n\ /t1FinishPage {\n\ t1drawgrid 1 eq\n\ {\n\ t1gridcolor setrgbcolor\n\ t1gridscale setlinewidth\n\ t1griddash setdash\n\ % draw grid and align to the point (0,0)\n\ 0 dxdev xmaxdev {\n\ /xval exch def\n\ xval ymindev moveto\n\ xval ymaxdev lineto\n\ stroke\n\ } for\n\ 0 dxdev neg xmindev {\n\ /xval exch def\n\ xval ymindev moveto\n\ xval ymaxdev lineto\n\ stroke\n\ } for\n\ 0 dydev ymaxdev {\n\ /yval exch def\n\ xmindev yval moveto\n\ xmaxdev yval lineto\n\ stroke\n\ } for\n\ 0 dydev neg ymindev {\n\ /yval exch def\n\ xmindev yval moveto\n\ xmaxdev yval lineto\n\ stroke\n\ } for\n\ } if\n\ } def\n\ \n\ % Define three arrow routines available for later providing the output with directions\n\ /t1arrowhead {\n\ /tmpy exch def\n\ /tmpx exch def\n\ gsave\n\ t1arrowcolor setrgbcolor\n\ currx curry translate\n\ tmpy tmpx atan rotate\n\ newpath\n\ 0 0 moveto\n\ 0 2 arrowscale currentlinewidth neg mul mul rlineto\n\ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto\n\ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto\n\ closepath\n\ fill\n\ grestore\n\ tmpx\n\ tmpy\n\ } def\n\ /t1harrowhead {\n\ /tmpy exch def\n\ /tmpx exch def\n\ gsave\n\ t1harrowcolor setrgbcolor\n\ currhx currhy translate\n\ tmpy tmpx atan rotate\n\ newpath\n\ 0 0 moveto\n\ 0 2 arrowscale currentlinewidth neg mul mul rlineto\n\ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto\n\ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto\n\ closepath\n\ fill\n\ grestore\n\ tmpx\n\ tmpy\n\ } def\n\ /t1sarrowhead {\n\ /tmpy exch def\n\ /tmpx exch def\n\ gsave\n\ t1sarrowcolor setrgbcolor\n\ currsx currsy translate\n\ tmpy tmpx atan rotate\n\ newpath\n\ 0 0 moveto\n\ 0 2 arrowscale currentlinewidth neg mul mul rlineto\n\ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto\n\ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto\n\ closepath\n\ fill\n\ grestore\n\ tmpx\n\ tmpy\n\ } def\n\ \n\ /t1rlineto {\n\ /y2 exch scale mul def\n\ /x2 exch scale mul def\n\ t1linecolor setrgbcolor\n\ t1linedash setdash\n\ t1linescale t1dumpstdlinewidth mul setlinewidth\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ currx curry moveto\n\ x2 y2 rlineto\n\ stroke\n\ /currx currx x2 add def\n\ /curry curry y2 add def\n\ } def\n\ \n\ /t1srlineto {\n\ /y2 exch scale mul def\n\ /x2 exch scale mul def\n\ t1slinecolor setrgbcolor\n\ t1slinedash setdash\n\ t1slinescale t1dumpstdlinewidth mul setlinewidth\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ currsx currsy moveto\n\ x2 y2 rlineto\n\ stroke\n\ /currsx currsx x2 add def\n\ /currsy currsy y2 add def\n\ } def\n\ \n\ /t1sprolongate {\n\ /y2 exch scale mul def\n\ /x2 exch scale mul def\n\ t1sprolongatecolor setrgbcolor\n\ t1sprolongatedash setdash\n\ t1sprolongatescale t1dumpstdlinewidth mul setlinewidth\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ currsx currsy moveto\n\ x2 y2 rlineto\n\ stroke\n\ /currsx currsx x2 add def\n\ /currsy currsy y2 add def\n\ } def\n\ \n\ /t1hintedrlineto {\n\ /y2 exch scale mul def\n\ /x2 exch scale mul def\n\ t1hlinecolor setrgbcolor\n\ t1hlinedash setdash\n\ t1hlinescale t1dumpstdlinewidth mul setlinewidth\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ currhx currhy moveto\n\ x2 y2 rlineto\n\ stroke\n\ /currhx currhx x2 add def\n\ /currhy currhy y2 add def\n\ } def\n\ \n\ /t1rmoveto {\n\ /y2 exch scale mul def\n\ /x2 exch scale mul def\n\ t1movecolor setrgbcolor\n\ t1movedash setdash\n\ t1movescale t1dumpstdlinewidth mul setlinewidth\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ currx curry moveto\n\ x2 y2 rlineto\n\ stroke\n\ /currx currx x2 add def\n\ /curry curry y2 add def\n\ /startx currx def\n\ /starty curry def\n\ } def\n\ \n\ /t1srmoveto {\n\ /y2 exch scale mul def\n\ /x2 exch scale mul def\n\ t1smovecolor setrgbcolor\n\ t1smovedash setdash\n\ t1smovescale t1dumpstdlinewidth mul setlinewidth\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ currsx currsy moveto\n\ x2 y2 rlineto\n\ stroke\n\ /currsx currsx x2 add def\n\ /currsy currsy y2 add def\n\ /startsx currsx def\n\ /startsy currsy def\n\ } def\n\ \n\ /t1hintedrmoveto {\n\ /y2 exch scale mul def\n\ /x2 exch scale mul def\n\ t1hmovecolor setrgbcolor\n\ t1hmovedash setdash\n\ t1hmovescale t1dumpstdlinewidth mul setlinewidth\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ currhx currhy moveto\n\ x2 y2 rlineto\n\ stroke\n\ /currhx currhx x2 add def\n\ /currhy currhy y2 add def\n\ /starthx currhx def\n\ /starthy currhy def\n\ } def\n\ \n\ /t1rrcurveto {\n\ /y4 exch scale mul def\n\ /x4 exch scale mul def\n\ /y3 exch scale mul def\n\ /x3 exch scale mul def\n\ /y2 exch scale mul def\n\ /x2 exch scale mul def\n\ t1curvecolor setrgbcolor\n\ t1curvedash setdash\n\ t1curvescale t1dumpstdlinewidth mul setlinewidth\n\ t1showoffcurvepoints 1 eq\n\ {\n newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\ newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ t1showbeziertangents 1 eq\n\ {\n\ [2 2] 0 setdash\n\ t1curvetangentscale currentlinewidth mul setlinewidth\n\ currx curry moveto\n\ currx x2 add curry y2 add lineto\n\ stroke\n\ currx x2 x3 add add curry y2 y3 add add moveto\n\ currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto\n\ stroke\n\ } if\n\ t1curvedash setdash\n\ t1curvescale t1dumpstdlinewidth mul setlinewidth\n\ currx curry moveto\n\ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto\n\ stroke\n\ /currx currx x2 x3 x4 add add add def\n\ /curry curry y2 y3 y4 add add add def\n\ } def\n\ \n\ /t1srrcurveto {\n\ /y4 exch scale mul def\n\ /x4 exch scale mul def\n\ /y3 exch scale mul def\n\ /x3 exch scale mul def\n\ /y2 exch scale mul def\n\ /x2 exch scale mul def\n\ t1scurvecolor setrgbcolor\n\ t1scurvedash setdash\n\ t1scurvescale t1dumpstdlinewidth mul setlinewidth\n\ t1showoffcurvepoints 1 eq\n\ {\n\ newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\ newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ t1showbeziertangents 1 eq\n\ {\n\ [2 2] 0 setdash\n\ t1curvetangentscale currentlinewidth mul setlinewidth\n\ currsx currsy moveto\n\ currsx x2 add currsy y2 add lineto\n\ stroke\n\ currsx x2 x3 add add currsy y2 y3 add add moveto\n\ currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto\n\ stroke\n\ } if\n\ t1scurvedash setdash\n\ t1scurvescale t1dumpstdlinewidth mul setlinewidth\n\ currsx currsy moveto\n\ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto\n\ stroke\n\ /currsx currsx x2 x3 x4 add add add def\n\ /currsy currsy y2 y3 y4 add add add def\n\ } def\n\ \n\ /t1hintedrrcurveto {\n\ /y4 exch scale mul def\n\ /x4 exch scale mul def\n\ /y3 exch scale mul def\n\ /x3 exch scale mul def\n\ /y2 exch scale mul def\n\ /x2 exch scale mul def\n\ t1hcurvecolor setrgbcolor\n\ t1hcurvedash setdash\n\ t1hcurvescale t1dumpstdlinewidth mul setlinewidth\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\ newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ t1showoncurvepoints 1 eq\n\ {\n\ newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\ } if\n\ t1showbeziertangents 1 eq\n\ {\n\ [2 2] 0 setdash\n\ t1curvetangentscale currentlinewidth mul setlinewidth\n\ currhx currhy moveto\n\ currhx x2 add currhy y2 add lineto\n\ stroke\n\ currhx x2 x3 add add currhy y2 y3 add add moveto\n\ currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto\n\ stroke\n\ } if\n\ t1hcurvedash setdash\n\ t1hcurvescale t1dumpstdlinewidth mul setlinewidth\n\ currhx currhy moveto\n\ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto\n\ stroke\n\ /currhx currhx x2 x3 x4 add add add def\n\ /currhy currhy y2 y3 y4 add add add def\n\ } def\n\ \n\ /t1sbw {\n\ /wy exch scale mul def\n\ /wx exch scale mul def\n\ /sby exch scale mul def\n\ /sbx exch scale mul def\n\ t1sbwcolor setrgbcolor\n\ newpath sbx sby 3 0 360 arc closepath fill\n\ newpath wx wy 3 0 360 arc closepath fill\n\ /currx sbx def\n\ /curry sby def\n\ /currhx sbx def\n\ /currhy sby def\n\ /currsx sbx def\n\ /currsy sby def\n\ } def\n\ \n\ /t1closepath {\n\ t1closepathdash setdash\n\ t1closepathscale t1dumpstdlinewidth mul setlinewidth\n\ t1closepathcolor setrgbcolor\n\ currx curry moveto\n\ startx starty lineto\n\ stroke\n\ } def\n\ \n\ /t1sclosepath {\n\ t1sclosepathdash setdash\n\ t1sclosepathscale t1dumpstdlinewidth mul setlinewidth\n\ t1sclosepathcolor setrgbcolor\n\ currsx currsy moveto\n\ startsx startsy lineto\n\ stroke\n\ } def\n\ \n\ /t1hintedclosepath {\n\ t1hclosepathdash setdash\n\ t1hclosepathscale t1dumpstdlinewidth mul setlinewidth\n\ t1hclosepathcolor setrgbcolor\n\ currhx currhy moveto\n\ starthx starthy lineto\n\ stroke\n\ } def\n\ \n\ /t1vstem {\n\ t1drawstems 1 eq\n\ {\n\ /stemwidth exch scale mul def\n\ /stemstart exch scale mul def\n\ t1stemscale t1dumpstdlinewidth mul setlinewidth\n\ t1stemcolor setrgbcolor\n\ [] 0 setdash\n\ stemstart ymindev moveto\n\ stemstart ymaxdev lineto\n\ stroke\n\ [2 2] 0 setdash\n\ stemwidth stemstart add ymindev moveto\n\ stemwidth stemstart add ymaxdev lineto\n\ stroke\n\ } if\n\ } def\n\ \n\ /t1alignedvstem {\n\ t1drawstems 1 eq\n\ {\n\ /stemwidth exch scale mul def\n\ /stemstart exch scale mul def\n\ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth\n\ t1alignedstemcolor setrgbcolor\n\ [] 0 setdash\n\ stemstart ymindev moveto\n\ stemstart ymaxdev lineto\n\ stroke\n\ [2 2] 0 setdash\n\ stemwidth stemstart add ymindev moveto\n\ stemwidth stemstart add ymaxdev lineto\n\ stroke\n\ } if\n\ } def\n\ \n\ /t1hstem {\n\ t1drawstems 1 eq\n\ {\n\ /stemwidth exch scale mul def\n\ /stemstart exch scale mul def\n\ t1stemscale t1dumpstdlinewidth mul setlinewidth\n\ t1stemcolor setrgbcolor\n\ [] 0 setdash\n\ xmindev stemstart moveto\n\ xmaxdev stemstart lineto\n\ stroke\n\ [2 2] 0 setdash\n\ xmindev stemwidth stemstart add moveto\n\ xmaxdev stemwidth stemstart add lineto\n\ stroke\n\ } if\n\ } def\n\ \n\ /t1alignedhstem {\n\ t1drawstems 1 eq\n\ {\n\ /stemwidth exch scale mul def\n\ /stemstart exch scale mul def\n\ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth\n\ t1alignedstemcolor setrgbcolor\n\ [] 0 setdash\n\ xmindev stemstart moveto\n\ xmaxdev stemstart lineto\n\ stroke\n\ [2 2] 0 setdash\n\ xmindev stemwidth stemstart add moveto\n\ xmaxdev stemwidth stemstart add lineto\n\ stroke\n\ } if\n\ } def\n\ \n\ /t1bottomzone {\n\ t1drawzones 1 eq\n\ {\n\ /bottom exch scale mul def\n\ /top exch scale mul def\n\ t1bottomzonescale t1dumpstdlinewidth mul setlinewidth\n\ t1bottomzonecolor setrgbcolor\n\ [] 0 setdash\n\ xmindev bottom moveto\n\ xmaxdev bottom lineto\n\ stroke\n\ [2 2] 0 setdash\n\ xmindev top moveto\n\ xmaxdev top lineto\n\ stroke\n\ } if\n\ } def\n\ \n\ /t1topzone {\n\ t1drawzones 1 eq\n\ {\n\ /bottom exch scale mul def\n\ /top exch scale mul def\n\ t1topzonescale t1dumpstdlinewidth mul setlinewidth\n\ t1topzonecolor setrgbcolor\n\ [2 2] 0 setdash\n\ xmindev bottom moveto\n\ xmaxdev bottom lineto\n\ stroke\n\ [] 0 setdash\n\ xmindev top moveto\n\ xmaxdev top lineto\n\ stroke\n\ } if\n\ } def\n\ \n\ end\n\ \n\ % Next follows drawing code from charstring commands:\n", fp); t1lib-5.1.2/lib/type1/blues.h0000644000175000001440000000752610733501626014371 0ustar rmzusers/* $XConsortium: blues.h,v 1.2 91/10/10 11:17:52 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * Portions Copyright (c) 1990 Adobe Systems Incorporated. * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark or Adobe * not be used in advertising or publicity pertaining to distribution of * the software without specific, written prior permission. * * IBM, LEXMARK, AND ADOBE PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY * WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE * ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING * ANY DUTY TO SUPPORT OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY * PORTION OF THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM, * LEXMARK, OR ADOBE) ASSUMES THE ENTIRE COST OF ALL SERVICING, REPAIR AND * CORRECTION. IN NO EVENT SHALL IBM, LEXMARK, OR ADOBE BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "types.h" extern psobj *GetType1CharString(); #define TOPLEFT 1 #define BOTTOMRIGHT 2 #define NUMBLUEVALUES 14 #define NUMOTHERBLUES 10 #define NUMFAMILYBLUES 14 #define NUMFAMILYOTHERBLUES 10 #define NUMSTEMSNAPH 12 #define NUMSTEMSNAPV 12 #define NUMSTDHW 1 #define NUMSTDVW 1 #define DEFAULTBOLDSTEMWIDTH 2.0 #define MAXALIGNMENTZONES ((NUMBLUEVALUES+NUMOTHERBLUES)/2) #define DEFAULTBLUESCALE 0.039625 #define DEFAULTBLUESHIFT 7 #define DEFAULTBLUEFUZZ 1 #define DEFAULTSTDHW 0 #define DEFAULTSTDVW 0 #define DEFAULTFORCEBOLD FALSE #define DEFAULTLANGUAGEGROUP 0 #define DEFAULTRNDSTEMUP FALSE #define DEFAULTLENIV 4 #define DEFAULTEXPANSIONFACTOR 0.06 /* see Type 1 Font Format book for explanations of these values */ /* Note that we're currently doing nothing for minfeature and password. */ struct blues_struct { struct blues_struct *next; /* ptr to next Blues structure in list */ int numBlueValues; /* # of BlueValues in following array */ int BlueValues[NUMBLUEVALUES]; int numOtherBlues; /* # of OtherBlues values in following array */ int OtherBlues[NUMOTHERBLUES]; int numFamilyBlues; /* # of FamilyBlues values in following array */ int FamilyBlues[NUMFAMILYBLUES]; int numFamilyOtherBlues; /* # of FamilyOtherBlues values in */ int FamilyOtherBlues[NUMFAMILYOTHERBLUES]; /* this array */ DOUBLE BlueScale; int BlueShift; int BlueFuzz; DOUBLE StdHW; DOUBLE StdVW; int numStemSnapH; /* # of StemSnapH values in following array */ DOUBLE StemSnapH[NUMSTEMSNAPH]; int numStemSnapV; /* # of StemSnapV values in following array */ DOUBLE StemSnapV[NUMSTEMSNAPV]; int ForceBold; int LanguageGroup; int RndStemUp; int lenIV; DOUBLE ExpansionFactor; }; /* the alignment zone structure -- somewhat similar to the stem structure */ /* see Adobe Type1 Font Format book about the terms used in this structure */ struct alignmentzone { int topzone; /* TRUE if a topzone, FALSE if a bottom zone */ DOUBLE bottomy, topy; /* interval of this alignment zone */ }; t1lib-5.1.2/lib/type1/regions.c0000644000175000001440000016521010733501626014713 0ustar rmzusers/* $XConsortium: regions.c,v 1.4 91/10/10 11:18:57 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /* REGIONS CWEB V0023 LOTS */ /* :h1 id=regions.REGIONS Module - Regions Operator Handler This module is responsible for creating and manipulating regions. &author. Jeffrey B. Lotspiech (lotspiech@almaden.ibm.com) :h3.Include Files The included files are: */ #include #include #include "types.h" #include "objects.h" #include "spaces.h" #include "paths.h" #include "regions.h" #include "curves.h" #include "lines.h" #include "pictures.h" #include "fonts.h" #include "hints.h" #include "strokes.h" /* to pick up 'DoStroke' */ static int Unwind(); static int newfilledge(); static struct edgelist *splitedge(); static int vertjoin(); static int touches(); static int crosses(); static int edgemin(); static int edgemax(); static int discard(); static int edgecheck(); static struct edgelist *NewEdge(); struct edgelist *swathxsort(); /* 'SortSwath' function */ extern struct XYspace *IDENTITY; /* :h3.Functions Provided to the TYPE1IMAGER User This module provides the following TYPE1IMAGER entry points: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Functions Provided to Other Modules This module provides the following entry points to other modules: */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.Macros Provided to Other Modules :h4.GOING_TO() - Macro Predicate Needed for Changing Direction, Etc. The actual generation of run end lists (edge boundaries) is left to the low level rasterizing modules, LINES and CURVES. There are some global region-type questions that occur when doing a low-level rasterization: :ol. :li.Did we just change direction in Y and therefore need to start a new edge? :li.Did we run out of allocated edge space? :li.Do the minimum or maximum X values for the current edge need updating? :eol. In general the REGIONS is not smart enough to answer those questions itself. (For example, determining if and when a curve changes direction may need detailed curve knowledge.) Yet, this must be done efficiently. We provide a macro "GOING_TO" where the invoker tells us where it is heading for (x2,y2), plus where it is now (x1,y1), plus the current region under construction, and the macro answers the questions above. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h2.Data Structures Used to Represent Regions :h3.The "region" Structure The region structure is an anchor for a linked list of "edgelist" structures (see :hdref refid=edgelist..). It also summarizes the information in the edgelist structures (for example, the bounding box of the region). And, it contains scratch areas used during the creation of a region. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* The ISOPTIMIZED flag tells us if we've put a permanent region in 'optimal' form. */ #define ISOPTIMIZED(flag) ((flag)&0x10) /* The ISRECTANGULAR flag tells us if a region is a rectangle. We don't always notice rectangles--if this flag is set, the region definitely is a rectangle, but some rectangular regions will not have the flag set. The flag is used to optimize some paths. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h4."INFINITY" - A Constant Region Structure of Infinite Extent Infinity is the complement of a null area: Note - removed the refcount = 1 init, replaced with references = 2 3-26-91 PNM */ static struct region infinity = { REGIONTYPE, ISCOMPLEMENT(ON)+ISINFINITE(ON)+ISPERMANENT(ON)+ISIMMORTAL(ON), 2, {0, 0}, {0, 0}, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, 0, NULL, NULL }; /* we rename INFINITY to T1_INFINITY. Anyhow it is currently not used */ struct region *T1_INFINITY = &infinity; /* :h4."EmptyRegion" - A Region Structure with Zero Area This structure is used to initialize the region to be built in Interior(): Note - replaced refcount = 1 init with references = 2 3-26-91 PNM */ /*SHARED LINE(S) ORIGINATED HERE*/ struct region EmptyRegion = { REGIONTYPE, ISPERMANENT(ON)+ISIMMORTAL(ON), 2, {0, 0}, {0, 0}, MAXPEL, MAXPEL, MINPEL, MINPEL, NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, 0, NULL, NULL }; /* :h3 id=edgelist.The "edgelist" Structure Regions are represented by a linked list of 'edgelist' structures. When a region is complete, the structures are paired, one for the left and one for the right edge. While a region is being built, this rule may be violated temporarily. An 'edgelist' structure contains the X values for a given span of Y values. The (X,Y) pairs define an edge. We use the crack and edge coordinate system, so that integer values of X and Y go between pels. The edge is defined between the minimum Y and maximum Y. The linked list is kept sorted from top to bottom, that is, in increasing y. Also, if 'e1' is an edgelist structure and 'e2' is the next one in the list, they must have exactly the same ymin,ymax values or be totally disjoint. These two requirements mean that if e2's ymin is less than e1's ymax, it must be exactly equal to e1's ymin. A sublist of structures with identical ymin and ymax values is called a 'swath'. In addition, edgelist structures are separately linked together based on what subpath originally created them; each subpath is kept as a separate circular linked list. This information is ignored unless continuity checking is invoked. See :hdref refid=subpath. for a complete description of this. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* The "edgelist" structure follows the convention of TYPE1IMAGER user objects, having a type field and a flag field as the first two elements. However, the user never sees "edgelist" structures directly; he is given handles to "region" structures only. By having a type field, we can use the "copy" feature of Allocate() to duplicate edge lists quickly. We also define two flag bits for this structure. The ISDOWN bit is set if the edge is going in the direction of increasing Y. The ISAMBIGUOUS bit is set if the edge is identical to its neighbor (edge->link); such edges may be "left" when they should be "right", or vice versa, unnecessarily confusing the continuity checking logic. The FixSubPaths() routine in HINTS will swap ambiguous edges if that avoids crossing edges; see :hdref refid=fixsubp.. */ /*SHARED LINE(S) ORIGINATED HERE*/ /* :h3.KillRegion() - Destroys a Region KillRegion nominally just decrements the reference count to that region. If the reference count becomes 0, all memory associated with it is freed. We just follow the linked list, freeing as we go, then kill any associated (thresholded) picture. Note - added conditional return based on references 3-26-91 PNM */ void KillRegion(area) register struct region *area; /* area to free */ { register struct edgelist *p; /* loop variable */ register struct edgelist *next; /* loop variable */ if (area->references < 0) abort("KillRegion: negative reference count", 28); if ( (--(area->references) > 1) || ( (area->references == 1) && !ISPERMANENT(area->flag) ) ) return; for (p=area->anchor; p != NULL; p=next) { next = p->link; Free(p); } /* KillPicture-macro removed from sources (RMz, 2001-04-01) if (area->thresholded != NULL) KillPicture(area->thresholded); */ Free(area); } /* :h3.CopyRegion() - Makes a Copy of a Region */ struct region *CopyRegion(area) register struct region *area; /* region to duplicate */ { register struct region *r; /* output region built here */ register struct edgelist *last=NULL; /* loop variable */ register struct edgelist *p,*newp; /* loop variables */ r = (struct region *)Allocate(sizeof(struct region), area, 0); r->anchor = NULL; for (p=area->anchor; VALIDEDGE(p); p=p->link) { newp = NewEdge(p->xmin, p->xmax, p->ymin, p->ymax, p->xvalues, ISDOWN(p->flag)); newp->fpx1 = p->fpx1; newp->fpx2 = p->fpx2; newp->fpy1 = p->fpy1; newp->fpy2 = p->fpy2; if (r->anchor == NULL) r->anchor = last = newp; else last->link = newp; last = newp; } if (area->thresholded != NULL) /* replaced DupPicture with Dup() 3-26-91 PNM */ r->thresholded = (struct picture *)Dup(area->thresholded); return(r); } /* :h4.NewEdge() - Allocates and Returns a New "edgelist" Structure We allocate space for the X values contiguously with the 'edgelist' structure that locates them. That way, we only have to free the edgelist structure to free all memory associated with it. Damn clever, huh? */ static struct edgelist *NewEdge(xmin, xmax, ymin, ymax, xvalues, isdown) pel xmin,xmax; /* X extent of edge */ pel ymin,ymax; /* Y extent of edge */ pel *xvalues; /* list of X values for entire edge */ int isdown; /* flag: TRUE means edge progresses downward */ { static struct edgelist template = { EDGETYPE, 0, 1, NULL, NULL, 0, 0, 0, 0, NULL }; register struct edgelist *r; /* returned structure */ register int iy; /* ymin adjusted for 'long' alignment purposes */ IfTrace2((RegionDebug),"....new edge: ymin=%d, ymax=%d ", (LONG)ymin, (LONG) ymax); if (ymin >= ymax) abort("newedge: height not positive", 29); /* We are going to copy the xvalues into a newly allocated area. It helps performance if the values are all "long" aligned. We can test if the xvalues are long aligned by ANDing the address with the (sizeof(long) - 1)--if non zero, the xvalues are not aligned well. We set 'iy' to the ymin value that would give us good alignment: */ iy = ymin - (((unsigned long) xvalues) & (sizeof(LONG) - 1)) / sizeof(pel); r = (struct edgelist *)Allocate(sizeof(struct edgelist), &template, (ymax - iy) * sizeof(pel)); if (isdown) r->flag = ISDOWN(ON); r->xmin = xmin; r->xmax = xmax; r->ymin = ymin; r->ymax = ymax; r->xvalues = (pel *) FOLLOWING(r); if (ymin != iy) { r->xvalues += ymin - iy; xvalues -= ymin - iy; } /* We must round up (ymax - iy) so we get the ceiling of the number of longs. The destination must be able to hold these extra bytes because Allocate() makes everything it allocates be in multiples of longs. */ LONGCOPY(&r[1], xvalues, (ymax - iy) * sizeof(pel) + sizeof(LONG) - 1); IfTrace1((RegionDebug),"result=%p\n", r); return(r); } /* :h2.Building Regions :h3.Interior() - Iterate Through a Path, Building a Region This routine is the workhorse driver routine that iterates through a path, calling the appropriate stepping routines to actually produce the run end "edgelist" structures. :ol. :li."Interior" calls StepLine or StepConic or StepBezier as appropriate to produce run ends. :li.Occasionally these routines will notice a change in Y direction and will call ChangeDirection (through the GOING_TO macro); this is a call back to the REGIONS module. :li.ChangeDirection will call whatever function is in the region structure; for Interior, this function is 'newfilledge'. :li.Newfilledge will call NewEdge to create a new edgelist structure, then, call SortSwath to sort it onto the linked list being built at the region "anchor". :eol. By making the function called by ChangeDirection be a parameter of the region, we allow the same ChangeDirection logic to be used by stroking. */ /*SHARED LINE(S) ORIGINATED HERE*/ struct region *Interior(p, fillrule) register struct segment *p; /* take interior of this path */ register int fillrule; /* rule to follow if path crosses itself */ { register fractpel x,y; /* keeps ending point of path segment */ fractpel lastx,lasty; /* previous x,y from path segment before */ register struct region *R; /* region I will build */ register struct segment *nextP; /* next segment of path */ char tempflag; /* flag; is path temporary? */ char Cflag; /* flag; should we apply continuity? */ IfTrace2((MustTraceCalls),". INTERIOR(%p, %d)\n", p, (LONG) fillrule); if (p == NULL) return(NULL); /* Establish the 'Cflag' continuity flag based on user's fill rule and our own 'Continuity' pragmatic (0: never do continuity, 1: do what user asked, >1: do it regardless). */ if (fillrule > 0) { Cflag = Continuity > 0; fillrule -= CONTINUITY; } else Cflag = Continuity > 1; ARGCHECK((fillrule != WINDINGRULE && fillrule != EVENODDRULE), "Interior: bad fill rule", NULL, NULL, (1,p), struct region *); if (p->type == TEXTTYPE) /* if (fillrule != EVENODDRULE) else */ return((struct region *)UniquePath(p)); if (p->type == STROKEPATHTYPE){ if (fillrule == WINDINGRULE) return((struct region *)DoStroke(p)); else p = CoercePath(p); } R = (struct region *)Allocate(sizeof(struct region), &EmptyRegion, 0); ARGCHECK(!ISPATHANCHOR(p), "Interior: bad path", p, R, (0), struct region *); ARGCHECK((p->type != MOVETYPE), "Interior: path not closed", p, R, (0), struct region *); /* changed definition from !ISPERMANENT to references <= 1 3-26-91 PNM */ tempflag = (p->references <= 1); /* only first segment in path is so marked */ if (!ISPERMANENT(p->flag)) p->references -= 1; R->newedgefcn = newfilledge; /* Believe it or not, "R" is now completely initialized. We are counting on the copy of template to get other fields the way we want them, namely :ol. :li.anchor = NULL :li.xmin, ymin, xmax, ymax, to minimum and maximum values respectively. :eol. Anchor = NULL is very important to ChangeDirection. See :hdref refid=CD.. To minimize problems of "wrapping" in our pel arithmetic, we keep an origin of the region which is the first move. Hopefully, that keeps numbers within plus or minus 32K pels. */ R->origin.x = 0/*TOFRACTPEL(NEARESTPEL(p->dest.x))*/; R->origin.y = 0/*TOFRACTPEL(NEARESTPEL(p->dest.y))*/; lastx = - R->origin.x; lasty = - R->origin.y; /* ChangeDirection initializes other important fields in R, such as lastdy, edge, edgeYstop, edgexmin, and edgexmax. The first segment is a MOVETYPE, so it will be called first. */ /* Note: Hinting is completely performed in charspace coordinates in the Type 1 module. Therefore, I have removed the code to handle hint segments. (2002-08-11) */ while (p != NULL) { x = lastx + p->dest.x; y = lasty + p->dest.y; nextP = p->link; switch(p->type) { case LINETYPE: StepLine(R, lastx, lasty, x, y); break; case CONICTYPE: /* 2nd order Beziers not implemented! */ break; case BEZIERTYPE: { register struct beziersegment *bp = (struct beziersegment *) p; StepBezier(R, lastx, lasty, lastx + bp->B.x, lasty + bp->B.y, lastx + bp->C.x, lasty + bp->C.y, x, y); } break; case MOVETYPE: /* At this point we have encountered a MOVE segment. This breaks the path, making it disjoint. */ if (p->last == NULL) /* i.e., not first in path */ ChangeDirection(CD_LAST, R, lastx, lasty, (fractpel) 0, (fractpel) 0, (fractpel) 0); ChangeDirection(CD_FIRST, R, x, y, (fractpel) 0, (fractpel) 0, (fractpel) 0); /* We'll just double check for closure here. We forgive an appended MOVETYPE at the end of the path, if it isn't closed: */ if (!ISCLOSED(p->flag) && p->link != NULL) return((struct region *)ArgErr("Fill: sub-path not closed", p, NULL)); break; default: abort("Interior: path type error", 30); } /* We're done with this segment. Advance to the next path segment in the list, freeing this one if necessary: */ lastx = x; lasty = y; if (tempflag) Free(p); p = nextP; } ChangeDirection(CD_LAST, R, lastx, lasty, (fractpel) 0, (fractpel) 0, (fractpel) 0); R->ending.x = lastx; R->ending.y = lasty; /* Finally, clean up the region's based on the user's 'fillrule' request: */ if (Cflag) ApplyContinuity(R); if (fillrule == WINDINGRULE) Unwind(R->anchor); return R; } /* :h4.Unwind() - Discards Edges That Fail the Winding Rule Test The winding rule says that upward going edges should be paired with downward going edges only, and vice versa. So, if two upward edges or two downward edges are nominally left/right pairs, Unwind() should discard the second one. Everything should balance; we should discard an even number of edges; of course, we abort if we don't. */ static int Unwind(area) register struct edgelist *area; /* input area modified in place */ { register struct edgelist *last=NULL,*next; /* struct before and after current one */ register int y; /* ymin of current swath */ register int count,newcount; /* winding count registers */ IfTrace1((RegionDebug>0),"...Unwind(%p)\n", area); while (VALIDEDGE(area)) { count = 0; y = area->ymin; do { next = area->link; if (ISDOWN(area->flag)) newcount = count + 1; else newcount = count - 1; if (count == 0 || newcount == 0) last = area; else discard(last, next); count = newcount; area = next; } while (area != NULL && area->ymin == y); if (count != 0) abort("Unwind: uneven edges", 31); } /* We retunr a value for ANSI-C-compiler */ return(0); } /* :h3."workedge" Array This is a statically allocated array where edges are built before being copied into more permanent storage by NewEdge(). */ #ifndef MAXEDGE #define MAXEDGE 1000 #endif static pel workedge[MAXEDGE]; static pel *currentworkarea = workedge; static pel currentsize = MAXEDGE; /* :h3 id=cd.ChangeDirection() - Called When Y Direction Changes The rasterizing routines call this entry point when they detect a change in Y. We then build the current edge and sort it into emerging edgelist at 'anchor' by calling whatever "newedgefcn" is appropriate. */ void ChangeDirection(type, R, x, y, dy, x2, y2) int type; /* CD_FIRST, CD_CONTINUE, or CD_LAST */ register struct region *R; /* region in which we are changing direction */ fractpel x,y; /* current beginning x,y */ fractpel dy; /* direction and magnitude of change in y */ { register fractpel ymin,ymax; /* minimum and maximum Y since last call */ register fractpel x_at_ymin,x_at_ymax; /* their respective X's */ register pel iy; /* nearest integer pel to 'y' */ register pel idy; /* nearest integer pel to 'dy' */ register int ydiff; /* allowed Y difference in 'currentworkarea' */ IfTrace4((RegionDebug>0),"Change Y direction (%d) from (%d,%d), dy=%d\n", (LONG) type, x, y, dy); if (type != CD_FIRST) { if (R->lastdy > 0) { ymin = R->firsty; x_at_ymin = R->firstx; ymax = y; x_at_ymax = x; } else { ymin = y; x_at_ymin = x; ymax = R->firsty; x_at_ymax = R->firstx; } if (ymax < ymin) abort("negative sized edge?", 32); (*R->newedgefcn)(R, R->edgexmin, R->edgexmax, ymin, ymax, R->lastdy > 0, x_at_ymin, x_at_ymax, x, y, x2, y2); } R->firsty = y; R->firstx = x; R->lastdy = dy; iy = NEARESTPEL(y); idy = NEARESTPEL(dy); if (currentworkarea != workedge && idy < MAXEDGE && idy > -MAXEDGE) { NonObjectFree(currentworkarea); currentworkarea = workedge; currentsize = MAXEDGE; } ydiff = currentsize - 1; if (dy > 0) { R->edge = ¤tworkarea[-iy]; R->edgeYstop = TOFRACTPEL(ydiff + iy) + FPHALF; } else { R->edge = ¤tworkarea[ydiff - iy]; R->edgeYstop = TOFRACTPEL(iy - ydiff) - FPHALF; } R->edgexmax = R->edgexmin = x; /* If this is the end of a subpath, we complete the subpath circular chain: */ if (type == CD_LAST && R->lastedge != NULL) { register struct edgelist *e = R->firstedge; while (e->subpath != NULL) e = e->subpath; e->subpath = R->lastedge; R->lastedge = R->firstedge = NULL; } } /* :h3 id=newfill.newfilledge() - Called When We Have a New Edge While Filling This is the prototypical "newedge" function passed to "Rasterize" and stored in "newedgefcn" in the region being built. If the edge is non-null, we sort it onto the list of edges we are building at "anchor". This function also has to keep the bounding box of the region up to date. */ static int newfilledge(R, xmin, xmax, ymin, ymax, isdown, x1, y1, x2, y2) register struct region *R; /* region being built */ fractpel xmin,xmax; /* X range of this edge */ fractpel ymin,ymax; /* Y range of this edge */ int isdown; /* flag: TRUE means edge goes down, else up */ fractpel x1; fractpel y1; fractpel x2; fractpel y2; { register pel pelxmin,pelymin,pelxmax,pelymax; /* pel versions of bounds */ register struct edgelist *edge; /* newly created edge */ pelymin = NEARESTPEL(ymin); pelymax = NEARESTPEL(ymax); if (pelymin == pelymax) return(0); pelxmin = NEARESTPEL(xmin); pelxmax = NEARESTPEL(xmax); if (pelxmin < R->xmin) R->xmin = pelxmin; if (pelxmax > R->xmax) R->xmax = pelxmax; if (pelymin < R->ymin) R->ymin = pelymin; if (pelymax > R->ymax) R->ymax = pelymax; edge = NewEdge(pelxmin, pelxmax, pelymin, pelymax, &R->edge[pelymin], isdown); /* Save maximum and minimum values of edge in order to be able to use them in ApplyContinity. */ edge->fpx1 = x1; edge->fpy1 = y1; edge->fpx2 = x2; edge->fpy2 = y2; edge->subpath = R->lastedge; R->lastedge = edge; if (R->firstedge == NULL) R->firstedge = edge; R->anchor = SortSwath(R->anchor, edge, swathxsort); /* { struct region* r = (struct region*) R; struct edgelist* el = (struct edgelist*) (r->anchor); while ( el != 0 ) { long i = 0; short int* spl; short int* spr; int xl; int xr; printf( "Region after Sort (NE=%ld) : ymin=%d, ymax=%d, xmin=%d, xmax=%d\n", callcount, el->ymin, el->ymax, el->xmin, el->xmax); for ( i=0; i<((el->ymax)-(el->ymin)); i++ ) { spl = el->xvalues; if ( el->link != NULL ) { spr = el->link->xvalues; xl = spl[i]; xr = spr[i]; printf( "Region after Sort (NE=%ld): y=%ld xleft=%d, xright=%d\n", callcount, el->ymin + i, xl, xr); } else { printf( "Region after Sort (NE=%ld): y=%ld xval=%d\n", callcount, el->ymin + i, spl[i]); } } if ( el->link != 0 ) el = el->link->link; else break; } } ++callcount; */ return 0; } /* :h2.Sorting Edges :h3.SortSwath() - Vertically Sort an Edge into a Region This routine sorts an edge or a pair of edges into a growing region, so that the region maintains its top-to-bottom, left-to-right form. The rules for sorting horizontally may vary depending on what you are doing, but the rules for vertical sorting are always the same. This routine is passed an argument that is a function that will perform the horizontal sort on demand (for example, swathxsort() or SwathUnion()). This is a recursive routine. A new edge (or edge pair) may overlap the list I am building in strange and wonderful ways. Edges may cross. When this happens, my strategy is to split the incoming edge (or the growing list) in two at that point, execute the actual sort on the top part of the split, and recursively call myself to figure out exactly where the bottom part belongs. */ #define TOP(e) ((e)->ymin) /* the top of an edge (for readability */ #define BOTTOM(e) ((e)->ymax) /* the bottom of an edge (for readability */ struct edgelist *SortSwath(anchor, edge, swathfcn) struct edgelist *anchor; /* list being built */ register struct edgelist *edge; /* incoming edge or pair of edges */ struct edgelist *(*swathfcn)(); /* horizontal sorter */ { register struct edgelist *before,*after; struct edgelist base; if (RegionDebug > 0) { if (RegionDebug > 2) { IfTrace3(TRUE,"SortSwath(anchor=%p, edge=%p, fcn=%p)\n", anchor, edge, swathfcn); } else { IfTrace3(TRUE,"SortSwath(anchor=%p, edge=%p, fcn=%p)\n", anchor, edge, swathfcn); } } if (anchor == NULL) return(edge); before = &base; before->ymin = before->ymax = MINPEL; before->link = after = anchor; /* If the incoming edge is above the current list, we connect the current list to the bottom of the incoming edge. One slight complication is if the incoming edge overlaps into the current list. Then, we first split the incoming edge in two at the point of overlap and recursively call ourselves to sort the bottom of the split into the current list: */ if (TOP(edge) < TOP(after)) { if (BOTTOM(edge) > TOP(after)) { after = SortSwath(after, splitedge(edge, TOP(after)), swathfcn); } vertjoin(edge, after); return(edge); } /* At this point the top of edge is not higher than the top of the list, which we keep in 'after'. We move the 'after' point down the list, until the top of the edge occurs in the swath beginning with 'after'. If the bottom of 'after' is below the bottom of the edge, we have to split the 'after' swath into two parts, at the bottom of the edge. If the bottom of 'after' is above the bottom of the swath, */ while (VALIDEDGE(after)) { if (TOP(after) == TOP(edge)) { if (BOTTOM(after) > BOTTOM(edge)) vertjoin(after, splitedge(after, BOTTOM(edge))); else if (BOTTOM(after) < BOTTOM(edge)) { after = SortSwath(after, splitedge(edge, BOTTOM(after)), swathfcn); } break; } else if (TOP(after) > TOP(edge)) { IfTrace0((BOTTOM(edge) < TOP(after) && RegionDebug > 0), "SortSwath: disjoint edges\n"); if (BOTTOM(edge) > TOP(after)) { after = SortSwath(after, splitedge(edge, TOP(after)), swathfcn); } break; } else if (BOTTOM(after) > TOP(edge)) vertjoin(after, splitedge(after, TOP(edge))); before = after; after = after->link; } /* At this point 'edge' exactly corresponds in height to the current swath pointed to by 'after'. */ if (after != NULL && TOP(after) == TOP(edge)) { before = (*swathfcn)(before, edge); after = before->link; } /* At this point 'after' contains all the edges after 'edge', and 'before' contains all the edges before. Whew! A simple matter now of adding 'edge' to the linked list in its rightful place: */ before->link = edge; if (RegionDebug > 1) { IfTrace3(TRUE,"SortSwath: in between %p and %p are %p", before, after, edge); while (edge->link != NULL) { edge = edge->link; IfTrace1(TRUE," and %p", edge); } IfTrace0(TRUE,"\n"); } else for (; edge->link != NULL; edge = edge->link) { ; } edge->link = after; return base.link; } /* :h3.splitedge() - Split an Edge or Swath in Two at a Given Y Value This function returns the edge or swath beginning at the Y value, and is guaranteed not to change the address of the old swath while splitting it. */ static struct edgelist *splitedge(list, y) struct edgelist *list; /* area to split */ register pel y; /* Y value to split list at */ { register struct edgelist *new; /* anchor for newly built list */ register struct edgelist *last=NULL; /* end of newly built list */ register struct edgelist *r; /* temp pointer to new structure */ register struct edgelist *lastlist; /* temp pointer to last 'list' value */ IfTrace2((RegionDebug > 1),"splitedge of %p at %d ", list, (LONG) y); lastlist = new = NULL; while (list != NULL) { if (y < list->ymin) break; if (y >= list->ymax) abort("splitedge: above top of list", 33); if (y == list->ymin) abort("splitedge: would be null", 34); r = (struct edgelist *)Allocate(sizeof(struct edgelist), list, 0); /* At this point 'r' points to a copy of the single structure at 'list'. We will make 'r' be the new split 'edgelist'--the lower half. We don't bother to correct 'xmin' and 'xmax', we'll take the the pessimistic answer that results from using the old values. */ r->ymin = y; r->xvalues = list->xvalues + (y - list->ymin); /* Update the fpx values so that ApplyContinuity() will continue to work. Note that high precision is a fake, here! */ r->fpx1 = (r->xvalues[0]) << FRACTBITS; r->fpx2 = (list->xvalues[list->ymax - list->ymin - 1]) << FRACTBITS; list->fpx2 = (list->xvalues[y - list->ymin -1]) << FRACTBITS; /* Note that we do not need to allocate new memory for the X values, they can remain with the old "edgelist" structure. We do have to update that old structure so it is not as high: */ list->ymax = y; /* Insert 'r' in the subpath chain: */ r->subpath = list->subpath; list->subpath = r; /* Now attach 'r' to the list we are building at 'new', and advance 'list' to point to the next element in the old list: */ if (new == NULL) { new = r; } else last->link = r; last = r; lastlist = list; list = list->link; } /* At this point we have a new list built at 'new'. We break the old list at 'lastlist', and add the broken off part to the end of 'new'. Then, we return the caller a pointer to 'new': */ if (new == NULL) abort("null splitedge", 35); lastlist->link = NULL; last->link = list; IfTrace1((RegionDebug > 1),"yields %p\n", new); return(new); } /* :h3.vertjoin() - Join Two Disjoint Edge Lists Vertically The two edges must be disjoint vertically. */ static int vertjoin(top, bottom) register struct edgelist *top; /* uppermost region */ register struct edgelist *bottom; /* bottommost region */ { if (BOTTOM(top) > TOP(bottom)) abort("vertjoin not disjoint", 36); for (; top->link != NULL; top=top->link) { ; } top->link = bottom; return(0); } /* :h3.swathxsort() - Sorting by X Values We need to sort 'edge' into its rightful place in the swath by X value, taking care that we do not accidentally advance to the next swath while searching for the correct X value. Like all swath functions, this function returns a pointer to the edge BEFORE the given edge in the sort. */ struct edgelist *swathxsort(before0, edge) register struct edgelist *before0; /* edge before this swath */ register struct edgelist *edge; /* input edge */ { register struct edgelist *before; register struct edgelist *after; register pel y=0; before = before0; after = before->link; while (after != NULL && TOP(after) == TOP(edge)) { register pel *x1,*x2; y = TOP(edge); x1 = after->xvalues; x2 = edge->xvalues; while (y < BOTTOM(edge) && *x1 == *x2) { x1++; x2++; y++; } if (y >= BOTTOM(edge)) { edge->flag |= ISAMBIGUOUS(ON); after->flag |= ISAMBIGUOUS(ON); break; } if (*x1 >= *x2) break; before = after; after = after->link; } /* At this point, 'edge' is between 'before' and 'after'. If 'edge' didn't cross either of those other edges, we would be done. We check for crossing. If it does cross, we split the problem up by calling SortSwath recursively with the part of the edge that is below the crossing point: */ { register int h0,h; /* height of edge--number of scans */ h0 = h = BOTTOM(edge) - y; y -= TOP(edge); if (h0 <= 0) { IfTrace0((RegionDebug>0),"swathxsort: exactly equal edges\n"); return(before); } if (TOP(before) == TOP(edge)) h -= crosses(h, &before->xvalues[y], &edge->xvalues[y]); if (after != NULL && TOP(after) == TOP(edge)) h -= crosses(h, &edge->xvalues[y], &after->xvalues[y]); if (h < h0) { SortSwath(before0->link, splitedge(edge, TOP(edge) + y + h), swathxsort); } } return(before); } /* :h3.SwathUnion() - Union Two Edges by X Value We have a left and right edge that must be unioned into a growing swath. If they are totally disjoint, they are just added in. The fun comes in they overlap the existing edges. Then some edges will disappear. */ struct edgelist *SwathUnion(before0, edge) register struct edgelist *before0; /* edge before the swath */ register struct edgelist *edge; /* list of two edges to be unioned */ { register int h; /* saves height of edge */ register struct edgelist *rightedge; /* saves right edge of 'edge' */ register struct edgelist *before,*after; /* edge before and after */ int h0; /* saves initial height */ IfTrace2((RegionDebug > 1),"SwathUnion entered, before=%p, edge=%p\n", before0, edge); h0 = h = edge->ymax - edge->ymin; if (h <= 0) abort("SwathUnion: 0 height swath?", 37); before = before0; after = before->link; while (after != NULL && TOP(after) == TOP(edge)) { register struct edgelist *right; right = after->link; if (right->xvalues[0] >= edge->xvalues[0]) break; before = right; after = before->link; } /* This is the picture at this point. 'L' indicates a left hand edge, 'R' indicates the right hand edge. '<--->' indicates the degree of uncertainty as to its placement relative to other edges: :xmp atomic. before after R <---L----> R L R L R <---L---> <------R--------------------------> edge :exmp. In case the left of 'edge' touches 'before', we need to reduce the height by that amount. */ if (TOP(before) == TOP(edge)) h -= touches(h, before->xvalues, edge->xvalues); rightedge = edge->link; if (after == NULL || TOP(after) != TOP(edge) || after->xvalues[0] > rightedge->xvalues[0]) { IfTrace2((RegionDebug > 1), "SwathUnion starts disjoint: before=%p after=%p\n", before, after); /* On this side of the the above 'if', the new edge is disjoint from the existing edges in the swath. This is the picture: :xmp atomic. before after R L R L R L R L R edge :exmp. We will verify it remains disjoint for the entire height. If the situation changes somewhere down the edge, we split the edge at that point and recursively call ourselves (through 'SortSwath') to figure out the new situation: */ if (after != NULL && TOP(after) == TOP(edge)) h -= touches(h, rightedge->xvalues, after->xvalues); if (h < h0) SortSwath(before0->link, splitedge(edge, edge->ymin + h), t1_SwathUnion); /* go to "return" this edge pair; it is totally disjoint */ } else { /* At this point, at the 'else', we know that the new edge overlaps one or more pairs in the existing swath. Here is a picture of our knowledge and uncertainties: :xmp atomic. before after R L R L R L R <---L---> <---R-------------------> edge :exmp. We need to move 'after' along until it is to the right of the right of 'edge'. ('After' should always point to a left edge of a pair:) */ register struct edgelist *left; /* variable to keep left edge in */ do { left = after; after = (after->link)->link; } while (after != NULL && TOP(after) == TOP(edge) && after->xvalues[0] <= rightedge->xvalues[0]); /* At this point this is the picture: :xmp atomic. before left after R L R L R L R <---L---> <---R---> edge :exmp. We need to verify that the situation stays like this all the way down the edge. Again, if the situation changes somewhere down the edge, we split the edge at that point and recursively call ourselves (through 'SortSwath') to figure out the new situation: */ h -= crosses(h, left->xvalues, rightedge->xvalues); h -= crosses(h, edge->xvalues, ((before->link)->link)->xvalues); if (after != NULL && TOP(after) == TOP(edge)) h -= touches(h, rightedge->xvalues, after->xvalues); IfTrace3((RegionDebug > 1), "SwathUnion is overlapped until %d: before=%p after=%p\n", (LONG) TOP(edge) + h, before, after); /* OK, if we touched either of our neighbors we need to split at that point and recursively sort the split edge onto the list. One tricky part is that when we recursively sort, 'after' will change if it was not in our current swath: */ if (h < h0) { SortSwath(before0->link, splitedge(edge, edge->ymin + h), t1_SwathUnion); if (after == NULL || TOP(after) != TOP(edge)) for (after = before0->link; TOP(after) == TOP(edge); after = after->link) { ; } } /* Now we need to augment 'edge' by the left and right of the overlapped swath, and to discard all edges between before and after, because they were overlapped and have been combined with the new incoming 'edge': */ edge->xmin = TYPE1_MIN(edge->xmin, (before->link)->xmin); edge->xmax = TYPE1_MIN(edge->xmax, (before->link)->xmax); edgemin(h, edge->xvalues, (before->link)->xvalues); rightedge->xmin = TYPE1_MAX(rightedge->xmin, (left->link)->xmin); rightedge->xmax = TYPE1_MAX(rightedge->xmax, (left->link)->xmax); edgemax(h, rightedge->xvalues, (left->link)->xvalues); discard(before, after); } return(before); } /* :h3.swathrightmost() - Simply Sorts New Edge to Rightmost of Swath Like all swath functions, this function returns a pointer to the edge BEFORE the given edge in the sort. */ struct edgelist *swathrightmost(before, edge) register struct edgelist *before; /* edge before this swath */ register struct edgelist *edge; /* input edge */ { register struct edgelist *after; after = before->link; while (after != NULL && TOP(after) == TOP(edge)) { before = after; after = after->link; } return(before); } /* :h3.touches() - Returns the Remaining Height When Two Edges Touch So, it will return 0 if they never touch. Allows incredibly(?) mnemonic if (touches(...)) construct. */ static int touches(h, left, right) register int h; register pel *left,*right; { for (; h > 0; h--) if (*left++ >= *right++) break; return(h); } /* :h3.crosses() - Returns the Remaining Height When Two Edges Cross So, it will return 0 if they never cross. */ static int crosses(h, left, right) register int h; register pel *left,*right; { for (; h > 0; h--) if (*left++ > *right++) break; return(h); } /* :h3.cedgemin() - Stores the Mininum of an Edge and an X Value */ static int cedgemin(h, e1, x) register int h; register pel *e1; register pel x; { for (; --h >= 0; e1++) if (*e1 > x) *e1 = x; return(0); } /* :h3.cedgemax() - Stores the Maximum of an Edge and an X Value */ static int cedgemax(h, e1, x) register int h; register pel *e1; register pel x; { for (; --h >= 0; e1++) if (*e1 < x) *e1 = x; return(0); } /* :h3.edgemin() - Stores the Mininum of Two Edges in First Edge */ static int edgemin(h, e1, e2) register int h; register pel *e1,*e2; { for (; --h >= 0; e1++,e2++) if (*e1 > *e2) *e1 = *e2; return(0); } /* :h3.edgemax() - Stores the Maximum of Two Edges in First Edge */ static int edgemax(h, e1, e2) register int h; register pel *e1,*e2; { for (; --h >= 0; e1++,e2++) if (*e1 < *e2) *e1 = *e2; return(0); } /* :h3 id=discard.discard() - Discard All Edges Between Two Edges At first glance it would seem that we could discard an edgelist structure merely by unlinking it from the list and freeing it. You are wrong, region-breath! For performance, the X values associated with an edge are allocated contiguously with it. So, we free the X values when we free a structure. However, once an edge has been split, we are no longer sure which control block actually is part of the memory block that contains the edges. Rather than trying to decide, we play it safe and never free part of a region. So, to mark a 'edgelist' structure as discarded, we move it to the end of the list and set ymin=ymax. */ static int discard(left, right) register struct edgelist *left,*right; /* all edges between here exclusive */ /* should be discarded */ { register struct edgelist *beg,*end,*p; IfTrace2((RegionDebug > 0),"discard: l=%p, r=%p\n", left, right); beg = left->link; if (beg == right) return(0); for (p = beg; p != right; p = p->link) { if (p->link == NULL && right != NULL) abort("discard(): ran off end", 38); IfTrace1((RegionDebug > 0),"discarding %p\n", p); p->ymin = p->ymax = 32767; end = p; } /* * now put the chain beg/end at the end of right, if it is not * already there: */ if (right != NULL) { left->link = right; while (right->link != NULL) right = right->link; right->link = beg; } end->link = NULL; return(0); } /* :h2.Changing the Representation of Regions For convenience and/or performance, we sometimes like to change the way regions are represented. This does not change the object itself, just the representation, so these transformations can be made on a permanent region. */ void MoveEdges(R, dx, dy) register struct region *R; /* region to modify */ register fractpel dx,dy; /* delta X and Y to move edge list by */ { register struct edgelist *edge; /* for looping through edges */ R->origin.x += dx; R->origin.y += dy; R->ending.x += dx; R->ending.y += dy; if (R->thresholded != NULL) { R->thresholded->origin.x -= dx; R->thresholded->origin.y -= dy; } /* From now on we will deal with dx and dy as integer pel values: */ dx = NEARESTPEL(dx); dy = NEARESTPEL(dy); if (dx == 0 && dy == 0) return; R->xmin += dx; R->xmax += dx; R->ymin += dy; R->ymax += dy; for (edge = R->anchor; VALIDEDGE(edge); edge = edge->link) { edge->ymin += dy; edge->ymax += dy; if (dx != 0) { register int h; /* loop index; height of edge */ register pel *Xp; /* loop pointer to X values */ edge->xmin += dx; edge->xmax += dx; for (Xp = edge->xvalues, h = edge->ymax - edge->ymin; --h >= 0; ) *Xp++ += dx; } } } /* :h3.UnJumble() - Sort a Region Top to Bottom It is an open question whether it pays in general to do this. */ void UnJumble(region) struct region *region; /* region to sort */ { register struct edgelist *anchor; /* new lists built here */ register struct edgelist *edge; /* edge pointer for loop */ register struct edgelist *next; /* ditto */ anchor = NULL; for (edge=region->anchor; VALIDEDGE(edge); edge=next) { if (edge->link == NULL) abort("UnJumble: unpaired edge?", 39); next = edge->link->link; edge->link->link = NULL; anchor = SortSwath(anchor, edge, t1_SwathUnion); } if (edge != NULL) vertjoin(anchor, edge); region->anchor = anchor; region->flag &= ~ISJUMBLED(ON); } /* */ #undef NEED_OPTIMZEREGION #ifdef NEED_OPTIMZEREGION static int OptimizeRegion(R) struct region *R; /* region to optimize */ { register pel *xP; /* pel pointer for inner loop */ register int x; /* holds X value */ register int xmin,xmax; /* holds X range */ register int h; /* loop counter */ register struct edgelist *e; /* edgelist pointer for loop */ R->flag |= ISRECTANGULAR(ON); for (e = R->anchor; VALIDEDGE(e); e=e->link) { xmin = MAXPEL; xmax = MINPEL; for (h = e->ymax - e->ymin, xP = e->xvalues; --h >= 0;) { x = *xP++; if (x < xmin) xmin = x; if (x > xmax) xmax = x; } if (xmin != xmax || (xmin != R->xmin && xmax != R->xmax)) R->flag &= ~ISRECTANGULAR(ON); if (xmin < e->xmin || xmax > e->xmax) abort("Tighten: existing edge bound was bad", 40); if (xmin < R->xmin || xmax > R->xmax) abort("Tighten: existing region bound was bad", 41); e->xmin = xmin; e->xmax = xmax; } R->flag |= ISOPTIMIZED(ON); return(0); } #endif /* This function is not used */ /* :h2.Miscelaneous Routines :h3.MoreWorkArea() - Allocate New Space for "edge" Our strategy is to temporarily allocate an array to hold this unexpectedly large edge. ChangeDirection frees this array any time it gets a shorter 'dy'. */ /*ARGSUSED*/ void MoreWorkArea(R, x1, y1, x2, y2) struct region *R; /* region we are generating */ fractpel x1,y1; /* starting point of line */ fractpel x2,y2; /* ending point of line */ { register int idy; /* integer dy of line */ idy = NEARESTPEL(y1) - NEARESTPEL(y2); if (idy < 0) idy = - idy; /* * we must add one to the delta for the number of run ends we * need to store: */ if (++idy > currentsize) { IfTrace1((RegionDebug > 0),"Allocating edge of %d pels\n", idy); if (currentworkarea != workedge) NonObjectFree(currentworkarea); currentworkarea = (pel *)Allocate(0, NULL, idy * sizeof(pel)); currentsize = idy; } ChangeDirection(CD_CONTINUE, R, x1, y1, y2 - y1, x2, y2); } /* :h3.BoxClip() - Clip a Region to a Rectangle BoxClip also duplicates the region if it is permanent. Note the clipping box is specified in REGION coordinates, that is, in coordinates relative to the region (0,0) point */ struct region *BoxClip(R, xmin, ymin, xmax, ymax) register struct region *R; /* region to clip */ register pel xmin,ymin; /* upper left hand corner of rectangle */ register pel xmax,ymax; /* lower right hand corner */ { struct edgelist anchor; /* pretend edgelist to facilitate discards */ register struct edgelist *e,*laste; IfTrace1((OffPageDebug),"BoxClip of %p:\n", R); R = UniqueRegion(R); if (xmin > R->xmin) { IfTrace2((OffPageDebug),"BoxClip: left clip old %d new %d\n", (LONG) R->xmin, (LONG) xmin); R->xmin = xmin; } if (xmax < R->xmax) { IfTrace2((OffPageDebug),"BoxClip: right clip old %d new %d\n", (LONG) R->xmax, (LONG) xmax); R->xmax = xmax; } if (ymin > R->ymin) { IfTrace2((OffPageDebug),"BoxClip: top clip old %d new %d\n", (LONG) R->ymin, (LONG) ymin); R->ymin = ymin; } if (ymax < R->ymax) { IfTrace2((OffPageDebug),"BoxClip: bottom clip old %d new %d\n", (LONG) R->ymax, (LONG) ymax); R->ymax = ymax; } laste = &anchor; anchor.link = R->anchor; for (e = R->anchor; VALIDEDGE(e); e = e->link) { if (TOP(e) < ymin) { e->xvalues += ymin - e->ymin; e->ymin = ymin; } if (BOTTOM(e) > ymax) e->ymax = ymax; if (TOP(e) >= BOTTOM(e)) { discard(laste, e->link->link); e = laste; continue; } if (e->xmin < xmin) { cedgemax(BOTTOM(e) - TOP(e), e->xvalues, xmin); e->xmin = xmin; e->xmax = TYPE1_MAX(e->xmax, xmin); } if (e->xmax > xmax) { cedgemin(BOTTOM(e) - TOP(e), e->xvalues, xmax); e->xmin = TYPE1_MIN(e->xmin, xmax); e->xmax = xmax; } laste = e; } R->anchor = anchor.link; return(R); } #ifdef notdef /* :h3.CoerceRegion() - Force a TextPath Structure to Become a Region We also save the newly created region in the textpath structure, if the structure was permanent. Then we don't have to do this again. Why not save it all the time? Well, we certainly could, but I suspect it wouldn't pay. We would have to make this region permanent (because we couldn't have it be consumed) and this would probably require unnecessary CopyRegions in most cases. */ struct region *CoerceRegion(tp) register struct textpath *tp; /* input TEXTTYPE */ { struct segment *path; /* temporary character path */ struct region *R; /* returned region */ R = Interior(path, EVENODDRULE); return(R); } #endif /* :h3.RegionBounds() - Returns Bounding Box of a Region */ struct segment *RegionBounds(R) register struct region *R; { register struct segment *path; /* returned path */ path = BoxPath(IDENTITY, R->ymax - R->ymin, R->xmax - R->xmin); path = Join(PathSegment(MOVETYPE, R->origin.x + TOFRACTPEL(R->xmin), R->origin.y + TOFRACTPEL(R->ymin) ), path); return(path); } /* :h2.Formatting/Dump Routines for Debug :h3.DumpArea() - Display a Region */ void DumpArea(area) register struct region *area; { IfTrace1(TRUE,"Dumping area %p,", area); IfTrace4(TRUE," X %d:%d Y %d:%d;", (LONG) area->xmin, (LONG) area->xmax, (LONG) area->ymin,(LONG) area->ymax); IfTrace4(TRUE," origin=(%d,%d), ending=(%d,%d)\n", area->origin.x, area->origin.y, area->ending.x, area->ending.y); DumpEdges(area->anchor); } #define INSWATH(p, y0, y1) (p != NULL && p->ymin == y0 && p->ymax == y1) /* :h3.DumpEdges() - Display Run End Lists (Edge Lists) */ static pel RegionDebugYMin = MINPEL; static pel RegionDebugYMax = MAXPEL; void DumpEdges(edges) register struct edgelist *edges; { register struct edgelist *p,*p2; register pel ymin = MINPEL; register pel ymax = MINPEL; register int y; if (edges == NULL) { IfTrace0(TRUE," NULL area.\n"); return; } if (RegionDebug <= 1) { for (p=edges; p != NULL; p = p->link) { edgecheck(p, ymin, ymax); ymin = p->ymin; ymax = p->ymax; IfTrace3(TRUE,". at %p type=%d flag=%x", p, (LONG) p->type,(LONG) p->flag); IfTrace4(TRUE," bounding box HxW is %dx%d at (%d,%d)\n", (LONG) ymax - ymin, (LONG) p->xmax - p->xmin, (LONG) p->xmin, (LONG) ymin); } } else { for (p2=edges; p2 != NULL; ) { edgecheck(p2, ymin, ymax); ymin = p2->ymin; ymax = p2->ymax; if (RegionDebug > 3 || (ymax > RegionDebugYMin && ymin < RegionDebugYMax)) { IfTrace2 (TRUE,". Swath from %d to %d:\n", ymin, ymax); for (p=p2; INSWATH(p,ymin,ymax); p = p->link) { IfTrace4(TRUE,". . at %p[%x] range %d:%d, ", p, (LONG) p->flag, (LONG) p->xmin, (LONG)p->xmax); IfTrace1(TRUE, "subpath=%p,\n", p->subpath); } } for (y=TYPE1_MAX(ymin,RegionDebugYMin); y < TYPE1_MIN(ymax, RegionDebugYMax); y++) { IfTrace1(TRUE,". . . Y[%5d] ", (LONG) y); for (p=p2; INSWATH(p,ymin,ymax); p = p->link) IfTrace1(TRUE,"%5d ", (LONG) p->xvalues[y - ymin]); IfTrace0(TRUE,"\n"); } while (INSWATH(p2, ymin, ymax)) p2 = p2->link; } } } /* :h3.edgecheck() - For Debug, Verify that an Edge Obeys the Rules */ /*ARGSUSED*/ static int edgecheck(edge, oldmin, oldmax) struct edgelist *edge; int oldmin,oldmax; { if (edge->type != EDGETYPE) abort("EDGE ERROR: non EDGETYPE in list", 42); /* The following check is not valid if the region is jumbled so I took it out: */ /* if (edge->ymin < oldmax && edge->ymin != oldmin) abort("EDGE ERROR: overlapping swaths", 43); */ return(0); } t1lib-5.1.2/lib/type1/regions.h0000644000175000001440000002117110733501626014715 0ustar rmzusers/* $XConsortium: regions.h,v 1.2 91/10/10 11:19:06 rws Exp $ */ /* Copyright International Business Machines, Corp. 1991 * All Rights Reserved * Copyright Lexmark International, Inc. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM or Lexmark not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ /*SHARED*/ #define Interior(p,rule) t1_Interior(p,rule) #define Union(a1,a2) t1_Union(a1,a2) #define Intersect(a1,a2) t1_Intersect(a1,a2) #define Complement(area) t1_Complement(area) #define Overlap(a1,a2) t1_OverLap(a1,a2) struct region *t1_Interior(struct segment *,int); /* returns the interior of a closed path */ struct region *t1_Union(); /* set union of paths or regions */ struct region *t1_Intersect(); /* set intersection of regions */ struct region *t1_Complement(); /* complement of a region */ int t1_Overlap(); /* returns a Boolean; TRUE if regions overlap */ /*END SHARED*/ /*SHARED*/ #define ChangeDirection(type,R,x,y,dy,x2,y2) t1_ChangeDirection(type,R,x,y,dy,x2,y2) void t1_ChangeDirection(); /* called when we change direction in Y */ #define CD_FIRST -1 /* enumeration of ChangeDirection type */ #define CD_CONTINUE 0 /* enumeration of ChangeDirection type */ #define CD_LAST 1 /* enumeration of ChangeDirection type */ #define MoreWorkArea(R,x1,y1,x2,y2) t1_MoreWorkArea(R,x1,y1,x2,y2) #define KillRegion(area) t1_KillRegion(area) #define CopyRegion(area) t1_CopyRegion(area) #define BoxClip(R,xmin,ymin,xmax,ymax) t1_BoxClip(R,xmin,ymin,xmax,ymax) #define SortSwath(a,p,f) t1_SortSwath(a,p,f) #define SwathUnion(b,e) t1_SwathUnion(b,e) #define RegionBounds(r) t1_RegionBounds(r) #define CoerceRegion(p) t1_CoerceRegion(p) #define MoveEdges(R,dx,dy) t1_MoveEdges(R,dx,dy) #define UnJumble(R) t1_UnJumble(R) void t1_MoreWorkArea(); /* get longer edge list for stepping */ struct region *t1_CopyRegion(); /* duplicate a region */ void t1_KillRegion(); /* destroy a region */ struct region *t1_BoxClip(); /* clip a region to a rectangle */ struct edgelist *t1_SortSwath(); /* sort edges onto growing edge list */ struct edgelist *t1_SwathUnion(); /* 'union' two edges into a swath */ struct segment *t1_RegionBounds(); /* returns bounding box of a region */ struct region *t1_CoerceRegion(); /* force text to become a true region */ void t1_MoveEdges(); /* moves the edge values in a region */ void t1_UnJumble(); /* sort the edges and reset the jumbled flag */ /*END SHARED*/ /*SHARED*/ #define GOING_TO(R, x1, y1, x2, y2, dy) { \ if (dy < 0) { \ if (R->lastdy >= 0) \ ChangeDirection(CD_CONTINUE, R, x1, y1, dy, x2, y2); \ if (y2 < R->edgeYstop) \ MoreWorkArea(R, x1, y1, x2, y2); \ } \ else if (dy > 0) { \ if (R->lastdy <= 0) \ ChangeDirection(CD_CONTINUE, R, x1, y1, dy, x2, y2); \ if (y2 > R->edgeYstop) \ MoreWorkArea(R, x1, y1, x2, y2); \ } \ else /* dy == 0 */ ChangeDirection(CD_CONTINUE, R, x1, y1, dy, x2, y2); \ if (x2 < R->edgexmin) R->edgexmin = x2; \ else if (x2 > R->edgexmax) R->edgexmax = x2; \ } #define MINPEL (-1<<(8*sizeof(pel)-1)) /* smallest value fitting in a pel */ #define MAXPEL ((1<<(8*sizeof(pel)-1))-1)/* largest value fitting in a pel */ /* The "Unique"-type macro is different (unique?) for regions, because some regions structures are shared among several objects, and might have to be made unique for that reason (i.e., references > 1). */ #define ConsumeRegion(R) MAKECONSUME(R,KillRegion(R)) #define UniqueRegion(R) MAKEUNIQUE(R,CopyRegion(R)) /*END SHARED*/ /*SHARED*/ struct region { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = REGIONTYPE */ struct fractpoint origin; /* beginning handle: X,Y origin of region */ struct fractpoint ending; /* ending handle: X,Y change after painting region */ pel xmin,ymin; /* minimum X,Y of region */ pel xmax,ymax; /* mat1_mum X,Y of region */ struct edgelist *anchor; /* list of edges that bound the region */ struct picture *thresholded; /* region defined by thresholded picture*/ /* Note that the ending handle and the bounding box values are stored relative to 'origin'. The above elements describe a region. The following elements are scratchpad areas used while the region is being built: */ fractpel lastdy; /* direction of last segment */ fractpel firstx,firsty; /* starting point of current edge */ fractpel edgexmin,edgexmax; /* x extent of current edge */ struct edgelist *lastedge,*firstedge; /* last and first edges in subpath */ pel *edge; /* pointer to array of X values for edge */ fractpel edgeYstop; /* Y value where 'edges' array ends */ int (*newedgefcn)(); /* function to use when building a new edge */ struct strokeinfo *strokeinfo; /* scratchpad info during stroking only */ } ; /* The ISCOMPLEMENT flag indicates the region is reversed--it is the "outside" of the nominal region. */ #define ISCOMPLEMENT(flag) ((flag)&0x80) /* The ISJUMBLED flag indicates the region is not sorted top-to-bottom. */ #define ISJUMBLED(flag) ((flag)&0x40) /* The ISINFINITE flag allows a quick check for an INFINITE region, which is frequently intersected. */ #define ISINFINITE(flag) ((flag)&0x20) /*END SHARED*/ /*SHARED*/ #define ISRECTANGULAR(flag) ((flag)&0x08) /*END SHARED*/ /*SHARED*/ #define EmptyRegion t1_EmptyRegion /*END SHARED*/ /*SHARED*/ struct edgelist { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = EDGETYPE */ struct edgelist *link; /* pointer to next in linked list */ struct edgelist *subpath; /* informational link for "same subpath" */ pel xmin,xmax; /* range of edge in X */ pel ymin,ymax; /* range of edge in Y */ pel *xvalues; /* pointer to ymax-ymin X values */ fractpel fpx1; /* Added by RMz, author of t1lib, 2002-08-15. */ fractpel fpy1; /* This produces a little memory overhead, but */ fractpel fpx2; /* gives the opportunity to take more */ fractpel fpy2; /* intelligent decisions in ApplyContinuity(). */ } ; /* The end of the list is marked by either "link" being NULL, or by ymin == ymax. See :hdref refid=discard.. We define the VALIDEDGE predicate to test for the opposite of these conditions: */ #define VALIDEDGE(p) ((p)!=NULL&&(p)->ymin<(p)->ymax) /*END SHARED*/ /*SHARED*/ #define ISDOWN(f) ((f)&0x80) #define ISAMBIGUOUS(f) ((f)&0x40) /*END SHARED*/ /*SHARED*/ /* Interior() rule enumerations: */ #define WINDINGRULE -2 #define EVENODDRULE -3 #define CONTINUITY 0x80 /* can be added to above rules; e.g. WINDINGRULE+CONTINUITY */ /*END SHARED*/ t1lib-5.1.2/lib/type1/ffilest.h0000644000175000001440000001030210733501626014675 0ustar rmzusers/* * $XConsortium: fontfilest.h,v 1.3 91/07/16 20:15:16 keith Exp $ * * Copyright 1991 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Keith Packard, MIT X Consortium */ #ifndef _FONTFILEST_H_ #define _FONTFILEST_H_ #ifdef XSERVER #include #else #include "types.h" #include "Xstuff.h" #endif #include "fontmisc.h" #include "fontstruct.h" #include "fontfile.h" #include "fontxlfd.h" typedef struct _FontName { char *name; short length; short ndashes; } FontNameRec; typedef struct _FontScaled { FontScalableRec vals; FontEntryPtr bitmap; FontPtr pFont; } FontScaledRec; typedef struct _FontScalableExtra { FontScalableRec defaults; int numScaled; int sizeScaled; FontScaledPtr scaled; pointer private; } FontScalableExtraRec; typedef struct _FontScalableEntry { FontRendererPtr renderer; char *fileName; FontScalableExtraPtr extra; } FontScalableEntryRec; /* * This "can't" work yet - the returned alias string must be permanent, * but this layer would need to generate the appropriate name from the * resolved scalable + the XLFD values passed in. XXX */ typedef struct _FontScaleAliasEntry { char *resolved; } FontScaleAliasEntryRec; typedef struct _FontBitmapEntry { FontRendererPtr renderer; char *fileName; FontPtr pFont; } FontBitmapEntryRec; typedef struct _FontAliasEntry { char *resolved; } FontAliasEntryRec; typedef struct _FontBCEntry { FontScalableRec vals; FontEntryPtr entry; } FontBCEntryRec; typedef struct _FontEntry { FontNameRec name; int type; union _FontEntryParts { FontScalableEntryRec scalable; FontBitmapEntryRec bitmap; FontAliasEntryRec alias; FontBCEntryRec bc; } u; } FontEntryRec; typedef struct _FontTable { int used; int size; FontEntryPtr entries; Bool sorted; } FontTableRec; typedef struct _FontDirectory { char *directory; ULONG dir_mtime; ULONG alias_mtime; FontTableRec scalable; FontTableRec nonScalable; } FontDirectoryRec; typedef struct _FontRenderer { char *fileSuffix; int fileSuffixLen; int (*OpenBitmap)(/* fpe, pFont, flags, entry, fileName, format, fmask */); int (*OpenScalable)(/* fpe, pFont, flags, entry, fileName, vals, format, fmask */); int (*GetInfoBitmap)(/* fpe, pFontInfo, entry, fileName */); int (*GetInfoScalable)(/* fpe, pFontInfo, entry, fileName, vals */); int number; } FontRendererRec; typedef struct _FontRenders { int number; FontRendererPtr *renderers; } FontRenderersRec, *FontRenderersPtr; typedef struct _BitmapInstance { FontScalableRec vals; FontBitmapEntryPtr bitmap; } BitmapInstanceRec, *BitmapInstancePtr; typedef struct _BitmapScalablePrivate { int numInstances; BitmapInstancePtr instances; } BitmapScalablePrivateRec, *BitmapScalablePrivatePtr; typedef struct _BitmapSources { FontPathElementPtr *fpe; int size; int count; } BitmapSourcesRec, *BitmapSourcesPtr; extern BitmapSourcesRec FontFileBitmapSources; #endif /* _FONTFILEST_H_ */ t1lib-5.1.2/lib/type1/pictures.h0000644000175000001440000000366110733501626015111 0ustar rmzusers/* $XConsortium: pictures.h,v 1.2 91/10/10 11:18:53 rws Exp $ */ /* Copyright International Business Machines,Corp. 1991 * All Rights Reserved * * License to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is * hereby granted, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, * and that the name of IBM not be used in advertising or * publicity pertaining to distribution of the software without * specific, written prior permission. * * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ /* STUB */ #define CopyPicture(p) p #define UniquePicture(p) p /* #define KillPicture(p) */ #define BegHandle(o,m) o #define EndHandle(o,m) o #define PictureBounds(P) P struct picture { struct fractpoint origin; struct fractpoint ending; }; #define Phantom(o) t1_Phantom(o) #define Snap(o) t1_Snap(o) struct segment *t1_Phantom(); struct segment *t1_Snap(); t1lib-5.1.2/lib/Makefile.in0000644000175000001440000001043010733501626014075 0ustar rmzusers# Makefile.in # # This file is part of the t1lib-package! See documentation and Readme files # of the t1lib-package for copyright restrictions. # # Targets provided: # all (default) # install # uninstall # clean # # Author: Rainer Menzner (Rainer.Menzner@web.de) # Date: 06/20/1997 # Last modified: 2006-11-05 # # Contributions by H.Kakugawa to use libtool! LIBTOOL = ../libtool SHELL = /bin/sh CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ OPTIONS = @OPTIONS@ X_LIBS = @X_LIBS@ TOPSRC = @top_srcdir@ XPM_LIB = -lXpm XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@ LDFLAGS = @LDFLAGS@ LDLIBS = @LDLIBS@ AR = ar rc RANLIB = @RANLIB@ RM = rm -f X_CFLAGS = @X_CFLAGS@ YACC = @YACC@ LEX = @LEX@ LEXLIB = @LEXLIB@ ALLCFLAGS = $(CFLAGS) INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ bindir = @bindir@ datadir = @datadir@ libdir = @libdir@ mandir = @mandir@/man1 manext = .1 no_x = @no_x@ t1lib_version = @T1LIB_VERSION@ t1lib_revision = @T1LIB_REVISION@ t1lib_patchlevel = @T1LIB_PATCHLEVEL@ T1_AA_TYPE16 = @T1_AA_TYPE16@ T1_AA_TYPE32 = @T1_AA_TYPE32@ T1_AA_TYPE64 = @T1_AA_TYPE64@ SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS) $(T1_AA_TYPE16) $(T1_AA_TYPE32) $(T1_AA_TYPE64)' 'OPTIONS=$(OPTIONS)' @SET_MAKE@ # targets to build: MAIN_TARGET = @MAIN_TARGET@ MAIN_HEADER = @MAIN_HEADER@ TYPE1_OBJS = \ type1/arith.lo \ type1/curves.lo \ type1/fontfcn.lo \ type1/hints.lo \ type1/lines.lo \ type1/objects.lo \ type1/paths.lo \ type1/regions.lo \ type1/scanfont.lo \ type1/spaces.lo \ type1/t1io.lo \ type1/t1snap.lo \ type1/t1stub.lo \ type1/token.lo \ type1/type1.lo \ type1/util.lo T1LIB_OBJS = \ t1lib/t1finfo.lo \ t1lib/t1base.lo \ t1lib/t1delete.lo \ t1lib/t1enc.lo \ t1lib/t1env.lo \ t1lib/t1load.lo \ t1lib/t1set.lo \ t1lib/t1trans.lo \ t1lib/t1aaset.lo \ t1lib/t1afmtool.lo \ t1lib/t1outline.lo \ t1lib/t1subset.lo \ t1lib/parseAFM.lo T1LIBX_OBJS = @T1LIBX_OBJS@ LIBSUBDIRS = \ type1 \ t1lib all: $(MAIN_TARGET) $(TYPE1_OBJS): type1_target $(T1LIB_OBJS) $(T1LIBX_OBJS): t1lib_target type1_target: @set -e; (cd type1; $(SUBMAKE) ) || exit 1 t1lib_target: @set -e; (cd t1lib; $(SUBMAKE) ) || exit 1 libt1.la: $(TYPE1_OBJS) $(T1LIB_OBJS) $(LIBTOOL) --mode=link \ $(CC) $(LDFLAGS) -o $@ $(TYPE1_OBJS) $(T1LIB_OBJS) \ -version-info @T1LIB_LT_CURRENT@:@T1LIB_LT_REVISION@:@T1LIB_LT_AGE@ \ -lm -no-undefined -rpath $(libdir) cp t1lib/t1lib.h . libt1x.la: $(T1LIBX_OBJS) $(LIBTOOL) --mode=link \ $(CC) $(LDFLAGS) -o $@ $(T1LIBX_OBJS) \ -version-info @T1LIB_LT_CURRENT@:@T1LIB_LT_REVISION@:@T1LIB_LT_AGE@ \ libt1.la $(X_LIBS) $(XPM_LIB) $(XLIB) -no-undefined -rpath $(libdir) cp t1lib/t1libx.h . .PHONY: clean dependencies: dummy for i in $(LIBSUBDIRS); do \ (cd $$i; $(MAKE) dependencies) || exit 1; \ done clean: dummy for i in $(LIBSUBDIRS); do \ (cd $$i; $(MAKE) clean) || exit 1; \ done -$(RM) -f libt1*.la libt1*.a libt1*.so* *~ t1lib*.h .libs/* -rmdir .libs install: dummy $(MKINSTALLDIRS) $(DESTDIR)$(libdir) $(MKINSTALLDIRS) $(DESTDIR)$(includedir) $(MKINSTALLDIRS) $(DESTDIR)@T1LIB_DATA_DIR@ $(LIBTOOL) --mode=install \ $(INSTALL_DATA) $(MAIN_TARGET) $(DESTDIR)$(libdir) $(LIBTOOL) --mode=install \ $(INSTALL_DATA) $(MAIN_HEADER) $(DESTDIR)$(includedir) if (test -f $(DESTDIR)@T1LIB_DATA_DIR@/t1lib.config) \ then \ echo "Alert: Global configuration file exists, installation skipped!"; \ else \ $(LIBTOOL) --mode=install $(INSTALL_DATA) t1lib.config $(DESTDIR)@T1LIB_DATA_DIR@; \ fi; uninstall: dummy -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libt1.la -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libt1x.la -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(includedir)/t1lib.h -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(includedir)/t1libx.h -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)@T1LIB_DATA_DIR@/t1lib.config dummy: t1lib-5.1.2/lib/t1lib.config0000644000175000001440000000033710733501626014237 0ustar rmzusersThis is the global configuration file for t1lib. Note that it is not of any use if not setup by the system administrator. For information on how to set up these things see the t1lib-manual. ENCODING=. AFM=. TYPE1=. t1lib-5.1.2/LGPL0000644000175000001440000006127310733501626011756 0ustar rmzusers GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! t1lib-5.1.2/Fonts/0000755000175000001440000000000010733501626012355 5ustar rmzuserst1lib-5.1.2/Fonts/afm/0000755000175000001440000000000010733501626013120 5ustar rmzuserst1lib-5.1.2/Fonts/afm/bchb.afm0000644000175000001440000005217210733501626014512 0ustar rmzusersStartFontMetrics 2.0 Comment Bitstream AFM Data Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA. Comment All rights reserved Comment Confidential and proprietary to Bitstream Inc. Comment Bitstream is a registered trademark of Bitstream Inc. Comment bitsClassification Transitional 801 Comment bitsFontID 0632 Comment bitsManufacturingDate Tue Nov 6 02:14:13 1990 Comment bitsLayoutName clayout.adobe.text228.new Comment UniqueID 15530632 FontName CharterBT-Bold FullName Bitstream Charter Bold FamilyName Bitstream Charter Weight Bold ItalicAngle 0.00 IsFixedPitch false FontBBox -166 -237 1263 963 UnderlinePosition -109 UnderlineThickness 91 Version 1.0 [UFO] Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential. EncodingScheme AdobeStandardEncoding CapHeight 672 XHeight 488 Ascender 740 Descender -219 StartCharMetrics 228 C 32 ; WX 291 ; N space ; B 0 0 0 0 ; C 33 ; WX 340 ; N exclam ; B 94 -8 247 685 ; C 34 ; WX 339 ; N quotedbl ; B 40 418 299 715 ; C 35 ; WX 736 ; N numbersign ; B 56 -24 675 710 ; C 36 ; WX 581 ; N dollar ; B 61 -102 533 742 ; C 37 ; WX 888 ; N percent ; B 36 -12 863 683 ; C 38 ; WX 741 ; N ampersand ; B 52 -12 725 684 ; C 39 ; WX 255 ; N quoteright ; B 47 395 220 698 ; C 40 ; WX 428 ; N parenleft ; B 90 -142 387 718 ; C 41 ; WX 428 ; N parenright ; B 37 -142 330 718 ; C 42 ; WX 500 ; N asterisk ; B 53 338 447 718 ; C 43 ; WX 833 ; N plus ; B 124 0 710 597 ; C 44 ; WX 289 ; N comma ; B 30 -176 221 129 ; C 45 ; WX 326 ; N hyphen ; B 36 191 291 291 ; C 46 ; WX 289 ; N period ; B 65 -8 224 151 ; C 47 ; WX 491 ; N slash ; B -28 -93 472 672 ; C 48 ; WX 581 ; N zero ; B 39 -12 549 683 ; C 49 ; WX 581 ; N one ; B 108 0 495 681 ; C 50 ; WX 581 ; N two ; B 48 0 533 684 ; C 51 ; WX 581 ; N three ; B 42 -11 523 682 ; C 52 ; WX 581 ; N four ; B 25 -32 566 677 ; C 53 ; WX 581 ; N five ; B 54 -10 525 672 ; C 54 ; WX 581 ; N six ; B 46 -13 554 714 ; C 55 ; WX 581 ; N seven ; B 75 -34 556 672 ; C 56 ; WX 581 ; N eight ; B 41 -16 540 685 ; C 57 ; WX 581 ; N nine ; B 42 -54 546 683 ; C 58 ; WX 340 ; N colon ; B 94 -8 252 489 ; C 59 ; WX 340 ; N semicolon ; B 67 -176 255 489 ; C 60 ; WX 833 ; N less ; B 128 22 704 574 ; C 61 ; WX 833 ; N equal ; B 124 156 710 440 ; C 62 ; WX 833 ; N greater ; B 129 22 704 574 ; C 63 ; WX 487 ; N question ; B 35 -8 437 684 ; C 64 ; WX 917 ; N at ; B 74 -154 854 693 ; C 65 ; WX 651 ; N A ; B -12 0 670 678 ; C 66 ; WX 628 ; N B ; B 28 0 590 672 ; C 67 ; WX 638 ; N C ; B 40 -13 602 683 ; C 68 ; WX 716 ; N D ; B 28 0 682 672 ; C 69 ; WX 596 ; N E ; B 28 0 566 672 ; C 70 ; WX 552 ; N F ; B 25 0 529 672 ; C 71 ; WX 710 ; N G ; B 40 -12 691 683 ; C 72 ; WX 760 ; N H ; B 30 0 734 672 ; C 73 ; WX 354 ; N I ; B 29 0 329 672 ; C 74 ; WX 465 ; N J ; B 11 -13 465 672 ; C 75 ; WX 650 ; N K ; B 29 0 672 672 ; C 76 ; WX 543 ; N L ; B 27 0 533 672 ; C 77 ; WX 883 ; N M ; B 24 0 863 672 ; C 78 ; WX 727 ; N N ; B 24 0 711 672 ; C 79 ; WX 752 ; N O ; B 40 -17 718 687 ; C 80 ; WX 587 ; N P ; B 24 0 569 672 ; C 81 ; WX 752 ; N Q ; B 39 -179 720 687 ; C 82 ; WX 671 ; N R ; B 30 -7 692 672 ; C 83 ; WX 568 ; N S ; B 58 -12 517 683 ; C 84 ; WX 603 ; N T ; B 15 0 594 672 ; C 85 ; WX 705 ; N U ; B 20 -13 695 672 ; C 86 ; WX 635 ; N V ; B -21 -3 661 672 ; C 87 ; WX 946 ; N W ; B 1 0 945 672 ; C 88 ; WX 637 ; N X ; B -1 0 644 672 ; C 89 ; WX 610 ; N Y ; B -11 0 627 672 ; C 90 ; WX 592 ; N Z ; B 44 0 550 672 ; C 91 ; WX 443 ; N bracketleft ; B 135 -133 406 709 ; C 92 ; WX 491 ; N backslash ; B -8 -93 486 672 ; C 93 ; WX 443 ; N bracketright ; B 42 -133 312 709 ; C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ; C 95 ; WX 500 ; N underscore ; B 0 -237 500 -152 ; C 96 ; WX 255 ; N quoteleft ; B 49 395 222 699 ; C 97 ; WX 544 ; N a ; B 40 -10 535 500 ; C 98 ; WX 577 ; N b ; B 9 -2 547 740 ; C 99 ; WX 476 ; N c ; B 34 -8 464 498 ; C 100 ; WX 596 ; N d ; B 36 -10 577 740 ; C 101 ; WX 524 ; N e ; B 37 -9 493 501 ; C 102 ; WX 341 ; N f ; B 30 0 412 744 ; C 103 ; WX 551 ; N g ; B 33 -218 555 498 ; C 104 ; WX 597 ; N h ; B 16 0 586 740 ; C 105 ; WX 305 ; N i ; B 29 0 293 724 ; C 106 ; WX 297 ; N j ; B -80 -215 242 724 ; C 107 ; WX 553 ; N k ; B 17 0 572 740 ; C 108 ; WX 304 ; N l ; B 22 0 292 740 ; C 109 ; WX 892 ; N m ; B 30 0 883 500 ; C 110 ; WX 605 ; N n ; B 27 0 594 499 ; C 111 ; WX 577 ; N o ; B 36 -9 547 499 ; C 112 ; WX 591 ; N p ; B 21 -219 560 500 ; C 113 ; WX 575 ; N q ; B 37 -218 572 499 ; C 114 ; WX 421 ; N r ; B 24 0 421 498 ; C 115 ; WX 447 ; N s ; B 40 -11 411 500 ; C 116 ; WX 358 ; N t ; B 18 -5 357 599 ; C 117 ; WX 600 ; N u ; B 22 -10 583 499 ; C 118 ; WX 513 ; N v ; B -7 0 535 488 ; C 119 ; WX 799 ; N w ; B -1 0 811 488 ; C 120 ; WX 531 ; N x ; B 11 0 532 488 ; C 121 ; WX 515 ; N y ; B -5 -219 537 486 ; C 122 ; WX 495 ; N z ; B 45 0 466 486 ; C 123 ; WX 493 ; N braceleft ; B 46 -134 421 705 ; C 124 ; WX 500 ; N bar ; B 207 -237 294 764 ; C 125 ; WX 493 ; N braceright ; B 62 -134 438 705 ; C 126 ; WX 833 ; N asciitilde ; B 86 212 747 384 ; C 161 ; WX 340 ; N exclamdown ; B 93 -8 246 685 ; C 162 ; WX 581 ; N cent ; B 58 -103 504 612 ; C 163 ; WX 581 ; N sterling ; B 42 0 540 680 ; C 164 ; WX 167 ; N fraction ; B -166 -1 333 672 ; C 165 ; WX 595 ; N yen ; B -7 0 604 672 ; C 166 ; WX 581 ; N florin ; B 12 -149 535 683 ; C 167 ; WX 500 ; N section ; B 45 -142 455 720 ; C 168 ; WX 606 ; N currency ; B 36 166 571 699 ; C 169 ; WX 175 ; N quotesingle ; B 40 418 135 715 ; C 170 ; WX 475 ; N quotedblleft ; B 49 395 443 699 ; C 171 ; WX 449 ; N guillemotleft ; B 34 53 404 427 ; C 172 ; WX 255 ; N guilsinglleft ; B 34 53 207 427 ; C 173 ; WX 255 ; N guilsinglright ; B 37 53 211 427 ; C 174 ; WX 622 ; N fi ; B 30 0 605 745 ; C 175 ; WX 627 ; N fl ; B 30 0 616 746 ; C 177 ; WX 500 ; N endash ; B 0 195 500 286 ; C 178 ; WX 500 ; N dagger ; B 17 -130 484 718 ; C 179 ; WX 500 ; N daggerdbl ; B 17 -132 484 718 ; C 180 ; WX 289 ; N periodcentered ; B 65 256 224 415 ; C 182 ; WX 491 ; N paragraph ; B 18 -79 458 672 ; C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ; C 184 ; WX 255 ; N quotesinglbase ; B 32 -174 205 130 ; C 185 ; WX 475 ; N quotedblbase ; B 35 -174 429 130 ; C 186 ; WX 475 ; N quotedblright ; B 47 395 441 698 ; C 187 ; WX 449 ; N guillemotright ; B 42 53 412 427 ; C 188 ; WX 1000 ; N ellipsis ; B 87 -8 914 151 ; C 189 ; WX 1287 ; N perthousand ; B 36 -12 1263 683 ; C 191 ; WX 487 ; N questiondown ; B 37 -8 440 684 ; C 193 ; WX 500 ; N grave ; B 85 551 307 742 ; C 194 ; WX 500 ; N acute ; B 205 551 428 742 ; C 195 ; WX 500 ; N circumflex ; B 96 551 404 742 ; C 196 ; WX 500 ; N tilde ; B 87 570 411 723 ; C 197 ; WX 500 ; N macron ; B 85 603 417 676 ; C 198 ; WX 500 ; N breve ; B 98 567 403 719 ; C 199 ; WX 500 ; N dotaccent ; B 185 578 316 713 ; C 200 ; WX 500 ; N dieresis ; B 83 578 417 710 ; C 202 ; WX 500 ; N ring ; B 131 546 369 784 ; C 203 ; WX 500 ; N cedilla ; B 171 -230 374 0 ; C 205 ; WX 500 ; N hungarumlaut ; B 107 551 490 742 ; C 206 ; WX 500 ; N ogonek ; B 176 -225 336 0 ; C 207 ; WX 500 ; N caron ; B 96 551 404 742 ; C 208 ; WX 1000 ; N emdash ; B 0 195 1000 286 ; C 225 ; WX 890 ; N AE ; B -59 0 863 672 ; C 227 ; WX 408 ; N ordfeminine ; B 30 323 402 681 ; C 232 ; WX 543 ; N Lslash ; B 9 0 533 672 ; C 233 ; WX 752 ; N Oslash ; B 40 -83 718 754 ; C 234 ; WX 1010 ; N OE ; B 39 -11 980 682 ; C 235 ; WX 433 ; N ordmasculine ; B 27 324 411 680 ; C 241 ; WX 768 ; N ae ; B 40 -10 735 500 ; C 245 ; WX 305 ; N dotlessi ; B 29 0 293 497 ; C 248 ; WX 304 ; N lslash ; B -3 0 328 740 ; C 249 ; WX 577 ; N oslash ; B 37 -83 548 571 ; C 250 ; WX 861 ; N oe ; B 37 -9 827 500 ; C 251 ; WX 642 ; N germandbls ; B 18 -9 622 743 ; C -1 ; WX 651 ; N Aacute ; B -12 0 670 930 ; C -1 ; WX 651 ; N Acircumflex ; B -12 0 670 930 ; C -1 ; WX 651 ; N Adieresis ; B -12 0 670 898 ; C -1 ; WX 651 ; N Agrave ; B -12 0 670 930 ; C -1 ; WX 651 ; N Aring ; B -12 0 670 963 ; C -1 ; WX 651 ; N Atilde ; B -12 0 670 911 ; C -1 ; WX 638 ; N Ccedilla ; B 40 -230 602 683 ; C -1 ; WX 596 ; N Eacute ; B 28 0 566 930 ; C -1 ; WX 596 ; N Ecircumflex ; B 28 0 566 930 ; C -1 ; WX 596 ; N Edieresis ; B 28 0 566 898 ; C -1 ; WX 596 ; N Egrave ; B 28 0 566 930 ; C -1 ; WX 354 ; N Iacute ; B 29 0 355 930 ; C -1 ; WX 354 ; N Icircumflex ; B 23 0 331 930 ; C -1 ; WX 354 ; N Idieresis ; B 10 0 344 898 ; C -1 ; WX 354 ; N Igrave ; B 12 0 329 930 ; C -1 ; WX 727 ; N Ntilde ; B 24 0 711 911 ; C -1 ; WX 752 ; N Oacute ; B 40 -17 718 930 ; C -1 ; WX 752 ; N Ocircumflex ; B 40 -17 718 930 ; C -1 ; WX 752 ; N Odieresis ; B 40 -17 718 898 ; C -1 ; WX 752 ; N Ograve ; B 40 -17 718 930 ; C -1 ; WX 752 ; N Otilde ; B 40 -17 718 911 ; C -1 ; WX 568 ; N Scaron ; B 58 -12 517 930 ; C -1 ; WX 705 ; N Uacute ; B 20 -13 695 930 ; C -1 ; WX 705 ; N Ucircumflex ; B 20 -13 695 930 ; C -1 ; WX 705 ; N Udieresis ; B 20 -13 695 898 ; C -1 ; WX 705 ; N Ugrave ; B 20 -13 695 930 ; C -1 ; WX 610 ; N Ydieresis ; B -11 0 627 898 ; C -1 ; WX 592 ; N Zcaron ; B 44 0 550 930 ; C -1 ; WX 544 ; N aacute ; B 40 -10 535 742 ; C -1 ; WX 544 ; N acircumflex ; B 40 -10 535 742 ; C -1 ; WX 544 ; N adieresis ; B 40 -10 535 710 ; C -1 ; WX 544 ; N agrave ; B 40 -10 535 742 ; C -1 ; WX 544 ; N aring ; B 40 -10 535 784 ; C -1 ; WX 544 ; N atilde ; B 40 -10 535 723 ; C -1 ; WX 476 ; N ccedilla ; B 34 -230 464 498 ; C -1 ; WX 524 ; N eacute ; B 37 -9 493 742 ; C -1 ; WX 524 ; N ecircumflex ; B 37 -9 493 742 ; C -1 ; WX 524 ; N edieresis ; B 37 -9 493 710 ; C -1 ; WX 524 ; N egrave ; B 37 -9 493 742 ; C -1 ; WX 305 ; N iacute ; B 29 0 331 742 ; C -1 ; WX 305 ; N icircumflex ; B -2 0 307 742 ; C -1 ; WX 305 ; N idieresis ; B -15 0 320 710 ; C -1 ; WX 305 ; N igrave ; B -13 0 293 742 ; C -1 ; WX 605 ; N ntilde ; B 27 0 594 723 ; C -1 ; WX 577 ; N oacute ; B 36 -9 547 742 ; C -1 ; WX 577 ; N ocircumflex ; B 36 -9 547 742 ; C -1 ; WX 577 ; N odieresis ; B 36 -9 547 710 ; C -1 ; WX 577 ; N ograve ; B 36 -9 547 742 ; C -1 ; WX 577 ; N otilde ; B 36 -9 547 723 ; C -1 ; WX 447 ; N scaron ; B 40 -11 411 742 ; C -1 ; WX 600 ; N uacute ; B 22 -10 583 742 ; C -1 ; WX 600 ; N ucircumflex ; B 22 -10 583 742 ; C -1 ; WX 600 ; N udieresis ; B 22 -10 583 710 ; C -1 ; WX 600 ; N ugrave ; B 22 -10 583 742 ; C -1 ; WX 515 ; N ydieresis ; B -5 -219 537 710 ; C -1 ; WX 495 ; N zcaron ; B 45 0 466 742 ; C -1 ; WX 800 ; N trademark ; B 111 398 710 662 ; C -1 ; WX 876 ; N copyright ; B 61 -50 825 730 ; C -1 ; WX 833 ; N logicalnot ; B 124 175 710 421 ; C -1 ; WX 876 ; N registered ; B 61 -50 825 730 ; C -1 ; WX 833 ; N minus ; B 124 256 710 340 ; C -1 ; WX 716 ; N Eth ; B 15 0 682 672 ; C -1 ; WX 587 ; N Thorn ; B 32 0 572 672 ; C -1 ; WX 610 ; N Yacute ; B -11 0 627 930 ; C -1 ; WX 500 ; N brokenbar ; B 207 -172 294 699 ; C -1 ; WX 329 ; N degree ; B 20 424 309 713 ; C -1 ; WX 833 ; N divide ; B 124 45 710 551 ; C -1 ; WX 569 ; N eth ; B 34 -10 540 744 ; C -1 ; WX 578 ; N mu ; B -53 -206 546 433 ; C -1 ; WX 833 ; N multiply ; B 139 16 704 581 ; C -1 ; WX 899 ; N onehalf ; B 68 -1 869 677 ; C -1 ; WX 899 ; N onequarter ; B 68 -18 890 677 ; C -1 ; WX 383 ; N onesuperior ; B 71 268 327 677 ; C -1 ; WX 833 ; N plusminus ; B 124 7 710 590 ; C -1 ; WX 591 ; N thorn ; B 20 -219 562 740 ; C -1 ; WX 899 ; N threequarters ; B 26 -18 890 678 ; C -1 ; WX 383 ; N threesuperior ; B 27 261 346 678 ; C -1 ; WX 383 ; N twosuperior ; B 31 268 352 679 ; C -1 ; WX 515 ; N yacute ; B -5 -219 537 742 ; EndCharMetrics StartKernData StartKernPairs 361 KPX hyphen T -37 KPX hyphen V -56 KPX hyphen W -56 KPX hyphen X -37 KPX hyphen Y -74 KPX A quoteright -130 KPX A T -111 KPX A U -23 KPX A V -56 KPX A W -42 KPX A Y -42 KPX A f -19 KPX A t -19 KPX A v -32 KPX A w -46 KPX A y -23 KPX A fi -19 KPX A fl -19 KPX A quotedblright -130 KPX B hyphen 37 KPX B C 19 KPX B G 19 KPX B O 19 KPX B S 19 KPX B V -37 KPX B W -19 KPX B Y -19 KPX B Oslash 19 KPX B OE 19 KPX C quoteright 37 KPX C hyphen 23 KPX C A -19 KPX C S 19 KPX C quotedblright 37 KPX C Aring -19 KPX D hyphen 37 KPX D A -19 KPX D V -19 KPX D Y -19 KPX D Aring -19 KPX F comma -190 KPX F hyphen -74 KPX F period -190 KPX F colon -37 KPX F semicolon -37 KPX F A -97 KPX F a -79 KPX F e -65 KPX F i -19 KPX F o -46 KPX F r -37 KPX F u -37 KPX F y -37 KPX F quotesinglbase -56 KPX F quotedblbase -56 KPX F ae -79 KPX F oslash -46 KPX F oe -46 KPX F Aring -97 KPX G hyphen 19 KPX G T -19 KPX G W -19 KPX G Y -23 KPX J A -37 KPX J Aring -37 KPX K hyphen -37 KPX K A -23 KPX K C -28 KPX K O -28 KPX K U -37 KPX K W -37 KPX K Y -28 KPX K a 19 KPX K e -37 KPX K o -37 KPX K u -19 KPX K y -102 KPX K quotesinglbase 37 KPX K quotedblbase 37 KPX K Oslash -28 KPX K OE -28 KPX K ae 19 KPX K oslash -37 KPX K oe -37 KPX K Aring -23 KPX L quoteright -167 KPX L T -83 KPX L U -19 KPX L V -120 KPX L W -88 KPX L Y -102 KPX L quoteleft -74 KPX L a 19 KPX L e 19 KPX L o 19 KPX L y -56 KPX L quotedblleft -74 KPX L quotesinglbase 19 KPX L quotedblbase 19 KPX L quotedblright -167 KPX L ae 19 KPX L oslash 19 KPX L oe 19 KPX O comma -60 KPX O hyphen 37 KPX O period -60 KPX O V -19 KPX O X -19 KPX P comma -259 KPX P hyphen -93 KPX P period -259 KPX P colon -37 KPX P semicolon -37 KPX P A -93 KPX P U -19 KPX P a -37 KPX P e -37 KPX P o -32 KPX P quotesinglbase -93 KPX P quotedblbase -93 KPX P ae -37 KPX P oslash -32 KPX P oe -32 KPX P Aring -93 KPX Q quoteright 19 KPX Q hyphen 37 KPX Q quotedblright 19 KPX R quoteright -37 KPX R colon -19 KPX R semicolon -19 KPX R T -37 KPX R V -56 KPX R W -42 KPX R Y -51 KPX R quoteleft -37 KPX R e -37 KPX R o -37 KPX R u -37 KPX R y -46 KPX R quotedblleft -37 KPX R quotesinglbase 37 KPX R quotedblbase 37 KPX R quotedblright -37 KPX R oslash -37 KPX R oe -37 KPX T quoteright 19 KPX T comma -148 KPX T hyphen -130 KPX T period -148 KPX T colon -37 KPX T semicolon -37 KPX T A -111 KPX T T 19 KPX T quoteleft 37 KPX T a -97 KPX T c -97 KPX T e -97 KPX T i -19 KPX T o -97 KPX T r -74 KPX T s -74 KPX T u -111 KPX T w -74 KPX T y -93 KPX T quotedblleft 37 KPX T guillemotleft -37 KPX T guilsinglleft -37 KPX T quotedblright 19 KPX T ae -97 KPX T oslash -97 KPX T oe -97 KPX T Aring -111 KPX U A -32 KPX U J -28 KPX U Aring -32 KPX V quoteright 37 KPX V comma -222 KPX V hyphen -93 KPX V period -222 KPX V colon -102 KPX V semicolon -102 KPX V A -79 KPX V O -19 KPX V a -111 KPX V e -106 KPX V i -28 KPX V o -93 KPX V u -65 KPX V y -65 KPX V quotesinglbase -74 KPX V quotedblbase -74 KPX V quotedblright 37 KPX V Oslash -19 KPX V OE -19 KPX V ae -111 KPX V oslash -93 KPX V oe -93 KPX V Aring -79 KPX W quoteright 19 KPX W comma -176 KPX W hyphen -74 KPX W period -176 KPX W colon -88 KPX W semicolon -88 KPX W A -60 KPX W a -88 KPX W e -83 KPX W i -37 KPX W o -88 KPX W r -65 KPX W u -60 KPX W y -42 KPX W quotesinglbase -37 KPX W quotedblbase -37 KPX W quotedblright 19 KPX W ae -88 KPX W oslash -88 KPX W oe -88 KPX W Aring -60 KPX X hyphen -37 KPX X A -19 KPX X C -19 KPX X O -19 KPX X e -37 KPX X quotesinglbase 19 KPX X quotedblbase 19 KPX X Oslash -19 KPX X OE -19 KPX X Aring -19 KPX Y quoteright 28 KPX Y comma -130 KPX Y hyphen -130 KPX Y period -130 KPX Y colon -125 KPX Y semicolon -125 KPX Y A -60 KPX Y C -19 KPX Y a -116 KPX Y e -125 KPX Y i -37 KPX Y o -116 KPX Y u -88 KPX Y guillemotleft -56 KPX Y guilsinglleft -56 KPX Y quotesinglbase -37 KPX Y quotedblbase -37 KPX Y quotedblright 28 KPX Y ae -116 KPX Y oslash -116 KPX Y oe -116 KPX Y Aring -60 KPX quoteleft A -130 KPX quoteleft J -148 KPX quoteleft V 56 KPX quoteleft W 37 KPX quoteleft X 37 KPX quoteleft Y 37 KPX quoteleft v 28 KPX quoteleft w 19 KPX quoteleft y 19 KPX quoteleft AE -111 KPX quoteleft Aring -130 KPX f quoteright 74 KPX f comma -37 KPX f hyphen -19 KPX f period -37 KPX f quoteleft 37 KPX f quotedblleft 37 KPX f quotedblright 74 KPX r comma -111 KPX r period -111 KPX r quotesinglbase -37 KPX r quotedblbase -37 KPX v quoteright 28 KPX v comma -120 KPX v period -120 KPX v quotedblright 28 KPX w quoteright 19 KPX w comma -120 KPX w period -120 KPX w quoteleft 19 KPX w quotedblleft 19 KPX w quotesinglbase -37 KPX w quotedblbase -37 KPX w quotedblright 19 KPX x e -19 KPX x o -19 KPX x oslash -19 KPX x oe -19 KPX y comma -134 KPX y period -134 KPX y quoteleft 19 KPX y quotedblleft 19 KPX quotedblleft A -130 KPX quotedblleft J -148 KPX quotedblleft V 56 KPX quotedblleft W 37 KPX quotedblleft X 37 KPX quotedblleft Y 37 KPX quotedblleft v 28 KPX quotedblleft w 19 KPX quotedblleft y 19 KPX quotedblleft AE -111 KPX quotedblleft Aring -130 KPX guilsinglright Y -56 KPX quotesinglbase A 19 KPX quotesinglbase V -37 KPX quotesinglbase X 19 KPX quotesinglbase Y -19 KPX quotesinglbase AE 74 KPX quotesinglbase Aring 19 KPX quotedblbase A 19 KPX quotedblbase V -37 KPX quotedblbase X 19 KPX quotedblbase Y -19 KPX quotedblbase AE 74 KPX quotedblbase Aring 19 KPX guillemotright Y -56 KPX AE hyphen 19 KPX Lslash quoteright -167 KPX Lslash T -83 KPX Lslash U -19 KPX Lslash V -120 KPX Lslash W -88 KPX Lslash Y -102 KPX Lslash quoteleft -74 KPX Lslash a 19 KPX Lslash e 19 KPX Lslash o 19 KPX Lslash y -56 KPX Lslash quotedblleft -74 KPX Lslash quotesinglbase 19 KPX Lslash quotedblbase 19 KPX Lslash quotedblright -167 KPX Lslash ae 19 KPX Lslash oslash 19 KPX Lslash oe 19 KPX Oslash comma -60 KPX Oslash hyphen 37 KPX Oslash period -60 KPX Oslash V -19 KPX Oslash X -19 KPX Aring quoteright -130 KPX Aring T -111 KPX Aring U -23 KPX Aring V -56 KPX Aring W -42 KPX Aring Y -42 KPX Aring f -19 KPX Aring t -19 KPX Aring v -32 KPX Aring w -46 KPX Aring y -23 KPX Aring fi -19 KPX Aring fl -19 KPX Aring quotedblright -130 KPX Eth hyphen 37 KPX Eth A -19 KPX Eth V -19 KPX Eth Y -19 KPX Eth Aring -19 EndKernPairs StartTrackKern 3 TrackKern -1 6 0.10 144 -2.09 TrackKern -2 6 0.05 144 -4.02 TrackKern -3 6 0.00 144 -5.96 EndTrackKern EndKernData EndFontMetrics t1lib-5.1.2/Fonts/afm/bchr.afm0000644000175000001440000004646410733501626014541 0ustar rmzusersStartFontMetrics 2.0 Comment Bitstream AFM Data Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA. Comment All rights reserved Comment Confidential and proprietary to Bitstream Inc. Comment Bitstream is a registered trademark of Bitstream Inc. Comment bitsClassification Transitional 801 Comment bitsFontID 0648 Comment bitsManufacturingDate Tue Nov 6 02:52:05 1990 Comment bitsLayoutName clayout.adobe.text228.new Comment UniqueID 15530648 FontName CharterBT-Roman FullName Bitstream Charter FamilyName Bitstream Charter Weight Normal ItalicAngle 0.00 IsFixedPitch false FontBBox -162 -237 1194 963 UnderlinePosition -109 UnderlineThickness 61 Version 1.0 [UFO] Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential. EncodingScheme AdobeStandardEncoding CapHeight 672 XHeight 482 Ascender 737 Descender -218 StartCharMetrics 228 C 32 ; WX 278 ; N space ; B 0 0 0 0 ; C 33 ; WX 338 ; N exclam ; B 112 -9 226 683 ; C 34 ; WX 331 ; N quotedbl ; B 43 421 288 715 ; C 35 ; WX 745 ; N numbersign ; B 63 -24 681 710 ; C 36 ; WX 556 ; N dollar ; B 57 -102 498 744 ; C 37 ; WX 852 ; N percent ; B 30 -12 822 683 ; C 38 ; WX 704 ; N ampersand ; B 53 -12 683 683 ; C 39 ; WX 201 ; N quoteright ; B 30 442 170 714 ; C 40 ; WX 417 ; N parenleft ; B 105 -142 386 718 ; C 41 ; WX 417 ; N parenright ; B 31 -142 311 718 ; C 42 ; WX 500 ; N asterisk ; B 53 337 447 718 ; C 43 ; WX 833 ; N plus ; B 124 0 710 597 ; C 44 ; WX 278 ; N comma ; B 39 -169 208 107 ; C 45 ; WX 319 ; N hyphen ; B 47 207 272 275 ; C 46 ; WX 278 ; N period ; B 75 -10 203 118 ; C 47 ; WX 481 ; N slash ; B -29 -93 461 672 ; C 48 ; WX 556 ; N zero ; B 40 -12 516 683 ; C 49 ; WX 556 ; N one ; B 94 0 460 683 ; C 50 ; WX 556 ; N two ; B 42 0 506 684 ; C 51 ; WX 556 ; N three ; B 40 -11 492 684 ; C 52 ; WX 556 ; N four ; B 26 -38 539 678 ; C 53 ; WX 556 ; N five ; B 49 -10 489 672 ; C 54 ; WX 556 ; N six ; B 50 -13 526 714 ; C 55 ; WX 556 ; N seven ; B 70 -38 532 672 ; C 56 ; WX 556 ; N eight ; B 43 -16 507 685 ; C 57 ; WX 556 ; N nine ; B 43 -53 512 681 ; C 58 ; WX 319 ; N colon ; B 96 -10 224 482 ; C 59 ; WX 319 ; N semicolon ; B 64 -169 234 482 ; C 60 ; WX 833 ; N less ; B 128 37 704 560 ; C 61 ; WX 833 ; N equal ; B 124 175 710 421 ; C 62 ; WX 833 ; N greater ; B 129 37 704 560 ; C 63 ; WX 486 ; N question ; B 54 -9 410 683 ; C 64 ; WX 942 ; N at ; B 76 -154 871 693 ; C 65 ; WX 639 ; N A ; B -8 0 651 680 ; C 66 ; WX 604 ; N B ; B 32 0 559 672 ; C 67 ; WX 632 ; N C ; B 42 -13 588 683 ; C 68 ; WX 693 ; N D ; B 32 0 649 672 ; C 69 ; WX 576 ; N E ; B 32 0 549 672 ; C 70 ; WX 537 ; N F ; B 24 0 506 672 ; C 71 ; WX 694 ; N G ; B 42 -13 667 684 ; C 72 ; WX 738 ; N H ; B 32 0 706 672 ; C 73 ; WX 324 ; N I ; B 35 0 289 672 ; C 74 ; WX 444 ; N J ; B 12 -13 440 672 ; C 75 ; WX 611 ; N K ; B 32 0 628 672 ; C 76 ; WX 520 ; N L ; B 26 0 507 672 ; C 77 ; WX 866 ; N M ; B 30 0 835 672 ; C 78 ; WX 713 ; N N ; B 26 0 688 672 ; C 79 ; WX 731 ; N O ; B 42 -17 689 688 ; C 80 ; WX 558 ; N P ; B 24 0 532 672 ; C 81 ; WX 731 ; N Q ; B 39 -177 694 689 ; C 82 ; WX 646 ; N R ; B 32 -9 657 672 ; C 83 ; WX 556 ; N S ; B 60 -12 499 684 ; C 84 ; WX 597 ; N T ; B 15 0 582 672 ; C 85 ; WX 694 ; N U ; B 24 -12 680 672 ; C 86 ; WX 618 ; N V ; B -23 -5 638 672 ; C 87 ; WX 928 ; N W ; B 0 0 928 672 ; C 88 ; WX 600 ; N X ; B -9 0 610 672 ; C 89 ; WX 586 ; N Y ; B -14 0 607 672 ; C 90 ; WX 586 ; N Z ; B 45 0 540 672 ; C 91 ; WX 421 ; N bracketleft ; B 138 -133 376 709 ; C 92 ; WX 481 ; N backslash ; B 12 -93 502 672 ; C 93 ; WX 421 ; N bracketright ; B 45 -133 283 709 ; C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ; C 95 ; WX 500 ; N underscore ; B 0 -237 500 -178 ; C 96 ; WX 201 ; N quoteleft ; B 34 441 174 713 ; C 97 ; WX 507 ; N a ; B 41 -7 489 492 ; C 98 ; WX 539 ; N b ; B 8 0 504 737 ; C 99 ; WX 446 ; N c ; B 37 -7 426 491 ; C 100 ; WX 565 ; N d ; B 36 -10 531 737 ; C 101 ; WX 491 ; N e ; B 37 -10 449 491 ; C 102 ; WX 321 ; N f ; B 28 0 381 744 ; C 103 ; WX 523 ; N g ; B 39 -219 513 492 ; C 104 ; WX 564 ; N h ; B 18 0 547 737 ; C 105 ; WX 280 ; N i ; B 34 0 261 709 ; C 106 ; WX 266 ; N j ; B -79 -218 204 709 ; C 107 ; WX 517 ; N k ; B 18 0 528 737 ; C 108 ; WX 282 ; N l ; B 26 0 262 737 ; C 109 ; WX 843 ; N m ; B 30 0 826 491 ; C 110 ; WX 568 ; N n ; B 30 0 551 491 ; C 111 ; WX 539 ; N o ; B 37 -10 503 491 ; C 112 ; WX 551 ; N p ; B 23 -218 517 491 ; C 113 ; WX 531 ; N q ; B 36 -218 527 492 ; C 114 ; WX 382 ; N r ; B 29 0 377 492 ; C 115 ; WX 400 ; N s ; B 41 -10 359 492 ; C 116 ; WX 334 ; N t ; B 24 -4 323 575 ; C 117 ; WX 569 ; N u ; B 26 -10 542 491 ; C 118 ; WX 494 ; N v ; B -6 0 508 482 ; C 119 ; WX 771 ; N w ; B -3 0 772 482 ; C 120 ; WX 503 ; N x ; B 12 0 501 482 ; C 121 ; WX 495 ; N y ; B -2 -218 512 482 ; C 122 ; WX 468 ; N z ; B 45 0 431 482 ; C 123 ; WX 486 ; N braceleft ; B 64 -135 418 703 ; C 124 ; WX 500 ; N bar ; B 219 -237 282 764 ; C 125 ; WX 486 ; N braceright ; B 64 -135 418 703 ; C 126 ; WX 833 ; N asciitilde ; B 86 225 747 371 ; C 161 ; WX 338 ; N exclamdown ; B 112 -9 226 683 ; C 162 ; WX 556 ; N cent ; B 64 -98 464 602 ; C 163 ; WX 556 ; N sterling ; B 37 0 509 683 ; C 164 ; WX 167 ; N fraction ; B -162 0 328 672 ; C 165 ; WX 556 ; N yen ; B -6 0 560 672 ; C 166 ; WX 556 ; N florin ; B 6 -169 507 683 ; C 167 ; WX 500 ; N section ; B 62 -141 437 718 ; C 168 ; WX 606 ; N currency ; B 41 171 566 694 ; C 169 ; WX 170 ; N quotesingle ; B 43 421 127 715 ; C 170 ; WX 403 ; N quotedblleft ; B 34 441 376 713 ; C 171 ; WX 442 ; N guillemotleft ; B 39 67 401 413 ; C 172 ; WX 245 ; N guilsinglleft ; B 39 67 204 413 ; C 173 ; WX 245 ; N guilsinglright ; B 45 67 210 413 ; C 174 ; WX 574 ; N fi ; B 28 0 544 744 ; C 175 ; WX 579 ; N fl ; B 28 0 561 744 ; C 177 ; WX 500 ; N endash ; B 0 210 500 271 ; C 178 ; WX 500 ; N dagger ; B 17 -130 484 718 ; C 179 ; WX 500 ; N daggerdbl ; B 17 -132 484 718 ; C 180 ; WX 278 ; N periodcentered ; B 75 271 203 400 ; C 182 ; WX 484 ; N paragraph ; B 25 -79 459 672 ; C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ; C 184 ; WX 201 ; N quotesinglbase ; B 31 -165 171 107 ; C 185 ; WX 403 ; N quotedblbase ; B 31 -165 372 107 ; C 186 ; WX 403 ; N quotedblright ; B 30 442 371 714 ; C 187 ; WX 442 ; N guillemotright ; B 45 67 407 413 ; C 188 ; WX 1000 ; N ellipsis ; B 102 -10 898 118 ; C 189 ; WX 1225 ; N perthousand ; B 30 -12 1194 683 ; C 191 ; WX 486 ; N questiondown ; B 60 -9 415 683 ; C 193 ; WX 500 ; N grave ; B 104 546 300 737 ; C 194 ; WX 500 ; N acute ; B 212 546 409 737 ; C 195 ; WX 500 ; N circumflex ; B 107 546 393 737 ; C 196 ; WX 500 ; N tilde ; B 97 572 403 709 ; C 197 ; WX 500 ; N macron ; B 101 607 403 668 ; C 198 ; WX 500 ; N breve ; B 108 567 392 709 ; C 199 ; WX 500 ; N dotaccent ; B 196 589 304 697 ; C 200 ; WX 500 ; N dieresis ; B 106 589 394 691 ; C 202 ; WX 500 ; N ring ; B 132 546 368 782 ; C 203 ; WX 500 ; N cedilla ; B 179 -224 368 0 ; C 205 ; WX 500 ; N hungarumlaut ; B 133 546 473 737 ; C 206 ; WX 500 ; N ogonek ; B 182 -217 330 0 ; C 207 ; WX 500 ; N caron ; B 107 545 393 736 ; C 208 ; WX 1000 ; N emdash ; B 0 210 1000 271 ; C 225 ; WX 866 ; N AE ; B -57 0 838 672 ; C 227 ; WX 380 ; N ordfeminine ; B 30 329 367 679 ; C 232 ; WX 520 ; N Lslash ; B 10 0 507 672 ; C 233 ; WX 731 ; N Oslash ; B 42 -78 689 748 ; C 234 ; WX 993 ; N OE ; B 42 -8 965 680 ; C 235 ; WX 404 ; N ordmasculine ; B 27 327 378 678 ; C 241 ; WX 725 ; N ae ; B 43 -10 683 492 ; C 245 ; WX 280 ; N dotlessi ; B 34 0 261 487 ; C 248 ; WX 282 ; N lslash ; B 4 0 300 737 ; C 249 ; WX 539 ; N oslash ; B 37 -81 503 560 ; C 250 ; WX 817 ; N oe ; B 36 -10 776 491 ; C 251 ; WX 609 ; N germandbls ; B 18 -7 581 741 ; C -1 ; WX 639 ; N Aacute ; B -8 0 651 934 ; C -1 ; WX 639 ; N Acircumflex ; B -8 0 651 934 ; C -1 ; WX 639 ; N Adieresis ; B -8 0 651 888 ; C -1 ; WX 639 ; N Agrave ; B -8 0 651 934 ; C -1 ; WX 639 ; N Aring ; B -8 0 651 963 ; C -1 ; WX 639 ; N Atilde ; B -8 0 651 906 ; C -1 ; WX 632 ; N Ccedilla ; B 42 -224 588 683 ; C -1 ; WX 576 ; N Eacute ; B 32 0 549 934 ; C -1 ; WX 576 ; N Ecircumflex ; B 32 0 549 934 ; C -1 ; WX 576 ; N Edieresis ; B 32 0 549 888 ; C -1 ; WX 576 ; N Egrave ; B 32 0 549 934 ; C -1 ; WX 324 ; N Iacute ; B 35 0 321 934 ; C -1 ; WX 324 ; N Icircumflex ; B 19 0 305 934 ; C -1 ; WX 324 ; N Idieresis ; B 18 0 306 888 ; C -1 ; WX 324 ; N Igrave ; B 16 0 289 934 ; C -1 ; WX 713 ; N Ntilde ; B 26 0 688 906 ; C -1 ; WX 731 ; N Oacute ; B 42 -17 689 934 ; C -1 ; WX 731 ; N Ocircumflex ; B 42 -17 689 934 ; C -1 ; WX 731 ; N Odieresis ; B 42 -17 689 888 ; C -1 ; WX 731 ; N Ograve ; B 42 -17 689 934 ; C -1 ; WX 731 ; N Otilde ; B 42 -17 689 906 ; C -1 ; WX 556 ; N Scaron ; B 60 -12 499 933 ; C -1 ; WX 694 ; N Uacute ; B 24 -12 680 934 ; C -1 ; WX 694 ; N Ucircumflex ; B 24 -12 680 934 ; C -1 ; WX 694 ; N Udieresis ; B 24 -12 680 888 ; C -1 ; WX 694 ; N Ugrave ; B 24 -12 680 934 ; C -1 ; WX 586 ; N Ydieresis ; B -14 0 607 888 ; C -1 ; WX 586 ; N Zcaron ; B 45 0 540 933 ; C -1 ; WX 507 ; N aacute ; B 41 -7 489 737 ; C -1 ; WX 507 ; N acircumflex ; B 41 -7 489 737 ; C -1 ; WX 507 ; N adieresis ; B 41 -7 489 691 ; C -1 ; WX 507 ; N agrave ; B 41 -7 489 737 ; C -1 ; WX 507 ; N aring ; B 41 -7 489 782 ; C -1 ; WX 507 ; N atilde ; B 41 -7 489 709 ; C -1 ; WX 446 ; N ccedilla ; B 37 -224 426 491 ; C -1 ; WX 491 ; N eacute ; B 37 -10 449 737 ; C -1 ; WX 491 ; N ecircumflex ; B 37 -10 449 737 ; C -1 ; WX 491 ; N edieresis ; B 37 -10 449 691 ; C -1 ; WX 491 ; N egrave ; B 37 -10 449 737 ; C -1 ; WX 280 ; N iacute ; B 34 0 299 737 ; C -1 ; WX 280 ; N icircumflex ; B -3 0 283 737 ; C -1 ; WX 280 ; N idieresis ; B -4 0 284 691 ; C -1 ; WX 280 ; N igrave ; B -6 0 261 737 ; C -1 ; WX 568 ; N ntilde ; B 30 0 551 709 ; C -1 ; WX 539 ; N oacute ; B 37 -10 503 737 ; C -1 ; WX 539 ; N ocircumflex ; B 37 -10 503 737 ; C -1 ; WX 539 ; N odieresis ; B 37 -10 503 691 ; C -1 ; WX 539 ; N ograve ; B 37 -10 503 737 ; C -1 ; WX 539 ; N otilde ; B 37 -10 503 709 ; C -1 ; WX 400 ; N scaron ; B 41 -10 359 736 ; C -1 ; WX 569 ; N uacute ; B 26 -10 542 737 ; C -1 ; WX 569 ; N ucircumflex ; B 26 -10 542 737 ; C -1 ; WX 569 ; N udieresis ; B 26 -10 542 691 ; C -1 ; WX 569 ; N ugrave ; B 26 -10 542 737 ; C -1 ; WX 495 ; N ydieresis ; B -2 -218 512 691 ; C -1 ; WX 468 ; N zcaron ; B 45 0 431 736 ; C -1 ; WX 822 ; N trademark ; B 118 398 716 663 ; C -1 ; WX 900 ; N copyright ; B 66 -46 838 726 ; C -1 ; WX 833 ; N logicalnot ; B 124 174 710 419 ; C -1 ; WX 900 ; N registered ; B 66 -46 838 726 ; C -1 ; WX 833 ; N minus ; B 124 269 710 328 ; C -1 ; WX 693 ; N Eth ; B 14 0 649 672 ; C -1 ; WX 558 ; N Thorn ; B 35 0 534 672 ; C -1 ; WX 586 ; N Yacute ; B -14 0 607 934 ; C -1 ; WX 500 ; N brokenbar ; B 219 -172 282 699 ; C -1 ; WX 329 ; N degree ; B 26 434 303 710 ; C -1 ; WX 833 ; N divide ; B 124 66 710 531 ; C -1 ; WX 528 ; N eth ; B 33 -11 493 734 ; C -1 ; WX 547 ; N mu ; B -39 -204 532 433 ; C -1 ; WX 833 ; N multiply ; B 146 26 691 571 ; C -1 ; WX 867 ; N onehalf ; B 59 0 836 678 ; C -1 ; WX 867 ; N onequarter ; B 59 -22 857 678 ; C -1 ; WX 367 ; N onesuperior ; B 62 268 304 679 ; C -1 ; WX 833 ; N plusminus ; B 124 20 710 577 ; C -1 ; WX 551 ; N thorn ; B 20 -218 521 737 ; C -1 ; WX 868 ; N threequarters ; B 25 -22 857 679 ; C -1 ; WX 367 ; N threesuperior ; B 26 261 325 679 ; C -1 ; WX 367 ; N twosuperior ; B 27 268 334 679 ; C -1 ; WX 495 ; N yacute ; B -2 -218 512 737 ; EndCharMetrics StartKernData StartKernPairs 271 KPX hyphen T -37 KPX hyphen V -56 KPX hyphen W -56 KPX hyphen X -37 KPX hyphen Y -74 KPX A quoteright -130 KPX A T -111 KPX A U -23 KPX A V -56 KPX A W -42 KPX A Y -42 KPX A f -19 KPX A t -19 KPX A v -32 KPX A w -46 KPX A y -23 KPX A fi -19 KPX A fl -19 KPX A quotedblright -130 KPX B hyphen 37 KPX B C 19 KPX B G 19 KPX B O 19 KPX B S 19 KPX B V -37 KPX B W -19 KPX B Y -19 KPX B Oslash 19 KPX B OE 19 KPX C quoteright 37 KPX C hyphen 23 KPX C A -19 KPX C S 19 KPX C quotedblright 37 KPX C Aring -19 KPX D hyphen 37 KPX D A -19 KPX D V -19 KPX D Y -19 KPX D Aring -19 KPX F comma -190 KPX F hyphen -93 KPX F period -190 KPX F colon -37 KPX F semicolon -37 KPX F A -97 KPX F a -79 KPX F e -65 KPX F o -65 KPX F ae -79 KPX F oslash -65 KPX F oe -65 KPX F Aring -97 KPX G hyphen 19 KPX G T -19 KPX G W -19 KPX G Y -23 KPX J A -37 KPX J Aring -37 KPX K hyphen -37 KPX K A -23 KPX K C -28 KPX K O -28 KPX K U -37 KPX K W -37 KPX K Y -28 KPX K e -19 KPX K o -19 KPX K u -19 KPX K y -28 KPX K Oslash -28 KPX K OE -28 KPX K oslash -19 KPX K oe -19 KPX K Aring -23 KPX L quoteright -241 KPX L T -83 KPX L U -19 KPX L V -120 KPX L W -88 KPX L Y -102 KPX L y -19 KPX L quotedblright -241 KPX O comma -60 KPX O hyphen 37 KPX O period -60 KPX O V -19 KPX O X -19 KPX P comma -259 KPX P hyphen -93 KPX P period -259 KPX P colon -37 KPX P semicolon -37 KPX P A -93 KPX P U -19 KPX P a -56 KPX P e -56 KPX P o -51 KPX P s -32 KPX P ae -56 KPX P oslash -51 KPX P oe -51 KPX P Aring -93 KPX Q quoteright 19 KPX Q hyphen 37 KPX Q quotedblright 19 KPX R quoteright -37 KPX R colon -19 KPX R semicolon -19 KPX R T -37 KPX R V -56 KPX R W -42 KPX R Y -51 KPX R quoteleft -37 KPX R e -37 KPX R o -37 KPX R u -37 KPX R y -46 KPX R quotedblleft -37 KPX R quotesinglbase 37 KPX R quotedblbase 37 KPX R quotedblright -37 KPX R oslash -37 KPX R oe -37 KPX T quoteright 19 KPX T comma -148 KPX T hyphen -130 KPX T period -148 KPX T colon -37 KPX T semicolon -37 KPX T A -111 KPX T T 19 KPX T quoteleft 37 KPX T a -97 KPX T c -97 KPX T e -97 KPX T i -19 KPX T o -97 KPX T r -74 KPX T s -74 KPX T u -111 KPX T w -74 KPX T y -93 KPX T quotedblleft 37 KPX T guillemotleft -37 KPX T guilsinglleft -37 KPX T quotedblright 19 KPX T ae -97 KPX T oslash -97 KPX T oe -97 KPX T Aring -111 KPX U A -32 KPX U J -28 KPX U Aring -32 KPX V quoteright 37 KPX V comma -222 KPX V hyphen -93 KPX V period -222 KPX V colon -102 KPX V semicolon -102 KPX V A -79 KPX V O -19 KPX V a -111 KPX V e -106 KPX V i -28 KPX V o -93 KPX V u -65 KPX V y -65 KPX V quotedblright 37 KPX V Oslash -19 KPX V OE -19 KPX V ae -111 KPX V oslash -93 KPX V oe -93 KPX V Aring -79 KPX W quoteright 19 KPX W comma -176 KPX W hyphen -74 KPX W period -176 KPX W colon -88 KPX W semicolon -88 KPX W A -60 KPX W a -69 KPX W e -83 KPX W i -19 KPX W o -69 KPX W r -46 KPX W u -42 KPX W y -23 KPX W quotedblright 19 KPX W ae -69 KPX W oslash -69 KPX W oe -69 KPX W Aring -60 KPX X hyphen -37 KPX X A -19 KPX X C -19 KPX X O -19 KPX X Oslash -19 KPX X OE -19 KPX X Aring -19 KPX Y comma -130 KPX Y hyphen -130 KPX Y period -130 KPX Y colon -125 KPX Y semicolon -125 KPX Y A -60 KPX Y C -19 KPX Y a -97 KPX Y e -106 KPX Y i -37 KPX Y o -97 KPX Y u -69 KPX Y ae -97 KPX Y oslash -97 KPX Y oe -97 KPX Y Aring -60 KPX quoteleft A -130 KPX quoteleft J -167 KPX quoteleft AE -111 KPX quoteleft Aring -130 KPX f quoteright 74 KPX f comma -37 KPX f hyphen -19 KPX f period -37 KPX f quotedblright 74 KPX r comma -111 KPX r period -111 KPX v comma -120 KPX v period -120 KPX w comma -120 KPX w period -120 KPX y comma -134 KPX y period -134 KPX quotedblleft A -130 KPX quotedblleft J -167 KPX quotedblleft AE -111 KPX quotedblleft Aring -130 KPX AE hyphen 19 KPX Lslash quoteright -241 KPX Lslash T -83 KPX Lslash U -19 KPX Lslash V -120 KPX Lslash W -88 KPX Lslash Y -102 KPX Lslash y -19 KPX Lslash quotedblright -241 KPX Oslash comma -60 KPX Oslash hyphen 37 KPX Oslash period -60 KPX Oslash V -19 KPX Oslash X -19 KPX Aring quoteright -130 KPX Aring T -111 KPX Aring U -23 KPX Aring V -56 KPX Aring W -42 KPX Aring Y -42 KPX Aring f -19 KPX Aring t -19 KPX Aring v -32 KPX Aring w -46 KPX Aring y -23 KPX Aring fi -19 KPX Aring fl -19 KPX Aring quotedblright -130 KPX Eth hyphen 37 KPX Eth A -19 KPX Eth V -19 KPX Eth Y -19 KPX Eth Aring -19 EndKernPairs StartTrackKern 3 TrackKern -1 6 0.10 144 -2.09 TrackKern -2 6 0.05 144 -4.02 TrackKern -3 6 0.00 144 -5.96 EndTrackKern EndKernData EndFontMetrics t1lib-5.1.2/Fonts/afm/dcti10.afm0000644000175000001440000016712210733501626014702 0ustar rmzusersStartFontMetrics 2.0 FontName dcti10 FullName dcti10 FamilyName dcti10 Weight Medium ItalicAngle 0.000000 IsFixedPitch false UnderlinePosition -133 UnderlineThickness 20 Version 1.0\(Level-B\) FontBBox -61, -250, 1119, 913 Notice Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-B. EncodingScheme FontSpecific CapHeight 683 XHeight 430 Descender -194 Ascender 694 StartCharMetrics 256 C 0 ; WX 511 ; N grave ; B 265 503 407 696 ; C 1 ; WX 511 ; N acute ; B 313 503 525 696 ; C 2 ; WX 511 ; N circumflex ; B 238 533 498 694 ; C 3 ; WX 511 ; N tilde ; B 221 564 546 668 ; C 4 ; WX 511 ; N dieresis ; B 242 565 526 669 ; C 5 ; WX 511 ; N hungarumlaut ; B 241 504 550 697 ; C 6 ; WX 831.11 ; N ring ; B 435 540 630 716 ; C 7 ; WX 511 ; N caron ; B 253 505 512 633 ; C 8 ; WX 511 ; N breve ; B 254 520 541 694 ; C 9 ; WX 511 ; N macron ; B 206 555 540 589 ; C 10 ; WX 306.61 ; N dotaccent ; B 225 559 337 669 ; C 11 ; WX 459.89 ; N cedilla ; B 73 -194 312 0 ; C 12 ; WX 306.61 ; N ogonek ; B -16 -181 192 23 ; C 13 ; WX 306.61 ; N quotesinglbase ; B 63 -194 217 110 ; C 14 ; WX 459.89 ; N guilsinglleft ; B 147 26 417 457 ; C 15 ; WX 459.89 ; N guilsinglright ; B 96 26 392 457 ; C 16 ; WX 514.33 ; N quotedblleft ; B 239 390 583 694 ; C 17 ; WX 514.33 ; N quotedblright ; B 150 390 494 694 ; C 18 ; WX 514.33 ; N quotedblbase ; B 95 -194 439 110 ; C 19 ; WX 664.28 ; N guillemotleft ; B 147 26 621 457 ; C 20 ; WX 664.28 ; N guillemotright ; B 96 26 596 457 ; C 21 ; WX 511 ; N endash ; B 66 253 526 279 ; L hyphen emdash ; C 22 ; WX 1022 ; N emdash ; B 66 253 985 279 ; C 23 ; WX 0 ; N compoundwordmark ; B 0 0 0 0 ; C 24 ; WX 408.78 ; N perthousand ; B 78 -56 353 347 ; C 25 ; WX 306.61 ; N dotlessi ; B 55 -11 308 441 ; C 26 ; WX 332.17 ; N dotlessj ; B -61 -205 296 441 ; C 27 ; WX 613.17 ; N ff ; B -51 -205 732 705 ; L i ffi ; L l ffl ; C 28 ; WX 562.11 ; N fi ; B -51 -205 571 705 ; C 29 ; WX 587.61 ; N fl ; B -51 -205 613 705 ; C 30 ; WX 881.44 ; N ffi ; B -51 -205 890 705 ; C 31 ; WX 894.22 ; N ffl ; B -51 -205 919 705 ; C 32 ; WX 511 ; N visiblespace ; B 13 -107 482 252 ; C 33 ; WX 306.61 ; N exclam ; B 85 0 350 716 ; C 34 ; WX 511 ; N quotedbl ; B 226 338 517 706 ; C 35 ; WX 817.56 ; N numbersign ; B 89 -194 802 694 ; C 36 ; WX 511 ; N dollar ; B 89 -56 546 750 ; C 37 ; WX 817.56 ; N percent ; B 119 -56 821 750 ; C 38 ; WX 766.5 ; N ampersand ; B 101 -22 776 716 ; C 39 ; WX 306.61 ; N quoteright ; B 192 390 349 694 ; L quoteright quotedblright ; C 40 ; WX 408.78 ; N parenleft ; B 124 -250 491 750 ; C 41 ; WX 408.78 ; N parenright ; B -9 -250 358 750 ; C 42 ; WX 511 ; N asterisk ; B 169 320 558 750 ; C 43 ; WX 766.5 ; N plus ; B 114 -57 726 557 ; C 44 ; WX 306.61 ; N comma ; B 46 -194 200 110 ; L comma quotedblbase ; C 45 ; WX 357.67 ; N hyphen ; B 59 185 314 245 ; L hyphen endash ; C 46 ; WX 306.61 ; N period ; B 85 0 198 110 ; C 47 ; WX 511 ; N slash ; B -8 -250 592 750 ; C 48 ; WX 511 ; N zero ; B 89 -22 530 666 ; C 49 ; WX 511 ; N one ; B 89 0 437 666 ; C 50 ; WX 511 ; N two ; B 56 -22 525 666 ; C 51 ; WX 511 ; N three ; B 69 -22 536 666 ; C 52 ; WX 511 ; N four ; B 18 -194 449 666 ; C 53 ; WX 511 ; N five ; B 81 -22 541 666 ; C 54 ; WX 511 ; N six ; B 94 -22 541 666 ; C 55 ; WX 511 ; N seven ; B 116 -22 602 666 ; C 56 ; WX 511 ; N eight ; B 71 -22 528 666 ; C 57 ; WX 511 ; N nine ; B 79 -22 527 666 ; C 58 ; WX 306.61 ; N colon ; B 85 0 278 430 ; C 59 ; WX 306.61 ; N semicolon ; B 46 -194 278 430 ; C 60 ; WX 766.5 ; N less ; B 140 -33 767 533 ; L less guillemotleft ; C 61 ; WX 766.5 ; N equal ; B 89 140 749 360 ; C 62 ; WX 766.5 ; N greater ; B 72 -33 700 533 ; L greater guillemotright ; C 63 ; WX 511 ; N question ; B 168 0 525 716 ; C 64 ; WX 766.5 ; N at ; B 125 -11 762 705 ; C 65 ; WX 743.17 ; N A ; B 18 0 653 716 ; C 66 ; WX 703.72 ; N B ; B 22 0 694 683 ; C 67 ; WX 715.39 ; N C ; B 124 -22 786 705 ; C 68 ; WX 754.83 ; N D ; B 20 0 735 683 ; C 69 ; WX 678.17 ; N E ; B 19 0 703 680 ; C 70 ; WX 652.61 ; N F ; B 19 0 691 680 ; C 71 ; WX 773.44 ; N G ; B 124 -22 786 705 ; C 72 ; WX 743.17 ; N H ; B 19 0 814 683 ; C 73 ; WX 385.44 ; N I ; B 14 0 462 683 ; C 74 ; WX 524.89 ; N J ; B 64 -22 596 683 ; C 75 ; WX 768.72 ; N K ; B 19 0 820 683 ; C 76 ; WX 627.06 ; N L ; B 19 0 586 683 ; C 77 ; WX 896.44 ; N M ; B 23 0 963 683 ; C 78 ; WX 743.17 ; N N ; B 19 0 814 683 ; C 79 ; WX 766.5 ; N O ; B 122 -22 761 705 ; C 80 ; WX 678.17 ; N P ; B 20 0 690 683 ; C 81 ; WX 766.5 ; N Q ; B 122 -194 761 705 ; C 82 ; WX 729.28 ; N R ; B 20 -22 683 683 ; C 83 ; WX 562.11 ; N S ; B 48 -22 607 705 ; C 84 ; WX 715.39 ; N T ; B 148 0 780 677 ; C 85 ; WX 743.17 ; N U ; B 160 -22 814 683 ; C 86 ; WX 743.17 ; N V ; B 168 -22 828 683 ; C 87 ; WX 998.67 ; N W ; B 167 -22 1085 683 ; C 88 ; WX 743.17 ; N X ; B 10 0 785 683 ; C 89 ; WX 743.17 ; N Y ; B 161 0 835 683 ; C 90 ; WX 613.17 ; N Z ; B 53 0 678 683 ; C 91 ; WX 306.61 ; N bracketleft ; B 34 -250 420 750 ; C 92 ; WX 511 ; N backslash ; B 235 -250 349 750 ; C 93 ; WX 306.61 ; N bracketright ; B -40 -250 346 750 ; C 94 ; WX 613.17 ; N asciicircum ; B 219 457 580 628 ; C 95 ; WX 766.5 ; N underscore ; B 24 -233 584 -193 ; C 96 ; WX 306.61 ; N quoteleft ; B 178 390 335 694 ; L quoteleft quotedblleft ; C 97 ; WX 511 ; N a ; B 81 -11 512 441 ; C 98 ; WX 459.89 ; N b ; B 87 -11 435 694 ; C 99 ; WX 459.89 ; N c ; B 82 -11 444 441 ; C 100 ; WX 511 ; N d ; B 81 -11 536 694 ; C 101 ; WX 459.89 ; N e ; B 86 -11 442 441 ; C 102 ; WX 306.61 ; N f ; B -51 -205 426 705 ; L i fi ; L f ff ; L l fl ; C 103 ; WX 459.89 ; N g ; B 25 -205 463 441 ; C 104 ; WX 511 ; N h ; B 48 -11 512 694 ; C 105 ; WX 306.61 ; N i ; B 55 -11 308 656 ; C 106 ; WX 306.61 ; N j ; B -61 -205 333 656 ; C 107 ; WX 459.89 ; N k ; B 48 -11 474 694 ; C 108 ; WX 255.5 ; N l ; B 66 -11 282 694 ; C 109 ; WX 817.56 ; N m ; B 55 -11 819 441 ; C 110 ; WX 562.11 ; N n ; B 55 -11 563 441 ; C 111 ; WX 511 ; N o ; B 82 -11 485 441 ; C 112 ; WX 511 ; N p ; B -14 -194 486 441 ; C 113 ; WX 459.89 ; N q ; B 81 -194 473 441 ; C 114 ; WX 421.56 ; N r ; B 55 -11 462 441 ; C 115 ; WX 408.78 ; N s ; B 50 -11 392 441 ; C 116 ; WX 332.17 ; N t ; B 64 -11 347 626 ; C 117 ; WX 536.56 ; N u ; B 55 -11 538 441 ; C 118 ; WX 459.89 ; N v ; B 55 -11 466 442 ; C 119 ; WX 664.28 ; N w ; B 55 -11 670 442 ; C 120 ; WX 463.78 ; N x ; B 29 -11 491 441 ; C 121 ; WX 485.44 ; N y ; B 55 -205 490 441 ; C 122 ; WX 408.78 ; N z ; B 34 -11 439 441 ; C 123 ; WX 511 ; N braceleft ; B 126 -250 580 750 ; C 124 ; WX 306.61 ; N bar ; B 51 -250 331 750 ; C 125 ; WX 511 ; N braceright ; B 4 -250 458 750 ; C 126 ; WX 613.17 ; N asciitilde ; B 221 564 648 668 ; C 127 ; WX 357.67 ; N hyphen ; B 59 185 314 245 ; C 128 ; WX 743.17 ; N Abreve ; B 18 0 693 891 ; C 129 ; WX 743.17 ; N Aogonek ; B 18 -169 668 716 ; C 130 ; WX 715.39 ; N Cacute ; B 124 -22 786 893 ; C 131 ; WX 715.39 ; N Ccaron ; B 124 -22 786 844 ; C 132 ; WX 754.83 ; N Dcaron ; B 20 0 735 844 ; C 133 ; WX 678.17 ; N Ecaron ; B 19 0 703 844 ; C 134 ; WX 678.17 ; N Eogonek ; B 19 -169 703 680 ; C 135 ; WX 773.44 ; N Gbreve ; B 124 -22 786 891 ; C 136 ; WX 627.06 ; N Lacute ; B 19 0 626 893 ; C 137 ; WX 627.06 ; N Lquoteright ; B 19 0 632 683 ; C 138 ; WX 627.06 ; N Lslash ; B 19 0 586 683 ; C 139 ; WX 743.17 ; N Nacute ; B 19 0 814 893 ; C 140 ; WX 743.17 ; N Ncaron ; B 19 0 814 844 ; C 141 ; WX 720.94 ; N Eng ; B 13 -22 763 694 ; C 142 ; WX 766.5 ; N Ohungarumlaut ; B 122 -22 819 893 ; C 143 ; WX 729.28 ; N Racute ; B 20 -22 683 893 ; C 144 ; WX 729.28 ; N Rcaron ; B 20 -22 683 844 ; C 145 ; WX 562.11 ; N Sacute ; B 48 -22 607 893 ; C 146 ; WX 562.11 ; N Scaron ; B 48 -22 607 844 ; C 147 ; WX 562.11 ; N Scedilla ; B 48 -194 607 705 ; C 148 ; WX 715.39 ; N Tcaron ; B 148 0 780 844 ; C 149 ; WX 715.39 ; N Tcedilla ; B 148 -194 780 677 ; C 150 ; WX 743.17 ; N Uhungarumlaut ; B 160 -22 819 893 ; C 151 ; WX 743.17 ; N Uring ; B 160 -22 814 913 ; C 152 ; WX 743.17 ; N Ydieresis ; B 161 0 835 891 ; C 153 ; WX 613.17 ; N Zacute ; B 53 0 678 893 ; C 154 ; WX 613.17 ; N Zcaron ; B 53 0 678 844 ; C 155 ; WX 613.17 ; N Zdotaccent ; B 53 0 678 891 ; C 156 ; WX 845.33 ; N IJ ; B 14 -22 902 683 ; C 157 ; WX 385.44 ; N Idotaccent ; B 14 0 462 878 ; C 158 ; WX 511 ; N dbar ; B 81 -11 556 694 ; C 159 ; WX 459.89 ; N section ; B 53 -205 480 705 ; C 160 ; WX 511 ; N abreve ; B 81 -11 527 639 ; C 161 ; WX 511 ; N aogonek ; B 81 -181 512 441 ; C 162 ; WX 459.89 ; N cacute ; B 82 -11 486 641 ; C 163 ; WX 459.89 ; N ccaron ; B 82 -11 502 592 ; C 164 ; WX 511 ; N dquoteright ; B 81 -11 723 694 ; C 165 ; WX 459.89 ; N ecaron ; B 86 -11 477 592 ; C 166 ; WX 459.89 ; N eogonek ; B 86 -152 442 441 ; C 167 ; WX 459.89 ; N gbreve ; B 25 -205 502 639 ; C 168 ; WX 255.5 ; N lacute ; B 66 -11 450 905 ; C 169 ; WX 255.5 ; N lquoteright ; B 66 -11 467 694 ; C 170 ; WX 255.5 ; N lslash ; B 34 -11 288 694 ; C 171 ; WX 562.11 ; N nacute ; B 55 -11 563 641 ; C 172 ; WX 562.11 ; N ncaron ; B 55 -11 563 592 ; C 173 ; WX 562.11 ; N eng ; B 55 -205 494 441 ; C 174 ; WX 511 ; N ohungarumlaut ; B 82 -11 629 641 ; C 175 ; WX 421.56 ; N racute ; B 55 -11 462 641 ; C 176 ; WX 421.56 ; N rcaron ; B 55 -11 462 592 ; C 177 ; WX 408.78 ; N sacute ; B 50 -11 461 641 ; C 178 ; WX 408.78 ; N scaron ; B 50 -11 451 592 ; C 179 ; WX 408.78 ; N scedilla ; B 22 -194 392 441 ; C 180 ; WX 332.17 ; N tquoteright ; B 64 -11 462 704 ; C 181 ; WX 332.17 ; N tcedilla ; B 22 -194 347 626 ; C 182 ; WX 536.56 ; N uhungarumlaut ; B 55 -11 642 641 ; C 183 ; WX 536.56 ; N uring ; B 55 -11 538 661 ; C 184 ; WX 485.44 ; N ydieresis ; B 55 -205 505 638 ; C 185 ; WX 408.78 ; N zacute ; B 34 -11 461 641 ; C 186 ; WX 408.78 ; N zcaron ; B 34 -11 451 592 ; C 187 ; WX 408.78 ; N zdotaccent ; B 34 -11 439 670 ; C 188 ; WX 562.11 ; N ij ; B 55 -205 588 656 ; C 189 ; WX 306.61 ; N exclamdown ; B 31 -216 295 500 ; C 190 ; WX 511 ; N questiondown ; B 59 -216 416 500 ; C 191 ; WX 768.89 ; N sterling ; B 62 -11 672 709 ; C 192 ; WX 743.17 ; N Agrave ; B 18 0 653 893 ; C 193 ; WX 743.17 ; N Aacute ; B 18 0 677 893 ; C 194 ; WX 743.17 ; N Acircumflex ; B 18 0 653 891 ; C 195 ; WX 743.17 ; N Atilde ; B 18 0 704 891 ; C 196 ; WX 743.17 ; N Adieresis ; B 18 0 683 891 ; C 197 ; WX 743.17 ; N Aring ; B 18 0 653 872 ; C 198 ; WX 882.56 ; N AE ; B 18 0 909 683 ; C 199 ; WX 715.39 ; N Ccedilla ; B 124 -194 786 705 ; C 200 ; WX 678.17 ; N Egrave ; B 19 0 703 893 ; C 201 ; WX 678.17 ; N Eacute ; B 19 0 703 893 ; C 202 ; WX 678.17 ; N Ecircumflex ; B 19 0 703 891 ; C 203 ; WX 678.17 ; N Edieresis ; B 19 0 703 891 ; C 204 ; WX 385.44 ; N Igrave ; B 14 0 462 893 ; C 205 ; WX 385.44 ; N Iacute ; B 14 0 498 893 ; C 206 ; WX 385.44 ; N Icircumflex ; B 14 0 468 891 ; C 207 ; WX 385.44 ; N Idieresis ; B 14 0 504 891 ; C 208 ; WX 754.83 ; N Eth ; B 20 0 735 683 ; C 209 ; WX 743.17 ; N Ntilde ; B 19 0 814 891 ; C 210 ; WX 766.5 ; N Ograve ; B 122 -22 761 893 ; C 211 ; WX 766.5 ; N Oacute ; B 122 -22 761 893 ; C 212 ; WX 766.5 ; N Ocircumflex ; B 122 -22 761 891 ; C 213 ; WX 766.5 ; N Otilde ; B 122 -22 761 891 ; C 214 ; WX 766.5 ; N Odieresis ; B 122 -22 761 891 ; C 215 ; WX 984.78 ; N OE ; B 122 -22 1011 705 ; C 216 ; WX 766.5 ; N Oslash ; B 94 -62 791 745 ; C 217 ; WX 743.17 ; N Ugrave ; B 160 -22 814 893 ; C 218 ; WX 743.17 ; N Uacute ; B 160 -22 814 893 ; C 219 ; WX 743.17 ; N Ucircumflex ; B 160 -22 814 891 ; C 220 ; WX 743.17 ; N Udieresis ; B 160 -22 814 891 ; C 221 ; WX 743.17 ; N Yacute ; B 161 0 835 893 ; C 222 ; WX 627.06 ; N Thorn ; B 22 0 607 683 ; C 223 ; WX 1073.06 ; N Germandbls ; B 48 -22 1119 705 ; C 224 ; WX 511 ; N agrave ; B 81 -11 512 641 ; C 225 ; WX 511 ; N aacute ; B 81 -11 512 641 ; C 226 ; WX 511 ; N acircumflex ; B 81 -11 512 639 ; C 227 ; WX 511 ; N atilde ; B 81 -11 521 669 ; C 228 ; WX 511 ; N adieresis ; B 81 -11 518 638 ; C 229 ; WX 511 ; N aring ; B 81 -11 512 661 ; C 230 ; WX 715.39 ; N ae ; B 64 -11 693 441 ; C 231 ; WX 459.89 ; N ccedilla ; B 73 -194 444 441 ; C 232 ; WX 459.89 ; N egrave ; B 86 -11 442 641 ; C 233 ; WX 459.89 ; N eacute ; B 86 -11 442 641 ; C 234 ; WX 459.89 ; N ecircumflex ; B 86 -11 456 639 ; C 235 ; WX 459.89 ; N edieresis ; B 86 -11 493 638 ; C 236 ; WX 306.61 ; N igrave ; B 55 -11 308 641 ; C 237 ; WX 306.61 ; N iacute ; B 55 -11 410 641 ; C 238 ; WX 306.61 ; N icircumflex ; B 55 -11 348 639 ; C 239 ; WX 306.61 ; N idieresis ; B 55 -11 416 638 ; C 240 ; WX 511 ; N eth ; B 71 -11 534 694 ; C 241 ; WX 562.11 ; N ntilde ; B 55 -11 572 669 ; C 242 ; WX 511 ; N ograve ; B 82 -11 485 641 ; C 243 ; WX 511 ; N oacute ; B 82 -11 512 641 ; C 244 ; WX 511 ; N ocircumflex ; B 82 -11 485 639 ; C 245 ; WX 511 ; N otilde ; B 82 -11 547 669 ; C 246 ; WX 511 ; N odieresis ; B 82 -11 518 638 ; C 247 ; WX 715.39 ; N oe ; B 80 -15 693 445 ; C 248 ; WX 511 ; N oslash ; B 40 -109 527 540 ; C 249 ; WX 536.56 ; N ugrave ; B 55 -11 538 641 ; C 250 ; WX 536.56 ; N uacute ; B 55 -11 538 641 ; C 251 ; WX 536.56 ; N ucircumflex ; B 55 -11 538 639 ; C 252 ; WX 536.56 ; N udieresis ; B 55 -11 538 638 ; C 253 ; WX 485.44 ; N yacute ; B 55 -205 499 641 ; C 254 ; WX 511 ; N thorn ; B -34 -194 491 694 ; C 255 ; WX 536.56 ; N germandbls ; B -46 -205 552 705 ; EndCharMetrics StartKernData StartKernPairs 2061 KPX A C -25.55 KPX A Cacute -25.55 KPX A Ccaron -25.55 KPX A G -25.55 KPX A Gbreve -25.55 KPX A O -25.55 KPX A Oacute -25.55 KPX A Ocircumflex -25.55 KPX A Odieresis -25.55 KPX A Ograve -25.55 KPX A Ohungarumlaut -25.55 KPX A Oslash -25.55 KPX A Otilde -25.55 KPX A Q -25.55 KPX A T -76.65 KPX A Tcaron -76.65 KPX A Tcedilla -76.65 KPX A U -25.55 KPX A Uacute -25.55 KPX A Ucircumflex -25.55 KPX A Udieresis -25.55 KPX A Ugrave -25.55 KPX A Uhungarumlaut -25.55 KPX A Uring -25.55 KPX A V -102.2 KPX A W -102.2 KPX A Y -76.65 KPX A Ydieresis -76.65 KPX A a -51.1 KPX A aacute -51.1 KPX A acircumflex -51.1 KPX A acircumflex -51.1 KPX A adieresis -51.1 KPX A ae -51.1 KPX A agrave -51.1 KPX A aogonek -51.1 KPX A aring -51.1 KPX A atilde -51.1 KPX A b -25.55 KPX A c -51.1 KPX A cacute -51.1 KPX A cacute -51.1 KPX A ccaron -51.1 KPX A ccedilla -51.1 KPX A d -51.1 KPX A dbar -51.1 KPX A e -51.1 KPX A eacute -51.1 KPX A ecaron -51.1 KPX A ecircumflex -51.1 KPX A edieresis -51.1 KPX A egrave -51.1 KPX A eogonek -51.1 KPX A g -51.1 KPX A gbreve -51.1 KPX A h -25.55 KPX A i -25.55 KPX A iacute -25.55 KPX A k -25.55 KPX A l -25.55 KPX A lacute -25.55 KPX A lquoteright -25.55 KPX A m -25.55 KPX A n -25.55 KPX A o -51.1 KPX A oacute -51.1 KPX A ocircumflex -51.1 KPX A odieresis -51.1 KPX A oe -51.1 KPX A ograve -51.1 KPX A ohungarumlaut -51.1 KPX A oslash -51.1 KPX A otilde -51.1 KPX A q -51.1 KPX A r -25.55 KPX A t -25.55 KPX A tcedilla -25.55 KPX A tquoteright -25.55 KPX A u -25.55 KPX A uacute -25.55 KPX A ucircumflex -25.55 KPX A udieresis -25.55 KPX A ugrave -25.55 KPX A uhungarumlaut -25.55 KPX A uring -25.55 KPX A v -25.55 KPX A w -25.55 KPX Aacute C -25.55 KPX Aacute Cacute -25.55 KPX Aacute Ccaron -25.55 KPX Aacute G -25.55 KPX Aacute Gbreve -25.55 KPX Aacute O -25.55 KPX Aacute Oacute -25.55 KPX Aacute Ocircumflex -25.55 KPX Aacute Odieresis -25.55 KPX Aacute Ograve -25.55 KPX Aacute Ohungarumlaut -25.55 KPX Aacute Oslash -25.55 KPX Aacute Otilde -25.55 KPX Aacute Q -25.55 KPX Aacute T -76.65 KPX Aacute Tcaron -76.65 KPX Aacute Tcedilla -76.65 KPX Aacute U -25.55 KPX Aacute Uacute -25.55 KPX Aacute Ucircumflex -25.55 KPX Aacute Udieresis -25.55 KPX Aacute Ugrave -25.55 KPX Aacute Uhungarumlaut -25.55 KPX Aacute Uring -25.55 KPX Aacute V -102.2 KPX Aacute W -102.2 KPX Aacute Y -76.65 KPX Aacute Ydieresis -76.65 KPX Aacute a -51.1 KPX Aacute aacute -51.1 KPX Aacute acircumflex -51.1 KPX Aacute acircumflex -51.1 KPX Aacute adieresis -51.1 KPX Aacute ae -51.1 KPX Aacute agrave -51.1 KPX Aacute aogonek -51.1 KPX Aacute aring -51.1 KPX Aacute atilde -51.1 KPX Aacute b -25.55 KPX Aacute c -51.1 KPX Aacute cacute -51.1 KPX Aacute cacute -51.1 KPX Aacute ccaron -51.1 KPX Aacute ccedilla -51.1 KPX Aacute d -51.1 KPX Aacute dbar -51.1 KPX Aacute e -51.1 KPX Aacute eacute -51.1 KPX Aacute ecaron -51.1 KPX Aacute ecircumflex -51.1 KPX Aacute edieresis -51.1 KPX Aacute egrave -51.1 KPX Aacute eogonek -51.1 KPX Aacute g -51.1 KPX Aacute gbreve -51.1 KPX Aacute h -25.55 KPX Aacute i -25.55 KPX Aacute iacute -25.55 KPX Aacute k -25.55 KPX Aacute l -25.55 KPX Aacute lacute -25.55 KPX Aacute lquoteright -25.55 KPX Aacute m -25.55 KPX Aacute n -25.55 KPX Aacute o -51.1 KPX Aacute oacute -51.1 KPX Aacute ocircumflex -51.1 KPX Aacute odieresis -51.1 KPX Aacute oe -51.1 KPX Aacute ograve -51.1 KPX Aacute ohungarumlaut -51.1 KPX Aacute oslash -51.1 KPX Aacute otilde -51.1 KPX Aacute q -51.1 KPX Aacute r -25.55 KPX Aacute t -25.55 KPX Aacute tcedilla -25.55 KPX Aacute tquoteright -25.55 KPX Aacute u -25.55 KPX Aacute uacute -25.55 KPX Aacute ucircumflex -25.55 KPX Aacute udieresis -25.55 KPX Aacute ugrave -25.55 KPX Aacute uhungarumlaut -25.55 KPX Aacute uring -25.55 KPX Aacute v -25.55 KPX Aacute w -25.55 KPX Abreve C -25.55 KPX Abreve Cacute -25.55 KPX Abreve Ccaron -25.55 KPX Abreve G -25.55 KPX Abreve Gbreve -25.55 KPX Abreve O -25.55 KPX Abreve Oacute -25.55 KPX Abreve Ocircumflex -25.55 KPX Abreve Odieresis -25.55 KPX Abreve Ograve -25.55 KPX Abreve Ohungarumlaut -25.55 KPX Abreve Oslash -25.55 KPX Abreve Otilde -25.55 KPX Abreve Q -25.55 KPX Abreve T -76.65 KPX Abreve Tcaron -76.65 KPX Abreve Tcedilla -76.65 KPX Abreve U -25.55 KPX Abreve Uacute -25.55 KPX Abreve Ucircumflex -25.55 KPX Abreve Udieresis -25.55 KPX Abreve Ugrave -25.55 KPX Abreve Uhungarumlaut -25.55 KPX Abreve Uring -25.55 KPX Abreve V -102.2 KPX Abreve W -102.2 KPX Abreve Y -76.65 KPX Abreve Ydieresis -76.65 KPX Abreve a -51.1 KPX Abreve aacute -51.1 KPX Abreve acircumflex -51.1 KPX Abreve acircumflex -51.1 KPX Abreve adieresis -51.1 KPX Abreve ae -51.1 KPX Abreve agrave -51.1 KPX Abreve aogonek -51.1 KPX Abreve aring -51.1 KPX Abreve atilde -51.1 KPX Abreve b -25.55 KPX Abreve c -51.1 KPX Abreve cacute -51.1 KPX Abreve cacute -51.1 KPX Abreve ccaron -51.1 KPX Abreve ccedilla -51.1 KPX Abreve d -51.1 KPX Abreve dbar -51.1 KPX Abreve e -51.1 KPX Abreve eacute -51.1 KPX Abreve ecaron -51.1 KPX Abreve ecircumflex -51.1 KPX Abreve edieresis -51.1 KPX Abreve egrave -51.1 KPX Abreve eogonek -51.1 KPX Abreve g -51.1 KPX Abreve gbreve -51.1 KPX Abreve h -25.55 KPX Abreve i -25.55 KPX Abreve iacute -25.55 KPX Abreve k -25.55 KPX Abreve l -25.55 KPX Abreve lacute -25.55 KPX Abreve lquoteright -25.55 KPX Abreve m -25.55 KPX Abreve n -25.55 KPX Abreve o -51.1 KPX Abreve oacute -51.1 KPX Abreve ocircumflex -51.1 KPX Abreve odieresis -51.1 KPX Abreve oe -51.1 KPX Abreve ograve -51.1 KPX Abreve ohungarumlaut -51.1 KPX Abreve oslash -51.1 KPX Abreve otilde -51.1 KPX Abreve q -51.1 KPX Abreve r -25.55 KPX Abreve t -25.55 KPX Abreve tcedilla -25.55 KPX Abreve tquoteright -25.55 KPX Abreve u -25.55 KPX Abreve uacute -25.55 KPX Abreve ucircumflex -25.55 KPX Abreve udieresis -25.55 KPX Abreve ugrave -25.55 KPX Abreve uhungarumlaut -25.55 KPX Abreve uring -25.55 KPX Abreve v -25.55 KPX Abreve w -25.55 KPX Acircumflex C -25.55 KPX Acircumflex Cacute -25.55 KPX Acircumflex Ccaron -25.55 KPX Acircumflex G -25.55 KPX Acircumflex Gbreve -25.55 KPX Acircumflex O -25.55 KPX Acircumflex Oacute -25.55 KPX Acircumflex Ocircumflex -25.55 KPX Acircumflex Odieresis -25.55 KPX Acircumflex Ograve -25.55 KPX Acircumflex Ohungarumlaut -25.55 KPX Acircumflex Oslash -25.55 KPX Acircumflex Otilde -25.55 KPX Acircumflex Q -25.55 KPX Acircumflex T -76.65 KPX Acircumflex Tcaron -76.65 KPX Acircumflex Tcedilla -76.65 KPX Acircumflex U -25.55 KPX Acircumflex Uacute -25.55 KPX Acircumflex Ucircumflex -25.55 KPX Acircumflex Udieresis -25.55 KPX Acircumflex Ugrave -25.55 KPX Acircumflex Uhungarumlaut -25.55 KPX Acircumflex Uring -25.55 KPX Acircumflex V -102.2 KPX Acircumflex W -102.2 KPX Acircumflex Y -76.65 KPX Acircumflex Ydieresis -76.65 KPX Acircumflex a -51.1 KPX Acircumflex aacute -51.1 KPX Acircumflex acircumflex -51.1 KPX Acircumflex acircumflex -51.1 KPX Acircumflex adieresis -51.1 KPX Acircumflex ae -51.1 KPX Acircumflex agrave -51.1 KPX Acircumflex aogonek -51.1 KPX Acircumflex aring -51.1 KPX Acircumflex atilde -51.1 KPX Acircumflex b -25.55 KPX Acircumflex c -51.1 KPX Acircumflex cacute -51.1 KPX Acircumflex cacute -51.1 KPX Acircumflex ccaron -51.1 KPX Acircumflex ccedilla -51.1 KPX Acircumflex d -51.1 KPX Acircumflex dbar -51.1 KPX Acircumflex e -51.1 KPX Acircumflex eacute -51.1 KPX Acircumflex ecaron -51.1 KPX Acircumflex ecircumflex -51.1 KPX Acircumflex edieresis -51.1 KPX Acircumflex egrave -51.1 KPX Acircumflex eogonek -51.1 KPX Acircumflex g -51.1 KPX Acircumflex gbreve -51.1 KPX Acircumflex h -25.55 KPX Acircumflex i -25.55 KPX Acircumflex iacute -25.55 KPX Acircumflex k -25.55 KPX Acircumflex l -25.55 KPX Acircumflex lacute -25.55 KPX Acircumflex lquoteright -25.55 KPX Acircumflex m -25.55 KPX Acircumflex n -25.55 KPX Acircumflex o -51.1 KPX Acircumflex oacute -51.1 KPX Acircumflex ocircumflex -51.1 KPX Acircumflex odieresis -51.1 KPX Acircumflex oe -51.1 KPX Acircumflex ograve -51.1 KPX Acircumflex ohungarumlaut -51.1 KPX Acircumflex oslash -51.1 KPX Acircumflex otilde -51.1 KPX Acircumflex q -51.1 KPX Acircumflex r -25.55 KPX Acircumflex t -25.55 KPX Acircumflex tcedilla -25.55 KPX Acircumflex tquoteright -25.55 KPX Acircumflex u -25.55 KPX Acircumflex uacute -25.55 KPX Acircumflex ucircumflex -25.55 KPX Acircumflex udieresis -25.55 KPX Acircumflex ugrave -25.55 KPX Acircumflex uhungarumlaut -25.55 KPX Acircumflex uring -25.55 KPX Acircumflex v -25.55 KPX Acircumflex w -25.55 KPX Adieresis C -25.55 KPX Adieresis Cacute -25.55 KPX Adieresis Ccaron -25.55 KPX Adieresis G -25.55 KPX Adieresis Gbreve -25.55 KPX Adieresis O -25.55 KPX Adieresis Oacute -25.55 KPX Adieresis Ocircumflex -25.55 KPX Adieresis Odieresis -25.55 KPX Adieresis Ograve -25.55 KPX Adieresis Ohungarumlaut -25.55 KPX Adieresis Oslash -25.55 KPX Adieresis Otilde -25.55 KPX Adieresis Q -25.55 KPX Adieresis T -76.65 KPX Adieresis Tcaron -76.65 KPX Adieresis Tcedilla -76.65 KPX Adieresis U -25.55 KPX Adieresis Uacute -25.55 KPX Adieresis Ucircumflex -25.55 KPX Adieresis Udieresis -25.55 KPX Adieresis Ugrave -25.55 KPX Adieresis Uhungarumlaut -25.55 KPX Adieresis Uring -25.55 KPX Adieresis V -102.2 KPX Adieresis W -102.2 KPX Adieresis Y -76.65 KPX Adieresis Ydieresis -76.65 KPX Adieresis a -51.1 KPX Adieresis aacute -51.1 KPX Adieresis acircumflex -51.1 KPX Adieresis acircumflex -51.1 KPX Adieresis adieresis -51.1 KPX Adieresis ae -51.1 KPX Adieresis agrave -51.1 KPX Adieresis aogonek -51.1 KPX Adieresis aring -51.1 KPX Adieresis atilde -51.1 KPX Adieresis b -25.55 KPX Adieresis c -51.1 KPX Adieresis cacute -51.1 KPX Adieresis cacute -51.1 KPX Adieresis ccaron -51.1 KPX Adieresis ccedilla -51.1 KPX Adieresis d -51.1 KPX Adieresis dbar -51.1 KPX Adieresis e -51.1 KPX Adieresis eacute -51.1 KPX Adieresis ecaron -51.1 KPX Adieresis ecircumflex -51.1 KPX Adieresis edieresis -51.1 KPX Adieresis egrave -51.1 KPX Adieresis eogonek -51.1 KPX Adieresis g -51.1 KPX Adieresis gbreve -51.1 KPX Adieresis h -25.55 KPX Adieresis i -25.55 KPX Adieresis iacute -25.55 KPX Adieresis k -25.55 KPX Adieresis l -25.55 KPX Adieresis lacute -25.55 KPX Adieresis lquoteright -25.55 KPX Adieresis m -25.55 KPX Adieresis n -25.55 KPX Adieresis o -51.1 KPX Adieresis oacute -51.1 KPX Adieresis ocircumflex -51.1 KPX Adieresis odieresis -51.1 KPX Adieresis oe -51.1 KPX Adieresis ograve -51.1 KPX Adieresis ohungarumlaut -51.1 KPX Adieresis oslash -51.1 KPX Adieresis otilde -51.1 KPX Adieresis q -51.1 KPX Adieresis r -25.55 KPX Adieresis t -25.55 KPX Adieresis tcedilla -25.55 KPX Adieresis tquoteright -25.55 KPX Adieresis u -25.55 KPX Adieresis uacute -25.55 KPX Adieresis ucircumflex -25.55 KPX Adieresis udieresis -25.55 KPX Adieresis ugrave -25.55 KPX Adieresis uhungarumlaut -25.55 KPX Adieresis uring -25.55 KPX Adieresis v -25.55 KPX Adieresis w -25.55 KPX Agrave C -25.55 KPX Agrave Cacute -25.55 KPX Agrave Ccaron -25.55 KPX Agrave G -25.55 KPX Agrave Gbreve -25.55 KPX Agrave O -25.55 KPX Agrave Oacute -25.55 KPX Agrave Ocircumflex -25.55 KPX Agrave Odieresis -25.55 KPX Agrave Ograve -25.55 KPX Agrave Ohungarumlaut -25.55 KPX Agrave Oslash -25.55 KPX Agrave Otilde -25.55 KPX Agrave Q -25.55 KPX Agrave T -76.65 KPX Agrave Tcaron -76.65 KPX Agrave Tcedilla -76.65 KPX Agrave U -25.55 KPX Agrave Uacute -25.55 KPX Agrave Ucircumflex -25.55 KPX Agrave Udieresis -25.55 KPX Agrave Ugrave -25.55 KPX Agrave Uhungarumlaut -25.55 KPX Agrave Uring -25.55 KPX Agrave V -102.2 KPX Agrave W -102.2 KPX Agrave Y -76.65 KPX Agrave Ydieresis -76.65 KPX Agrave a -51.1 KPX Agrave aacute -51.1 KPX Agrave acircumflex -51.1 KPX Agrave acircumflex -51.1 KPX Agrave adieresis -51.1 KPX Agrave ae -51.1 KPX Agrave agrave -51.1 KPX Agrave aogonek -51.1 KPX Agrave aring -51.1 KPX Agrave atilde -51.1 KPX Agrave b -25.55 KPX Agrave c -51.1 KPX Agrave cacute -51.1 KPX Agrave cacute -51.1 KPX Agrave ccaron -51.1 KPX Agrave ccedilla -51.1 KPX Agrave d -51.1 KPX Agrave dbar -51.1 KPX Agrave e -51.1 KPX Agrave eacute -51.1 KPX Agrave ecaron -51.1 KPX Agrave ecircumflex -51.1 KPX Agrave edieresis -51.1 KPX Agrave egrave -51.1 KPX Agrave eogonek -51.1 KPX Agrave g -51.1 KPX Agrave gbreve -51.1 KPX Agrave h -25.55 KPX Agrave i -25.55 KPX Agrave iacute -25.55 KPX Agrave k -25.55 KPX Agrave l -25.55 KPX Agrave lacute -25.55 KPX Agrave lquoteright -25.55 KPX Agrave m -25.55 KPX Agrave n -25.55 KPX Agrave o -51.1 KPX Agrave oacute -51.1 KPX Agrave ocircumflex -51.1 KPX Agrave odieresis -51.1 KPX Agrave oe -51.1 KPX Agrave ograve -51.1 KPX Agrave ohungarumlaut -51.1 KPX Agrave oslash -51.1 KPX Agrave otilde -51.1 KPX Agrave q -51.1 KPX Agrave r -25.55 KPX Agrave t -25.55 KPX Agrave tcedilla -25.55 KPX Agrave tquoteright -25.55 KPX Agrave u -25.55 KPX Agrave uacute -25.55 KPX Agrave ucircumflex -25.55 KPX Agrave udieresis -25.55 KPX Agrave ugrave -25.55 KPX Agrave uhungarumlaut -25.55 KPX Agrave uring -25.55 KPX Agrave v -25.55 KPX Agrave w -25.55 KPX Aogonek C -25.55 KPX Aogonek Cacute -25.55 KPX Aogonek Ccaron -25.55 KPX Aogonek G -25.55 KPX Aogonek Gbreve -25.55 KPX Aogonek O -25.55 KPX Aogonek Oacute -25.55 KPX Aogonek Ocircumflex -25.55 KPX Aogonek Odieresis -25.55 KPX Aogonek Ograve -25.55 KPX Aogonek Ohungarumlaut -25.55 KPX Aogonek Oslash -25.55 KPX Aogonek Otilde -25.55 KPX Aogonek Q -25.55 KPX Aogonek T -76.65 KPX Aogonek Tcaron -76.65 KPX Aogonek Tcedilla -76.65 KPX Aogonek U -25.55 KPX Aogonek Uacute -25.55 KPX Aogonek Ucircumflex -25.55 KPX Aogonek Udieresis -25.55 KPX Aogonek Ugrave -25.55 KPX Aogonek Uhungarumlaut -25.55 KPX Aogonek Uring -25.55 KPX Aogonek V -102.2 KPX Aogonek W -102.2 KPX Aogonek Y -76.65 KPX Aogonek Ydieresis -76.65 KPX Aogonek a -51.1 KPX Aogonek aacute -51.1 KPX Aogonek acircumflex -51.1 KPX Aogonek acircumflex -51.1 KPX Aogonek adieresis -51.1 KPX Aogonek ae -51.1 KPX Aogonek agrave -51.1 KPX Aogonek aogonek -51.1 KPX Aogonek aring -51.1 KPX Aogonek atilde -51.1 KPX Aogonek b -25.55 KPX Aogonek c -51.1 KPX Aogonek cacute -51.1 KPX Aogonek cacute -51.1 KPX Aogonek ccaron -51.1 KPX Aogonek ccedilla -51.1 KPX Aogonek d -51.1 KPX Aogonek dbar -51.1 KPX Aogonek e -51.1 KPX Aogonek eacute -51.1 KPX Aogonek ecaron -51.1 KPX Aogonek ecircumflex -51.1 KPX Aogonek edieresis -51.1 KPX Aogonek egrave -51.1 KPX Aogonek eogonek -51.1 KPX Aogonek g -51.1 KPX Aogonek gbreve -51.1 KPX Aogonek h -25.55 KPX Aogonek i -25.55 KPX Aogonek iacute -25.55 KPX Aogonek k -25.55 KPX Aogonek l -25.55 KPX Aogonek lacute -25.55 KPX Aogonek lquoteright -25.55 KPX Aogonek m -25.55 KPX Aogonek n -25.55 KPX Aogonek o -51.1 KPX Aogonek oacute -51.1 KPX Aogonek ocircumflex -51.1 KPX Aogonek odieresis -51.1 KPX Aogonek oe -51.1 KPX Aogonek ograve -51.1 KPX Aogonek ohungarumlaut -51.1 KPX Aogonek oslash -51.1 KPX Aogonek otilde -51.1 KPX Aogonek q -51.1 KPX Aogonek r -25.55 KPX Aogonek t -25.55 KPX Aogonek tcedilla -25.55 KPX Aogonek tquoteright -25.55 KPX Aogonek u -25.55 KPX Aogonek uacute -25.55 KPX Aogonek ucircumflex -25.55 KPX Aogonek udieresis -25.55 KPX Aogonek ugrave -25.55 KPX Aogonek uhungarumlaut -25.55 KPX Aogonek uring -25.55 KPX Aogonek v -25.55 KPX Aogonek w -25.55 KPX Aring C -25.55 KPX Aring Cacute -25.55 KPX Aring Ccaron -25.55 KPX Aring G -25.55 KPX Aring Gbreve -25.55 KPX Aring O -25.55 KPX Aring Oacute -25.55 KPX Aring Ocircumflex -25.55 KPX Aring Odieresis -25.55 KPX Aring Ograve -25.55 KPX Aring Ohungarumlaut -25.55 KPX Aring Oslash -25.55 KPX Aring Otilde -25.55 KPX Aring Q -25.55 KPX Aring T -76.65 KPX Aring Tcaron -76.65 KPX Aring Tcedilla -76.65 KPX Aring U -25.55 KPX Aring Uacute -25.55 KPX Aring Ucircumflex -25.55 KPX Aring Udieresis -25.55 KPX Aring Ugrave -25.55 KPX Aring Uhungarumlaut -25.55 KPX Aring Uring -25.55 KPX Aring V -102.2 KPX Aring W -102.2 KPX Aring Y -76.65 KPX Aring Ydieresis -76.65 KPX Aring a -51.1 KPX Aring aacute -51.1 KPX Aring acircumflex -51.1 KPX Aring acircumflex -51.1 KPX Aring adieresis -51.1 KPX Aring ae -51.1 KPX Aring agrave -51.1 KPX Aring aogonek -51.1 KPX Aring aring -51.1 KPX Aring atilde -51.1 KPX Aring b -25.55 KPX Aring c -51.1 KPX Aring cacute -51.1 KPX Aring cacute -51.1 KPX Aring ccaron -51.1 KPX Aring ccedilla -51.1 KPX Aring d -51.1 KPX Aring dbar -51.1 KPX Aring e -51.1 KPX Aring eacute -51.1 KPX Aring ecaron -51.1 KPX Aring ecircumflex -51.1 KPX Aring edieresis -51.1 KPX Aring egrave -51.1 KPX Aring eogonek -51.1 KPX Aring g -51.1 KPX Aring gbreve -51.1 KPX Aring h -25.55 KPX Aring i -25.55 KPX Aring iacute -25.55 KPX Aring k -25.55 KPX Aring l -25.55 KPX Aring lacute -25.55 KPX Aring lquoteright -25.55 KPX Aring m -25.55 KPX Aring n -25.55 KPX Aring o -51.1 KPX Aring oacute -51.1 KPX Aring ocircumflex -51.1 KPX Aring odieresis -51.1 KPX Aring oe -51.1 KPX Aring ograve -51.1 KPX Aring ohungarumlaut -51.1 KPX Aring oslash -51.1 KPX Aring otilde -51.1 KPX Aring q -51.1 KPX Aring r -25.55 KPX Aring t -25.55 KPX Aring tcedilla -25.55 KPX Aring tquoteright -25.55 KPX Aring u -25.55 KPX Aring uacute -25.55 KPX Aring ucircumflex -25.55 KPX Aring udieresis -25.55 KPX Aring ugrave -25.55 KPX Aring uhungarumlaut -25.55 KPX Aring uring -25.55 KPX Aring v -25.55 KPX Aring w -25.55 KPX Atilde C -25.55 KPX Atilde Cacute -25.55 KPX Atilde Ccaron -25.55 KPX Atilde G -25.55 KPX Atilde Gbreve -25.55 KPX Atilde O -25.55 KPX Atilde Oacute -25.55 KPX Atilde Ocircumflex -25.55 KPX Atilde Odieresis -25.55 KPX Atilde Ograve -25.55 KPX Atilde Ohungarumlaut -25.55 KPX Atilde Oslash -25.55 KPX Atilde Otilde -25.55 KPX Atilde Q -25.55 KPX Atilde T -76.65 KPX Atilde Tcaron -76.65 KPX Atilde Tcedilla -76.65 KPX Atilde U -25.55 KPX Atilde Uacute -25.55 KPX Atilde Ucircumflex -25.55 KPX Atilde Udieresis -25.55 KPX Atilde Ugrave -25.55 KPX Atilde Uhungarumlaut -25.55 KPX Atilde Uring -25.55 KPX Atilde V -102.2 KPX Atilde W -102.2 KPX Atilde Y -76.65 KPX Atilde Ydieresis -76.65 KPX Atilde a -51.1 KPX Atilde aacute -51.1 KPX Atilde acircumflex -51.1 KPX Atilde acircumflex -51.1 KPX Atilde adieresis -51.1 KPX Atilde ae -51.1 KPX Atilde agrave -51.1 KPX Atilde aogonek -51.1 KPX Atilde aring -51.1 KPX Atilde atilde -51.1 KPX Atilde b -25.55 KPX Atilde c -51.1 KPX Atilde cacute -51.1 KPX Atilde cacute -51.1 KPX Atilde ccaron -51.1 KPX Atilde ccedilla -51.1 KPX Atilde d -51.1 KPX Atilde dbar -51.1 KPX Atilde e -51.1 KPX Atilde eacute -51.1 KPX Atilde ecaron -51.1 KPX Atilde ecircumflex -51.1 KPX Atilde edieresis -51.1 KPX Atilde egrave -51.1 KPX Atilde eogonek -51.1 KPX Atilde g -51.1 KPX Atilde gbreve -51.1 KPX Atilde h -25.55 KPX Atilde i -25.55 KPX Atilde iacute -25.55 KPX Atilde k -25.55 KPX Atilde l -25.55 KPX Atilde lacute -25.55 KPX Atilde lquoteright -25.55 KPX Atilde m -25.55 KPX Atilde n -25.55 KPX Atilde o -51.1 KPX Atilde oacute -51.1 KPX Atilde ocircumflex -51.1 KPX Atilde odieresis -51.1 KPX Atilde oe -51.1 KPX Atilde ograve -51.1 KPX Atilde ohungarumlaut -51.1 KPX Atilde oslash -51.1 KPX Atilde otilde -51.1 KPX Atilde q -51.1 KPX Atilde r -25.55 KPX Atilde t -25.55 KPX Atilde tcedilla -25.55 KPX Atilde tquoteright -25.55 KPX Atilde u -25.55 KPX Atilde uacute -25.55 KPX Atilde ucircumflex -25.55 KPX Atilde udieresis -25.55 KPX Atilde ugrave -25.55 KPX Atilde uhungarumlaut -25.55 KPX Atilde uring -25.55 KPX Atilde v -25.55 KPX Atilde w -25.55 KPX D A -25.55 KPX D Aacute -25.55 KPX D Abreve -25.55 KPX D Acircumflex -25.55 KPX D Adieresis -25.55 KPX D Agrave -25.55 KPX D Aogonek -25.55 KPX D Aring -25.55 KPX D Atilde -25.55 KPX D V -25.55 KPX D W -25.55 KPX D X -25.55 KPX D Y -25.55 KPX D Yacute -25.55 KPX Dcaron A -25.55 KPX Dcaron Aacute -25.55 KPX Dcaron Abreve -25.55 KPX Dcaron Acircumflex -25.55 KPX Dcaron Adieresis -25.55 KPX Dcaron Agrave -25.55 KPX Dcaron Aogonek -25.55 KPX Dcaron Aring -25.55 KPX Dcaron Atilde -25.55 KPX Dcaron V -25.55 KPX Dcaron W -25.55 KPX Dcaron X -25.55 KPX Dcaron Y -25.55 KPX Dcaron Yacute -25.55 KPX F A -102.2 KPX F Aacute -102.2 KPX F Abreve -102.2 KPX F Acircumflex -102.2 KPX F Adieresis -102.2 KPX F Agrave -102.2 KPX F Aogonek -102.2 KPX F Aring -102.2 KPX F Atilde -102.2 KPX F C -25.55 KPX F Cacute -25.55 KPX F Ccaron -25.55 KPX F G -25.55 KPX F Gbreve -25.55 KPX F O -25.55 KPX F Oacute -25.55 KPX F Ocircumflex -25.55 KPX F Odieresis -25.55 KPX F Ograve -25.55 KPX F Ohungarumlaut -25.55 KPX F Oslash -25.55 KPX F Otilde -25.55 KPX F Q -25.55 KPX F a -76.65 KPX F aogonek -76.65 KPX F e -76.65 KPX F eogonek -76.65 KPX F o -76.65 KPX F r -76.65 KPX F u -76.65 KPX K C -25.55 KPX K Cacute -25.55 KPX K Ccaron -25.55 KPX K G -25.55 KPX K Gbreve -25.55 KPX K O -25.55 KPX K Oacute -25.55 KPX K Ocircumflex -25.55 KPX K Odieresis -25.55 KPX K Ograve -25.55 KPX K Ohungarumlaut -25.55 KPX K Oslash -25.55 KPX K Otilde -25.55 KPX K Q -25.55 KPX L T -76.65 KPX L Tcaron -76.65 KPX L Tcedilla -76.65 KPX L V -102.2 KPX L W -102.2 KPX L Y -76.65 KPX L Ydieresis -76.65 KPX L a -51.1 KPX L aacute -51.1 KPX L acircumflex -51.1 KPX L acircumflex -51.1 KPX L adieresis -51.1 KPX L ae -51.1 KPX L agrave -51.1 KPX L aogonek -51.1 KPX L aring -51.1 KPX L atilde -51.1 KPX L c -51.1 KPX L cacute -51.1 KPX L cacute -51.1 KPX L ccaron -51.1 KPX L ccedilla -51.1 KPX L d -51.1 KPX L dbar -51.1 KPX L e -51.1 KPX L eacute -51.1 KPX L ecaron -51.1 KPX L ecircumflex -51.1 KPX L edieresis -51.1 KPX L egrave -51.1 KPX L eogonek -51.1 KPX L g -51.1 KPX L gbreve -51.1 KPX L o -51.1 KPX L oacute -51.1 KPX L ocircumflex -51.1 KPX L odieresis -51.1 KPX L oe -51.1 KPX L ograve -51.1 KPX L ohungarumlaut -51.1 KPX L oslash -51.1 KPX L otilde -51.1 KPX L q -51.1 KPX O A -25.55 KPX O Aacute -25.55 KPX O Abreve -25.55 KPX O Acircumflex -25.55 KPX O Adieresis -25.55 KPX O Agrave -25.55 KPX O Aogonek -25.55 KPX O Aring -25.55 KPX O Atilde -25.55 KPX O V -25.55 KPX O W -25.55 KPX O X -25.55 KPX O Y -25.55 KPX O Yacute -25.55 KPX Oacute A -25.55 KPX Oacute Aacute -25.55 KPX Oacute Abreve -25.55 KPX Oacute Acircumflex -25.55 KPX Oacute Adieresis -25.55 KPX Oacute Agrave -25.55 KPX Oacute Aogonek -25.55 KPX Oacute Aring -25.55 KPX Oacute Atilde -25.55 KPX Oacute V -25.55 KPX Oacute W -25.55 KPX Oacute X -25.55 KPX Oacute Y -25.55 KPX Oacute Yacute -25.55 KPX Ocircumflex A -25.55 KPX Ocircumflex Aacute -25.55 KPX Ocircumflex Abreve -25.55 KPX Ocircumflex Acircumflex -25.55 KPX Ocircumflex Adieresis -25.55 KPX Ocircumflex Agrave -25.55 KPX Ocircumflex Aogonek -25.55 KPX Ocircumflex Aring -25.55 KPX Ocircumflex Atilde -25.55 KPX Ocircumflex V -25.55 KPX Ocircumflex W -25.55 KPX Ocircumflex X -25.55 KPX Ocircumflex Y -25.55 KPX Ocircumflex Yacute -25.55 KPX Odieresis A -25.55 KPX Odieresis Aacute -25.55 KPX Odieresis Abreve -25.55 KPX Odieresis Acircumflex -25.55 KPX Odieresis Adieresis -25.55 KPX Odieresis Agrave -25.55 KPX Odieresis Aogonek -25.55 KPX Odieresis Aring -25.55 KPX Odieresis Atilde -25.55 KPX Odieresis V -25.55 KPX Odieresis W -25.55 KPX Odieresis X -25.55 KPX Odieresis Y -25.55 KPX Odieresis Yacute -25.55 KPX Ograve A -25.55 KPX Ograve Aacute -25.55 KPX Ograve Abreve -25.55 KPX Ograve Acircumflex -25.55 KPX Ograve Adieresis -25.55 KPX Ograve Agrave -25.55 KPX Ograve Aogonek -25.55 KPX Ograve Aring -25.55 KPX Ograve Atilde -25.55 KPX Ograve V -25.55 KPX Ograve W -25.55 KPX Ograve X -25.55 KPX Ograve Y -25.55 KPX Ograve Yacute -25.55 KPX Ohungarumlaut A -25.55 KPX Ohungarumlaut Aacute -25.55 KPX Ohungarumlaut Abreve -25.55 KPX Ohungarumlaut Acircumflex -25.55 KPX Ohungarumlaut Adieresis -25.55 KPX Ohungarumlaut Agrave -25.55 KPX Ohungarumlaut Aogonek -25.55 KPX Ohungarumlaut Aring -25.55 KPX Ohungarumlaut Atilde -25.55 KPX Ohungarumlaut V -25.55 KPX Ohungarumlaut W -25.55 KPX Ohungarumlaut X -25.55 KPX Ohungarumlaut Y -25.55 KPX Ohungarumlaut Yacute -25.55 KPX Oslash A -25.55 KPX Oslash Aacute -25.55 KPX Oslash Abreve -25.55 KPX Oslash Acircumflex -25.55 KPX Oslash Adieresis -25.55 KPX Oslash Agrave -25.55 KPX Oslash Aogonek -25.55 KPX Oslash Aring -25.55 KPX Oslash Atilde -25.55 KPX Oslash V -25.55 KPX Oslash W -25.55 KPX Oslash X -25.55 KPX Oslash Y -25.55 KPX Oslash Yacute -25.55 KPX Otilde A -25.55 KPX Otilde Aacute -25.55 KPX Otilde Abreve -25.55 KPX Otilde Acircumflex -25.55 KPX Otilde Adieresis -25.55 KPX Otilde Agrave -25.55 KPX Otilde Aogonek -25.55 KPX Otilde Aring -25.55 KPX Otilde Atilde -25.55 KPX Otilde V -25.55 KPX Otilde W -25.55 KPX Otilde X -25.55 KPX Otilde Y -25.55 KPX Otilde Yacute -25.55 KPX P A -76.65 KPX P Aacute -76.65 KPX P Abreve -76.65 KPX P Acircumflex -76.65 KPX P Adieresis -76.65 KPX P Agrave -76.65 KPX P Aogonek -76.65 KPX P Aring -76.65 KPX P Atilde -76.65 KPX R C -25.55 KPX R Cacute -25.55 KPX R Ccaron -25.55 KPX R G -25.55 KPX R Gbreve -25.55 KPX R O -25.55 KPX R Oacute -25.55 KPX R Ocircumflex -25.55 KPX R Odieresis -25.55 KPX R Ograve -25.55 KPX R Ohungarumlaut -25.55 KPX R Oslash -25.55 KPX R Otilde -25.55 KPX R Q -25.55 KPX R T -76.65 KPX R Tcaron -76.65 KPX R Tcedilla -76.65 KPX R U -25.55 KPX R Uacute -25.55 KPX R Ucircumflex -25.55 KPX R Udieresis -25.55 KPX R Ugrave -25.55 KPX R Uhungarumlaut -25.55 KPX R Uring -25.55 KPX R V -102.2 KPX R W -102.2 KPX R Y -76.65 KPX R Ydieresis -76.65 KPX R a -51.1 KPX R aacute -51.1 KPX R acircumflex -51.1 KPX R acircumflex -51.1 KPX R adieresis -51.1 KPX R ae -51.1 KPX R agrave -51.1 KPX R aogonek -51.1 KPX R aring -51.1 KPX R atilde -51.1 KPX R b -25.55 KPX R c -51.1 KPX R cacute -51.1 KPX R cacute -51.1 KPX R ccaron -51.1 KPX R ccedilla -51.1 KPX R d -51.1 KPX R dbar -51.1 KPX R e -51.1 KPX R eacute -51.1 KPX R ecaron -51.1 KPX R ecircumflex -51.1 KPX R edieresis -51.1 KPX R egrave -51.1 KPX R eogonek -51.1 KPX R g -51.1 KPX R gbreve -51.1 KPX R h -25.55 KPX R i -25.55 KPX R iacute -25.55 KPX R k -25.55 KPX R l -25.55 KPX R lacute -25.55 KPX R lquoteright -25.55 KPX R m -25.55 KPX R n -25.55 KPX R o -51.1 KPX R oacute -51.1 KPX R ocircumflex -51.1 KPX R odieresis -51.1 KPX R oe -51.1 KPX R ograve -51.1 KPX R ohungarumlaut -51.1 KPX R oslash -51.1 KPX R otilde -51.1 KPX R q -51.1 KPX R r -25.55 KPX R t -25.55 KPX R tcedilla -25.55 KPX R tquoteright -25.55 KPX R u -25.55 KPX R uacute -25.55 KPX R ucircumflex -25.55 KPX R udieresis -25.55 KPX R ugrave -25.55 KPX R uhungarumlaut -25.55 KPX R uring -25.55 KPX R v -25.55 KPX R w -25.55 KPX Racute C -25.55 KPX Racute Cacute -25.55 KPX Racute Ccaron -25.55 KPX Racute G -25.55 KPX Racute Gbreve -25.55 KPX Racute O -25.55 KPX Racute Oacute -25.55 KPX Racute Ocircumflex -25.55 KPX Racute Odieresis -25.55 KPX Racute Ograve -25.55 KPX Racute Ohungarumlaut -25.55 KPX Racute Oslash -25.55 KPX Racute Otilde -25.55 KPX Racute Q -25.55 KPX Racute T -76.65 KPX Racute Tcaron -76.65 KPX Racute Tcedilla -76.65 KPX Racute U -25.55 KPX Racute Uacute -25.55 KPX Racute Ucircumflex -25.55 KPX Racute Udieresis -25.55 KPX Racute Ugrave -25.55 KPX Racute Uhungarumlaut -25.55 KPX Racute Uring -25.55 KPX Racute V -102.2 KPX Racute W -102.2 KPX Racute Y -76.65 KPX Racute Ydieresis -76.65 KPX Racute a -51.1 KPX Racute aacute -51.1 KPX Racute acircumflex -51.1 KPX Racute acircumflex -51.1 KPX Racute adieresis -51.1 KPX Racute ae -51.1 KPX Racute agrave -51.1 KPX Racute aogonek -51.1 KPX Racute aring -51.1 KPX Racute atilde -51.1 KPX Racute b -25.55 KPX Racute c -51.1 KPX Racute cacute -51.1 KPX Racute cacute -51.1 KPX Racute ccaron -51.1 KPX Racute ccedilla -51.1 KPX Racute d -51.1 KPX Racute dbar -51.1 KPX Racute e -51.1 KPX Racute eacute -51.1 KPX Racute ecaron -51.1 KPX Racute ecircumflex -51.1 KPX Racute edieresis -51.1 KPX Racute egrave -51.1 KPX Racute eogonek -51.1 KPX Racute g -51.1 KPX Racute gbreve -51.1 KPX Racute h -25.55 KPX Racute i -25.55 KPX Racute iacute -25.55 KPX Racute k -25.55 KPX Racute l -25.55 KPX Racute lacute -25.55 KPX Racute lquoteright -25.55 KPX Racute m -25.55 KPX Racute n -25.55 KPX Racute o -51.1 KPX Racute oacute -51.1 KPX Racute ocircumflex -51.1 KPX Racute odieresis -51.1 KPX Racute oe -51.1 KPX Racute ograve -51.1 KPX Racute ohungarumlaut -51.1 KPX Racute oslash -51.1 KPX Racute otilde -51.1 KPX Racute q -51.1 KPX Racute r -25.55 KPX Racute t -25.55 KPX Racute tcedilla -25.55 KPX Racute tquoteright -25.55 KPX Racute u -25.55 KPX Racute uacute -25.55 KPX Racute ucircumflex -25.55 KPX Racute udieresis -25.55 KPX Racute ugrave -25.55 KPX Racute uhungarumlaut -25.55 KPX Racute uring -25.55 KPX Racute v -25.55 KPX Racute w -25.55 KPX T A -76.65 KPX T Aacute -76.65 KPX T Abreve -76.65 KPX T Acircumflex -76.65 KPX T Adieresis -76.65 KPX T Agrave -76.65 KPX T Aogonek -76.65 KPX T Aring -76.65 KPX T Atilde -76.65 KPX T a -76.65 KPX T e -76.65 KPX T o -76.65 KPX T r -76.65 KPX T u -76.65 KPX T y -76.65 KPX Tcaron A -76.65 KPX Tcaron Aacute -76.65 KPX Tcaron Abreve -76.65 KPX Tcaron Acircumflex -76.65 KPX Tcaron Adieresis -76.65 KPX Tcaron Agrave -76.65 KPX Tcaron Aogonek -76.65 KPX Tcaron Aring -76.65 KPX Tcaron Atilde -76.65 KPX Tcaron a -76.65 KPX Tcaron e -76.65 KPX Tcaron o -76.65 KPX Tcaron r -76.65 KPX Tcaron u -76.65 KPX Tcaron y -76.65 KPX Tcedilla A -76.65 KPX Tcedilla Aacute -76.65 KPX Tcedilla Abreve -76.65 KPX Tcedilla Acircumflex -76.65 KPX Tcedilla Adieresis -76.65 KPX Tcedilla Agrave -76.65 KPX Tcedilla Aogonek -76.65 KPX Tcedilla Aring -76.65 KPX Tcedilla Atilde -76.65 KPX Tcedilla a -76.65 KPX Tcedilla e -76.65 KPX Tcedilla o -76.65 KPX Tcedilla r -76.65 KPX Tcedilla u -76.65 KPX Tcedilla y -76.65 KPX V A -102.2 KPX V Aacute -102.2 KPX V Abreve -102.2 KPX V Acircumflex -102.2 KPX V Adieresis -102.2 KPX V Agrave -102.2 KPX V Aogonek -102.2 KPX V Aring -102.2 KPX V Atilde -102.2 KPX V C -25.55 KPX V Cacute -25.55 KPX V Ccaron -25.55 KPX V G -25.55 KPX V Gbreve -25.55 KPX V O -25.55 KPX V Oacute -25.55 KPX V Ocircumflex -25.55 KPX V Odieresis -25.55 KPX V Ograve -25.55 KPX V Ohungarumlaut -25.55 KPX V Oslash -25.55 KPX V Otilde -25.55 KPX V Q -25.55 KPX V a -76.65 KPX V aogonek -76.65 KPX V e -76.65 KPX V eogonek -76.65 KPX V o -76.65 KPX V r -76.65 KPX V u -76.65 KPX W A -76.65 KPX W Aacute -76.65 KPX W Abreve -76.65 KPX W Acircumflex -76.65 KPX W Adieresis -76.65 KPX W Agrave -76.65 KPX W Aogonek -76.65 KPX W Aring -76.65 KPX W Atilde -76.65 KPX X C -25.55 KPX X Cacute -25.55 KPX X Ccaron -25.55 KPX X G -25.55 KPX X Gbreve -25.55 KPX X O -25.55 KPX X Oacute -25.55 KPX X Ocircumflex -25.55 KPX X Odieresis -25.55 KPX X Ograve -25.55 KPX X Ohungarumlaut -25.55 KPX X Oslash -25.55 KPX X Otilde -25.55 KPX X Q -25.55 KPX Y A -76.65 KPX Y Aacute -76.65 KPX Y Abreve -76.65 KPX Y Acircumflex -76.65 KPX Y Adieresis -76.65 KPX Y Agrave -76.65 KPX Y Aogonek -76.65 KPX Y Aring -76.65 KPX Y Atilde -76.65 KPX Y a -76.65 KPX Y e -76.65 KPX Y o -76.65 KPX Y r -76.65 KPX Y u -76.65 KPX Yacute A -76.65 KPX Yacute Aacute -76.65 KPX Yacute Abreve -76.65 KPX Yacute Acircumflex -76.65 KPX Yacute Adieresis -76.65 KPX Yacute Agrave -76.65 KPX Yacute Aogonek -76.65 KPX Yacute Aring -76.65 KPX Yacute Atilde -76.65 KPX Yacute a -76.65 KPX Yacute e -76.65 KPX Yacute o -76.65 KPX Yacute r -76.65 KPX Yacute u -76.65 KPX b a -51.1 KPX b aacute -51.1 KPX b acircumflex -51.1 KPX b acircumflex -51.1 KPX b adieresis -51.1 KPX b ae -51.1 KPX b agrave -51.1 KPX b aogonek -51.1 KPX b aring -51.1 KPX b atilde -51.1 KPX b c -51.1 KPX b cacute -51.1 KPX b cacute -51.1 KPX b ccaron -51.1 KPX b ccedilla -51.1 KPX b d -51.1 KPX b dbar -51.1 KPX b e -51.1 KPX b eacute -51.1 KPX b ecaron -51.1 KPX b ecircumflex -51.1 KPX b edieresis -51.1 KPX b egrave -51.1 KPX b eogonek -51.1 KPX b g -51.1 KPX b gbreve -51.1 KPX b o -51.1 KPX b oacute -51.1 KPX b ocircumflex -51.1 KPX b odieresis -51.1 KPX b oe -51.1 KPX b ograve -51.1 KPX b ohungarumlaut -51.1 KPX b oslash -51.1 KPX b otilde -51.1 KPX b q -51.1 KPX c a -51.1 KPX c aacute -51.1 KPX c acircumflex -51.1 KPX c acircumflex -51.1 KPX c adieresis -51.1 KPX c ae -51.1 KPX c agrave -51.1 KPX c aogonek -51.1 KPX c aring -51.1 KPX c atilde -51.1 KPX c c -51.1 KPX c cacute -51.1 KPX c cacute -51.1 KPX c ccaron -51.1 KPX c ccedilla -51.1 KPX c d -51.1 KPX c dbar -51.1 KPX c e -51.1 KPX c eacute -51.1 KPX c ecaron -51.1 KPX c ecircumflex -51.1 KPX c edieresis -51.1 KPX c egrave -51.1 KPX c eogonek -51.1 KPX c g -51.1 KPX c gbreve -51.1 KPX c o -51.1 KPX c oacute -51.1 KPX c ocircumflex -51.1 KPX c odieresis -51.1 KPX c oe -51.1 KPX c ograve -51.1 KPX c ohungarumlaut -51.1 KPX c oslash -51.1 KPX c otilde -51.1 KPX c q -51.1 KPX cacute a -51.1 KPX cacute aacute -51.1 KPX cacute acircumflex -51.1 KPX cacute acircumflex -51.1 KPX cacute adieresis -51.1 KPX cacute ae -51.1 KPX cacute agrave -51.1 KPX cacute aogonek -51.1 KPX cacute aring -51.1 KPX cacute atilde -51.1 KPX cacute c -51.1 KPX cacute cacute -51.1 KPX cacute cacute -51.1 KPX cacute ccaron -51.1 KPX cacute ccedilla -51.1 KPX cacute d -51.1 KPX cacute dbar -51.1 KPX cacute e -51.1 KPX cacute eacute -51.1 KPX cacute ecaron -51.1 KPX cacute ecircumflex -51.1 KPX cacute edieresis -51.1 KPX cacute egrave -51.1 KPX cacute eogonek -51.1 KPX cacute g -51.1 KPX cacute gbreve -51.1 KPX cacute o -51.1 KPX cacute oacute -51.1 KPX cacute ocircumflex -51.1 KPX cacute odieresis -51.1 KPX cacute oe -51.1 KPX cacute ograve -51.1 KPX cacute ohungarumlaut -51.1 KPX cacute oslash -51.1 KPX cacute otilde -51.1 KPX cacute q -51.1 KPX ccaron a -51.1 KPX ccaron aacute -51.1 KPX ccaron acircumflex -51.1 KPX ccaron acircumflex -51.1 KPX ccaron adieresis -51.1 KPX ccaron ae -51.1 KPX ccaron agrave -51.1 KPX ccaron aogonek -51.1 KPX ccaron aring -51.1 KPX ccaron atilde -51.1 KPX ccaron c -51.1 KPX ccaron cacute -51.1 KPX ccaron cacute -51.1 KPX ccaron ccaron -51.1 KPX ccaron ccedilla -51.1 KPX ccaron d -51.1 KPX ccaron dbar -51.1 KPX ccaron e -51.1 KPX ccaron eacute -51.1 KPX ccaron ecaron -51.1 KPX ccaron ecircumflex -51.1 KPX ccaron edieresis -51.1 KPX ccaron egrave -51.1 KPX ccaron eogonek -51.1 KPX ccaron g -51.1 KPX ccaron gbreve -51.1 KPX ccaron o -51.1 KPX ccaron oacute -51.1 KPX ccaron ocircumflex -51.1 KPX ccaron odieresis -51.1 KPX ccaron oe -51.1 KPX ccaron ograve -51.1 KPX ccaron ohungarumlaut -51.1 KPX ccaron oslash -51.1 KPX ccaron otilde -51.1 KPX ccaron q -51.1 KPX d l 51.1 KPX d lacute 51.1 KPX d lquoteright 51.1 KPX e a -51.1 KPX e aacute -51.1 KPX e acircumflex -51.1 KPX e acircumflex -51.1 KPX e adieresis -51.1 KPX e ae -51.1 KPX e agrave -51.1 KPX e aogonek -51.1 KPX e aring -51.1 KPX e atilde -51.1 KPX e c -51.1 KPX e cacute -51.1 KPX e cacute -51.1 KPX e ccaron -51.1 KPX e ccedilla -51.1 KPX e d -51.1 KPX e dbar -51.1 KPX e e -51.1 KPX e eacute -51.1 KPX e ecaron -51.1 KPX e ecircumflex -51.1 KPX e edieresis -51.1 KPX e egrave -51.1 KPX e eogonek -51.1 KPX e g -51.1 KPX e gbreve -51.1 KPX e o -51.1 KPX e oacute -51.1 KPX e ocircumflex -51.1 KPX e odieresis -51.1 KPX e oe -51.1 KPX e ograve -51.1 KPX e ohungarumlaut -51.1 KPX e oslash -51.1 KPX e otilde -51.1 KPX e q -51.1 KPX eacute a -51.1 KPX eacute aacute -51.1 KPX eacute acircumflex -51.1 KPX eacute acircumflex -51.1 KPX eacute adieresis -51.1 KPX eacute ae -51.1 KPX eacute agrave -51.1 KPX eacute aogonek -51.1 KPX eacute aring -51.1 KPX eacute atilde -51.1 KPX eacute c -51.1 KPX eacute cacute -51.1 KPX eacute cacute -51.1 KPX eacute ccaron -51.1 KPX eacute ccedilla -51.1 KPX eacute d -51.1 KPX eacute dbar -51.1 KPX eacute e -51.1 KPX eacute eacute -51.1 KPX eacute ecaron -51.1 KPX eacute ecircumflex -51.1 KPX eacute edieresis -51.1 KPX eacute egrave -51.1 KPX eacute eogonek -51.1 KPX eacute g -51.1 KPX eacute gbreve -51.1 KPX eacute o -51.1 KPX eacute oacute -51.1 KPX eacute ocircumflex -51.1 KPX eacute odieresis -51.1 KPX eacute oe -51.1 KPX eacute ograve -51.1 KPX eacute ohungarumlaut -51.1 KPX eacute oslash -51.1 KPX eacute otilde -51.1 KPX eacute q -51.1 KPX ecaron a -51.1 KPX ecaron aacute -51.1 KPX ecaron acircumflex -51.1 KPX ecaron acircumflex -51.1 KPX ecaron adieresis -51.1 KPX ecaron ae -51.1 KPX ecaron agrave -51.1 KPX ecaron aogonek -51.1 KPX ecaron aring -51.1 KPX ecaron atilde -51.1 KPX ecaron c -51.1 KPX ecaron cacute -51.1 KPX ecaron cacute -51.1 KPX ecaron ccaron -51.1 KPX ecaron ccedilla -51.1 KPX ecaron d -51.1 KPX ecaron dbar -51.1 KPX ecaron e -51.1 KPX ecaron eacute -51.1 KPX ecaron ecaron -51.1 KPX ecaron ecircumflex -51.1 KPX ecaron edieresis -51.1 KPX ecaron egrave -51.1 KPX ecaron eogonek -51.1 KPX ecaron g -51.1 KPX ecaron gbreve -51.1 KPX ecaron o -51.1 KPX ecaron oacute -51.1 KPX ecaron ocircumflex -51.1 KPX ecaron odieresis -51.1 KPX ecaron oe -51.1 KPX ecaron ograve -51.1 KPX ecaron ohungarumlaut -51.1 KPX ecaron oslash -51.1 KPX ecaron otilde -51.1 KPX ecaron q -51.1 KPX ecircumflex a -51.1 KPX ecircumflex aacute -51.1 KPX ecircumflex acircumflex -51.1 KPX ecircumflex acircumflex -51.1 KPX ecircumflex adieresis -51.1 KPX ecircumflex ae -51.1 KPX ecircumflex agrave -51.1 KPX ecircumflex aogonek -51.1 KPX ecircumflex aring -51.1 KPX ecircumflex atilde -51.1 KPX ecircumflex c -51.1 KPX ecircumflex cacute -51.1 KPX ecircumflex cacute -51.1 KPX ecircumflex ccaron -51.1 KPX ecircumflex ccedilla -51.1 KPX ecircumflex d -51.1 KPX ecircumflex dbar -51.1 KPX ecircumflex e -51.1 KPX ecircumflex eacute -51.1 KPX ecircumflex ecaron -51.1 KPX ecircumflex ecircumflex -51.1 KPX ecircumflex edieresis -51.1 KPX ecircumflex egrave -51.1 KPX ecircumflex eogonek -51.1 KPX ecircumflex g -51.1 KPX ecircumflex gbreve -51.1 KPX ecircumflex o -51.1 KPX ecircumflex oacute -51.1 KPX ecircumflex ocircumflex -51.1 KPX ecircumflex odieresis -51.1 KPX ecircumflex oe -51.1 KPX ecircumflex ograve -51.1 KPX ecircumflex ohungarumlaut -51.1 KPX ecircumflex oslash -51.1 KPX ecircumflex otilde -51.1 KPX ecircumflex q -51.1 KPX edieresis a -51.1 KPX edieresis aacute -51.1 KPX edieresis acircumflex -51.1 KPX edieresis acircumflex -51.1 KPX edieresis adieresis -51.1 KPX edieresis ae -51.1 KPX edieresis agrave -51.1 KPX edieresis aogonek -51.1 KPX edieresis aring -51.1 KPX edieresis atilde -51.1 KPX edieresis c -51.1 KPX edieresis cacute -51.1 KPX edieresis cacute -51.1 KPX edieresis ccaron -51.1 KPX edieresis ccedilla -51.1 KPX edieresis d -51.1 KPX edieresis dbar -51.1 KPX edieresis e -51.1 KPX edieresis eacute -51.1 KPX edieresis ecaron -51.1 KPX edieresis ecircumflex -51.1 KPX edieresis edieresis -51.1 KPX edieresis egrave -51.1 KPX edieresis eogonek -51.1 KPX edieresis g -51.1 KPX edieresis gbreve -51.1 KPX edieresis o -51.1 KPX edieresis oacute -51.1 KPX edieresis ocircumflex -51.1 KPX edieresis odieresis -51.1 KPX edieresis oe -51.1 KPX edieresis ograve -51.1 KPX edieresis ohungarumlaut -51.1 KPX edieresis oslash -51.1 KPX edieresis otilde -51.1 KPX edieresis q -51.1 KPX egrave a -51.1 KPX egrave aacute -51.1 KPX egrave acircumflex -51.1 KPX egrave acircumflex -51.1 KPX egrave adieresis -51.1 KPX egrave ae -51.1 KPX egrave agrave -51.1 KPX egrave aogonek -51.1 KPX egrave aring -51.1 KPX egrave atilde -51.1 KPX egrave c -51.1 KPX egrave cacute -51.1 KPX egrave cacute -51.1 KPX egrave ccaron -51.1 KPX egrave ccedilla -51.1 KPX egrave d -51.1 KPX egrave dbar -51.1 KPX egrave e -51.1 KPX egrave eacute -51.1 KPX egrave ecaron -51.1 KPX egrave ecircumflex -51.1 KPX egrave edieresis -51.1 KPX egrave egrave -51.1 KPX egrave eogonek -51.1 KPX egrave g -51.1 KPX egrave gbreve -51.1 KPX egrave o -51.1 KPX egrave oacute -51.1 KPX egrave ocircumflex -51.1 KPX egrave odieresis -51.1 KPX egrave oe -51.1 KPX egrave ograve -51.1 KPX egrave ohungarumlaut -51.1 KPX egrave oslash -51.1 KPX egrave otilde -51.1 KPX egrave q -51.1 KPX eogonek a -51.1 KPX eogonek aacute -51.1 KPX eogonek acircumflex -51.1 KPX eogonek acircumflex -51.1 KPX eogonek adieresis -51.1 KPX eogonek ae -51.1 KPX eogonek agrave -51.1 KPX eogonek aogonek -51.1 KPX eogonek aring -51.1 KPX eogonek atilde -51.1 KPX eogonek c -51.1 KPX eogonek cacute -51.1 KPX eogonek cacute -51.1 KPX eogonek ccaron -51.1 KPX eogonek ccedilla -51.1 KPX eogonek d -51.1 KPX eogonek dbar -51.1 KPX eogonek e -51.1 KPX eogonek eacute -51.1 KPX eogonek ecaron -51.1 KPX eogonek ecircumflex -51.1 KPX eogonek edieresis -51.1 KPX eogonek egrave -51.1 KPX eogonek eogonek -51.1 KPX eogonek g -51.1 KPX eogonek gbreve -51.1 KPX eogonek o -51.1 KPX eogonek oacute -51.1 KPX eogonek ocircumflex -51.1 KPX eogonek odieresis -51.1 KPX eogonek oe -51.1 KPX eogonek ograve -51.1 KPX eogonek ohungarumlaut -51.1 KPX eogonek oslash -51.1 KPX eogonek otilde -51.1 KPX eogonek q -51.1 KPX f bracketright 104.28 KPX f exclam 104.28 KPX f parenright 104.28 KPX f question 104.28 KPX f quoteright 104.28 KPX ff bracketright 104.28 KPX ff exclam 104.28 KPX ff parenright 104.28 KPX ff question 104.28 KPX ff quoteright 104.28 KPX l l 51.1 KPX l lacute 51.1 KPX l lquoteright 51.1 KPX n quoteright -102.2 KPX o a -51.1 KPX o aacute -51.1 KPX o acircumflex -51.1 KPX o acircumflex -51.1 KPX o adieresis -51.1 KPX o ae -51.1 KPX o agrave -51.1 KPX o aogonek -51.1 KPX o aring -51.1 KPX o atilde -51.1 KPX o c -51.1 KPX o cacute -51.1 KPX o cacute -51.1 KPX o ccaron -51.1 KPX o ccedilla -51.1 KPX o d -51.1 KPX o dbar -51.1 KPX o e -51.1 KPX o eacute -51.1 KPX o ecaron -51.1 KPX o ecircumflex -51.1 KPX o edieresis -51.1 KPX o egrave -51.1 KPX o eogonek -51.1 KPX o g -51.1 KPX o gbreve -51.1 KPX o o -51.1 KPX o oacute -51.1 KPX o ocircumflex -51.1 KPX o odieresis -51.1 KPX o oe -51.1 KPX o ograve -51.1 KPX o ohungarumlaut -51.1 KPX o oslash -51.1 KPX o otilde -51.1 KPX o q -51.1 KPX oacute a -51.1 KPX oacute aacute -51.1 KPX oacute acircumflex -51.1 KPX oacute acircumflex -51.1 KPX oacute adieresis -51.1 KPX oacute ae -51.1 KPX oacute agrave -51.1 KPX oacute aogonek -51.1 KPX oacute aring -51.1 KPX oacute atilde -51.1 KPX oacute c -51.1 KPX oacute cacute -51.1 KPX oacute cacute -51.1 KPX oacute ccaron -51.1 KPX oacute ccedilla -51.1 KPX oacute d -51.1 KPX oacute dbar -51.1 KPX oacute e -51.1 KPX oacute eacute -51.1 KPX oacute ecaron -51.1 KPX oacute ecircumflex -51.1 KPX oacute edieresis -51.1 KPX oacute egrave -51.1 KPX oacute eogonek -51.1 KPX oacute g -51.1 KPX oacute gbreve -51.1 KPX oacute o -51.1 KPX oacute oacute -51.1 KPX oacute ocircumflex -51.1 KPX oacute odieresis -51.1 KPX oacute oe -51.1 KPX oacute ograve -51.1 KPX oacute ohungarumlaut -51.1 KPX oacute oslash -51.1 KPX oacute otilde -51.1 KPX oacute q -51.1 KPX ocircumflex a -51.1 KPX ocircumflex aacute -51.1 KPX ocircumflex acircumflex -51.1 KPX ocircumflex acircumflex -51.1 KPX ocircumflex adieresis -51.1 KPX ocircumflex ae -51.1 KPX ocircumflex agrave -51.1 KPX ocircumflex aogonek -51.1 KPX ocircumflex aring -51.1 KPX ocircumflex atilde -51.1 KPX ocircumflex c -51.1 KPX ocircumflex cacute -51.1 KPX ocircumflex cacute -51.1 KPX ocircumflex ccaron -51.1 KPX ocircumflex ccedilla -51.1 KPX ocircumflex d -51.1 KPX ocircumflex dbar -51.1 KPX ocircumflex e -51.1 KPX ocircumflex eacute -51.1 KPX ocircumflex ecaron -51.1 KPX ocircumflex ecircumflex -51.1 KPX ocircumflex edieresis -51.1 KPX ocircumflex egrave -51.1 KPX ocircumflex eogonek -51.1 KPX ocircumflex g -51.1 KPX ocircumflex gbreve -51.1 KPX ocircumflex o -51.1 KPX ocircumflex oacute -51.1 KPX ocircumflex ocircumflex -51.1 KPX ocircumflex odieresis -51.1 KPX ocircumflex oe -51.1 KPX ocircumflex ograve -51.1 KPX ocircumflex ohungarumlaut -51.1 KPX ocircumflex oslash -51.1 KPX ocircumflex otilde -51.1 KPX ocircumflex q -51.1 KPX odieresis a -51.1 KPX odieresis aacute -51.1 KPX odieresis acircumflex -51.1 KPX odieresis acircumflex -51.1 KPX odieresis adieresis -51.1 KPX odieresis ae -51.1 KPX odieresis agrave -51.1 KPX odieresis aogonek -51.1 KPX odieresis aring -51.1 KPX odieresis atilde -51.1 KPX odieresis c -51.1 KPX odieresis cacute -51.1 KPX odieresis cacute -51.1 KPX odieresis ccaron -51.1 KPX odieresis ccedilla -51.1 KPX odieresis d -51.1 KPX odieresis dbar -51.1 KPX odieresis e -51.1 KPX odieresis eacute -51.1 KPX odieresis ecaron -51.1 KPX odieresis ecircumflex -51.1 KPX odieresis edieresis -51.1 KPX odieresis egrave -51.1 KPX odieresis eogonek -51.1 KPX odieresis g -51.1 KPX odieresis gbreve -51.1 KPX odieresis o -51.1 KPX odieresis oacute -51.1 KPX odieresis ocircumflex -51.1 KPX odieresis odieresis -51.1 KPX odieresis oe -51.1 KPX odieresis ograve -51.1 KPX odieresis ohungarumlaut -51.1 KPX odieresis oslash -51.1 KPX odieresis otilde -51.1 KPX odieresis q -51.1 KPX ograve a -51.1 KPX ograve aacute -51.1 KPX ograve acircumflex -51.1 KPX ograve acircumflex -51.1 KPX ograve adieresis -51.1 KPX ograve ae -51.1 KPX ograve agrave -51.1 KPX ograve aogonek -51.1 KPX ograve aring -51.1 KPX ograve atilde -51.1 KPX ograve c -51.1 KPX ograve cacute -51.1 KPX ograve cacute -51.1 KPX ograve ccaron -51.1 KPX ograve ccedilla -51.1 KPX ograve d -51.1 KPX ograve dbar -51.1 KPX ograve e -51.1 KPX ograve eacute -51.1 KPX ograve ecaron -51.1 KPX ograve ecircumflex -51.1 KPX ograve edieresis -51.1 KPX ograve egrave -51.1 KPX ograve eogonek -51.1 KPX ograve g -51.1 KPX ograve gbreve -51.1 KPX ograve o -51.1 KPX ograve oacute -51.1 KPX ograve ocircumflex -51.1 KPX ograve odieresis -51.1 KPX ograve oe -51.1 KPX ograve ograve -51.1 KPX ograve ohungarumlaut -51.1 KPX ograve oslash -51.1 KPX ograve otilde -51.1 KPX ograve q -51.1 KPX otilde a -51.1 KPX otilde aacute -51.1 KPX otilde acircumflex -51.1 KPX otilde acircumflex -51.1 KPX otilde adieresis -51.1 KPX otilde ae -51.1 KPX otilde agrave -51.1 KPX otilde aogonek -51.1 KPX otilde aring -51.1 KPX otilde atilde -51.1 KPX otilde c -51.1 KPX otilde cacute -51.1 KPX otilde cacute -51.1 KPX otilde ccaron -51.1 KPX otilde ccedilla -51.1 KPX otilde d -51.1 KPX otilde dbar -51.1 KPX otilde e -51.1 KPX otilde eacute -51.1 KPX otilde ecaron -51.1 KPX otilde ecircumflex -51.1 KPX otilde edieresis -51.1 KPX otilde egrave -51.1 KPX otilde eogonek -51.1 KPX otilde g -51.1 KPX otilde gbreve -51.1 KPX otilde o -51.1 KPX otilde oacute -51.1 KPX otilde ocircumflex -51.1 KPX otilde odieresis -51.1 KPX otilde oe -51.1 KPX otilde ograve -51.1 KPX otilde ohungarumlaut -51.1 KPX otilde oslash -51.1 KPX otilde otilde -51.1 KPX otilde q -51.1 KPX p a -51.1 KPX p aacute -51.1 KPX p acircumflex -51.1 KPX p acircumflex -51.1 KPX p adieresis -51.1 KPX p ae -51.1 KPX p agrave -51.1 KPX p aogonek -51.1 KPX p aring -51.1 KPX p atilde -51.1 KPX p c -51.1 KPX p cacute -51.1 KPX p cacute -51.1 KPX p ccaron -51.1 KPX p ccedilla -51.1 KPX p d -51.1 KPX p dbar -51.1 KPX p e -51.1 KPX p eacute -51.1 KPX p ecaron -51.1 KPX p ecircumflex -51.1 KPX p edieresis -51.1 KPX p egrave -51.1 KPX p eogonek -51.1 KPX p g -51.1 KPX p gbreve -51.1 KPX p o -51.1 KPX p oacute -51.1 KPX p ocircumflex -51.1 KPX p odieresis -51.1 KPX p oe -51.1 KPX p ograve -51.1 KPX p ohungarumlaut -51.1 KPX p oslash -51.1 KPX p otilde -51.1 KPX p q -51.1 KPX quoteright exclam 102.2 KPX quoteright question 102.2 KPX r a -51.1 KPX r aacute -51.1 KPX r acircumflex -51.1 KPX r acircumflex -51.1 KPX r adieresis -51.1 KPX r ae -51.1 KPX r agrave -51.1 KPX r aogonek -51.1 KPX r aring -51.1 KPX r atilde -51.1 KPX r c -51.1 KPX r cacute -51.1 KPX r cacute -51.1 KPX r ccaron -51.1 KPX r ccedilla -51.1 KPX r d -51.1 KPX r dbar -51.1 KPX r e -51.1 KPX r eacute -51.1 KPX r ecaron -51.1 KPX r ecircumflex -51.1 KPX r edieresis -51.1 KPX r egrave -51.1 KPX r eogonek -51.1 KPX r g -51.1 KPX r gbreve -51.1 KPX r o -51.1 KPX r oacute -51.1 KPX r ocircumflex -51.1 KPX r odieresis -51.1 KPX r oe -51.1 KPX r ograve -51.1 KPX r ohungarumlaut -51.1 KPX r oslash -51.1 KPX r otilde -51.1 KPX r q -51.1 KPX thorn a -51.1 KPX thorn aacute -51.1 KPX thorn acircumflex -51.1 KPX thorn acircumflex -51.1 KPX thorn adieresis -51.1 KPX thorn ae -51.1 KPX thorn agrave -51.1 KPX thorn aogonek -51.1 KPX thorn aring -51.1 KPX thorn atilde -51.1 KPX thorn c -51.1 KPX thorn cacute -51.1 KPX thorn cacute -51.1 KPX thorn ccaron -51.1 KPX thorn ccedilla -51.1 KPX thorn d -51.1 KPX thorn dbar -51.1 KPX thorn e -51.1 KPX thorn eacute -51.1 KPX thorn ecaron -51.1 KPX thorn ecircumflex -51.1 KPX thorn edieresis -51.1 KPX thorn egrave -51.1 KPX thorn eogonek -51.1 KPX thorn g -51.1 KPX thorn gbreve -51.1 KPX thorn o -51.1 KPX thorn oacute -51.1 KPX thorn ocircumflex -51.1 KPX thorn odieresis -51.1 KPX thorn oe -51.1 KPX thorn ograve -51.1 KPX thorn ohungarumlaut -51.1 KPX thorn oslash -51.1 KPX thorn otilde -51.1 KPX thorn q -51.1 KPX w l 51.1 KPX w lacute 51.1 KPX w lquoteright 51.1 EndKernPairs EndKernData EndFontMetrics t1lib-5.1.2/Fonts/afm/README0000644000175000001440000000174210733501626014004 0ustar rmzusersThis is a copy of the Charter fonts which Bitstream contributed to the X consortium, arranged for use with TeX. Here is the copyright notice: (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA. You are hereby granted permission under all Bitstream propriety rights to use, copy, modify, sublicense, sell, and redistribute the 4 Bitstream Charter (r) Type 1 outline fonts and the 4 Courier Type 1 outline fonts for any purpose and without restriction; provided, that this notice is left intact on all copies of such fonts and that Bitstream's trademark is acknowledged as shown below on all unmodified copies of the 4 Charter Type 1 fonts. BITSTREAM CHARTER is a registered trademark of Bitstream Inc. I used the `afm2tfm' program which comes with Tom Rokicki's dvips to convert the AFM files to TFM and VF files. You can get dvips from labrea.stanford.edu. karl@cs.umb.edu Member of the League for Programming Freedom---write to lpf@uunet.uu.net. t1lib-5.1.2/Fonts/afm/dcr10.afm0000644000175000001440000005321010733501626014517 0ustar rmzusersStartFontMetrics 2.0 FontName dcr10 FullName dcr10 FamilyName dcr10 Weight Medium ItalicAngle 0.000000 IsFixedPitch false UnderlinePosition -133 UnderlineThickness 20 Version 1.0\(Level-B\) FontBBox -55, -250, 1054, 913 Notice Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-B. EncodingScheme FontSpecific CapHeight 683 XHeight 430 Descender -194 Ascender 694 StartCharMetrics 256 C 0 ; WX 499.89 ; N grave ; B 107 508 294 698 ; C 1 ; WX 499.89 ; N acute ; B 205 508 392 698 ; C 2 ; WX 499.89 ; N circumflex ; B 115 537 384 694 ; C 3 ; WX 499.89 ; N tilde ; B 83 572 416 668 ; C 4 ; WX 499.89 ; N dieresis ; B 101 565 398 669 ; C 5 ; WX 499.89 ; N hungarumlaut ; B 126 511 420 699 ; C 6 ; WX 749.83 ; N ring ; B 263 540 458 716 ; C 7 ; WX 499.89 ; N caron ; B 117 515 382 640 ; C 8 ; WX 499.89 ; N breve ; B 98 519 401 694 ; C 9 ; WX 499.89 ; N macron ; B 69 555 430 590 ; C 10 ; WX 277.72 ; N dotaccent ; B 84 559 194 669 ; C 11 ; WX 444.33 ; N cedilla ; B 129 -205 369 -22 ; C 12 ; WX 277.72 ; N ogonek ; B 9 -194 226 20 ; C 13 ; WX 277.72 ; N quotesinglbase ; B 112 -194 233 110 ; C 14 ; WX 444.33 ; N guilsinglleft ; B 94 26 330 457 ; C 15 ; WX 444.33 ; N guilsinglright ; B 94 26 360 457 ; C 16 ; WX 499.89 ; N quotedblleft ; B 148 390 466 694 ; C 17 ; WX 499.89 ; N quotedblright ; B 33 390 351 694 ; C 18 ; WX 499.89 ; N quotedblbase ; B 138 -194 456 110 ; C 19 ; WX 666.5 ; N guillemotleft ; B 94 26 553 457 ; C 20 ; WX 666.5 ; N guillemotright ; B 94 26 583 457 ; C 21 ; WX 499.89 ; N endash ; B 0 253 499 279 ; L hyphen emdash ; C 22 ; WX 999.78 ; N emdash ; B 0 253 999 279 ; C 23 ; WX 0 ; N compoundwordmark ; B 0 0 0 0 ; C 24 ; WX 388.78 ; N perthousand ; B 55 -56 333 347 ; C 25 ; WX 277.72 ; N dotlessi ; B 25 0 243 441 ; C 26 ; WX 305.5 ; N dotlessj ; B -55 -205 201 441 ; C 27 ; WX 583.17 ; N ff ; B 26 0 632 705 ; L i ffi ; L l ffl ; C 28 ; WX 555.44 ; N fi ; B 26 0 528 705 ; C 29 ; WX 555.44 ; N fl ; B 26 0 528 705 ; C 30 ; WX 833.11 ; N ffi ; B 26 0 807 705 ; C 31 ; WX 833.11 ; N ffl ; B 26 0 807 705 ; C 32 ; WX 499.89 ; N visiblespace ; B 42 -107 457 252 ; C 33 ; WX 277.72 ; N exclam ; B 84 0 194 716 ; C 34 ; WX 499.89 ; N quotedbl ; B 117 349 383 711 ; C 35 ; WX 833.11 ; N numbersign ; B 56 -194 776 694 ; C 36 ; WX 499.89 ; N dollar ; B 57 -56 444 750 ; C 37 ; WX 833.11 ; N percent ; B 56 -56 776 750 ; C 38 ; WX 777.61 ; N ampersand ; B 42 -22 727 716 ; C 39 ; WX 277.72 ; N quoteright ; B 84 390 208 694 ; L quoteright quotedblright ; C 40 ; WX 388.78 ; N parenleft ; B 97 -250 332 750 ; C 41 ; WX 388.78 ; N parenright ; B 56 -250 291 750 ; C 42 ; WX 499.89 ; N asterisk ; B 65 320 434 750 ; C 43 ; WX 777.61 ; N plus ; B 56 -83 721 583 ; C 44 ; WX 277.72 ; N comma ; B 84 -194 205 110 ; L comma quotedblbase ; C 45 ; WX 333.28 ; N hyphen ; B 11 184 276 246 ; L hyphen endash ; C 46 ; WX 277.72 ; N period ; B 84 0 194 110 ; C 47 ; WX 499.89 ; N slash ; B 56 -250 443 750 ; C 48 ; WX 499.89 ; N zero ; B 39 -22 460 666 ; C 49 ; WX 499.89 ; N one ; B 87 0 421 666 ; C 50 ; WX 499.89 ; N two ; B 50 0 449 666 ; C 51 ; WX 499.89 ; N three ; B 42 -22 457 666 ; C 52 ; WX 499.89 ; N four ; B 28 0 471 677 ; C 53 ; WX 499.89 ; N five ; B 50 -22 449 666 ; C 54 ; WX 499.89 ; N six ; B 42 -22 457 666 ; C 55 ; WX 499.89 ; N seven ; B 56 -22 485 676 ; C 56 ; WX 499.89 ; N eight ; B 42 -22 457 666 ; C 57 ; WX 499.89 ; N nine ; B 42 -22 457 666 ; C 58 ; WX 277.72 ; N colon ; B 84 0 194 430 ; C 59 ; WX 277.72 ; N semicolon ; B 84 -194 197 430 ; C 60 ; WX 777.61 ; N less ; B 83 -33 694 533 ; L less guillemotleft ; C 61 ; WX 777.61 ; N equal ; B 56 140 721 360 ; C 62 ; WX 777.61 ; N greater ; B 83 -33 694 533 ; L greater guillemotright ; C 63 ; WX 472.11 ; N question ; B 56 0 415 705 ; C 64 ; WX 777.61 ; N at ; B 56 -11 721 705 ; C 65 ; WX 749.83 ; N A ; B 18 0 703 716 ; C 66 ; WX 708.17 ; N B ; B 20 0 637 683 ; C 67 ; WX 722 ; N C ; B 56 -22 665 705 ; C 68 ; WX 763.72 ; N D ; B 19 0 693 683 ; C 69 ; WX 680.39 ; N E ; B 17 0 637 680 ; C 70 ; WX 652.61 ; N F ; B 17 0 596 680 ; C 71 ; WX 784.56 ; N G ; B 56 -22 735 705 ; C 72 ; WX 749.83 ; N H ; B 17 0 704 683 ; C 73 ; WX 361 ; N I ; B 12 0 321 683 ; C 74 ; WX 513.78 ; N J ; B 37 -22 465 683 ; C 75 ; WX 777.61 ; N K ; B 17 0 722 683 ; C 76 ; WX 624.83 ; N L ; B 17 0 568 683 ; C 77 ; WX 916.44 ; N M ; B 21 0 866 683 ; C 78 ; WX 749.83 ; N N ; B 17 0 704 683 ; C 79 ; WX 777.61 ; N O ; B 56 -22 721 705 ; C 80 ; WX 680.39 ; N P ; B 19 0 609 683 ; C 81 ; WX 777.61 ; N Q ; B 56 -194 727 705 ; C 82 ; WX 735.94 ; N R ; B 19 -22 718 683 ; C 83 ; WX 555.44 ; N S ; B 56 -22 498 705 ; C 84 ; WX 722 ; N T ; B 37 0 686 677 ; C 85 ; WX 749.83 ; N U ; B 17 -22 704 683 ; C 86 ; WX 749.83 ; N V ; B 5 -22 716 683 ; C 87 ; WX 1027.56 ; N W ; B 4 -22 995 683 ; C 88 ; WX 749.83 ; N X ; B 9 0 712 683 ; C 89 ; WX 749.83 ; N Y ; B -3 0 724 683 ; C 90 ; WX 611 ; N Z ; B 56 0 560 683 ; C 91 ; WX 277.72 ; N bracketleft ; B 103 -250 255 750 ; C 92 ; WX 499.89 ; N backslash ; B 56 -250 443 750 ; C 93 ; WX 277.72 ; N bracketright ; B 22 -250 174 750 ; C 94 ; WX 611 ; N asciicircum ; B 117 461 493 628 ; C 95 ; WX 777.61 ; N underscore ; B 83 -233 694 -193 ; C 96 ; WX 277.72 ; N quoteleft ; B 70 390 194 694 ; L quoteleft quotedblleft ; C 97 ; WX 499.89 ; N a ; B 40 -11 493 447 ; C 98 ; WX 555.44 ; N b ; B 26 -11 521 694 ; C 99 ; WX 444.33 ; N c ; B 33 -11 415 447 ; C 100 ; WX 555.44 ; N d ; B 33 -11 528 694 ; C 101 ; WX 444.33 ; N e ; B 28 -11 415 447 ; C 102 ; WX 305.5 ; N f ; B 26 0 354 705 ; L i fi ; L f ff ; L l fl ; C 103 ; WX 499.89 ; N g ; B 28 -206 485 452 ; C 104 ; WX 555.44 ; N h ; B 24 0 530 694 ; C 105 ; WX 277.72 ; N i ; B 25 0 243 669 ; C 106 ; WX 305.5 ; N j ; B -55 -205 201 669 ; C 107 ; WX 527.67 ; N k ; B 26 0 511 694 ; C 108 ; WX 277.72 ; N l ; B 25 0 251 694 ; C 109 ; WX 833.11 ; N m ; B 24 0 810 441 ; C 110 ; WX 555.44 ; N n ; B 24 0 530 441 ; C 111 ; WX 499.89 ; N o ; B 28 -11 471 447 ; C 112 ; WX 555.44 ; N p ; B 26 -194 521 441 ; C 113 ; WX 527.67 ; N q ; B 33 -194 529 441 ; C 114 ; WX 391.56 ; N r ; B 26 0 364 441 ; C 115 ; WX 394.33 ; N s ; B 33 -11 360 447 ; C 116 ; WX 388.78 ; N t ; B 19 -11 332 615 ; C 117 ; WX 555.44 ; N u ; B 24 -11 530 441 ; C 118 ; WX 527.67 ; N v ; B 19 -11 508 430 ; C 119 ; WX 722 ; N w ; B 18 -11 703 430 ; C 120 ; WX 527.67 ; N x ; B 12 0 516 430 ; C 121 ; WX 527.67 ; N y ; B 19 -205 508 430 ; C 122 ; WX 444.33 ; N z ; B 28 0 401 430 ; C 123 ; WX 499.89 ; N braceleft ; B 70 -250 429 750 ; C 124 ; WX 277.72 ; N bar ; B 119 -250 159 750 ; C 125 ; WX 499.89 ; N braceright ; B 70 -250 429 750 ; C 126 ; WX 611 ; N asciitilde ; B 83 572 527 668 ; C 127 ; WX 333.28 ; N hyphen ; B 11 184 276 246 ; C 128 ; WX 749.83 ; N Abreve ; B 18 0 703 891 ; C 129 ; WX 749.83 ; N Aogonek ; B 18 -188 740 716 ; C 130 ; WX 722 ; N Cacute ; B 56 -22 665 895 ; C 131 ; WX 722 ; N Ccaron ; B 56 -22 665 856 ; C 132 ; WX 763.72 ; N Dcaron ; B 19 0 693 856 ; C 133 ; WX 680.39 ; N Ecaron ; B 17 0 637 856 ; C 134 ; WX 680.39 ; N Eogonek ; B 17 -188 637 680 ; C 135 ; WX 784.56 ; N Gbreve ; B 56 -22 735 891 ; C 136 ; WX 624.83 ; N Lacute ; B 17 0 568 895 ; C 137 ; WX 624.83 ; N Lquoteright ; B 17 0 568 683 ; C 138 ; WX 624.83 ; N Lslash ; B 17 0 568 683 ; C 139 ; WX 749.83 ; N Nacute ; B 17 0 704 895 ; C 140 ; WX 749.83 ; N Ncaron ; B 17 0 704 856 ; C 141 ; WX 727.61 ; N Eng ; B 24 -22 676 694 ; C 142 ; WX 777.61 ; N Ohungarumlaut ; B 56 -22 721 895 ; C 143 ; WX 735.94 ; N Racute ; B 19 -22 718 895 ; C 144 ; WX 735.94 ; N Rcaron ; B 19 -22 718 856 ; C 145 ; WX 555.44 ; N Sacute ; B 56 -22 498 895 ; C 146 ; WX 555.44 ; N Scaron ; B 56 -22 498 856 ; C 147 ; WX 555.44 ; N Scedilla ; B 56 -205 498 705 ; C 148 ; WX 722 ; N Tcaron ; B 37 0 686 856 ; C 149 ; WX 722 ; N Tcedilla ; B 37 -205 686 677 ; C 150 ; WX 749.83 ; N Uhungarumlaut ; B 17 -22 704 895 ; C 151 ; WX 749.83 ; N Uring ; B 17 -22 704 913 ; C 152 ; WX 749.83 ; N Ydieresis ; B -3 0 724 839 ; C 153 ; WX 611 ; N Zacute ; B 56 0 560 895 ; C 154 ; WX 611 ; N Zcaron ; B 56 0 560 856 ; C 155 ; WX 611 ; N Zdotaccent ; B 56 0 560 891 ; C 156 ; WX 860.89 ; N IJ ; B 12 -22 798 683 ; C 157 ; WX 361 ; N Idotaccent ; B 12 0 321 877 ; C 158 ; WX 555.44 ; N dbar ; B 33 -11 528 694 ; C 159 ; WX 444.33 ; N section ; B 69 -205 374 705 ; C 160 ; WX 499.89 ; N abreve ; B 40 -11 493 694 ; C 161 ; WX 499.89 ; N aogonek ; B 40 -194 493 447 ; C 162 ; WX 444.33 ; N cacute ; B 33 -11 415 643 ; C 163 ; WX 444.33 ; N ccaron ; B 33 -11 415 604 ; C 164 ; WX 674.83 ; N dquoteright ; B 33 -11 665 694 ; C 165 ; WX 444.33 ; N ecaron ; B 28 -11 415 604 ; C 166 ; WX 444.33 ; N eogonek ; B 28 -194 415 447 ; C 167 ; WX 499.89 ; N gbreve ; B 28 -206 485 694 ; C 168 ; WX 277.72 ; N lacute ; B 25 0 282 907 ; C 169 ; WX 402.67 ; N lquoteright ; B 25 0 386 694 ; C 170 ; WX 277.72 ; N lslash ; B 18 0 258 694 ; C 171 ; WX 555.44 ; N nacute ; B 24 0 530 643 ; C 172 ; WX 555.44 ; N ncaron ; B 24 0 530 604 ; C 173 ; WX 555.44 ; N eng ; B 24 -205 452 441 ; C 174 ; WX 499.89 ; N ohungarumlaut ; B 28 -11 521 643 ; C 175 ; WX 391.56 ; N racute ; B 26 0 364 643 ; C 176 ; WX 391.56 ; N rcaron ; B 26 0 364 604 ; C 177 ; WX 394.33 ; N sacute ; B 33 -11 360 643 ; C 178 ; WX 394.33 ; N scaron ; B 33 -11 360 604 ; C 179 ; WX 394.33 ; N scedilla ; B 33 -205 360 447 ; C 180 ; WX 411 ; N tquoteright ; B 19 -11 401 704 ; C 181 ; WX 388.78 ; N tcedilla ; B 19 -205 359 615 ; C 182 ; WX 555.44 ; N uhungarumlaut ; B 24 -11 549 643 ; C 183 ; WX 555.44 ; N uring ; B 24 -11 530 661 ; C 184 ; WX 527.67 ; N ydieresis ; B 19 -205 508 586 ; C 185 ; WX 444.33 ; N zacute ; B 28 0 401 643 ; C 186 ; WX 444.33 ; N zcaron ; B 28 0 401 604 ; C 187 ; WX 444.33 ; N zdotaccent ; B 28 0 402 669 ; C 188 ; WX 583.17 ; N ij ; B 33 -205 485 669 ; C 189 ; WX 277.72 ; N exclamdown ; B 84 -216 194 500 ; C 190 ; WX 472.11 ; N questiondown ; B 56 -205 415 500 ; C 191 ; WX 638.72 ; N sterling ; B 56 -11 620 709 ; C 192 ; WX 749.83 ; N Agrave ; B 18 0 703 895 ; C 193 ; WX 749.83 ; N Aacute ; B 18 0 703 895 ; C 194 ; WX 749.83 ; N Acircumflex ; B 18 0 703 891 ; C 195 ; WX 749.83 ; N Atilde ; B 18 0 703 891 ; C 196 ; WX 749.83 ; N Adieresis ; B 18 0 703 839 ; C 197 ; WX 749.83 ; N Aring ; B 18 0 703 872 ; C 198 ; WX 902.56 ; N AE ; B 18 0 860 683 ; C 199 ; WX 722 ; N Ccedilla ; B 56 -205 665 705 ; C 200 ; WX 680.39 ; N Egrave ; B 17 0 637 895 ; C 201 ; WX 680.39 ; N Eacute ; B 17 0 637 895 ; C 202 ; WX 680.39 ; N Ecircumflex ; B 17 0 637 891 ; C 203 ; WX 680.39 ; N Edieresis ; B 17 0 637 839 ; C 204 ; WX 361 ; N Igrave ; B 12 0 321 895 ; C 205 ; WX 361 ; N Iacute ; B 12 0 321 895 ; C 206 ; WX 361 ; N Icircumflex ; B 12 0 321 891 ; C 207 ; WX 361 ; N Idieresis ; B 12 0 321 839 ; C 208 ; WX 763.72 ; N Eth ; B 19 0 693 683 ; C 209 ; WX 749.83 ; N Ntilde ; B 17 0 704 891 ; C 210 ; WX 777.61 ; N Ograve ; B 56 -22 721 895 ; C 211 ; WX 777.61 ; N Oacute ; B 56 -22 721 895 ; C 212 ; WX 777.61 ; N Ocircumflex ; B 56 -22 721 891 ; C 213 ; WX 777.61 ; N Otilde ; B 56 -22 721 891 ; C 214 ; WX 777.61 ; N Odieresis ; B 56 -22 721 839 ; C 215 ; WX 1013.67 ; N OE ; B 56 -22 971 705 ; C 216 ; WX 777.61 ; N Oslash ; B 56 -57 721 740 ; C 217 ; WX 749.83 ; N Ugrave ; B 17 -22 704 895 ; C 218 ; WX 749.83 ; N Uacute ; B 17 -22 704 895 ; C 219 ; WX 749.83 ; N Ucircumflex ; B 17 -22 704 891 ; C 220 ; WX 749.83 ; N Udieresis ; B 17 -22 704 839 ; C 221 ; WX 749.83 ; N Yacute ; B -3 0 724 895 ; C 222 ; WX 624.83 ; N Thorn ; B 20 0 554 683 ; C 223 ; WX 1110.83 ; N Germandbls ; B 56 -22 1054 705 ; C 224 ; WX 499.89 ; N agrave ; B 40 -11 493 643 ; C 225 ; WX 499.89 ; N aacute ; B 40 -11 493 643 ; C 226 ; WX 499.89 ; N acircumflex ; B 40 -11 493 639 ; C 227 ; WX 499.89 ; N atilde ; B 40 -11 493 669 ; C 228 ; WX 499.89 ; N adieresis ; B 40 -11 493 586 ; C 229 ; WX 499.89 ; N aring ; B 40 -11 493 661 ; C 230 ; WX 722 ; N ae ; B 43 -11 693 447 ; C 231 ; WX 444.33 ; N ccedilla ; B 33 -205 415 447 ; C 232 ; WX 444.33 ; N egrave ; B 28 -11 415 643 ; C 233 ; WX 444.33 ; N eacute ; B 28 -11 415 643 ; C 234 ; WX 444.33 ; N ecircumflex ; B 28 -11 415 639 ; C 235 ; WX 444.33 ; N edieresis ; B 28 -11 415 586 ; C 236 ; WX 277.72 ; N igrave ; B -6 0 243 643 ; C 237 ; WX 277.72 ; N iacute ; B 25 0 282 643 ; C 238 ; WX 277.72 ; N icircumflex ; B 3 0 274 639 ; C 239 ; WX 333.28 ; N idieresis ; B -9 0 289 586 ; C 240 ; WX 499.89 ; N eth ; B 28 -11 471 694 ; C 241 ; WX 555.44 ; N ntilde ; B 24 0 530 669 ; C 242 ; WX 499.89 ; N ograve ; B 28 -11 471 643 ; C 243 ; WX 499.89 ; N oacute ; B 28 -11 471 643 ; C 244 ; WX 499.89 ; N ocircumflex ; B 28 -11 471 639 ; C 245 ; WX 499.89 ; N otilde ; B 28 -11 471 669 ; C 246 ; WX 499.89 ; N odieresis ; B 28 -11 471 586 ; C 247 ; WX 777.61 ; N oe ; B 28 -11 749 447 ; C 248 ; WX 499.89 ; N oslash ; B 33 -103 466 534 ; C 249 ; WX 555.44 ; N ugrave ; B 24 -11 530 643 ; C 250 ; WX 555.44 ; N uacute ; B 24 -11 530 643 ; C 251 ; WX 555.44 ; N ucircumflex ; B 24 -11 530 639 ; C 252 ; WX 555.44 ; N udieresis ; B 24 -11 530 586 ; C 253 ; WX 527.67 ; N yacute ; B 19 -205 508 643 ; C 254 ; WX 555.44 ; N thorn ; B 25 -205 521 694 ; C 255 ; WX 499.89 ; N germandbls ; B 26 -11 471 705 ; EndCharMetrics StartKernData StartKernPairs 471 KPX A C -27.77 KPX A G -27.77 KPX A O -27.77 KPX A Q -27.77 KPX A T -83.31 KPX A U -27.77 KPX A V -111.08 KPX A W -111.08 KPX A Y -83.31 KPX A t -27.77 KPX Aacute C -27.77 KPX Aacute G -27.77 KPX Aacute O -27.77 KPX Aacute Q -27.77 KPX Aacute T -83.31 KPX Aacute U -27.77 KPX Aacute V -111.08 KPX Aacute W -111.08 KPX Aacute Y -83.31 KPX Aacute t -27.77 KPX Abreve C -27.77 KPX Abreve G -27.77 KPX Abreve O -27.77 KPX Abreve Q -27.77 KPX Abreve T -83.31 KPX Abreve U -27.77 KPX Abreve V -111.08 KPX Abreve W -111.08 KPX Abreve Y -83.31 KPX Abreve t -27.77 KPX Acircumflex C -27.77 KPX Acircumflex G -27.77 KPX Acircumflex O -27.77 KPX Acircumflex Q -27.77 KPX Acircumflex T -83.31 KPX Acircumflex U -27.77 KPX Acircumflex V -111.08 KPX Acircumflex W -111.08 KPX Acircumflex Y -83.31 KPX Acircumflex t -27.77 KPX Adieresis C -27.77 KPX Adieresis G -27.77 KPX Adieresis O -27.77 KPX Adieresis Q -27.77 KPX Adieresis T -83.31 KPX Adieresis U -27.77 KPX Adieresis V -111.08 KPX Adieresis W -111.08 KPX Adieresis Y -83.31 KPX Adieresis t -27.77 KPX Agrave C -27.77 KPX Agrave G -27.77 KPX Agrave O -27.77 KPX Agrave Q -27.77 KPX Agrave T -83.31 KPX Agrave U -27.77 KPX Agrave V -111.08 KPX Agrave W -111.08 KPX Agrave Y -83.31 KPX Agrave t -27.77 KPX Aogonek C -27.77 KPX Aogonek G -27.77 KPX Aogonek O -27.77 KPX Aogonek Q -27.77 KPX Aogonek T -83.31 KPX Aogonek U -27.77 KPX Aogonek V -111.08 KPX Aogonek W -111.08 KPX Aogonek Y -83.31 KPX Aogonek t -27.77 KPX Aring C -27.77 KPX Aring G -27.77 KPX Aring O -27.77 KPX Aring Q -27.77 KPX Aring T -83.31 KPX Aring U -27.77 KPX Aring V -111.08 KPX Aring W -111.08 KPX Aring Y -83.31 KPX Aring t -27.77 KPX Atilde C -27.77 KPX Atilde G -27.77 KPX Atilde O -27.77 KPX Atilde Q -27.77 KPX Atilde T -83.31 KPX Atilde U -27.77 KPX Atilde V -111.08 KPX Atilde W -111.08 KPX Atilde Y -83.31 KPX Atilde t -27.77 KPX D A -27.77 KPX D V -27.77 KPX D W -27.77 KPX D X -27.77 KPX D Y -27.77 KPX F A -111.08 KPX F C -27.77 KPX F G -27.77 KPX F O -27.77 KPX F Q -27.77 KPX F a -83.31 KPX F e -83.31 KPX F o -83.31 KPX F r -83.31 KPX F u -83.31 KPX I I 27.77 KPX K C -27.77 KPX K G -27.77 KPX K O -27.77 KPX K Q -27.77 KPX L T -83.31 KPX L V -111.08 KPX L W -111.08 KPX L Y -83.31 KPX O A -27.77 KPX O V -27.77 KPX O W -27.77 KPX O X -27.77 KPX O Y -27.77 KPX P A -83.31 KPX P a -27.77 KPX P aacute -27.77 KPX P acircumflex -27.77 KPX P acircumflex -27.77 KPX P adieresis -27.77 KPX P ae -27.77 KPX P agrave -27.77 KPX P aogonek -27.77 KPX P aring -27.77 KPX P atilde -27.77 KPX P cacute -27.77 KPX P comma -83.31 KPX P e -27.77 KPX P eacute -27.77 KPX P ecaron -27.77 KPX P ecircumflex -27.77 KPX P edieresis -27.77 KPX P egrave -27.77 KPX P eogonek -27.77 KPX P o -27.77 KPX P oacute -27.77 KPX P ocircumflex -27.77 KPX P odieresis -27.77 KPX P oe -27.77 KPX P ograve -27.77 KPX P ohungarumlaut -27.77 KPX P otilde -27.77 KPX P period -83.31 KPX R C -27.77 KPX R G -27.77 KPX R O -27.77 KPX R Q -27.77 KPX R T -83.31 KPX R U -27.77 KPX R V -111.08 KPX R W -111.08 KPX R Y -83.31 KPX R t -27.77 KPX T A -83.31 KPX T a -83.31 KPX T e -83.31 KPX T o -83.31 KPX T r -83.31 KPX T u -83.31 KPX T y -27.77 KPX V A -111.08 KPX V C -27.77 KPX V G -27.77 KPX V O -27.77 KPX V Q -27.77 KPX V a -83.31 KPX V e -83.31 KPX V o -83.31 KPX V r -83.31 KPX V u -83.31 KPX W A -111.08 KPX W C -27.77 KPX W G -27.77 KPX W O -27.77 KPX W Q -27.77 KPX W a -83.31 KPX W e -83.31 KPX W o -83.31 KPX W r -83.31 KPX W u -83.31 KPX X C -27.77 KPX X G -27.77 KPX X O -27.77 KPX X Q -27.77 KPX Y A -83.31 KPX Y a -83.31 KPX Y e -83.31 KPX Y o -83.31 KPX Y r -83.31 KPX Y u -83.31 KPX a j 55.54 KPX a v -27.77 KPX a w -27.77 KPX a y -27.77 KPX b c 27.77 KPX b cacute 27.77 KPX b ccaron 27.77 KPX b ccedilla 27.77 KPX b d 27.77 KPX b e 27.77 KPX b eacute 27.77 KPX b ecaron 27.77 KPX b ecircumflex 27.77 KPX b edieresis 27.77 KPX b egrave 27.77 KPX b eogonek 27.77 KPX b j 55.54 KPX b o 27.77 KPX b oacute 27.77 KPX b ocircumflex 27.77 KPX b odieresis 27.77 KPX b oe 27.77 KPX b ograve 27.77 KPX b ohungarumlaut 27.77 KPX b otilde 27.77 KPX b q 27.77 KPX b v -27.77 KPX b w -27.77 KPX b x -27.77 KPX b y -27.77 KPX c h -27.77 KPX c k -27.77 KPX f bracketright 77.76 KPX f exclam 77.76 KPX f parenright 77.76 KPX f question 77.76 KPX f quoteright 77.76 KPX ff bracketright 77.76 KPX ff exclam 77.76 KPX ff parenright 77.76 KPX ff question 77.76 KPX ff quoteright 77.76 KPX g j 27.77 KPX h b -27.77 KPX h t -27.77 KPX h u -27.77 KPX h uacute -27.77 KPX h ucircumflex -27.77 KPX h udieresis -27.77 KPX h ugrave -27.77 KPX h uhungarumlaut -27.77 KPX h uring -27.77 KPX h v -27.77 KPX h w -27.77 KPX h y -27.77 KPX k a -27.77 KPX k a -55.54 KPX k aacute -27.77 KPX k aacute -55.54 KPX k acircumflex -55.54 KPX k acircumflex -55.54 KPX k acircumflex -27.77 KPX k acircumflex -27.77 KPX k adieresis -27.77 KPX k adieresis -55.54 KPX k ae -55.54 KPX k ae -27.77 KPX k agrave -55.54 KPX k agrave -27.77 KPX k aogonek -55.54 KPX k aogonek -27.77 KPX k aring -55.54 KPX k aring -27.77 KPX k atilde -27.77 KPX k atilde -55.54 KPX k c -27.77 KPX k cacute -27.77 KPX k cacute -27.77 KPX k cacute -55.54 KPX k ccaron -27.77 KPX k ccedilla -27.77 KPX k e -27.77 KPX k eacute -27.77 KPX k ecaron -27.77 KPX k ecircumflex -27.77 KPX k edieresis -27.77 KPX k egrave -27.77 KPX k eogonek -27.77 KPX k o -27.77 KPX k oacute -27.77 KPX k ocircumflex -27.77 KPX k odieresis -27.77 KPX k oe -27.77 KPX k ograve -27.77 KPX k ohungarumlaut -27.77 KPX k otilde -27.77 KPX m b -27.77 KPX m t -27.77 KPX m u -27.77 KPX m uacute -27.77 KPX m ucircumflex -27.77 KPX m udieresis -27.77 KPX m ugrave -27.77 KPX m uhungarumlaut -27.77 KPX m uring -27.77 KPX m v -27.77 KPX m w -27.77 KPX m y -27.77 KPX n b -27.77 KPX n t -27.77 KPX n u -27.77 KPX n uacute -27.77 KPX n ucircumflex -27.77 KPX n udieresis -27.77 KPX n ugrave -27.77 KPX n uhungarumlaut -27.77 KPX n uring -27.77 KPX n v -27.77 KPX n w -27.77 KPX n y -27.77 KPX o c 27.77 KPX o cacute 27.77 KPX o ccaron 27.77 KPX o ccedilla 27.77 KPX o d 27.77 KPX o e 27.77 KPX o eacute 27.77 KPX o ecaron 27.77 KPX o ecircumflex 27.77 KPX o edieresis 27.77 KPX o egrave 27.77 KPX o eogonek 27.77 KPX o j 55.54 KPX o o 27.77 KPX o oacute 27.77 KPX o ocircumflex 27.77 KPX o odieresis 27.77 KPX o oe 27.77 KPX o ograve 27.77 KPX o ohungarumlaut 27.77 KPX o otilde 27.77 KPX o q 27.77 KPX o v -27.77 KPX o w -27.77 KPX o x -27.77 KPX o y -27.77 KPX p c 27.77 KPX p cacute 27.77 KPX p ccaron 27.77 KPX p ccedilla 27.77 KPX p d 27.77 KPX p e 27.77 KPX p eacute 27.77 KPX p ecaron 27.77 KPX p ecircumflex 27.77 KPX p edieresis 27.77 KPX p egrave 27.77 KPX p eogonek 27.77 KPX p j 55.54 KPX p o 27.77 KPX p oacute 27.77 KPX p ocircumflex 27.77 KPX p odieresis 27.77 KPX p oe 27.77 KPX p ograve 27.77 KPX p ohungarumlaut 27.77 KPX p otilde 27.77 KPX p q 27.77 KPX p v -27.77 KPX p w -27.77 KPX p x -27.77 KPX p y -27.77 KPX quoteright exclam 111.08 KPX quoteright question 111.08 KPX t w -27.77 KPX t y -27.77 KPX u w -27.77 KPX v a -27.77 KPX v a -55.54 KPX v aacute -27.77 KPX v aacute -55.54 KPX v acircumflex -55.54 KPX v acircumflex -27.77 KPX v acircumflex -27.77 KPX v acircumflex -55.54 KPX v adieresis -27.77 KPX v adieresis -55.54 KPX v ae -27.77 KPX v ae -55.54 KPX v agrave -27.77 KPX v agrave -55.54 KPX v aogonek -55.54 KPX v aogonek -27.77 KPX v aring -55.54 KPX v aring -27.77 KPX v atilde -55.54 KPX v atilde -27.77 KPX v c -27.77 KPX v cacute -55.54 KPX v cacute -27.77 KPX v cacute -27.77 KPX v ccaron -27.77 KPX v ccedilla -27.77 KPX v e -27.77 KPX v eacute -27.77 KPX v ecaron -27.77 KPX v ecircumflex -27.77 KPX v edieresis -27.77 KPX v egrave -27.77 KPX v eogonek -27.77 KPX v o -27.77 KPX v oacute -27.77 KPX v ocircumflex -27.77 KPX v odieresis -27.77 KPX v oe -27.77 KPX v ograve -27.77 KPX v ohungarumlaut -27.77 KPX v otilde -27.77 KPX w a -27.77 KPX w aacute -27.77 KPX w acircumflex -27.77 KPX w acircumflex -27.77 KPX w adieresis -27.77 KPX w ae -27.77 KPX w agrave -27.77 KPX w aogonek -27.77 KPX w aring -27.77 KPX w atilde -27.77 KPX w c -27.77 KPX w cacute -27.77 KPX w cacute -27.77 KPX w ccaron -27.77 KPX w ccedilla -27.77 KPX w e -27.77 KPX w eacute -27.77 KPX w ecaron -27.77 KPX w ecircumflex -27.77 KPX w edieresis -27.77 KPX w egrave -27.77 KPX w eogonek -27.77 KPX w o -27.77 KPX w oacute -27.77 KPX w ocircumflex -27.77 KPX w odieresis -27.77 KPX w oe -27.77 KPX w ograve -27.77 KPX w ohungarumlaut -27.77 KPX w otilde -27.77 KPX y a -27.77 KPX y aacute -27.77 KPX y acircumflex -27.77 KPX y acircumflex -27.77 KPX y adieresis -27.77 KPX y ae -27.77 KPX y agrave -27.77 KPX y aogonek -27.77 KPX y aring -27.77 KPX y atilde -27.77 KPX y cacute -27.77 KPX y comma -83.31 KPX y e -27.77 KPX y eacute -27.77 KPX y ecaron -27.77 KPX y ecircumflex -27.77 KPX y edieresis -27.77 KPX y egrave -27.77 KPX y eogonek -27.77 KPX y o -27.77 KPX y oacute -27.77 KPX y ocircumflex -27.77 KPX y odieresis -27.77 KPX y oe -27.77 KPX y ograve -27.77 KPX y ohungarumlaut -27.77 KPX y otilde -27.77 KPX y period -83.31 EndKernPairs EndKernData EndFontMetrics t1lib-5.1.2/Fonts/afm/dcbx10.afm0000644000175000001440000005300110733501626014665 0ustar rmzusersStartFontMetrics 2.0 FontName dcbx10 FullName dcbx10 FamilyName dcbx10 Weight Medium ItalicAngle 0.000000 IsFixedPitch false UnderlinePosition -133 UnderlineThickness 20 Version 1.0\(Level-B\) FontBBox -82, -308, 1212, 914 Notice Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-B. EncodingScheme FontSpecific CapHeight 686 XHeight 444 Descender -194 Ascender 694 StartCharMetrics 256 C 0 ; WX 574.83 ; N grave ; B 116 507 336 705 ; C 1 ; WX 574.83 ; N acute ; B 238 507 458 705 ; C 2 ; WX 574.83 ; N circumflex ; B 129 527 445 694 ; C 3 ; WX 574.83 ; N tilde ; B 96 577 478 694 ; C 4 ; WX 574.83 ; N dieresis ; B 101 546 473 695 ; C 5 ; WX 574.83 ; N hungarumlaut ; B 138 514 491 711 ; C 6 ; WX 869.22 ; N ring ; B 294 535 536 702 ; C 7 ; WX 574.83 ; N caron ; B 132 517 442 655 ; C 8 ; WX 574.83 ; N breve ; B 108 505 466 694 ; C 9 ; WX 574.83 ; N macron ; B 80 551 494 607 ; C 10 ; WX 319.39 ; N dotaccent ; B 79 535 239 695 ; C 11 ; WX 511 ; N cedilla ; B 132 -201 442 -11 ; C 12 ; WX 319.39 ; N ogonek ; B -10 -219 262 31 ; C 13 ; WX 319.39 ; N quotesinglbase ; B 78 -194 251 160 ; C 14 ; WX 511 ; N guilsinglleft ; B 109 40 375 432 ; C 15 ; WX 511 ; N guilsinglright ; B 109 40 419 432 ; C 16 ; WX 602.61 ; N quotedblleft ; B 132 340 564 694 ; C 17 ; WX 602.61 ; N quotedblright ; B 38 340 470 694 ; C 18 ; WX 602.61 ; N quotedblbase ; B 154 -194 586 160 ; C 19 ; WX 766.5 ; N guillemotleft ; B 109 40 630 432 ; C 20 ; WX 766.5 ; N guillemotright ; B 109 40 674 432 ; C 21 ; WX 574.83 ; N endash ; B 0 254 574 294 ; L hyphen emdash ; C 22 ; WX 1149.72 ; N emdash ; B 0 254 1149 294 ; C 23 ; WX 0 ; N compoundwordmark ; B 0 0 0 0 ; C 24 ; WX 447.11 ; N perthousand ; B 63 -56 383 347 ; C 25 ; WX 319.39 ; N dotlessi ; B 34 0 277 450 ; C 26 ; WX 351.28 ; N dotlessj ; B -82 -194 247 450 ; C 27 ; WX 670.67 ; N ff ; B 31 0 750 700 ; L i ffi ; L l ffl ; C 28 ; WX 638.72 ; N fi ; B 31 0 603 700 ; C 29 ; WX 638.72 ; N fl ; B 31 0 603 700 ; C 30 ; WX 958.11 ; N ffi ; B 31 0 923 700 ; C 31 ; WX 958.11 ; N ffl ; B 31 0 923 700 ; C 32 ; WX 574.83 ; N visiblespace ; B 48 -111 526 251 ; C 33 ; WX 349.89 ; N exclam ; B 94 0 256 705 ; C 34 ; WX 574.83 ; N quotedbl ; B 125 360 450 711 ; C 35 ; WX 958.11 ; N numbersign ; B 64 -194 893 694 ; C 36 ; WX 574.83 ; N dollar ; B 65 -56 511 750 ; C 37 ; WX 958.11 ; N percent ; B 64 -56 893 750 ; C 38 ; WX 894.22 ; N ampersand ; B 48 -11 836 705 ; C 39 ; WX 319.39 ; N quoteright ; B 79 340 255 694 ; L quoteright quotedblright ; C 40 ; WX 447.11 ; N parenleft ; B 107 -251 382 750 ; C 41 ; WX 447.11 ; N parenright ; B 64 -251 339 750 ; C 42 ; WX 574.83 ; N asterisk ; B 73 306 501 750 ; C 43 ; WX 894.22 ; N plus ; B 64 -134 829 633 ; C 44 ; WX 319.39 ; N comma ; B 79 -194 252 160 ; L comma quotedblbase ; C 45 ; WX 383.22 ; N hyphen ; B 13 172 318 273 ; L hyphen endash ; C 46 ; WX 319.39 ; N period ; B 79 0 239 160 ; C 47 ; WX 574.83 ; N slash ; B 64 -250 510 750 ; C 48 ; WX 574.83 ; N zero ; B 45 -11 529 655 ; C 49 ; WX 574.83 ; N one ; B 83 0 494 655 ; C 50 ; WX 574.83 ; N two ; B 57 0 517 655 ; C 51 ; WX 574.83 ; N three ; B 48 -11 526 655 ; C 52 ; WX 574.83 ; N four ; B 32 0 542 656 ; C 53 ; WX 574.83 ; N five ; B 57 -11 517 655 ; C 54 ; WX 574.83 ; N six ; B 48 -11 526 655 ; C 55 ; WX 574.83 ; N seven ; B 64 -11 558 676 ; C 56 ; WX 574.83 ; N eight ; B 48 -11 526 655 ; C 57 ; WX 574.83 ; N nine ; B 48 -11 526 655 ; C 58 ; WX 319.39 ; N colon ; B 79 0 239 444 ; C 59 ; WX 319.39 ; N semicolon ; B 79 -194 242 444 ; C 60 ; WX 894.22 ; N less ; B 96 -76 797 575 ; L less guillemotleft ; C 61 ; WX 894.22 ; N equal ; B 64 118 829 381 ; C 62 ; WX 894.22 ; N greater ; B 96 -76 797 575 ; L greater guillemotright ; C 63 ; WX 542.94 ; N question ; B 64 0 478 700 ; C 64 ; WX 894.22 ; N at ; B 64 0 829 700 ; C 65 ; WX 869.22 ; N A ; B 22 0 808 698 ; C 66 ; WX 817.83 ; N B ; B 20 0 734 686 ; C 67 ; WX 830.33 ; N C ; B 64 -11 765 697 ; C 68 ; WX 881.72 ; N D ; B 20 0 798 686 ; C 69 ; WX 755.39 ; N E ; B 20 0 703 680 ; C 70 ; WX 723.44 ; N F ; B 20 0 655 680 ; C 71 ; WX 904 ; N G ; B 64 -11 845 697 ; C 72 ; WX 899.78 ; N H ; B 20 0 841 686 ; C 73 ; WX 436 ; N I ; B 12 0 386 686 ; C 74 ; WX 594.28 ; N J ; B 19 -11 527 686 ; C 75 ; WX 901.17 ; N K ; B 20 0 833 686 ; C 76 ; WX 691.5 ; N L ; B 20 0 623 686 ; C 77 ; WX 1091.39 ; N M ; B 20 0 1032 686 ; C 78 ; WX 899.78 ; N N ; B 20 0 841 686 ; C 79 ; WX 863.67 ; N O ; B 64 -11 799 697 ; C 80 ; WX 785.94 ; N P ; B 20 0 702 686 ; C 81 ; WX 863.67 ; N Q ; B 64 -194 805 697 ; C 82 ; WX 862.28 ; N R ; B 20 -11 839 686 ; C 83 ; WX 638.72 ; N S ; B 64 -11 574 697 ; C 84 ; WX 799.78 ; N T ; B 43 0 758 675 ; C 85 ; WX 884.5 ; N U ; B 20 -11 826 686 ; C 86 ; WX 869.22 ; N V ; B 7 -8 823 686 ; C 87 ; WX 1188.61 ; N W ; B 5 -8 1145 686 ; C 88 ; WX 869.22 ; N X ; B 15 0 816 686 ; C 89 ; WX 869.22 ; N Y ; B 0 0 830 686 ; C 90 ; WX 702.61 ; N Z ; B 64 0 645 686 ; C 91 ; WX 319.39 ; N bracketleft ; B 102 -250 293 750 ; C 92 ; WX 574.83 ; N backslash ; B 64 -250 510 750 ; C 93 ; WX 319.39 ; N bracketright ; B 25 -250 216 750 ; C 94 ; WX 702.61 ; N asciicircum ; B 132 458 570 632 ; C 95 ; WX 894.22 ; N underscore ; B 96 -308 797 -247 ; C 96 ; WX 319.39 ; N quoteleft ; B 63 340 239 694 ; L quoteleft quotedblleft ; C 97 ; WX 558.89 ; N a ; B 32 0 558 453 ; C 98 ; WX 638.72 ; N b ; B 35 0 600 694 ; C 99 ; WX 511 ; N c ; B 38 0 478 453 ; C 100 ; WX 638.72 ; N d ; B 38 0 603 694 ; C 101 ; WX 527 ; N e ; B 32 0 494 453 ; C 102 ; WX 351.28 ; N f ; B 31 0 430 700 ; L i fi ; L f ff ; L l fl ; C 103 ; WX 574.83 ; N g ; B 32 -201 558 455 ; C 104 ; WX 638.72 ; N h ; B 32 0 606 694 ; C 105 ; WX 319.39 ; N i ; B 34 0 277 695 ; C 106 ; WX 351.28 ; N j ; B -82 -194 247 695 ; C 107 ; WX 606.78 ; N k ; B 35 0 587 694 ; C 108 ; WX 319.39 ; N l ; B 34 0 284 694 ; C 109 ; WX 958.11 ; N m ; B 32 0 927 444 ; C 110 ; WX 638.72 ; N n ; B 32 0 606 444 ; C 111 ; WX 574.83 ; N o ; B 32 0 542 453 ; C 112 ; WX 638.72 ; N p ; B 35 -194 600 444 ; C 113 ; WX 606.78 ; N q ; B 38 -194 603 444 ; C 114 ; WX 473.5 ; N r ; B 35 0 441 444 ; C 115 ; WX 453.5 ; N s ; B 38 0 415 453 ; C 116 ; WX 447.11 ; N t ; B 21 0 382 635 ; C 117 ; WX 638.72 ; N u ; B 32 0 606 450 ; C 118 ; WX 606.78 ; N v ; B 26 0 580 444 ; C 119 ; WX 830.33 ; N w ; B 25 0 804 444 ; C 120 ; WX 606.78 ; N x ; B 22 0 586 444 ; C 121 ; WX 606.78 ; N y ; B 22 -194 580 444 ; C 122 ; WX 511 ; N z ; B 32 0 462 444 ; C 123 ; WX 574.83 ; N braceleft ; B 76 -250 498 750 ; C 124 ; WX 319.39 ; N bar ; B 129 -250 190 750 ; C 125 ; WX 574.83 ; N braceright ; B 76 -250 498 750 ; C 126 ; WX 702.61 ; N asciitilde ; B 96 577 606 694 ; C 127 ; WX 383.22 ; N hyphen ; B 13 172 318 273 ; C 128 ; WX 869.22 ; N Abreve ; B 22 0 808 894 ; C 129 ; WX 869.22 ; N Aogonek ; B 22 -207 856 698 ; C 130 ; WX 830.33 ; N Cacute ; B 64 -11 765 905 ; C 131 ; WX 830.33 ; N Ccaron ; B 64 -11 765 864 ; C 132 ; WX 881.72 ; N Dcaron ; B 20 0 798 864 ; C 133 ; WX 755.39 ; N Ecaron ; B 20 0 703 863 ; C 134 ; WX 755.39 ; N Eogonek ; B 20 -207 703 680 ; C 135 ; WX 904 ; N Gbreve ; B 64 -11 845 894 ; C 136 ; WX 691.5 ; N Lacute ; B 20 0 623 905 ; C 137 ; WX 691.5 ; N Lquoteright ; B 20 0 647 686 ; C 138 ; WX 691.5 ; N Lslash ; B 20 0 623 686 ; C 139 ; WX 899.78 ; N Nacute ; B 20 0 841 905 ; C 140 ; WX 899.78 ; N Ncaron ; B 20 0 841 863 ; C 141 ; WX 841.44 ; N Eng ; B 32 -11 783 686 ; C 142 ; WX 863.67 ; N Ohungarumlaut ; B 64 -11 799 904 ; C 143 ; WX 862.28 ; N Racute ; B 20 -11 839 905 ; C 144 ; WX 862.28 ; N Rcaron ; B 20 -11 839 864 ; C 145 ; WX 638.72 ; N Sacute ; B 64 -11 574 905 ; C 146 ; WX 638.72 ; N Scaron ; B 64 -11 574 864 ; C 147 ; WX 638.72 ; N Scedilla ; B 64 -201 574 697 ; C 148 ; WX 799.78 ; N Tcaron ; B 43 0 758 863 ; C 149 ; WX 799.78 ; N Tcedilla ; B 43 -201 758 675 ; C 150 ; WX 884.5 ; N Uhungarumlaut ; B 20 -11 826 904 ; C 151 ; WX 884.5 ; N Uring ; B 20 -11 826 902 ; C 152 ; WX 869.22 ; N Ydieresis ; B 0 0 830 894 ; C 153 ; WX 702.61 ; N Zacute ; B 64 0 645 905 ; C 154 ; WX 702.61 ; N Zcaron ; B 64 0 645 864 ; C 155 ; WX 702.61 ; N Zdotaccent ; B 64 0 645 894 ; C 156 ; WX 1010.83 ; N IJ ; B 12 -11 925 686 ; C 157 ; WX 436 ; N Idotaccent ; B 12 0 386 902 ; C 158 ; WX 638.72 ; N dbar ; B 38 0 603 694 ; C 159 ; WX 529 ; N section ; B 80 -194 448 700 ; C 160 ; WX 558.89 ; N abreve ; B 32 0 558 694 ; C 161 ; WX 558.89 ; N aogonek ; B 32 -219 558 453 ; C 162 ; WX 511 ; N cacute ; B 38 0 478 664 ; C 163 ; WX 511 ; N ccaron ; B 38 0 478 623 ; C 164 ; WX 810.22 ; N dquoteright ; B 38 0 798 694 ; C 165 ; WX 527 ; N ecaron ; B 32 0 494 623 ; C 166 ; WX 527 ; N eogonek ; B 32 -219 494 453 ; C 167 ; WX 574.83 ; N gbreve ; B 32 -201 558 694 ; C 168 ; WX 319.39 ; N lacute ; B 34 0 332 914 ; C 169 ; WX 502 ; N lquoteright ; B 34 0 478 694 ; C 170 ; WX 319.39 ; N lslash ; B 4 0 314 694 ; C 171 ; WX 638.72 ; N nacute ; B 32 0 606 664 ; C 172 ; WX 638.72 ; N ncaron ; B 32 0 606 623 ; C 173 ; WX 638.72 ; N eng ; B 32 -194 537 444 ; C 174 ; WX 574.83 ; N ohungarumlaut ; B 32 0 606 663 ; C 175 ; WX 473.5 ; N racute ; B 35 0 441 664 ; C 176 ; WX 473.5 ; N rcaron ; B 35 0 441 623 ; C 177 ; WX 453.5 ; N sacute ; B 38 0 415 664 ; C 178 ; WX 453.5 ; N scaron ; B 38 0 415 622 ; C 179 ; WX 453.5 ; N scedilla ; B 38 -201 415 453 ; C 180 ; WX 506.83 ; N tquoteright ; B 21 0 494 708 ; C 181 ; WX 447.11 ; N tcedilla ; B 21 -201 430 635 ; C 182 ; WX 638.72 ; N uhungarumlaut ; B 32 0 638 663 ; C 183 ; WX 638.72 ; N uring ; B 32 0 606 661 ; C 184 ; WX 606.78 ; N ydieresis ; B 22 -194 580 652 ; C 185 ; WX 511 ; N zacute ; B 32 0 462 664 ; C 186 ; WX 511 ; N zcaron ; B 32 0 462 623 ; C 187 ; WX 511 ; N zdotaccent ; B 32 0 463 694 ; C 188 ; WX 670.67 ; N ij ; B 43 -194 574 695 ; C 189 ; WX 349.89 ; N exclamdown ; B 94 -205 256 500 ; C 190 ; WX 542.94 ; N questiondown ; B 64 -194 478 500 ; C 191 ; WX 734.56 ; N sterling ; B 64 0 725 706 ; C 192 ; WX 869.22 ; N Agrave ; B 22 0 808 905 ; C 193 ; WX 869.22 ; N Aacute ; B 22 0 808 905 ; C 194 ; WX 869.22 ; N Acircumflex ; B 22 0 808 894 ; C 195 ; WX 869.22 ; N Atilde ; B 22 0 808 894 ; C 196 ; WX 869.22 ; N Adieresis ; B 22 0 808 894 ; C 197 ; WX 869.22 ; N Aring ; B 22 0 808 861 ; C 198 ; WX 1041.39 ; N AE ; B 22 0 989 686 ; C 199 ; WX 830.33 ; N Ccedilla ; B 64 -201 765 697 ; C 200 ; WX 755.39 ; N Egrave ; B 20 0 703 905 ; C 201 ; WX 755.39 ; N Eacute ; B 20 0 703 905 ; C 202 ; WX 755.39 ; N Ecircumflex ; B 20 0 703 894 ; C 203 ; WX 755.39 ; N Edieresis ; B 20 0 703 894 ; C 204 ; WX 436 ; N Igrave ; B 12 0 386 905 ; C 205 ; WX 436 ; N Iacute ; B 12 0 386 905 ; C 206 ; WX 436 ; N Icircumflex ; B 12 0 386 894 ; C 207 ; WX 436 ; N Idieresis ; B 12 0 386 894 ; C 208 ; WX 881.72 ; N Eth ; B 20 0 798 686 ; C 209 ; WX 899.78 ; N Ntilde ; B 20 0 841 894 ; C 210 ; WX 863.67 ; N Ograve ; B 64 -11 799 905 ; C 211 ; WX 863.67 ; N Oacute ; B 64 -11 799 905 ; C 212 ; WX 863.67 ; N Ocircumflex ; B 64 -11 799 894 ; C 213 ; WX 863.67 ; N Otilde ; B 64 -11 799 894 ; C 214 ; WX 863.67 ; N Odieresis ; B 64 -11 799 894 ; C 215 ; WX 1169.17 ; N OE ; B 64 -11 1117 697 ; C 216 ; WX 894.22 ; N Oslash ; B 64 -61 829 747 ; C 217 ; WX 884.5 ; N Ugrave ; B 20 -11 826 905 ; C 218 ; WX 884.5 ; N Uacute ; B 20 -11 826 905 ; C 219 ; WX 884.5 ; N Ucircumflex ; B 20 -11 826 894 ; C 220 ; WX 884.5 ; N Udieresis ; B 20 -11 826 894 ; C 221 ; WX 869.22 ; N Yacute ; B 0 0 830 905 ; C 222 ; WX 722 ; N Thorn ; B 20 0 638 686 ; C 223 ; WX 1277.44 ; N Germandbls ; B 64 -11 1212 697 ; C 224 ; WX 558.89 ; N agrave ; B 32 0 558 664 ; C 225 ; WX 558.89 ; N aacute ; B 32 0 558 664 ; C 226 ; WX 558.89 ; N acircumflex ; B 32 0 558 653 ; C 227 ; WX 558.89 ; N atilde ; B 32 0 558 694 ; C 228 ; WX 558.89 ; N adieresis ; B 32 0 558 652 ; C 229 ; WX 558.89 ; N aring ; B 32 0 558 661 ; C 230 ; WX 830.33 ; N ae ; B 35 0 797 453 ; C 231 ; WX 511 ; N ccedilla ; B 38 -201 478 453 ; C 232 ; WX 527 ; N egrave ; B 32 0 494 664 ; C 233 ; WX 527 ; N eacute ; B 32 0 494 664 ; C 234 ; WX 527 ; N ecircumflex ; B 32 0 494 653 ; C 235 ; WX 527 ; N edieresis ; B 32 0 494 652 ; C 236 ; WX 319.39 ; N igrave ; B -14 0 277 664 ; C 237 ; WX 319.39 ; N iacute ; B 34 0 332 664 ; C 238 ; WX 319.39 ; N icircumflex ; B -1 0 319 653 ; C 239 ; WX 383.22 ; N idieresis ; B -27 0 346 652 ; C 240 ; WX 574.83 ; N eth ; B 32 0 542 694 ; C 241 ; WX 638.72 ; N ntilde ; B 32 0 606 694 ; C 242 ; WX 574.83 ; N ograve ; B 32 0 542 664 ; C 243 ; WX 574.83 ; N oacute ; B 32 0 542 664 ; C 244 ; WX 574.83 ; N ocircumflex ; B 32 0 542 653 ; C 245 ; WX 574.83 ; N otilde ; B 32 0 542 694 ; C 246 ; WX 574.83 ; N odieresis ; B 32 0 542 652 ; C 247 ; WX 894.22 ; N oe ; B 32 0 861 453 ; C 248 ; WX 574.83 ; N oslash ; B 32 -107 542 552 ; C 249 ; WX 638.72 ; N ugrave ; B 32 0 606 664 ; C 250 ; WX 638.72 ; N uacute ; B 32 0 606 664 ; C 251 ; WX 638.72 ; N ucircumflex ; B 32 0 606 653 ; C 252 ; WX 638.72 ; N udieresis ; B 32 0 606 652 ; C 253 ; WX 606.78 ; N yacute ; B 22 -194 580 664 ; C 254 ; WX 638.72 ; N thorn ; B 34 -212 600 694 ; C 255 ; WX 597.06 ; N germandbls ; B 35 0 564 700 ; EndCharMetrics StartKernData StartKernPairs 471 KPX A C -31.94 KPX A G -31.94 KPX A O -31.94 KPX A Q -31.94 KPX A T -95.81 KPX A U -31.94 KPX A V -127.75 KPX A W -127.75 KPX A Y -95.81 KPX A t -31.94 KPX Aacute C -31.94 KPX Aacute G -31.94 KPX Aacute O -31.94 KPX Aacute Q -31.94 KPX Aacute T -95.81 KPX Aacute U -31.94 KPX Aacute V -127.75 KPX Aacute W -127.75 KPX Aacute Y -95.81 KPX Aacute t -31.94 KPX Abreve C -31.94 KPX Abreve G -31.94 KPX Abreve O -31.94 KPX Abreve Q -31.94 KPX Abreve T -95.81 KPX Abreve U -31.94 KPX Abreve V -127.75 KPX Abreve W -127.75 KPX Abreve Y -95.81 KPX Abreve t -31.94 KPX Acircumflex C -31.94 KPX Acircumflex G -31.94 KPX Acircumflex O -31.94 KPX Acircumflex Q -31.94 KPX Acircumflex T -95.81 KPX Acircumflex U -31.94 KPX Acircumflex V -127.75 KPX Acircumflex W -127.75 KPX Acircumflex Y -95.81 KPX Acircumflex t -31.94 KPX Adieresis C -31.94 KPX Adieresis G -31.94 KPX Adieresis O -31.94 KPX Adieresis Q -31.94 KPX Adieresis T -95.81 KPX Adieresis U -31.94 KPX Adieresis V -127.75 KPX Adieresis W -127.75 KPX Adieresis Y -95.81 KPX Adieresis t -31.94 KPX Agrave C -31.94 KPX Agrave G -31.94 KPX Agrave O -31.94 KPX Agrave Q -31.94 KPX Agrave T -95.81 KPX Agrave U -31.94 KPX Agrave V -127.75 KPX Agrave W -127.75 KPX Agrave Y -95.81 KPX Agrave t -31.94 KPX Aogonek C -31.94 KPX Aogonek G -31.94 KPX Aogonek O -31.94 KPX Aogonek Q -31.94 KPX Aogonek T -95.81 KPX Aogonek U -31.94 KPX Aogonek V -127.75 KPX Aogonek W -127.75 KPX Aogonek Y -95.81 KPX Aogonek t -31.94 KPX Aring C -31.94 KPX Aring G -31.94 KPX Aring O -31.94 KPX Aring Q -31.94 KPX Aring T -95.81 KPX Aring U -31.94 KPX Aring V -127.75 KPX Aring W -127.75 KPX Aring Y -95.81 KPX Aring t -31.94 KPX Atilde C -31.94 KPX Atilde G -31.94 KPX Atilde O -31.94 KPX Atilde Q -31.94 KPX Atilde T -95.81 KPX Atilde U -31.94 KPX Atilde V -127.75 KPX Atilde W -127.75 KPX Atilde Y -95.81 KPX Atilde t -31.94 KPX D A -31.94 KPX D V -31.94 KPX D W -31.94 KPX D X -31.94 KPX D Y -31.94 KPX F A -127.75 KPX F C -31.94 KPX F G -31.94 KPX F O -31.94 KPX F Q -31.94 KPX F a -95.81 KPX F e -95.81 KPX F o -95.81 KPX F r -95.81 KPX F u -95.81 KPX I I 31.94 KPX K C -31.94 KPX K G -31.94 KPX K O -31.94 KPX K Q -31.94 KPX L T -95.81 KPX L V -127.75 KPX L W -127.75 KPX L Y -95.81 KPX O A -31.94 KPX O V -31.94 KPX O W -31.94 KPX O X -31.94 KPX O Y -31.94 KPX P A -95.81 KPX P a -31.94 KPX P aacute -31.94 KPX P acircumflex -31.94 KPX P acircumflex -31.94 KPX P adieresis -31.94 KPX P ae -31.94 KPX P agrave -31.94 KPX P aogonek -31.94 KPX P aring -31.94 KPX P atilde -31.94 KPX P cacute -31.94 KPX P comma -95.81 KPX P e -31.94 KPX P eacute -31.94 KPX P ecaron -31.94 KPX P ecircumflex -31.94 KPX P edieresis -31.94 KPX P egrave -31.94 KPX P eogonek -31.94 KPX P o -31.94 KPX P oacute -31.94 KPX P ocircumflex -31.94 KPX P odieresis -31.94 KPX P oe -31.94 KPX P ograve -31.94 KPX P ohungarumlaut -31.94 KPX P otilde -31.94 KPX P period -95.81 KPX R C -31.94 KPX R G -31.94 KPX R O -31.94 KPX R Q -31.94 KPX R T -95.81 KPX R U -31.94 KPX R V -127.75 KPX R W -127.75 KPX R Y -95.81 KPX R t -31.94 KPX T A -95.81 KPX T a -95.81 KPX T e -95.81 KPX T o -95.81 KPX T r -95.81 KPX T u -95.81 KPX T y -31.94 KPX V A -127.75 KPX V C -31.94 KPX V G -31.94 KPX V O -31.94 KPX V Q -31.94 KPX V a -95.81 KPX V e -95.81 KPX V o -95.81 KPX V r -95.81 KPX V u -95.81 KPX W A -127.75 KPX W C -31.94 KPX W G -31.94 KPX W O -31.94 KPX W Q -31.94 KPX W a -95.81 KPX W e -95.81 KPX W o -95.81 KPX W r -95.81 KPX W u -95.81 KPX X C -31.94 KPX X G -31.94 KPX X O -31.94 KPX X Q -31.94 KPX Y A -95.81 KPX Y a -95.81 KPX Y e -95.81 KPX Y o -95.81 KPX Y r -95.81 KPX Y u -95.81 KPX a j 63.87 KPX a v -31.94 KPX a w -31.94 KPX a y -31.94 KPX b c 31.94 KPX b cacute 31.94 KPX b ccaron 31.94 KPX b ccedilla 31.94 KPX b d 31.94 KPX b e 31.94 KPX b eacute 31.94 KPX b ecaron 31.94 KPX b ecircumflex 31.94 KPX b edieresis 31.94 KPX b egrave 31.94 KPX b eogonek 31.94 KPX b j 63.87 KPX b o 31.94 KPX b oacute 31.94 KPX b ocircumflex 31.94 KPX b odieresis 31.94 KPX b oe 31.94 KPX b ograve 31.94 KPX b ohungarumlaut 31.94 KPX b otilde 31.94 KPX b q 31.94 KPX b v -31.94 KPX b w -31.94 KPX b x -31.94 KPX b y -31.94 KPX c h -31.94 KPX c k -31.94 KPX f bracketright 109 KPX f exclam 109 KPX f parenright 109 KPX f question 109 KPX f quoteright 109 KPX ff bracketright 109 KPX ff exclam 109 KPX ff parenright 109 KPX ff question 109 KPX ff quoteright 109 KPX g j 31.94 KPX h b -31.94 KPX h t -31.94 KPX h u -31.94 KPX h uacute -31.94 KPX h ucircumflex -31.94 KPX h udieresis -31.94 KPX h ugrave -31.94 KPX h uhungarumlaut -31.94 KPX h uring -31.94 KPX h v -31.94 KPX h w -31.94 KPX h y -31.94 KPX k a -31.94 KPX k a -63.87 KPX k aacute -31.94 KPX k aacute -63.87 KPX k acircumflex -63.87 KPX k acircumflex -63.87 KPX k acircumflex -31.94 KPX k acircumflex -31.94 KPX k adieresis -31.94 KPX k adieresis -63.87 KPX k ae -63.87 KPX k ae -31.94 KPX k agrave -63.87 KPX k agrave -31.94 KPX k aogonek -63.87 KPX k aogonek -31.94 KPX k aring -63.87 KPX k aring -31.94 KPX k atilde -31.94 KPX k atilde -63.87 KPX k c -31.94 KPX k cacute -31.94 KPX k cacute -31.94 KPX k cacute -63.87 KPX k ccaron -31.94 KPX k ccedilla -31.94 KPX k e -31.94 KPX k eacute -31.94 KPX k ecaron -31.94 KPX k ecircumflex -31.94 KPX k edieresis -31.94 KPX k egrave -31.94 KPX k eogonek -31.94 KPX k o -31.94 KPX k oacute -31.94 KPX k ocircumflex -31.94 KPX k odieresis -31.94 KPX k oe -31.94 KPX k ograve -31.94 KPX k ohungarumlaut -31.94 KPX k otilde -31.94 KPX m b -31.94 KPX m t -31.94 KPX m u -31.94 KPX m uacute -31.94 KPX m ucircumflex -31.94 KPX m udieresis -31.94 KPX m ugrave -31.94 KPX m uhungarumlaut -31.94 KPX m uring -31.94 KPX m v -31.94 KPX m w -31.94 KPX m y -31.94 KPX n b -31.94 KPX n t -31.94 KPX n u -31.94 KPX n uacute -31.94 KPX n ucircumflex -31.94 KPX n udieresis -31.94 KPX n ugrave -31.94 KPX n uhungarumlaut -31.94 KPX n uring -31.94 KPX n v -31.94 KPX n w -31.94 KPX n y -31.94 KPX o c 31.94 KPX o cacute 31.94 KPX o ccaron 31.94 KPX o ccedilla 31.94 KPX o d 31.94 KPX o e 31.94 KPX o eacute 31.94 KPX o ecaron 31.94 KPX o ecircumflex 31.94 KPX o edieresis 31.94 KPX o egrave 31.94 KPX o eogonek 31.94 KPX o j 63.87 KPX o o 31.94 KPX o oacute 31.94 KPX o ocircumflex 31.94 KPX o odieresis 31.94 KPX o oe 31.94 KPX o ograve 31.94 KPX o ohungarumlaut 31.94 KPX o otilde 31.94 KPX o q 31.94 KPX o v -31.94 KPX o w -31.94 KPX o x -31.94 KPX o y -31.94 KPX p c 31.94 KPX p cacute 31.94 KPX p ccaron 31.94 KPX p ccedilla 31.94 KPX p d 31.94 KPX p e 31.94 KPX p eacute 31.94 KPX p ecaron 31.94 KPX p ecircumflex 31.94 KPX p edieresis 31.94 KPX p egrave 31.94 KPX p eogonek 31.94 KPX p j 63.87 KPX p o 31.94 KPX p oacute 31.94 KPX p ocircumflex 31.94 KPX p odieresis 31.94 KPX p oe 31.94 KPX p ograve 31.94 KPX p ohungarumlaut 31.94 KPX p otilde 31.94 KPX p q 31.94 KPX p v -31.94 KPX p w -31.94 KPX p x -31.94 KPX p y -31.94 KPX quoteright exclam 127.75 KPX quoteright question 127.75 KPX t w -31.94 KPX t y -31.94 KPX u w -31.94 KPX v a -31.94 KPX v a -63.87 KPX v aacute -31.94 KPX v aacute -63.87 KPX v acircumflex -63.87 KPX v acircumflex -31.94 KPX v acircumflex -31.94 KPX v acircumflex -63.87 KPX v adieresis -31.94 KPX v adieresis -63.87 KPX v ae -31.94 KPX v ae -63.87 KPX v agrave -31.94 KPX v agrave -63.87 KPX v aogonek -63.87 KPX v aogonek -31.94 KPX v aring -63.87 KPX v aring -31.94 KPX v atilde -63.87 KPX v atilde -31.94 KPX v c -31.94 KPX v cacute -63.87 KPX v cacute -31.94 KPX v cacute -31.94 KPX v ccaron -31.94 KPX v ccedilla -31.94 KPX v e -31.94 KPX v eacute -31.94 KPX v ecaron -31.94 KPX v ecircumflex -31.94 KPX v edieresis -31.94 KPX v egrave -31.94 KPX v eogonek -31.94 KPX v o -31.94 KPX v oacute -31.94 KPX v ocircumflex -31.94 KPX v odieresis -31.94 KPX v oe -31.94 KPX v ograve -31.94 KPX v ohungarumlaut -31.94 KPX v otilde -31.94 KPX w a -31.94 KPX w aacute -31.94 KPX w acircumflex -31.94 KPX w acircumflex -31.94 KPX w adieresis -31.94 KPX w ae -31.94 KPX w agrave -31.94 KPX w aogonek -31.94 KPX w aring -31.94 KPX w atilde -31.94 KPX w c -31.94 KPX w cacute -31.94 KPX w cacute -31.94 KPX w ccaron -31.94 KPX w ccedilla -31.94 KPX w e -31.94 KPX w eacute -31.94 KPX w ecaron -31.94 KPX w ecircumflex -31.94 KPX w edieresis -31.94 KPX w egrave -31.94 KPX w eogonek -31.94 KPX w o -31.94 KPX w oacute -31.94 KPX w ocircumflex -31.94 KPX w odieresis -31.94 KPX w oe -31.94 KPX w ograve -31.94 KPX w ohungarumlaut -31.94 KPX w otilde -31.94 KPX y a -31.94 KPX y aacute -31.94 KPX y acircumflex -31.94 KPX y acircumflex -31.94 KPX y adieresis -31.94 KPX y ae -31.94 KPX y agrave -31.94 KPX y aogonek -31.94 KPX y aring -31.94 KPX y atilde -31.94 KPX y cacute -31.94 KPX y comma -95.81 KPX y e -31.94 KPX y eacute -31.94 KPX y ecaron -31.94 KPX y ecircumflex -31.94 KPX y edieresis -31.94 KPX y egrave -31.94 KPX y eogonek -31.94 KPX y o -31.94 KPX y oacute -31.94 KPX y ocircumflex -31.94 KPX y odieresis -31.94 KPX y oe -31.94 KPX y ograve -31.94 KPX y ohungarumlaut -31.94 KPX y otilde -31.94 KPX y period -95.81 EndKernPairs EndKernData EndFontMetrics t1lib-5.1.2/Fonts/afm/bchbi.afm0000644000175000001440000005312310733501626014660 0ustar rmzusersStartFontMetrics 2.0 Comment Bitstream AFM Data Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA. Comment All rights reserved Comment Confidential and proprietary to Bitstream Inc. Comment Bitstream is a registered trademark of Bitstream Inc. Comment bitsClassification Transitional 801 Comment bitsFontID 0633 Comment bitsManufacturingDate Tue Nov 6 02:16:48 1990 Comment bitsLayoutName clayout.adobe.text228.new Comment UniqueID 15530633 FontName CharterBT-BoldItalic FullName Bitstream Charter Bold Italic FamilyName Bitstream Charter Weight Bold ItalicAngle 11.0000 IsFixedPitch false FontBBox -190 -237 1243 972 UnderlinePosition -109 UnderlineThickness 91 Version 1.0 [UFO] Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential. EncodingScheme AdobeStandardEncoding CapHeight 672 XHeight 495 Ascender 736 Descender -218 StartCharMetrics 228 C 32 ; WX 293 ; N space ; B 0 0 0 0 ; C 33 ; WX 340 ; N exclam ; B 43 -8 295 685 ; C 34 ; WX 339 ; N quotedbl ; B 40 418 299 715 ; C 35 ; WX 751 ; N numbersign ; B 56 -24 689 710 ; C 36 ; WX 586 ; N dollar ; B 24 -105 544 745 ; C 37 ; WX 898 ; N percent ; B 54 -12 846 683 ; C 38 ; WX 730 ; N ampersand ; B 19 -13 698 685 ; C 39 ; WX 261 ; N quoteright ; B 63 395 269 699 ; C 40 ; WX 420 ; N parenleft ; B 66 -142 459 718 ; C 41 ; WX 420 ; N parenright ; B -62 -142 331 718 ; C 42 ; WX 500 ; N asterisk ; B 96 338 490 718 ; C 43 ; WX 833 ; N plus ; B 124 0 710 597 ; C 44 ; WX 292 ; N comma ; B -57 -176 168 130 ; C 45 ; WX 320 ; N hyphen ; B 9 191 282 291 ; C 46 ; WX 294 ; N period ; B 22 -6 175 149 ; C 47 ; WX 481 ; N slash ; B -119 -93 525 672 ; C 48 ; WX 586 ; N zero ; B 29 -13 556 684 ; C 49 ; WX 586 ; N one ; B 79 0 438 681 ; C 50 ; WX 586 ; N two ; B -4 0 531 683 ; C 51 ; WX 586 ; N three ; B 11 -11 540 683 ; C 52 ; WX 586 ; N four ; B -2 -33 551 677 ; C 53 ; WX 586 ; N five ; B 19 -10 552 672 ; C 54 ; WX 586 ; N six ; B 31 -12 532 719 ; C 55 ; WX 586 ; N seven ; B 74 -34 612 672 ; C 56 ; WX 586 ; N eight ; B 24 -18 549 686 ; C 57 ; WX 586 ; N nine ; B 47 -58 558 684 ; C 58 ; WX 346 ; N colon ; B 49 -6 263 487 ; C 59 ; WX 346 ; N semicolon ; B -25 -176 263 487 ; C 60 ; WX 833 ; N less ; B 128 22 704 574 ; C 61 ; WX 833 ; N equal ; B 124 156 710 440 ; C 62 ; WX 833 ; N greater ; B 129 22 704 574 ; C 63 ; WX 492 ; N question ; B 74 -8 471 684 ; C 64 ; WX 936 ; N at ; B 76 -154 871 693 ; C 65 ; WX 634 ; N A ; B -68 0 613 678 ; C 66 ; WX 628 ; N B ; B -24 0 580 672 ; C 67 ; WX 625 ; N C ; B 36 -13 637 684 ; C 68 ; WX 702 ; N D ; B -26 0 661 672 ; C 69 ; WX 581 ; N E ; B -22 0 580 672 ; C 70 ; WX 539 ; N F ; B -23 0 570 671 ; C 71 ; WX 693 ; N G ; B 38 -12 671 685 ; C 72 ; WX 747 ; N H ; B -25 0 768 672 ; C 73 ; WX 353 ; N I ; B -21 0 370 672 ; C 74 ; WX 474 ; N J ; B -46 -14 497 672 ; C 75 ; WX 653 ; N K ; B -26 -7 695 672 ; C 76 ; WX 529 ; N L ; B -26 0 489 672 ; C 77 ; WX 894 ; N M ; B -25 0 913 672 ; C 78 ; WX 712 ; N N ; B -27 0 744 672 ; C 79 ; WX 729 ; N O ; B 37 -14 690 684 ; C 80 ; WX 581 ; N P ; B -24 0 583 672 ; C 81 ; WX 729 ; N Q ; B 36 -165 705 684 ; C 82 ; WX 645 ; N R ; B -22 -7 632 671 ; C 83 ; WX 553 ; N S ; B 23 -8 509 684 ; C 84 ; WX 584 ; N T ; B 37 0 628 672 ; C 85 ; WX 701 ; N U ; B 71 -13 735 672 ; C 86 ; WX 617 ; N V ; B 26 -3 677 672 ; C 87 ; WX 921 ; N W ; B 43 0 963 672 ; C 88 ; WX 608 ; N X ; B -66 0 658 672 ; C 89 ; WX 586 ; N Y ; B 26 0 656 672 ; C 90 ; WX 572 ; N Z ; B -18 0 581 672 ; C 91 ; WX 449 ; N bracketleft ; B 51 -133 472 709 ; C 92 ; WX 481 ; N backslash ; B 21 -93 505 672 ; C 93 ; WX 449 ; N bracketright ; B -43 -133 379 709 ; C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ; C 95 ; WX 500 ; N underscore ; B 0 -237 500 -152 ; C 96 ; WX 261 ; N quoteleft ; B 76 395 282 699 ; C 97 ; WX 572 ; N a ; B 18 -9 548 494 ; C 98 ; WX 556 ; N b ; B 26 -9 508 736 ; C 99 ; WX 437 ; N c ; B 15 -11 410 493 ; C 100 ; WX 579 ; N d ; B 21 -9 558 736 ; C 101 ; WX 464 ; N e ; B 18 -10 431 491 ; C 102 ; WX 325 ; N f ; B -155 -214 447 733 ; C 103 ; WX 517 ; N g ; B -31 -218 528 492 ; C 104 ; WX 595 ; N h ; B 20 -7 561 736 ; C 105 ; WX 318 ; N i ; B 28 -7 294 725 ; C 106 ; WX 297 ; N j ; B -146 -215 285 724 ; C 107 ; WX 559 ; N k ; B 22 -8 544 736 ; C 108 ; WX 307 ; N l ; B 34 -9 280 736 ; C 109 ; WX 883 ; N m ; B 32 -7 852 494 ; C 110 ; WX 600 ; N n ; B 26 -7 569 494 ; C 111 ; WX 550 ; N o ; B 18 -11 501 493 ; C 112 ; WX 565 ; N p ; B -64 -218 519 494 ; C 113 ; WX 562 ; N q ; B 23 -218 516 496 ; C 114 ; WX 449 ; N r ; B 26 0 451 494 ; C 115 ; WX 403 ; N s ; B -12 -10 363 494 ; C 116 ; WX 366 ; N t ; B 39 -8 370 601 ; C 117 ; WX 599 ; N u ; B 28 -10 572 489 ; C 118 ; WX 492 ; N v ; B -8 -1 472 495 ; C 119 ; WX 768 ; N w ; B -2 0 741 495 ; C 120 ; WX 510 ; N x ; B -38 -7 512 495 ; C 121 ; WX 494 ; N y ; B -79 -216 514 494 ; C 122 ; WX 465 ; N z ; B -20 -14 461 503 ; C 123 ; WX 487 ; N braceleft ; B 47 -134 430 705 ; C 124 ; WX 500 ; N bar ; B 207 -237 294 764 ; C 125 ; WX 487 ; N braceright ; B 58 -134 441 705 ; C 126 ; WX 833 ; N asciitilde ; B 86 212 747 384 ; C 161 ; WX 340 ; N exclamdown ; B 42 -8 294 685 ; C 162 ; WX 586 ; N cent ; B 45 -104 535 610 ; C 163 ; WX 586 ; N sterling ; B -12 0 562 677 ; C 164 ; WX 167 ; N fraction ; B -190 0 353 672 ; C 165 ; WX 601 ; N yen ; B 9 0 652 668 ; C 166 ; WX 586 ; N florin ; B -63 -149 586 683 ; C 167 ; WX 500 ; N section ; B -11 -142 490 720 ; C 168 ; WX 606 ; N currency ; B 36 166 571 699 ; C 169 ; WX 175 ; N quotesingle ; B 40 418 135 715 ; C 170 ; WX 481 ; N quotedblleft ; B 77 395 504 699 ; C 171 ; WX 450 ; N guillemotleft ; B 10 54 429 425 ; C 172 ; WX 266 ; N guilsinglleft ; B 10 54 228 425 ; C 173 ; WX 266 ; N guilsinglright ; B -13 54 205 425 ; C 174 ; WX 621 ; N fi ; B -154 -214 600 735 ; C 175 ; WX 629 ; N fl ; B -154 -214 603 736 ; C 177 ; WX 500 ; N endash ; B -26 195 498 286 ; C 178 ; WX 500 ; N dagger ; B 44 -130 511 718 ; C 179 ; WX 500 ; N daggerdbl ; B -25 -132 511 718 ; C 180 ; WX 292 ; N periodcentered ; B 70 258 223 413 ; C 182 ; WX 492 ; N paragraph ; B 18 -79 467 672 ; C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ; C 184 ; WX 261 ; N quotesinglbase ; B -54 -174 151 130 ; C 185 ; WX 481 ; N quotedblbase ; B -51 -174 375 130 ; C 186 ; WX 481 ; N quotedblright ; B 64 395 490 699 ; C 187 ; WX 450 ; N guillemotright ; B -13 54 406 425 ; C 188 ; WX 1000 ; N ellipsis ; B 41 -6 862 149 ; C 189 ; WX 1291 ; N perthousand ; B 54 -12 1243 683 ; C 191 ; WX 492 ; N questiondown ; B 6 -8 400 684 ; C 193 ; WX 500 ; N grave ; B 164 551 349 742 ; C 194 ; WX 500 ; N acute ; B 247 551 506 742 ; C 195 ; WX 500 ; N circumflex ; B 137 551 446 742 ; C 196 ; WX 500 ; N tilde ; B 132 570 486 723 ; C 197 ; WX 500 ; N macron ; B 137 607 482 675 ; C 198 ; WX 500 ; N breve ; B 167 567 477 719 ; C 199 ; WX 500 ; N dotaccent ; B 237 576 370 713 ; C 200 ; WX 500 ; N dieresis ; B 137 578 472 711 ; C 202 ; WX 500 ; N ring ; B 199 551 428 780 ; C 203 ; WX 500 ; N cedilla ; B 58 -230 279 0 ; C 205 ; WX 500 ; N hungarumlaut ; B 150 551 578 742 ; C 206 ; WX 500 ; N ogonek ; B 83 -225 243 0 ; C 207 ; WX 500 ; N caron ; B 174 551 483 742 ; C 208 ; WX 1000 ; N emdash ; B -22 195 1000 286 ; C 225 ; WX 894 ; N AE ; B -103 0 896 672 ; C 227 ; WX 429 ; N ordfeminine ; B 13 318 411 671 ; C 232 ; WX 529 ; N Lslash ; B -26 0 489 672 ; C 233 ; WX 729 ; N Oslash ; B 37 -82 691 751 ; C 234 ; WX 1003 ; N OE ; B 37 -13 999 684 ; C 235 ; WX 413 ; N ordmasculine ; B 13 317 376 671 ; C 241 ; WX 719 ; N ae ; B 4 -9 684 494 ; C 245 ; WX 318 ; N dotlessi ; B 28 -7 294 494 ; C 248 ; WX 307 ; N lslash ; B -17 -9 331 736 ; C 249 ; WX 550 ; N oslash ; B 19 -87 501 568 ; C 250 ; WX 795 ; N oe ; B 20 -10 759 494 ; C 251 ; WX 622 ; N germandbls ; B -161 -214 572 738 ; C -1 ; WX 634 ; N Aacute ; B -68 0 613 928 ; C -1 ; WX 634 ; N Acircumflex ; B -68 0 613 928 ; C -1 ; WX 634 ; N Adieresis ; B -68 0 613 897 ; C -1 ; WX 634 ; N Agrave ; B -68 0 613 928 ; C -1 ; WX 634 ; N Aring ; B -68 0 613 972 ; C -1 ; WX 634 ; N Atilde ; B -68 0 613 909 ; C -1 ; WX 625 ; N Ccedilla ; B 36 -230 637 684 ; C -1 ; WX 581 ; N Eacute ; B -22 0 580 928 ; C -1 ; WX 581 ; N Ecircumflex ; B -22 0 580 928 ; C -1 ; WX 581 ; N Edieresis ; B -22 0 580 897 ; C -1 ; WX 581 ; N Egrave ; B -22 0 580 928 ; C -1 ; WX 353 ; N Iacute ; B -21 0 448 928 ; C -1 ; WX 353 ; N Icircumflex ; B -21 0 388 928 ; C -1 ; WX 353 ; N Idieresis ; B -21 0 414 897 ; C -1 ; WX 353 ; N Igrave ; B -21 0 370 928 ; C -1 ; WX 712 ; N Ntilde ; B -27 0 744 909 ; C -1 ; WX 729 ; N Oacute ; B 37 -14 690 928 ; C -1 ; WX 729 ; N Ocircumflex ; B 37 -14 690 928 ; C -1 ; WX 729 ; N Odieresis ; B 37 -14 690 897 ; C -1 ; WX 729 ; N Ograve ; B 37 -14 690 928 ; C -1 ; WX 729 ; N Otilde ; B 37 -14 690 909 ; C -1 ; WX 553 ; N Scaron ; B 23 -8 525 928 ; C -1 ; WX 701 ; N Uacute ; B 71 -13 735 928 ; C -1 ; WX 701 ; N Ucircumflex ; B 71 -13 735 928 ; C -1 ; WX 701 ; N Udieresis ; B 71 -13 735 897 ; C -1 ; WX 701 ; N Ugrave ; B 71 -13 735 928 ; C -1 ; WX 586 ; N Ydieresis ; B 26 0 656 897 ; C -1 ; WX 572 ; N Zcaron ; B -18 0 581 928 ; C -1 ; WX 572 ; N aacute ; B 18 -9 548 742 ; C -1 ; WX 572 ; N acircumflex ; B 18 -9 548 742 ; C -1 ; WX 572 ; N adieresis ; B 18 -9 548 711 ; C -1 ; WX 572 ; N agrave ; B 18 -9 548 742 ; C -1 ; WX 572 ; N aring ; B 18 -9 548 774 ; C -1 ; WX 572 ; N atilde ; B 18 -9 548 723 ; C -1 ; WX 437 ; N ccedilla ; B 15 -230 410 493 ; C -1 ; WX 464 ; N eacute ; B 18 -10 488 742 ; C -1 ; WX 464 ; N ecircumflex ; B 18 -10 431 742 ; C -1 ; WX 464 ; N edieresis ; B 18 -10 454 711 ; C -1 ; WX 464 ; N egrave ; B 18 -10 431 742 ; C -1 ; WX 318 ; N iacute ; B 28 -7 398 742 ; C -1 ; WX 318 ; N icircumflex ; B 28 -7 338 742 ; C -1 ; WX 318 ; N idieresis ; B 28 -7 364 711 ; C -1 ; WX 318 ; N igrave ; B 28 -7 294 742 ; C -1 ; WX 600 ; N ntilde ; B 26 -7 569 723 ; C -1 ; WX 550 ; N oacute ; B 18 -11 531 742 ; C -1 ; WX 550 ; N ocircumflex ; B 18 -11 501 742 ; C -1 ; WX 550 ; N odieresis ; B 18 -11 501 711 ; C -1 ; WX 550 ; N ograve ; B 18 -11 501 742 ; C -1 ; WX 550 ; N otilde ; B 18 -11 511 723 ; C -1 ; WX 403 ; N scaron ; B -12 -10 435 742 ; C -1 ; WX 599 ; N uacute ; B 28 -10 572 742 ; C -1 ; WX 599 ; N ucircumflex ; B 28 -10 572 742 ; C -1 ; WX 599 ; N udieresis ; B 28 -10 572 711 ; C -1 ; WX 599 ; N ugrave ; B 28 -10 572 742 ; C -1 ; WX 494 ; N ydieresis ; B -79 -216 514 711 ; C -1 ; WX 465 ; N zcaron ; B -20 -14 466 742 ; C -1 ; WX 817 ; N trademark ; B 113 398 724 663 ; C -1 ; WX 894 ; N copyright ; B 62 -50 842 730 ; C -1 ; WX 833 ; N logicalnot ; B 124 175 710 421 ; C -1 ; WX 894 ; N registered ; B 62 -50 842 730 ; C -1 ; WX 833 ; N minus ; B 124 256 710 340 ; C -1 ; WX 702 ; N Eth ; B -25 0 661 672 ; C -1 ; WX 576 ; N Thorn ; B -26 0 553 666 ; C -1 ; WX 586 ; N Yacute ; B 26 0 656 928 ; C -1 ; WX 500 ; N brokenbar ; B 207 -172 294 699 ; C -1 ; WX 329 ; N degree ; B 20 424 309 713 ; C -1 ; WX 833 ; N divide ; B 124 45 710 551 ; C -1 ; WX 561 ; N eth ; B 25 -12 524 740 ; C -1 ; WX 578 ; N mu ; B -53 -206 546 433 ; C -1 ; WX 833 ; N multiply ; B 139 16 704 581 ; C -1 ; WX 905 ; N onehalf ; B 49 0 871 677 ; C -1 ; WX 905 ; N onequarter ; B 49 -19 884 677 ; C -1 ; WX 387 ; N onesuperior ; B 52 268 289 677 ; C -1 ; WX 833 ; N plusminus ; B 124 7 710 590 ; C -1 ; WX 565 ; N thorn ; B -64 -218 519 736 ; C -1 ; WX 905 ; N threequarters ; B 6 -19 884 678 ; C -1 ; WX 387 ; N threesuperior ; B 7 261 357 679 ; C -1 ; WX 387 ; N twosuperior ; B -3 268 351 679 ; C -1 ; WX 494 ; N yacute ; B -79 -216 514 742 ; EndCharMetrics StartKernData StartKernPairs 378 KPX hyphen T -37 KPX hyphen V -56 KPX hyphen W -56 KPX hyphen X -37 KPX hyphen Y -74 KPX A quoteright -130 KPX A colon 19 KPX A semicolon 19 KPX A S 19 KPX A T -37 KPX A U -23 KPX A V -56 KPX A W -42 KPX A Y -42 KPX A y -19 KPX A quotedblright -130 KPX B hyphen 56 KPX B S 19 KPX B V -19 KPX B W -19 KPX B Y -19 KPX C quoteright 37 KPX C hyphen 23 KPX C S 19 KPX C quotedblright 37 KPX D hyphen 37 KPX D A -19 KPX D V -19 KPX D W -19 KPX D Y -28 KPX D Aring -19 KPX F comma -167 KPX F hyphen -56 KPX F period -167 KPX F colon -37 KPX F semicolon -37 KPX F A -32 KPX F a -60 KPX F e -65 KPX F i -19 KPX F o -46 KPX F r -19 KPX F u -19 KPX F quotesinglbase -37 KPX F quotedblbase -37 KPX F ae -60 KPX F oslash -46 KPX F oe -46 KPX F Aring -32 KPX G hyphen 19 KPX J A -23 KPX J Aring -23 KPX K hyphen -37 KPX K A -23 KPX K C -28 KPX K O -28 KPX K U -37 KPX K W -42 KPX K Y -32 KPX K a -19 KPX K e -19 KPX K o -37 KPX K u -19 KPX K y -83 KPX K quotesinglbase 56 KPX K quotedblbase 56 KPX K Oslash -28 KPX K OE -28 KPX K ae -19 KPX K oslash -37 KPX K oe -37 KPX K Aring -23 KPX L quoteright -185 KPX L hyphen 56 KPX L A 19 KPX L O -19 KPX L T -74 KPX L U -37 KPX L V -102 KPX L W -88 KPX L Y -88 KPX L quoteleft -56 KPX L u -19 KPX L y -74 KPX L quotedblleft -56 KPX L quotesinglbase 19 KPX L quotedblbase 19 KPX L quotedblright -185 KPX L Oslash -19 KPX L OE -19 KPX L Aring 19 KPX O comma -37 KPX O hyphen 19 KPX O period -37 KPX O V -19 KPX O X -19 KPX O Y -19 KPX P comma -250 KPX P hyphen -56 KPX P period -250 KPX P colon -19 KPX P semicolon -19 KPX P A -74 KPX P U -19 KPX P W -19 KPX P Y -19 KPX P a -37 KPX P e -37 KPX P i 19 KPX P n 19 KPX P o -32 KPX P r 19 KPX P u 19 KPX P y 19 KPX P quotesinglbase -93 KPX P quotedblbase -93 KPX P ae -37 KPX P oslash -32 KPX P oe -32 KPX P Aring -74 KPX Q quoteright 19 KPX Q hyphen 19 KPX Q quotesinglbase 56 KPX Q quotedblbase 56 KPX Q quotedblright 19 KPX R quoteright -37 KPX R comma 19 KPX R hyphen -19 KPX R period 19 KPX R C -19 KPX R T -19 KPX R V -19 KPX R W -23 KPX R Y -37 KPX R quoteleft -19 KPX R e -19 KPX R o -19 KPX R quotedblleft -19 KPX R quotesinglbase 56 KPX R quotedblbase 56 KPX R quotedblright -37 KPX R oslash -19 KPX R oe -19 KPX S A 19 KPX S G 19 KPX S O 19 KPX S Q 19 KPX S S -19 KPX S Oslash 19 KPX S OE 19 KPX S Aring 19 KPX T comma -148 KPX T hyphen -130 KPX T period -148 KPX T colon -37 KPX T semicolon -37 KPX T A -56 KPX T T 19 KPX T a -116 KPX T c -97 KPX T e -97 KPX T i -19 KPX T o -97 KPX T r -56 KPX T s -93 KPX T u -93 KPX T w -93 KPX T y -74 KPX T guillemotleft -37 KPX T guilsinglleft -37 KPX T quotesinglbase -19 KPX T quotedblbase -19 KPX T ae -116 KPX T oslash -97 KPX T oe -97 KPX T Aring -56 KPX U A -28 KPX U J -19 KPX U Z -19 KPX U Aring -28 KPX V comma -185 KPX V hyphen -56 KPX V period -185 KPX V colon -93 KPX V semicolon -93 KPX V A -97 KPX V O -19 KPX V a -93 KPX V e -93 KPX V i -28 KPX V o -60 KPX V u -32 KPX V y -28 KPX V quotesinglbase -37 KPX V quotedblbase -37 KPX V Oslash -19 KPX V OE -19 KPX V ae -93 KPX V oslash -60 KPX V oe -60 KPX V Aring -97 KPX W comma -134 KPX W hyphen -37 KPX W period -134 KPX W colon -28 KPX W semicolon -28 KPX W A -28 KPX W a -69 KPX W e -93 KPX W i -19 KPX W o -69 KPX W r -28 KPX W u -28 KPX W y -23 KPX W quotesinglbase -37 KPX W quotedblbase -37 KPX W ae -69 KPX W oslash -69 KPX W oe -69 KPX W Aring -28 KPX X hyphen -19 KPX X A -19 KPX X e -37 KPX X guilsinglright 19 KPX X quotesinglbase 37 KPX X quotedblbase 37 KPX X guillemotright 19 KPX X Aring -19 KPX Y quoteright 19 KPX Y comma -130 KPX Y hyphen -111 KPX Y period -130 KPX Y colon -106 KPX Y semicolon -106 KPX Y A -46 KPX Y a -116 KPX Y e -116 KPX Y i -19 KPX Y o -97 KPX Y u -56 KPX Y guillemotleft -37 KPX Y guilsinglleft -37 KPX Y quotesinglbase -19 KPX Y quotedblbase -19 KPX Y quotedblright 19 KPX Y ae -116 KPX Y oslash -97 KPX Y oe -97 KPX Y Aring -46 KPX Z hyphen 37 KPX quoteleft A -130 KPX quoteleft J -130 KPX quoteleft T 19 KPX quoteleft V 56 KPX quoteleft W 37 KPX quoteleft X 37 KPX quoteleft Y 56 KPX quoteleft AE -148 KPX quoteleft Aring -130 KPX f quoteright 93 KPX f comma -83 KPX f hyphen -19 KPX f period -83 KPX f quoteleft 37 KPX f quotedblleft 37 KPX f quotedblright 93 KPX r comma -130 KPX r hyphen -19 KPX r period -130 KPX r g -19 KPX r h -19 KPX v comma -46 KPX v hyphen 37 KPX v period -46 KPX w comma -56 KPX w hyphen 19 KPX w period -56 KPX y comma -60 KPX y hyphen 19 KPX y period -60 KPX quotedblleft A -130 KPX quotedblleft J -130 KPX quotedblleft T 19 KPX quotedblleft V 56 KPX quotedblleft W 37 KPX quotedblleft X 37 KPX quotedblleft Y 56 KPX quotedblleft AE -148 KPX quotedblleft Aring -130 KPX quotesinglbase A 37 KPX quotesinglbase C -37 KPX quotesinglbase D 19 KPX quotesinglbase F 19 KPX quotesinglbase G -19 KPX quotesinglbase H 19 KPX quotesinglbase J 19 KPX quotesinglbase T -37 KPX quotesinglbase V -56 KPX quotesinglbase W -37 KPX quotesinglbase X 37 KPX quotesinglbase Y -37 KPX quotesinglbase f 37 KPX quotesinglbase v -37 KPX quotesinglbase w -37 KPX quotesinglbase fi 37 KPX quotesinglbase fl 37 KPX quotesinglbase AE 74 KPX quotesinglbase germandbls 37 KPX quotesinglbase Aring 37 KPX quotesinglbase Eth 19 KPX quotedblbase A 37 KPX quotedblbase C -37 KPX quotedblbase D 19 KPX quotedblbase F 19 KPX quotedblbase G -19 KPX quotedblbase H 19 KPX quotedblbase J 19 KPX quotedblbase T -37 KPX quotedblbase V -56 KPX quotedblbase W -37 KPX quotedblbase X 37 KPX quotedblbase Y -37 KPX quotedblbase f 37 KPX quotedblbase v -37 KPX quotedblbase w -37 KPX quotedblbase fi 37 KPX quotedblbase fl 37 KPX quotedblbase AE 74 KPX quotedblbase germandbls 37 KPX quotedblbase Aring 37 KPX quotedblbase Eth 19 KPX AE hyphen 19 KPX Lslash quoteright -185 KPX Lslash hyphen 56 KPX Lslash A 19 KPX Lslash O -19 KPX Lslash T -74 KPX Lslash U -37 KPX Lslash V -102 KPX Lslash W -88 KPX Lslash Y -88 KPX Lslash quoteleft -56 KPX Lslash u -19 KPX Lslash y -74 KPX Lslash quotedblleft -56 KPX Lslash quotesinglbase 19 KPX Lslash quotedblbase 19 KPX Lslash quotedblright -185 KPX Lslash Oslash -19 KPX Lslash OE -19 KPX Lslash Aring 19 KPX Oslash comma -37 KPX Oslash hyphen 19 KPX Oslash period -37 KPX Oslash V -19 KPX Oslash X -19 KPX Oslash Y -19 KPX Aring quoteright -130 KPX Aring colon 19 KPX Aring semicolon 19 KPX Aring S 19 KPX Aring T -37 KPX Aring U -23 KPX Aring V -56 KPX Aring W -42 KPX Aring Y -42 KPX Aring y -19 KPX Aring quotedblright -130 KPX Eth hyphen 37 KPX Eth A -19 KPX Eth V -19 KPX Eth W -19 KPX Eth Y -28 KPX Eth Aring -19 KPX Thorn quoteright -37 KPX Thorn comma -148 KPX Thorn period -148 KPX Thorn quotedblright -37 EndKernPairs StartTrackKern 3 TrackKern -1 6 0.10 144 -2.09 TrackKern -2 6 0.05 144 -4.02 TrackKern -3 6 0.00 144 -5.96 EndTrackKern EndKernData EndFontMetrics t1lib-5.1.2/Fonts/afm/bchri.afm0000644000175000001440000004672710733501626014714 0ustar rmzusersStartFontMetrics 2.0 Comment Bitstream AFM Data Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA. Comment All rights reserved Comment Confidential and proprietary to Bitstream Inc. Comment Bitstream is a registered trademark of Bitstream Inc. Comment bitsClassification Transitional 801 Comment bitsFontID 0649 Comment bitsManufacturingDate Tue Nov 6 02:55:16 1990 Comment bitsLayoutName clayout.adobe.text228.new Comment UniqueID 15530649 FontName CharterBT-Italic FullName Bitstream Charter Italic FamilyName Bitstream Charter Weight Normal ItalicAngle 11.0000 IsFixedPitch false FontBBox -226 -237 1175 980 UnderlinePosition -109 UnderlineThickness 61 Version 1.0 [UFO] Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential. EncodingScheme AdobeStandardEncoding CapHeight 672 XHeight 486 Ascender 737 Descender -218 StartCharMetrics 228 C 32 ; WX 278 ; N space ; B 0 0 0 0 ; C 33 ; WX 338 ; N exclam ; B 63 -9 281 683 ; C 34 ; WX 331 ; N quotedbl ; B 43 421 288 715 ; C 35 ; WX 745 ; N numbersign ; B 63 -24 681 710 ; C 36 ; WX 556 ; N dollar ; B 21 -102 514 744 ; C 37 ; WX 852 ; N percent ; B 49 -12 802 683 ; C 38 ; WX 704 ; N ampersand ; B 19 -12 665 684 ; C 39 ; WX 201 ; N quoteright ; B 51 442 227 714 ; C 40 ; WX 419 ; N parenleft ; B 79 -142 460 718 ; C 41 ; WX 419 ; N parenright ; B -67 -142 313 718 ; C 42 ; WX 500 ; N asterisk ; B 98 337 492 718 ; C 43 ; WX 833 ; N plus ; B 124 0 710 597 ; C 44 ; WX 278 ; N comma ; B -58 -169 149 107 ; C 45 ; WX 319 ; N hyphen ; B 22 207 260 275 ; C 46 ; WX 278 ; N period ; B 25 -6 145 114 ; C 47 ; WX 481 ; N slash ; B -111 -93 525 672 ; C 48 ; WX 556 ; N zero ; B 27 -12 528 683 ; C 49 ; WX 556 ; N one ; B 82 0 405 683 ; C 50 ; WX 556 ; N two ; B -22 0 518 684 ; C 51 ; WX 556 ; N three ; B 0 -12 512 684 ; C 52 ; WX 556 ; N four ; B -1 -38 524 678 ; C 53 ; WX 556 ; N five ; B 3 -13 519 672 ; C 54 ; WX 556 ; N six ; B 31 -13 501 716 ; C 55 ; WX 556 ; N seven ; B 44 -38 596 672 ; C 56 ; WX 556 ; N eight ; B 18 -18 518 685 ; C 57 ; WX 556 ; N nine ; B 28 -56 523 684 ; C 58 ; WX 319 ; N colon ; B 46 -6 235 478 ; C 59 ; WX 319 ; N semicolon ; B -33 -169 235 478 ; C 60 ; WX 833 ; N less ; B 128 37 704 560 ; C 61 ; WX 833 ; N equal ; B 124 175 710 421 ; C 62 ; WX 833 ; N greater ; B 129 37 704 560 ; C 63 ; WX 486 ; N question ; B 94 -9 446 683 ; C 64 ; WX 942 ; N at ; B 76 -154 871 693 ; C 65 ; WX 606 ; N A ; B -79 0 585 677 ; C 66 ; WX 588 ; N B ; B -29 0 543 672 ; C 67 ; WX 604 ; N C ; B 41 -12 622 683 ; C 68 ; WX 671 ; N D ; B -28 0 623 672 ; C 69 ; WX 546 ; N E ; B -25 0 554 672 ; C 70 ; WX 509 ; N F ; B -27 0 540 671 ; C 71 ; WX 664 ; N G ; B 39 -12 650 684 ; C 72 ; WX 712 ; N H ; B -29 0 741 672 ; C 73 ; WX 312 ; N I ; B -23 0 333 672 ; C 74 ; WX 447 ; N J ; B -43 -12 472 672 ; C 75 ; WX 625 ; N K ; B -30 -5 660 672 ; C 76 ; WX 498 ; N L ; B -29 0 453 672 ; C 77 ; WX 839 ; N M ; B -28 0 868 672 ; C 78 ; WX 683 ; N N ; B -31 0 720 672 ; C 79 ; WX 708 ; N O ; B 40 -13 669 683 ; C 80 ; WX 542 ; N P ; B -29 0 543 672 ; C 81 ; WX 708 ; N Q ; B 40 -160 700 682 ; C 82 ; WX 602 ; N R ; B -30 -6 591 671 ; C 83 ; WX 537 ; N S ; B 9 -13 511 683 ; C 84 ; WX 565 ; N T ; B 43 0 610 672 ; C 85 ; WX 664 ; N U ; B 64 -12 705 672 ; C 86 ; WX 590 ; N V ; B 30 -6 649 672 ; C 87 ; WX 898 ; N W ; B 51 0 952 672 ; C 88 ; WX 569 ; N X ; B -83 0 633 672 ; C 89 ; WX 562 ; N Y ; B 31 0 642 672 ; C 90 ; WX 556 ; N Z ; B -26 0 572 672 ; C 91 ; WX 421 ; N bracketleft ; B 49 -133 448 709 ; C 92 ; WX 481 ; N backslash ; B 34 -93 489 672 ; C 93 ; WX 421 ; N bracketright ; B -45 -133 354 709 ; C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ; C 95 ; WX 500 ; N underscore ; B 0 -237 500 -178 ; C 96 ; WX 201 ; N quoteleft ; B 70 441 247 713 ; C 97 ; WX 525 ; N a ; B 17 -9 488 483 ; C 98 ; WX 507 ; N b ; B 24 -10 453 737 ; C 99 ; WX 394 ; N c ; B 14 -10 370 486 ; C 100 ; WX 523 ; N d ; B 20 -9 501 737 ; C 101 ; WX 424 ; N e ; B 20 -10 378 483 ; C 102 ; WX 292 ; N f ; B -151 -216 404 733 ; C 103 ; WX 481 ; N g ; B -31 -218 480 483 ; C 104 ; WX 551 ; N h ; B 23 -6 505 737 ; C 105 ; WX 287 ; N i ; B 32 -7 255 705 ; C 106 ; WX 269 ; N j ; B -128 -216 249 701 ; C 107 ; WX 514 ; N k ; B 25 -6 494 737 ; C 108 ; WX 275 ; N l ; B 35 -10 241 737 ; C 109 ; WX 815 ; N m ; B 31 -6 773 483 ; C 110 ; WX 556 ; N n ; B 32 -7 515 483 ; C 111 ; WX 502 ; N o ; B 21 -9 450 483 ; C 112 ; WX 516 ; N p ; B -70 -218 461 483 ; C 113 ; WX 512 ; N q ; B 24 -218 463 488 ; C 114 ; WX 398 ; N r ; B 27 0 400 482 ; C 115 ; WX 370 ; N s ; B -17 -9 324 483 ; C 116 ; WX 333 ; N t ; B 43 -7 337 580 ; C 117 ; WX 553 ; N u ; B 30 -9 513 483 ; C 118 ; WX 454 ; N v ; B -9 -2 435 484 ; C 119 ; WX 713 ; N w ; B -1 0 689 485 ; C 120 ; WX 477 ; N x ; B -47 -9 495 486 ; C 121 ; WX 475 ; N y ; B -113 -218 485 485 ; C 122 ; WX 440 ; N z ; B -15 -12 434 490 ; C 123 ; WX 486 ; N braceleft ; B 64 -135 418 703 ; C 124 ; WX 500 ; N bar ; B 219 -237 282 764 ; C 125 ; WX 486 ; N braceright ; B 64 -135 418 703 ; C 126 ; WX 833 ; N asciitilde ; B 86 225 747 371 ; C 161 ; WX 338 ; N exclamdown ; B 60 -9 278 683 ; C 162 ; WX 556 ; N cent ; B 41 -98 492 602 ; C 163 ; WX 556 ; N sterling ; B -22 0 547 683 ; C 164 ; WX 167 ; N fraction ; B -226 0 392 672 ; C 165 ; WX 556 ; N yen ; B 2 0 616 665 ; C 166 ; WX 556 ; N florin ; B -81 -169 563 683 ; C 167 ; WX 500 ; N section ; B 3 -141 475 718 ; C 168 ; WX 606 ; N currency ; B 41 171 566 694 ; C 169 ; WX 170 ; N quotesingle ; B 43 421 127 715 ; C 170 ; WX 403 ; N quotedblleft ; B 70 441 448 713 ; C 171 ; WX 442 ; N guillemotleft ; B 13 67 416 413 ; C 172 ; WX 245 ; N guilsinglleft ; B 13 67 218 413 ; C 173 ; WX 245 ; N guilsinglright ; B -7 67 199 413 ; C 174 ; WX 574 ; N fi ; B -151 -216 547 733 ; C 175 ; WX 579 ; N fl ; B -151 -216 544 737 ; C 177 ; WX 500 ; N endash ; B -25 210 488 271 ; C 178 ; WX 500 ; N dagger ; B 45 -130 512 718 ; C 179 ; WX 500 ; N daggerdbl ; B -27 -132 512 718 ; C 180 ; WX 278 ; N periodcentered ; B 79 276 199 396 ; C 182 ; WX 484 ; N paragraph ; B 25 -79 459 672 ; C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ; C 184 ; WX 201 ; N quotesinglbase ; B -65 -165 111 107 ; C 185 ; WX 403 ; N quotedblbase ; B -65 -165 313 107 ; C 186 ; WX 403 ; N quotedblright ; B 51 442 429 714 ; C 187 ; WX 442 ; N guillemotright ; B -7 67 397 413 ; C 188 ; WX 1000 ; N ellipsis ; B 52 -6 840 114 ; C 189 ; WX 1225 ; N perthousand ; B 49 -12 1175 683 ; C 191 ; WX 486 ; N questiondown ; B 27 -9 379 683 ; C 193 ; WX 500 ; N grave ; B 181 546 341 737 ; C 194 ; WX 500 ; N acute ; B 252 546 485 737 ; C 195 ; WX 500 ; N circumflex ; B 148 546 433 737 ; C 196 ; WX 500 ; N tilde ; B 143 572 474 709 ; C 197 ; WX 500 ; N macron ; B 154 614 465 667 ; C 198 ; WX 500 ; N breve ; B 177 567 464 709 ; C 199 ; WX 500 ; N dotaccent ; B 248 584 361 697 ; C 200 ; WX 500 ; N dieresis ; B 163 589 452 692 ; C 202 ; WX 500 ; N ring ; B 209 557 426 774 ; C 203 ; WX 500 ; N cedilla ; B 61 -224 267 0 ; C 205 ; WX 500 ; N hungarumlaut ; B 175 546 569 737 ; C 206 ; WX 500 ; N ogonek ; B 90 -217 235 0 ; C 207 ; WX 500 ; N caron ; B 184 545 470 736 ; C 208 ; WX 1000 ; N emdash ; B -19 210 991 271 ; C 225 ; WX 873 ; N AE ; B -115 0 879 672 ; C 227 ; WX 394 ; N ordfeminine ; B 12 325 366 671 ; C 232 ; WX 498 ; N Lslash ; B -29 0 453 672 ; C 233 ; WX 708 ; N Oslash ; B 41 -74 669 744 ; C 234 ; WX 1007 ; N OE ; B 40 -13 1004 682 ; C 235 ; WX 377 ; N ordmasculine ; B 15 325 338 671 ; C 241 ; WX 671 ; N ae ; B 1 -10 628 483 ; C 245 ; WX 287 ; N dotlessi ; B 32 -7 255 483 ; C 248 ; WX 275 ; N lslash ; B -14 -10 293 737 ; C 249 ; WX 502 ; N oslash ; B 22 -80 450 548 ; C 250 ; WX 750 ; N oe ; B 21 -9 704 483 ; C 251 ; WX 574 ; N germandbls ; B -151 -216 522 739 ; C -1 ; WX 606 ; N Aacute ; B -79 0 585 930 ; C -1 ; WX 606 ; N Acircumflex ; B -79 0 585 930 ; C -1 ; WX 606 ; N Adieresis ; B -79 0 585 885 ; C -1 ; WX 606 ; N Agrave ; B -79 0 585 930 ; C -1 ; WX 606 ; N Aring ; B -79 0 585 980 ; C -1 ; WX 606 ; N Atilde ; B -79 0 585 902 ; C -1 ; WX 604 ; N Ccedilla ; B 41 -224 622 683 ; C -1 ; WX 546 ; N Eacute ; B -25 0 554 930 ; C -1 ; WX 546 ; N Ecircumflex ; B -25 0 554 930 ; C -1 ; WX 546 ; N Edieresis ; B -25 0 554 885 ; C -1 ; WX 546 ; N Egrave ; B -25 0 554 930 ; C -1 ; WX 312 ; N Iacute ; B -23 0 418 930 ; C -1 ; WX 312 ; N Icircumflex ; B -23 0 366 930 ; C -1 ; WX 312 ; N Idieresis ; B -23 0 385 885 ; C -1 ; WX 312 ; N Igrave ; B -23 0 333 930 ; C -1 ; WX 683 ; N Ntilde ; B -31 0 720 902 ; C -1 ; WX 708 ; N Oacute ; B 40 -13 669 930 ; C -1 ; WX 708 ; N Ocircumflex ; B 40 -13 669 930 ; C -1 ; WX 708 ; N Odieresis ; B 40 -13 669 885 ; C -1 ; WX 708 ; N Ograve ; B 40 -13 669 930 ; C -1 ; WX 708 ; N Otilde ; B 40 -13 669 902 ; C -1 ; WX 537 ; N Scaron ; B 9 -13 516 929 ; C -1 ; WX 664 ; N Uacute ; B 64 -12 705 930 ; C -1 ; WX 664 ; N Ucircumflex ; B 64 -12 705 930 ; C -1 ; WX 664 ; N Udieresis ; B 64 -12 705 885 ; C -1 ; WX 664 ; N Ugrave ; B 64 -12 705 930 ; C -1 ; WX 562 ; N Ydieresis ; B 31 0 642 885 ; C -1 ; WX 556 ; N Zcaron ; B -26 0 572 929 ; C -1 ; WX 525 ; N aacute ; B 17 -9 498 737 ; C -1 ; WX 525 ; N acircumflex ; B 17 -9 488 737 ; C -1 ; WX 525 ; N adieresis ; B 17 -9 488 692 ; C -1 ; WX 525 ; N agrave ; B 17 -9 488 737 ; C -1 ; WX 525 ; N aring ; B 17 -9 488 762 ; C -1 ; WX 525 ; N atilde ; B 17 -9 488 709 ; C -1 ; WX 394 ; N ccedilla ; B 8 -224 370 486 ; C -1 ; WX 424 ; N eacute ; B 20 -10 460 737 ; C -1 ; WX 424 ; N ecircumflex ; B 20 -10 408 737 ; C -1 ; WX 424 ; N edieresis ; B 20 -10 427 692 ; C -1 ; WX 424 ; N egrave ; B 20 -10 378 737 ; C -1 ; WX 287 ; N iacute ; B 32 -7 379 737 ; C -1 ; WX 287 ; N icircumflex ; B 32 -7 327 737 ; C -1 ; WX 287 ; N idieresis ; B 32 -7 346 692 ; C -1 ; WX 287 ; N igrave ; B 32 -7 255 737 ; C -1 ; WX 556 ; N ntilde ; B 32 -7 515 709 ; C -1 ; WX 502 ; N oacute ; B 21 -9 486 737 ; C -1 ; WX 502 ; N ocircumflex ; B 21 -9 450 737 ; C -1 ; WX 502 ; N odieresis ; B 21 -9 453 692 ; C -1 ; WX 502 ; N ograve ; B 21 -9 450 737 ; C -1 ; WX 502 ; N otilde ; B 21 -9 475 709 ; C -1 ; WX 370 ; N scaron ; B -17 -9 405 736 ; C -1 ; WX 553 ; N uacute ; B 30 -9 513 737 ; C -1 ; WX 553 ; N ucircumflex ; B 30 -9 513 737 ; C -1 ; WX 553 ; N udieresis ; B 30 -9 513 692 ; C -1 ; WX 553 ; N ugrave ; B 30 -9 513 737 ; C -1 ; WX 475 ; N ydieresis ; B -113 -218 485 692 ; C -1 ; WX 440 ; N zcaron ; B -15 -12 440 736 ; C -1 ; WX 822 ; N trademark ; B 118 398 716 663 ; C -1 ; WX 900 ; N copyright ; B 66 -46 838 726 ; C -1 ; WX 833 ; N logicalnot ; B 124 174 710 419 ; C -1 ; WX 900 ; N registered ; B 66 -46 838 726 ; C -1 ; WX 833 ; N minus ; B 124 269 710 328 ; C -1 ; WX 671 ; N Eth ; B -28 0 624 672 ; C -1 ; WX 532 ; N Thorn ; B -30 0 518 672 ; C -1 ; WX 562 ; N Yacute ; B 31 0 642 930 ; C -1 ; WX 500 ; N brokenbar ; B 219 -172 282 699 ; C -1 ; WX 329 ; N degree ; B 26 434 303 710 ; C -1 ; WX 833 ; N divide ; B 124 66 710 531 ; C -1 ; WX 500 ; N eth ; B 21 -9 464 726 ; C -1 ; WX 547 ; N mu ; B -39 -204 532 433 ; C -1 ; WX 833 ; N multiply ; B 146 26 691 571 ; C -1 ; WX 867 ; N onehalf ; B 51 0 844 678 ; C -1 ; WX 867 ; N onequarter ; B 51 -22 848 678 ; C -1 ; WX 367 ; N onesuperior ; B 54 268 267 679 ; C -1 ; WX 833 ; N plusminus ; B 124 20 710 577 ; C -1 ; WX 516 ; N thorn ; B -70 -218 461 737 ; C -1 ; WX 868 ; N threequarters ; B 0 -22 848 679 ; C -1 ; WX 367 ; N threesuperior ; B 0 261 338 679 ; C -1 ; WX 367 ; N twosuperior ; B -15 268 342 679 ; C -1 ; WX 475 ; N yacute ; B -113 -218 485 737 ; EndCharMetrics StartKernData StartKernPairs 280 KPX hyphen T -37 KPX hyphen V -56 KPX hyphen W -56 KPX hyphen X -37 KPX hyphen Y -74 KPX A quoteright -130 KPX A colon 19 KPX A semicolon 19 KPX A S 19 KPX A T -37 KPX A U -23 KPX A V -56 KPX A W -42 KPX A Y -42 KPX A y -19 KPX A quotedblright -130 KPX B hyphen 56 KPX B S 19 KPX B V -19 KPX B W -19 KPX B Y -19 KPX C quoteright 37 KPX C hyphen 23 KPX C S 19 KPX C quotedblright 37 KPX D hyphen 37 KPX D A -19 KPX D V -19 KPX D W -19 KPX D Y -28 KPX D Aring -19 KPX F comma -167 KPX F hyphen -56 KPX F period -167 KPX F colon -37 KPX F semicolon -37 KPX F A -32 KPX F a -42 KPX F e -46 KPX F o -46 KPX F ae -42 KPX F oslash -46 KPX F oe -46 KPX F Aring -32 KPX G hyphen 19 KPX J A -23 KPX J Aring -23 KPX K hyphen -37 KPX K A -23 KPX K C -28 KPX K O -28 KPX K U -37 KPX K W -42 KPX K Y -32 KPX K a -19 KPX K e -56 KPX K o -56 KPX K u -56 KPX K y -83 KPX K Oslash -28 KPX K OE -28 KPX K ae -19 KPX K oslash -56 KPX K oe -56 KPX K Aring -23 KPX L quoteright -185 KPX L hyphen 56 KPX L A 19 KPX L T -74 KPX L U -19 KPX L V -102 KPX L W -88 KPX L Y -88 KPX L u -19 KPX L y -37 KPX L quotesinglbase 19 KPX L quotedblbase 19 KPX L quotedblright -185 KPX L Aring 19 KPX O comma -37 KPX O hyphen 19 KPX O period -37 KPX O V -19 KPX O X -19 KPX O Y -19 KPX P comma -250 KPX P hyphen -74 KPX P period -250 KPX P colon -19 KPX P semicolon -19 KPX P A -56 KPX P U -19 KPX P W -19 KPX P Y -19 KPX P a -37 KPX P e -56 KPX P o -51 KPX P s -32 KPX P ae -37 KPX P oslash -51 KPX P oe -51 KPX P Aring -56 KPX Q quoteright 19 KPX Q hyphen 19 KPX Q quotedblright 19 KPX R quoteright -37 KPX R comma 19 KPX R hyphen -19 KPX R period 19 KPX R T -19 KPX R V -19 KPX R W -23 KPX R Y -37 KPX R quoteleft -19 KPX R a -19 KPX R e -19 KPX R o -19 KPX R y -19 KPX R quotedblleft -19 KPX R quotedblright -37 KPX R ae -19 KPX R oslash -19 KPX R oe -19 KPX S A 37 KPX S G 19 KPX S O 19 KPX S Q 19 KPX S S 19 KPX S Oslash 19 KPX S OE 19 KPX S Aring 37 KPX T comma -148 KPX T hyphen -130 KPX T period -148 KPX T colon -37 KPX T semicolon -37 KPX T A -56 KPX T T 19 KPX T a -116 KPX T c -97 KPX T e -97 KPX T i -19 KPX T o -116 KPX T r -74 KPX T s -93 KPX T u -93 KPX T w -93 KPX T y -74 KPX T ae -116 KPX T oslash -116 KPX T oe -116 KPX T Aring -56 KPX U A -28 KPX U J -19 KPX U Z -19 KPX U Aring -28 KPX V comma -185 KPX V hyphen -56 KPX V period -185 KPX V colon -93 KPX V semicolon -93 KPX V A -79 KPX V O -19 KPX V a -93 KPX V e -93 KPX V i -28 KPX V o -60 KPX V u -32 KPX V y -46 KPX V Oslash -19 KPX V OE -19 KPX V ae -93 KPX V oslash -60 KPX V oe -60 KPX V Aring -79 KPX W comma -134 KPX W hyphen -37 KPX W period -134 KPX W colon -28 KPX W semicolon -28 KPX W A -28 KPX W a -51 KPX W e -74 KPX W i -19 KPX W o -51 KPX W r -28 KPX W u -28 KPX W y -23 KPX W ae -51 KPX W oslash -51 KPX W oe -51 KPX W Aring -28 KPX X hyphen -19 KPX X A -19 KPX X Aring -19 KPX Y comma -130 KPX Y hyphen -111 KPX Y period -130 KPX Y colon -106 KPX Y semicolon -106 KPX Y A -46 KPX Y a -116 KPX Y e -116 KPX Y i -19 KPX Y o -97 KPX Y u -56 KPX Y ae -116 KPX Y oslash -97 KPX Y oe -97 KPX Y Aring -46 KPX Z hyphen 37 KPX quoteleft A -130 KPX quoteleft J -130 KPX quoteleft V 19 KPX quoteleft AE -111 KPX quoteleft Aring -130 KPX f quoteright 93 KPX f comma -83 KPX f hyphen -19 KPX f period -83 KPX f quotedblright 93 KPX r comma -130 KPX r hyphen -19 KPX r period -130 KPX v comma -46 KPX v hyphen 37 KPX v period -46 KPX w comma -56 KPX w hyphen 19 KPX w period -56 KPX y comma -60 KPX y hyphen 19 KPX y period -60 KPX quotedblleft A -130 KPX quotedblleft J -130 KPX quotedblleft V 19 KPX quotedblleft AE -111 KPX quotedblleft Aring -130 KPX AE hyphen 19 KPX Lslash quoteright -185 KPX Lslash hyphen 56 KPX Lslash A 19 KPX Lslash T -74 KPX Lslash U -19 KPX Lslash V -102 KPX Lslash W -88 KPX Lslash Y -88 KPX Lslash u -19 KPX Lslash y -37 KPX Lslash quotesinglbase 19 KPX Lslash quotedblbase 19 KPX Lslash quotedblright -185 KPX Lslash Aring 19 KPX Oslash comma -37 KPX Oslash hyphen 19 KPX Oslash period -37 KPX Oslash V -19 KPX Oslash X -19 KPX Oslash Y -19 KPX Aring quoteright -130 KPX Aring colon 19 KPX Aring semicolon 19 KPX Aring S 19 KPX Aring T -37 KPX Aring U -23 KPX Aring V -56 KPX Aring W -42 KPX Aring Y -42 KPX Aring y -19 KPX Aring quotedblright -130 KPX Eth hyphen 37 KPX Eth A -19 KPX Eth V -19 KPX Eth W -19 KPX Eth Y -28 KPX Eth Aring -19 KPX Thorn quoteright -37 KPX Thorn comma -148 KPX Thorn period -148 KPX Thorn quotedblright -37 EndKernPairs StartTrackKern 3 TrackKern -1 6 0.10 144 -2.09 TrackKern -2 6 0.05 144 -4.02 TrackKern -3 6 0.00 144 -5.96 EndTrackKern EndKernData EndFontMetrics t1lib-5.1.2/Fonts/afm/eufm10.afm0000644000175000001440000001132610733501626014705 0ustar rmzusersStartFontMetrics 2.0 FontName eufm10 FullName eufm10 FamilyName eufm10 Weight Medium ItalicAngle 0.000000 IsFixedPitch false UnderlinePosition -133 UnderlineThickness 20 Version 1.2/19-Jan-95 FontBBox -26, -224, 1054, 740 Notice Copyright \(C\) 1994, 1995, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-C. EncodingScheme FontSpecific CapHeight 666 XHeight 472 Descender -212 Ascender 610 StartCharMetrics 94 C 0 ; WX 497.5 ; N dadv ; B 75 -33 430 683 ; C 1 ; WX 498.28 ; N dalt ; B 35 -30 432 616 ; C 2 ; WX 333.28 ; N fnos ; B 29 -216 339 680 ; C 3 ; WX 329.22 ; N falt ; B 28 -224 318 679 ; C 4 ; WX 503.44 ; N galt ; B 51 -214 449 471 ; C 5 ; WX 333 ; N kalt ; B 25 -20 315 687 ; C 6 ; WX 334.11 ; N talt ; B 29 -21 347 578 ; C 7 ; WX 500.72 ; N ualt ; B 10 -22 515 475 ; C 18 ; WX 214.72 ; N quoteleft ; B 45 410 159 708 ; C 19 ; WX 214.72 ; N quoteright ; B 49 394 163 692 ; C 33 ; WX 295.72 ; N exclam ; B 90 -12 203 690 ; C 38 ; WX 737.83 ; N ampersand ; B 49 -12 734 698 ; C 39 ; WX 212 ; N quotesingle ; B 68 436 134 695 ; C 40 ; WX 388.67 ; N parenleft ; B 113 -186 293 737 ; C 41 ; WX 388.67 ; N parenright ; B 89 -187 276 735 ; C 42 ; WX 277.67 ; N asterisk ; B 33 449 234 692 ; C 43 ; WX 756.22 ; N plus ; B 47 -83 709 598 ; C 44 ; WX 277.67 ; N comma ; B 100 -192 215 107 ; C 45 ; WX 756.22 ; N minus ; B 46 236 706 275 ; C 46 ; WX 277.67 ; N period ; B 88 -15 201 102 ; C 47 ; WX 501.83 ; N slash ; B 34 -182 466 722 ; C 48 ; WX 501.83 ; N zero ; B 41 -13 456 493 ; C 49 ; WX 501.83 ; N one ; B 47 -2 460 468 ; C 50 ; WX 501.83 ; N two ; B 59 1 485 474 ; C 51 ; WX 501.83 ; N three ; B 38 -182 430 474 ; C 52 ; WX 501.83 ; N four ; B 10 -191 482 476 ; C 53 ; WX 501.83 ; N five ; B 47 -184 440 458 ; C 54 ; WX 501.83 ; N six ; B 45 -13 471 700 ; C 55 ; WX 501.83 ; N seven ; B 37 -181 498 468 ; C 56 ; WX 501.83 ; N eight ; B 40 -10 461 705 ; C 57 ; WX 501.83 ; N nine ; B 27 -182 467 469 ; C 58 ; WX 216.06 ; N colon ; B 49 -12 168 457 ; C 59 ; WX 216.06 ; N semicolon ; B 47 -190 179 458 ; C 61 ; WX 756.22 ; N equal ; B 54 132 725 368 ; C 63 ; WX 362.44 ; N question ; B 46 -11 358 693 ; C 65 ; WX 717.61 ; N A ; B 22 -27 708 697 ; C 66 ; WX 884 ; N B ; B 48 -27 820 691 ; C 67 ; WX 612.56 ; N C ; B 59 -24 607 685 ; C 68 ; WX 831.56 ; N D ; B 27 -27 745 686 ; C 69 ; WX 662.78 ; N E ; B 86 -24 634 685 ; C 70 ; WX 611.17 ; N F ; B 11 -154 612 686 ; C 71 ; WX 785.39 ; N G ; B 65 -27 710 691 ; C 72 ; WX 720.28 ; N H ; B 1 -133 644 666 ; C 73 ; WX 554.5 ; N I ; B 30 -27 533 686 ; C 74 ; WX 552.33 ; N J ; B -10 -139 522 686 ; C 75 ; WX 668.44 ; N K ; B 16 -27 682 681 ; C 76 ; WX 666 ; N L ; B 32 -26 644 686 ; C 77 ; WX 1049.56 ; N M ; B 27 -27 1048 692 ; C 78 ; WX 832.11 ; N N ; B 27 -25 825 686 ; C 79 ; WX 827 ; N O ; B 11 -27 745 729 ; C 80 ; WX 827.5 ; N P ; B 27 -219 804 692 ; C 81 ; WX 827 ; N Q ; B 11 -69 782 729 ; C 82 ; WX 828.06 ; N R ; B 27 -27 824 686 ; C 83 ; WX 828.61 ; N S ; B 66 -27 756 692 ; C 84 ; WX 669 ; N T ; B 33 -27 676 702 ; C 85 ; WX 645.78 ; N U ; B -26 -27 665 697 ; C 86 ; WX 831.33 ; N V ; B 27 -27 825 686 ; C 87 ; WX 1046 ; N W ; B 32 -28 1054 686 ; C 88 ; WX 719.22 ; N X ; B 27 -27 709 688 ; C 89 ; WX 832.94 ; N Y ; B 27 -218 740 686 ; C 90 ; WX 602 ; N Z ; B 11 -139 532 729 ; C 91 ; WX 277.67 ; N bracketleft ; B 117 -130 278 740 ; C 93 ; WX 277.67 ; N bracketright ; B -3 -132 161 738 ; C 94 ; WX 499.67 ; N asciicircum ; B 0 452 495 734 ; C 97 ; WX 500.44 ; N a ; B 65 -36 497 471 ; C 98 ; WX 513.17 ; N b ; B 87 -31 442 685 ; C 99 ; WX 389.44 ; N c ; B 72 -29 359 466 ; C 100 ; WX 498.56 ; N d ; B 13 -33 428 610 ; C 101 ; WX 400.56 ; N e ; B 70 -31 364 467 ; C 102 ; WX 326.28 ; N f ; B 30 -220 324 681 ; C 103 ; WX 503.72 ; N g ; B 16 -209 455 470 ; C 104 ; WX 521.28 ; N h ; B 76 -206 434 689 ; C 105 ; WX 279 ; N i ; B 14 -21 268 674 ; C 106 ; WX 280.89 ; N j ; B -9 -208 196 673 ; C 107 ; WX 389.44 ; N k ; B 24 -26 362 689 ; C 108 ; WX 279.56 ; N l ; B 98 -20 277 685 ; C 109 ; WX 766.78 ; N m ; B 7 -26 752 475 ; C 110 ; WX 526.67 ; N n ; B 17 -23 513 475 ; C 111 ; WX 488.83 ; N o ; B 67 -28 412 481 ; C 112 ; WX 500.44 ; N p ; B 12 -212 430 542 ; C 113 ; WX 489.11 ; N q ; B 59 -219 418 479 ; C 114 ; WX 389.17 ; N r ; B 15 -21 387 474 ; C 115 ; WX 442.67 ; N s ; B -18 -30 407 478 ; C 116 ; WX 333 ; N t ; B 26 -21 349 640 ; C 117 ; WX 517.22 ; N u ; B 8 -23 513 474 ; C 118 ; WX 511.78 ; N v ; B 55 -28 434 530 ; C 119 ; WX 773.5 ; N w ; B 45 -28 688 532 ; C 120 ; WX 388.67 ; N x ; B 10 -188 363 472 ; C 121 ; WX 498.83 ; N y ; B 45 -219 431 528 ; C 122 ; WX 390.56 ; N z ; B -7 -214 314 471 ; C 125 ; WX 214.72 ; N quotedbl ; B 8 432 196 695 ; C 127 ; WX 378.11 ; N onealt ; B 54 -10 254 703 ; C -1 ; WX 333.33 ; N hardspace ; B 333 0 334 0 ; C -1 ; WX 333.33 ; N space ; B 333 0 334 0 ; EndCharMetrics EndFontMetrics t1lib-5.1.2/Fonts/afm/dcbxti10.afm0000644000175000001440000017131610733501626015234 0ustar rmzusersStartFontMetrics 2.0 FontName dcbxti10 FullName dcbxti10 FamilyName dcbxti10 Weight Medium ItalicAngle 0.000000 IsFixedPitch false UnderlinePosition -133 UnderlineThickness 20 Version 1.0\(Level-B\) FontBBox -60, -308, 1261, 911 Notice Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-B. EncodingScheme FontSpecific CapHeight 686 XHeight 444 Descender -194 Ascender 694 StartCharMetrics 256 C 0 ; WX 591 ; N grave ; B 272 500 455 699 ; C 1 ; WX 591 ; N acute ; B 342 500 578 699 ; C 2 ; WX 591 ; N circumflex ; B 246 521 562 694 ; C 3 ; WX 591 ; N tilde ; B 236 572 609 694 ; C 4 ; WX 591 ; N dieresis ; B 247 555 595 695 ; C 5 ; WX 591 ; N hungarumlaut ; B 252 504 609 702 ; C 6 ; WX 948.67 ; N ring ; B 462 544 701 711 ; C 7 ; WX 591 ; N caron ; B 259 500 572 642 ; C 8 ; WX 591 ; N breve ; B 263 513 600 694 ; C 9 ; WX 591 ; N macron ; B 218 557 603 611 ; C 10 ; WX 355.44 ; N dotaccent ; B 224 544 379 695 ; C 11 ; WX 532.11 ; N cedilla ; B 78 -189 383 19 ; C 12 ; WX 355.44 ; N ogonek ; B -29 -194 232 36 ; C 13 ; WX 355.44 ; N quotesinglbase ; B 52 -194 242 151 ; C 14 ; WX 532.11 ; N guilsinglleft ; B 159 40 452 432 ; C 15 ; WX 532.11 ; N guilsinglright ; B 115 40 447 432 ; C 16 ; WX 620.39 ; N quotedblleft ; B 231 349 663 694 ; C 17 ; WX 620.39 ; N quotedblright ; B 156 349 588 694 ; C 18 ; WX 620.39 ; N quotedblbase ; B 127 -194 559 151 ; C 19 ; WX 767.61 ; N guillemotleft ; B 159 40 688 432 ; C 20 ; WX 767.61 ; N guillemotright ; B 115 40 683 432 ; C 21 ; WX 591 ; N endash ; B 68 254 598 294 ; L hyphen emdash ; C 22 ; WX 1181.94 ; N emdash ; B 68 254 1127 294 ; C 23 ; WX 0 ; N compoundwordmark ; B 0 0 0 0 ; C 24 ; WX 473.22 ; N perthousand ; B 85 -56 400 347 ; C 25 ; WX 355.44 ; N dotlessi ; B 44 -8 360 452 ; C 26 ; WX 384.89 ; N dotlessj ; B -60 -202 346 452 ; C 27 ; WX 755.39 ; N ff ; B -49 -202 861 702 ; L i ffi ; L l ffl ; C 28 ; WX 674.28 ; N fi ; B -49 -202 679 702 ; C 29 ; WX 703.72 ; N fl ; B -49 -202 720 702 ; C 30 ; WX 1044.44 ; N ffi ; B -49 -202 1049 702 ; C 31 ; WX 1059.17 ; N ffl ; B -49 -202 1075 702 ; C 32 ; WX 591 ; N visiblespace ; B 19 -111 545 251 ; C 33 ; WX 386 ; N exclam ; B 104 0 400 711 ; C 34 ; WX 591 ; N quotedbl ; B 245 342 579 706 ; C 35 ; WX 944.22 ; N numbersign ; B 94 -194 913 694 ; C 36 ; WX 591 ; N dollar ; B 99 -56 606 750 ; C 37 ; WX 944.22 ; N percent ; B 141 -56 915 750 ; C 38 ; WX 885.33 ; N ampersand ; B 110 -17 865 711 ; C 39 ; WX 355.44 ; N quoteright ; B 192 349 385 694 ; L quoteright quotedblright ; C 40 ; WX 473.22 ; N parenleft ; B 136 -251 536 750 ; C 41 ; WX 473.22 ; N parenright ; B 0 -251 400 750 ; C 42 ; WX 591 ; N asterisk ; B 176 306 617 750 ; C 43 ; WX 885.33 ; N plus ; B 121 -104 826 603 ; C 44 ; WX 355.44 ; N comma ; B 56 -194 246 151 ; L comma quotedblbase ; C 45 ; WX 414.33 ; N hyphen ; B 60 174 356 271 ; L hyphen endash ; C 46 ; WX 355.44 ; N period ; B 88 0 243 151 ; C 47 ; WX 591 ; N slash ; B 2 -250 653 750 ; C 48 ; WX 591 ; N zero ; B 82 -17 607 661 ; C 49 ; WX 591 ; N one ; B 93 0 489 661 ; C 50 ; WX 591 ; N two ; B 57 -17 587 661 ; C 51 ; WX 591 ; N three ; B 77 -17 597 661 ; C 52 ; WX 591 ; N four ; B 23 -194 516 661 ; C 53 ; WX 591 ; N five ; B 88 -17 597 661 ; C 54 ; WX 591 ; N six ; B 101 -17 596 661 ; C 55 ; WX 591 ; N seven ; B 110 -17 677 661 ; C 56 ; WX 591 ; N eight ; B 79 -17 587 661 ; C 57 ; WX 591 ; N nine ; B 94 -17 590 661 ; C 58 ; WX 355.44 ; N colon ; B 88 0 316 444 ; C 59 ; WX 355.44 ; N semicolon ; B 56 -194 316 444 ; C 60 ; WX 885.33 ; N less ; B 150 -76 874 575 ; L less guillemotleft ; C 61 ; WX 885.33 ; N equal ; B 94 118 855 381 ; C 62 ; WX 885.33 ; N greater ; B 74 -76 797 575 ; L greater guillemotright ; C 63 ; WX 591 ; N question ; B 183 0 583 711 ; C 64 ; WX 885.33 ; N at ; B 133 -8 864 702 ; C 65 ; WX 865.33 ; N A ; B 22 0 755 711 ; C 66 ; WX 816.44 ; N B ; B 14 0 780 686 ; C 67 ; WX 826.44 ; N C ; B 132 -17 877 703 ; C 68 ; WX 875.33 ; N D ; B 14 0 834 686 ; C 69 ; WX 756.5 ; N E ; B 14 0 754 680 ; C 70 ; WX 727 ; N F ; B 14 0 740 680 ; C 71 ; WX 895.06 ; N G ; B 132 -17 877 703 ; C 72 ; WX 895.89 ; N H ; B 14 0 953 686 ; C 73 ; WX 471.56 ; N I ; B 7 0 537 686 ; C 74 ; WX 610.39 ; N J ; B 37 -17 659 686 ; C 75 ; WX 894.78 ; N K ; B 14 0 922 686 ; C 76 ; WX 697.61 ; N L ; B 14 0 638 686 ; C 77 ; WX 1072.5 ; N M ; B 14 0 1130 686 ; C 78 ; WX 895.89 ; N N ; B 14 0 953 686 ; C 79 ; WX 854.78 ; N O ; B 129 -17 834 703 ; C 80 ; WX 787 ; N P ; B 14 0 775 686 ; C 81 ; WX 854.78 ; N Q ; B 129 -194 834 703 ; C 82 ; WX 859.22 ; N R ; B 14 -17 800 686 ; C 83 ; WX 649.83 ; N S ; B 58 -17 672 703 ; C 84 ; WX 795.94 ; N T ; B 148 0 841 675 ; C 85 ; WX 880.61 ; N U ; B 168 -17 938 686 ; C 86 ; WX 865.33 ; N V ; B 167 -17 928 686 ; C 87 ; WX 1159.72 ; N W ; B 166 -17 1224 686 ; C 88 ; WX 865.33 ; N X ; B 16 0 877 686 ; C 89 ; WX 865.33 ; N Y ; B 161 0 934 686 ; C 90 ; WX 708.72 ; N Z ; B 63 0 756 686 ; C 91 ; WX 356 ; N bracketleft ; B 36 -250 454 750 ; C 92 ; WX 591 ; N backslash ; B 242 -250 413 750 ; C 93 ; WX 356 ; N bracketright ; B -35 -250 383 750 ; C 94 ; WX 708.72 ; N asciicircum ; B 231 452 662 632 ; C 95 ; WX 885.33 ; N underscore ; B 19 -308 666 -247 ; C 96 ; WX 355.44 ; N quoteleft ; B 169 349 362 694 ; L quoteleft quotedblleft ; C 97 ; WX 591 ; N a ; B 73 -8 596 452 ; C 98 ; WX 532.11 ; N b ; B 79 -8 508 694 ; C 99 ; WX 532.11 ; N c ; B 74 -8 505 452 ; C 100 ; WX 591 ; N d ; B 73 -8 606 694 ; C 101 ; WX 532.11 ; N e ; B 77 -8 505 452 ; C 102 ; WX 399.89 ; N f ; B -49 -202 506 702 ; L i fi ; L f ff ; L l fl ; C 103 ; WX 532.11 ; N g ; B 26 -202 534 452 ; C 104 ; WX 591 ; N h ; B 43 -8 596 694 ; C 105 ; WX 355.44 ; N i ; B 44 -8 360 694 ; C 106 ; WX 355.44 ; N j ; B -60 -202 383 694 ; C 107 ; WX 532.11 ; N k ; B 43 -8 537 694 ; C 108 ; WX 296.61 ; N l ; B 57 -8 312 694 ; C 109 ; WX 944.22 ; N m ; B 44 -8 949 452 ; C 110 ; WX 649.83 ; N n ; B 44 -8 655 452 ; C 111 ; WX 591 ; N o ; B 75 -8 566 452 ; C 112 ; WX 591 ; N p ; B -8 -194 567 452 ; C 113 ; WX 532.11 ; N q ; B 73 -194 546 452 ; C 114 ; WX 501.56 ; N r ; B 44 -8 529 452 ; C 115 ; WX 486.83 ; N s ; B 54 -8 455 452 ; C 116 ; WX 384.89 ; N t ; B 59 -8 390 643 ; C 117 ; WX 620.39 ; N u ; B 44 -8 625 452 ; C 118 ; WX 532.11 ; N v ; B 44 -8 524 453 ; C 119 ; WX 767.61 ; N w ; B 44 -8 760 453 ; C 120 ; WX 560.44 ; N x ; B 39 -8 570 452 ; C 121 ; WX 561.56 ; N y ; B 44 -202 566 452 ; C 122 ; WX 490.44 ; N z ; B 31 -8 509 452 ; C 123 ; WX 591 ; N braceleft ; B 129 -250 645 750 ; C 124 ; WX 355.44 ; N bar ; B 61 -250 357 750 ; C 125 ; WX 591 ; N braceright ; B 9 -250 525 750 ; C 126 ; WX 708.72 ; N asciitilde ; B 236 572 727 694 ; C 127 ; WX 414.33 ; N hyphen ; B 60 174 356 271 ; C 128 ; WX 865.33 ; N Abreve ; B 22 0 769 894 ; C 129 ; WX 865.33 ; N Aogonek ; B 22 -182 784 711 ; C 130 ; WX 826.44 ; N Cacute ; B 132 -17 877 899 ; C 131 ; WX 826.44 ; N Ccaron ; B 132 -17 877 843 ; C 132 ; WX 875.33 ; N Dcaron ; B 14 0 834 843 ; C 133 ; WX 756.5 ; N Ecaron ; B 14 0 754 843 ; C 134 ; WX 756.5 ; N Eogonek ; B 14 -182 754 680 ; C 135 ; WX 895.06 ; N Gbreve ; B 132 -17 877 894 ; C 136 ; WX 697.61 ; N Lacute ; B 14 0 674 899 ; C 137 ; WX 697.61 ; N Lquoteright ; B 14 0 764 686 ; C 138 ; WX 697.61 ; N Lslash ; B 14 0 638 686 ; C 139 ; WX 895.89 ; N Nacute ; B 14 0 953 899 ; C 140 ; WX 895.89 ; N Ncaron ; B 14 0 953 843 ; C 141 ; WX 837.56 ; N Eng ; B 22 -17 862 694 ; C 142 ; WX 854.78 ; N Ohungarumlaut ; B 129 -17 896 899 ; C 143 ; WX 859.22 ; N Racute ; B 14 -17 800 899 ; C 144 ; WX 859.22 ; N Rcaron ; B 14 -17 800 843 ; C 145 ; WX 649.83 ; N Sacute ; B 58 -17 672 899 ; C 146 ; WX 649.83 ; N Scaron ; B 58 -17 672 843 ; C 147 ; WX 649.83 ; N Scedilla ; B 58 -189 672 703 ; C 148 ; WX 795.94 ; N Tcaron ; B 148 0 841 843 ; C 149 ; WX 795.94 ; N Tcedilla ; B 148 -189 841 675 ; C 150 ; WX 880.61 ; N Uhungarumlaut ; B 168 -17 938 899 ; C 151 ; WX 880.61 ; N Uring ; B 168 -17 938 911 ; C 152 ; WX 865.33 ; N Ydieresis ; B 161 0 934 894 ; C 153 ; WX 708.72 ; N Zacute ; B 63 0 756 899 ; C 154 ; WX 708.72 ; N Zcaron ; B 63 0 756 843 ; C 155 ; WX 708.72 ; N Zdotaccent ; B 63 0 756 894 ; C 156 ; WX 1001.44 ; N IJ ; B 7 -17 1031 686 ; C 157 ; WX 471.56 ; N Idotaccent ; B 7 0 537 902 ; C 158 ; WX 591 ; N dbar ; B 73 -8 626 694 ; C 159 ; WX 549.33 ; N section ; B 66 -202 546 702 ; C 160 ; WX 591 ; N abreve ; B 73 -8 596 653 ; C 161 ; WX 591 ; N aogonek ; B 73 -194 596 452 ; C 162 ; WX 532.11 ; N cacute ; B 74 -8 539 658 ; C 163 ; WX 532.11 ; N ccaron ; B 74 -8 563 602 ; C 164 ; WX 591 ; N dquoteright ; B 73 -8 830 694 ; C 165 ; WX 532.11 ; N ecaron ; B 77 -8 533 602 ; C 166 ; WX 532.11 ; N eogonek ; B 77 -179 505 452 ; C 167 ; WX 532.11 ; N gbreve ; B 26 -202 561 653 ; C 168 ; WX 296.61 ; N lacute ; B 57 -8 485 908 ; C 169 ; WX 296.61 ; N lquoteright ; B 57 -8 536 694 ; C 170 ; WX 296.61 ; N lslash ; B 8 -8 338 694 ; C 171 ; WX 649.83 ; N nacute ; B 44 -8 655 658 ; C 172 ; WX 649.83 ; N ncaron ; B 44 -8 655 602 ; C 173 ; WX 649.83 ; N eng ; B 44 -202 575 452 ; C 174 ; WX 591 ; N ohungarumlaut ; B 75 -8 704 658 ; C 175 ; WX 501.56 ; N racute ; B 44 -8 529 658 ; C 176 ; WX 501.56 ; N rcaron ; B 44 -8 529 602 ; C 177 ; WX 486.83 ; N sacute ; B 54 -8 517 658 ; C 178 ; WX 486.83 ; N scaron ; B 54 -8 510 602 ; C 179 ; WX 486.83 ; N scedilla ; B 26 -189 455 452 ; C 180 ; WX 384.89 ; N tquoteright ; B 59 -8 529 708 ; C 181 ; WX 384.89 ; N tcedilla ; B 20 -189 390 643 ; C 182 ; WX 620.39 ; N uhungarumlaut ; B 44 -8 719 658 ; C 183 ; WX 620.39 ; N uring ; B 44 -8 625 670 ; C 184 ; WX 561.56 ; N ydieresis ; B 44 -202 570 652 ; C 185 ; WX 490.44 ; N zacute ; B 31 -8 518 658 ; C 186 ; WX 490.44 ; N zcaron ; B 31 -8 512 602 ; C 187 ; WX 490.44 ; N zdotaccent ; B 31 -8 509 694 ; C 188 ; WX 649.83 ; N ij ; B 44 -202 678 694 ; C 189 ; WX 386 ; N exclamdown ; B 50 -211 346 500 ; C 190 ; WX 591 ; N questiondown ; B 71 -211 471 500 ; C 191 ; WX 868.33 ; N sterling ; B 70 -8 753 708 ; C 192 ; WX 865.33 ; N Agrave ; B 22 0 755 899 ; C 193 ; WX 865.33 ; N Aacute ; B 22 0 755 899 ; C 194 ; WX 865.33 ; N Acircumflex ; B 22 0 755 894 ; C 195 ; WX 865.33 ; N Atilde ; B 22 0 777 894 ; C 196 ; WX 865.33 ; N Adieresis ; B 22 0 763 894 ; C 197 ; WX 865.33 ; N Aring ; B 22 0 755 870 ; C 198 ; WX 1022.56 ; N AE ; B 23 0 1022 686 ; C 199 ; WX 826.44 ; N Ccedilla ; B 132 -189 877 703 ; C 200 ; WX 756.5 ; N Egrave ; B 14 0 754 899 ; C 201 ; WX 756.5 ; N Eacute ; B 14 0 754 899 ; C 202 ; WX 756.5 ; N Ecircumflex ; B 14 0 754 894 ; C 203 ; WX 756.5 ; N Edieresis ; B 14 0 754 894 ; C 204 ; WX 471.56 ; N Igrave ; B 7 0 537 899 ; C 205 ; WX 471.56 ; N Iacute ; B 7 0 551 899 ; C 206 ; WX 471.56 ; N Icircumflex ; B 7 0 537 894 ; C 207 ; WX 471.56 ; N Idieresis ; B 7 0 566 894 ; C 208 ; WX 875.33 ; N Eth ; B 14 0 834 686 ; C 209 ; WX 895.89 ; N Ntilde ; B 14 0 953 894 ; C 210 ; WX 854.78 ; N Ograve ; B 129 -17 834 899 ; C 211 ; WX 854.78 ; N Oacute ; B 129 -17 834 899 ; C 212 ; WX 854.78 ; N Ocircumflex ; B 129 -17 834 894 ; C 213 ; WX 854.78 ; N Otilde ; B 129 -17 834 894 ; C 214 ; WX 854.78 ; N Odieresis ; B 129 -17 834 894 ; C 215 ; WX 1140.28 ; N OE ; B 130 -17 1139 703 ; C 216 ; WX 885.33 ; N Oslash ; B 130 -69 863 755 ; C 217 ; WX 880.61 ; N Ugrave ; B 168 -17 938 899 ; C 218 ; WX 880.61 ; N Uacute ; B 168 -17 938 899 ; C 219 ; WX 880.61 ; N Ucircumflex ; B 168 -17 938 894 ; C 220 ; WX 880.61 ; N Udieresis ; B 168 -17 938 894 ; C 221 ; WX 865.33 ; N Yacute ; B 161 0 934 899 ; C 222 ; WX 728.17 ; N Thorn ; B 14 0 688 686 ; C 223 ; WX 1238.61 ; N Germandbls ; B 58 -17 1261 703 ; C 224 ; WX 591 ; N agrave ; B 73 -8 596 658 ; C 225 ; WX 591 ; N aacute ; B 73 -8 596 658 ; C 226 ; WX 591 ; N acircumflex ; B 73 -8 596 653 ; C 227 ; WX 591 ; N atilde ; B 73 -8 596 694 ; C 228 ; WX 591 ; N adieresis ; B 73 -8 596 652 ; C 229 ; WX 591 ; N aring ; B 73 -8 596 670 ; C 230 ; WX 826.44 ; N ae ; B 56 -8 797 452 ; C 231 ; WX 532.11 ; N ccedilla ; B 74 -189 505 452 ; C 232 ; WX 532.11 ; N egrave ; B 77 -8 505 658 ; C 233 ; WX 532.11 ; N eacute ; B 77 -8 505 658 ; C 234 ; WX 532.11 ; N ecircumflex ; B 77 -8 518 653 ; C 235 ; WX 532.11 ; N edieresis ; B 77 -8 555 652 ; C 236 ; WX 355.44 ; N igrave ; B 44 -8 360 658 ; C 237 ; WX 355.44 ; N iacute ; B 44 -8 451 658 ; C 238 ; WX 355.44 ; N icircumflex ; B 44 -8 387 653 ; C 239 ; WX 355.44 ; N idieresis ; B 44 -8 466 652 ; C 240 ; WX 591 ; N eth ; B 75 -8 582 694 ; C 241 ; WX 649.83 ; N ntilde ; B 44 -8 655 694 ; C 242 ; WX 591 ; N ograve ; B 75 -8 566 658 ; C 243 ; WX 591 ; N oacute ; B 75 -8 569 658 ; C 244 ; WX 591 ; N ocircumflex ; B 75 -8 566 653 ; C 245 ; WX 591 ; N otilde ; B 75 -8 609 694 ; C 246 ; WX 591 ; N odieresis ; B 75 -8 584 652 ; C 247 ; WX 826.44 ; N oe ; B 73 -14 797 458 ; C 248 ; WX 591 ; N oslash ; B 44 -116 596 561 ; C 249 ; WX 620.39 ; N ugrave ; B 44 -8 625 658 ; C 250 ; WX 620.39 ; N uacute ; B 44 -8 625 658 ; C 251 ; WX 620.39 ; N ucircumflex ; B 44 -8 625 653 ; C 252 ; WX 620.39 ; N udieresis ; B 44 -8 625 652 ; C 253 ; WX 561.56 ; N yacute ; B 44 -202 566 658 ; C 254 ; WX 591 ; N thorn ; B -24 -194 560 694 ; C 255 ; WX 664.83 ; N germandbls ; B -43 -202 660 702 ; EndCharMetrics StartKernData StartKernPairs 2061 KPX A C -29.44 KPX A Cacute -29.44 KPX A Ccaron -29.44 KPX A G -29.44 KPX A Gbreve -29.44 KPX A O -29.44 KPX A Oacute -29.44 KPX A Ocircumflex -29.44 KPX A Odieresis -29.44 KPX A Ograve -29.44 KPX A Ohungarumlaut -29.44 KPX A Oslash -29.44 KPX A Otilde -29.44 KPX A Q -29.44 KPX A T -88.31 KPX A Tcaron -88.31 KPX A Tcedilla -88.31 KPX A U -29.44 KPX A Uacute -29.44 KPX A Ucircumflex -29.44 KPX A Udieresis -29.44 KPX A Ugrave -29.44 KPX A Uhungarumlaut -29.44 KPX A Uring -29.44 KPX A V -117.75 KPX A W -117.75 KPX A Y -88.31 KPX A Ydieresis -88.31 KPX A a -58.87 KPX A aacute -58.87 KPX A acircumflex -58.87 KPX A acircumflex -58.87 KPX A adieresis -58.87 KPX A ae -58.87 KPX A agrave -58.87 KPX A aogonek -58.87 KPX A aring -58.87 KPX A atilde -58.87 KPX A b -29.44 KPX A c -58.87 KPX A cacute -58.87 KPX A cacute -58.87 KPX A ccaron -58.87 KPX A ccedilla -58.87 KPX A d -58.87 KPX A dbar -58.87 KPX A e -58.87 KPX A eacute -58.87 KPX A ecaron -58.87 KPX A ecircumflex -58.87 KPX A edieresis -58.87 KPX A egrave -58.87 KPX A eogonek -58.87 KPX A g -58.87 KPX A gbreve -58.87 KPX A h -29.44 KPX A i -29.44 KPX A iacute -29.44 KPX A k -29.44 KPX A l -29.44 KPX A lacute -29.44 KPX A lquoteright -29.44 KPX A m -29.44 KPX A n -29.44 KPX A o -58.87 KPX A oacute -58.87 KPX A ocircumflex -58.87 KPX A odieresis -58.87 KPX A oe -58.87 KPX A ograve -58.87 KPX A ohungarumlaut -58.87 KPX A oslash -58.87 KPX A otilde -58.87 KPX A q -58.87 KPX A r -29.44 KPX A t -29.44 KPX A tcedilla -29.44 KPX A tquoteright -29.44 KPX A u -29.44 KPX A uacute -29.44 KPX A ucircumflex -29.44 KPX A udieresis -29.44 KPX A ugrave -29.44 KPX A uhungarumlaut -29.44 KPX A uring -29.44 KPX A v -29.44 KPX A w -29.44 KPX Aacute C -29.44 KPX Aacute Cacute -29.44 KPX Aacute Ccaron -29.44 KPX Aacute G -29.44 KPX Aacute Gbreve -29.44 KPX Aacute O -29.44 KPX Aacute Oacute -29.44 KPX Aacute Ocircumflex -29.44 KPX Aacute Odieresis -29.44 KPX Aacute Ograve -29.44 KPX Aacute Ohungarumlaut -29.44 KPX Aacute Oslash -29.44 KPX Aacute Otilde -29.44 KPX Aacute Q -29.44 KPX Aacute T -88.31 KPX Aacute Tcaron -88.31 KPX Aacute Tcedilla -88.31 KPX Aacute U -29.44 KPX Aacute Uacute -29.44 KPX Aacute Ucircumflex -29.44 KPX Aacute Udieresis -29.44 KPX Aacute Ugrave -29.44 KPX Aacute Uhungarumlaut -29.44 KPX Aacute Uring -29.44 KPX Aacute V -117.75 KPX Aacute W -117.75 KPX Aacute Y -88.31 KPX Aacute Ydieresis -88.31 KPX Aacute a -58.87 KPX Aacute aacute -58.87 KPX Aacute acircumflex -58.87 KPX Aacute acircumflex -58.87 KPX Aacute adieresis -58.87 KPX Aacute ae -58.87 KPX Aacute agrave -58.87 KPX Aacute aogonek -58.87 KPX Aacute aring -58.87 KPX Aacute atilde -58.87 KPX Aacute b -29.44 KPX Aacute c -58.87 KPX Aacute cacute -58.87 KPX Aacute cacute -58.87 KPX Aacute ccaron -58.87 KPX Aacute ccedilla -58.87 KPX Aacute d -58.87 KPX Aacute dbar -58.87 KPX Aacute e -58.87 KPX Aacute eacute -58.87 KPX Aacute ecaron -58.87 KPX Aacute ecircumflex -58.87 KPX Aacute edieresis -58.87 KPX Aacute egrave -58.87 KPX Aacute eogonek -58.87 KPX Aacute g -58.87 KPX Aacute gbreve -58.87 KPX Aacute h -29.44 KPX Aacute i -29.44 KPX Aacute iacute -29.44 KPX Aacute k -29.44 KPX Aacute l -29.44 KPX Aacute lacute -29.44 KPX Aacute lquoteright -29.44 KPX Aacute m -29.44 KPX Aacute n -29.44 KPX Aacute o -58.87 KPX Aacute oacute -58.87 KPX Aacute ocircumflex -58.87 KPX Aacute odieresis -58.87 KPX Aacute oe -58.87 KPX Aacute ograve -58.87 KPX Aacute ohungarumlaut -58.87 KPX Aacute oslash -58.87 KPX Aacute otilde -58.87 KPX Aacute q -58.87 KPX Aacute r -29.44 KPX Aacute t -29.44 KPX Aacute tcedilla -29.44 KPX Aacute tquoteright -29.44 KPX Aacute u -29.44 KPX Aacute uacute -29.44 KPX Aacute ucircumflex -29.44 KPX Aacute udieresis -29.44 KPX Aacute ugrave -29.44 KPX Aacute uhungarumlaut -29.44 KPX Aacute uring -29.44 KPX Aacute v -29.44 KPX Aacute w -29.44 KPX Abreve C -29.44 KPX Abreve Cacute -29.44 KPX Abreve Ccaron -29.44 KPX Abreve G -29.44 KPX Abreve Gbreve -29.44 KPX Abreve O -29.44 KPX Abreve Oacute -29.44 KPX Abreve Ocircumflex -29.44 KPX Abreve Odieresis -29.44 KPX Abreve Ograve -29.44 KPX Abreve Ohungarumlaut -29.44 KPX Abreve Oslash -29.44 KPX Abreve Otilde -29.44 KPX Abreve Q -29.44 KPX Abreve T -88.31 KPX Abreve Tcaron -88.31 KPX Abreve Tcedilla -88.31 KPX Abreve U -29.44 KPX Abreve Uacute -29.44 KPX Abreve Ucircumflex -29.44 KPX Abreve Udieresis -29.44 KPX Abreve Ugrave -29.44 KPX Abreve Uhungarumlaut -29.44 KPX Abreve Uring -29.44 KPX Abreve V -117.75 KPX Abreve W -117.75 KPX Abreve Y -88.31 KPX Abreve Ydieresis -88.31 KPX Abreve a -58.87 KPX Abreve aacute -58.87 KPX Abreve acircumflex -58.87 KPX Abreve acircumflex -58.87 KPX Abreve adieresis -58.87 KPX Abreve ae -58.87 KPX Abreve agrave -58.87 KPX Abreve aogonek -58.87 KPX Abreve aring -58.87 KPX Abreve atilde -58.87 KPX Abreve b -29.44 KPX Abreve c -58.87 KPX Abreve cacute -58.87 KPX Abreve cacute -58.87 KPX Abreve ccaron -58.87 KPX Abreve ccedilla -58.87 KPX Abreve d -58.87 KPX Abreve dbar -58.87 KPX Abreve e -58.87 KPX Abreve eacute -58.87 KPX Abreve ecaron -58.87 KPX Abreve ecircumflex -58.87 KPX Abreve edieresis -58.87 KPX Abreve egrave -58.87 KPX Abreve eogonek -58.87 KPX Abreve g -58.87 KPX Abreve gbreve -58.87 KPX Abreve h -29.44 KPX Abreve i -29.44 KPX Abreve iacute -29.44 KPX Abreve k -29.44 KPX Abreve l -29.44 KPX Abreve lacute -29.44 KPX Abreve lquoteright -29.44 KPX Abreve m -29.44 KPX Abreve n -29.44 KPX Abreve o -58.87 KPX Abreve oacute -58.87 KPX Abreve ocircumflex -58.87 KPX Abreve odieresis -58.87 KPX Abreve oe -58.87 KPX Abreve ograve -58.87 KPX Abreve ohungarumlaut -58.87 KPX Abreve oslash -58.87 KPX Abreve otilde -58.87 KPX Abreve q -58.87 KPX Abreve r -29.44 KPX Abreve t -29.44 KPX Abreve tcedilla -29.44 KPX Abreve tquoteright -29.44 KPX Abreve u -29.44 KPX Abreve uacute -29.44 KPX Abreve ucircumflex -29.44 KPX Abreve udieresis -29.44 KPX Abreve ugrave -29.44 KPX Abreve uhungarumlaut -29.44 KPX Abreve uring -29.44 KPX Abreve v -29.44 KPX Abreve w -29.44 KPX Acircumflex C -29.44 KPX Acircumflex Cacute -29.44 KPX Acircumflex Ccaron -29.44 KPX Acircumflex G -29.44 KPX Acircumflex Gbreve -29.44 KPX Acircumflex O -29.44 KPX Acircumflex Oacute -29.44 KPX Acircumflex Ocircumflex -29.44 KPX Acircumflex Odieresis -29.44 KPX Acircumflex Ograve -29.44 KPX Acircumflex Ohungarumlaut -29.44 KPX Acircumflex Oslash -29.44 KPX Acircumflex Otilde -29.44 KPX Acircumflex Q -29.44 KPX Acircumflex T -88.31 KPX Acircumflex Tcaron -88.31 KPX Acircumflex Tcedilla -88.31 KPX Acircumflex U -29.44 KPX Acircumflex Uacute -29.44 KPX Acircumflex Ucircumflex -29.44 KPX Acircumflex Udieresis -29.44 KPX Acircumflex Ugrave -29.44 KPX Acircumflex Uhungarumlaut -29.44 KPX Acircumflex Uring -29.44 KPX Acircumflex V -117.75 KPX Acircumflex W -117.75 KPX Acircumflex Y -88.31 KPX Acircumflex Ydieresis -88.31 KPX Acircumflex a -58.87 KPX Acircumflex aacute -58.87 KPX Acircumflex acircumflex -58.87 KPX Acircumflex acircumflex -58.87 KPX Acircumflex adieresis -58.87 KPX Acircumflex ae -58.87 KPX Acircumflex agrave -58.87 KPX Acircumflex aogonek -58.87 KPX Acircumflex aring -58.87 KPX Acircumflex atilde -58.87 KPX Acircumflex b -29.44 KPX Acircumflex c -58.87 KPX Acircumflex cacute -58.87 KPX Acircumflex cacute -58.87 KPX Acircumflex ccaron -58.87 KPX Acircumflex ccedilla -58.87 KPX Acircumflex d -58.87 KPX Acircumflex dbar -58.87 KPX Acircumflex e -58.87 KPX Acircumflex eacute -58.87 KPX Acircumflex ecaron -58.87 KPX Acircumflex ecircumflex -58.87 KPX Acircumflex edieresis -58.87 KPX Acircumflex egrave -58.87 KPX Acircumflex eogonek -58.87 KPX Acircumflex g -58.87 KPX Acircumflex gbreve -58.87 KPX Acircumflex h -29.44 KPX Acircumflex i -29.44 KPX Acircumflex iacute -29.44 KPX Acircumflex k -29.44 KPX Acircumflex l -29.44 KPX Acircumflex lacute -29.44 KPX Acircumflex lquoteright -29.44 KPX Acircumflex m -29.44 KPX Acircumflex n -29.44 KPX Acircumflex o -58.87 KPX Acircumflex oacute -58.87 KPX Acircumflex ocircumflex -58.87 KPX Acircumflex odieresis -58.87 KPX Acircumflex oe -58.87 KPX Acircumflex ograve -58.87 KPX Acircumflex ohungarumlaut -58.87 KPX Acircumflex oslash -58.87 KPX Acircumflex otilde -58.87 KPX Acircumflex q -58.87 KPX Acircumflex r -29.44 KPX Acircumflex t -29.44 KPX Acircumflex tcedilla -29.44 KPX Acircumflex tquoteright -29.44 KPX Acircumflex u -29.44 KPX Acircumflex uacute -29.44 KPX Acircumflex ucircumflex -29.44 KPX Acircumflex udieresis -29.44 KPX Acircumflex ugrave -29.44 KPX Acircumflex uhungarumlaut -29.44 KPX Acircumflex uring -29.44 KPX Acircumflex v -29.44 KPX Acircumflex w -29.44 KPX Adieresis C -29.44 KPX Adieresis Cacute -29.44 KPX Adieresis Ccaron -29.44 KPX Adieresis G -29.44 KPX Adieresis Gbreve -29.44 KPX Adieresis O -29.44 KPX Adieresis Oacute -29.44 KPX Adieresis Ocircumflex -29.44 KPX Adieresis Odieresis -29.44 KPX Adieresis Ograve -29.44 KPX Adieresis Ohungarumlaut -29.44 KPX Adieresis Oslash -29.44 KPX Adieresis Otilde -29.44 KPX Adieresis Q -29.44 KPX Adieresis T -88.31 KPX Adieresis Tcaron -88.31 KPX Adieresis Tcedilla -88.31 KPX Adieresis U -29.44 KPX Adieresis Uacute -29.44 KPX Adieresis Ucircumflex -29.44 KPX Adieresis Udieresis -29.44 KPX Adieresis Ugrave -29.44 KPX Adieresis Uhungarumlaut -29.44 KPX Adieresis Uring -29.44 KPX Adieresis V -117.75 KPX Adieresis W -117.75 KPX Adieresis Y -88.31 KPX Adieresis Ydieresis -88.31 KPX Adieresis a -58.87 KPX Adieresis aacute -58.87 KPX Adieresis acircumflex -58.87 KPX Adieresis acircumflex -58.87 KPX Adieresis adieresis -58.87 KPX Adieresis ae -58.87 KPX Adieresis agrave -58.87 KPX Adieresis aogonek -58.87 KPX Adieresis aring -58.87 KPX Adieresis atilde -58.87 KPX Adieresis b -29.44 KPX Adieresis c -58.87 KPX Adieresis cacute -58.87 KPX Adieresis cacute -58.87 KPX Adieresis ccaron -58.87 KPX Adieresis ccedilla -58.87 KPX Adieresis d -58.87 KPX Adieresis dbar -58.87 KPX Adieresis e -58.87 KPX Adieresis eacute -58.87 KPX Adieresis ecaron -58.87 KPX Adieresis ecircumflex -58.87 KPX Adieresis edieresis -58.87 KPX Adieresis egrave -58.87 KPX Adieresis eogonek -58.87 KPX Adieresis g -58.87 KPX Adieresis gbreve -58.87 KPX Adieresis h -29.44 KPX Adieresis i -29.44 KPX Adieresis iacute -29.44 KPX Adieresis k -29.44 KPX Adieresis l -29.44 KPX Adieresis lacute -29.44 KPX Adieresis lquoteright -29.44 KPX Adieresis m -29.44 KPX Adieresis n -29.44 KPX Adieresis o -58.87 KPX Adieresis oacute -58.87 KPX Adieresis ocircumflex -58.87 KPX Adieresis odieresis -58.87 KPX Adieresis oe -58.87 KPX Adieresis ograve -58.87 KPX Adieresis ohungarumlaut -58.87 KPX Adieresis oslash -58.87 KPX Adieresis otilde -58.87 KPX Adieresis q -58.87 KPX Adieresis r -29.44 KPX Adieresis t -29.44 KPX Adieresis tcedilla -29.44 KPX Adieresis tquoteright -29.44 KPX Adieresis u -29.44 KPX Adieresis uacute -29.44 KPX Adieresis ucircumflex -29.44 KPX Adieresis udieresis -29.44 KPX Adieresis ugrave -29.44 KPX Adieresis uhungarumlaut -29.44 KPX Adieresis uring -29.44 KPX Adieresis v -29.44 KPX Adieresis w -29.44 KPX Agrave C -29.44 KPX Agrave Cacute -29.44 KPX Agrave Ccaron -29.44 KPX Agrave G -29.44 KPX Agrave Gbreve -29.44 KPX Agrave O -29.44 KPX Agrave Oacute -29.44 KPX Agrave Ocircumflex -29.44 KPX Agrave Odieresis -29.44 KPX Agrave Ograve -29.44 KPX Agrave Ohungarumlaut -29.44 KPX Agrave Oslash -29.44 KPX Agrave Otilde -29.44 KPX Agrave Q -29.44 KPX Agrave T -88.31 KPX Agrave Tcaron -88.31 KPX Agrave Tcedilla -88.31 KPX Agrave U -29.44 KPX Agrave Uacute -29.44 KPX Agrave Ucircumflex -29.44 KPX Agrave Udieresis -29.44 KPX Agrave Ugrave -29.44 KPX Agrave Uhungarumlaut -29.44 KPX Agrave Uring -29.44 KPX Agrave V -117.75 KPX Agrave W -117.75 KPX Agrave Y -88.31 KPX Agrave Ydieresis -88.31 KPX Agrave a -58.87 KPX Agrave aacute -58.87 KPX Agrave acircumflex -58.87 KPX Agrave acircumflex -58.87 KPX Agrave adieresis -58.87 KPX Agrave ae -58.87 KPX Agrave agrave -58.87 KPX Agrave aogonek -58.87 KPX Agrave aring -58.87 KPX Agrave atilde -58.87 KPX Agrave b -29.44 KPX Agrave c -58.87 KPX Agrave cacute -58.87 KPX Agrave cacute -58.87 KPX Agrave ccaron -58.87 KPX Agrave ccedilla -58.87 KPX Agrave d -58.87 KPX Agrave dbar -58.87 KPX Agrave e -58.87 KPX Agrave eacute -58.87 KPX Agrave ecaron -58.87 KPX Agrave ecircumflex -58.87 KPX Agrave edieresis -58.87 KPX Agrave egrave -58.87 KPX Agrave eogonek -58.87 KPX Agrave g -58.87 KPX Agrave gbreve -58.87 KPX Agrave h -29.44 KPX Agrave i -29.44 KPX Agrave iacute -29.44 KPX Agrave k -29.44 KPX Agrave l -29.44 KPX Agrave lacute -29.44 KPX Agrave lquoteright -29.44 KPX Agrave m -29.44 KPX Agrave n -29.44 KPX Agrave o -58.87 KPX Agrave oacute -58.87 KPX Agrave ocircumflex -58.87 KPX Agrave odieresis -58.87 KPX Agrave oe -58.87 KPX Agrave ograve -58.87 KPX Agrave ohungarumlaut -58.87 KPX Agrave oslash -58.87 KPX Agrave otilde -58.87 KPX Agrave q -58.87 KPX Agrave r -29.44 KPX Agrave t -29.44 KPX Agrave tcedilla -29.44 KPX Agrave tquoteright -29.44 KPX Agrave u -29.44 KPX Agrave uacute -29.44 KPX Agrave ucircumflex -29.44 KPX Agrave udieresis -29.44 KPX Agrave ugrave -29.44 KPX Agrave uhungarumlaut -29.44 KPX Agrave uring -29.44 KPX Agrave v -29.44 KPX Agrave w -29.44 KPX Aogonek C -29.44 KPX Aogonek Cacute -29.44 KPX Aogonek Ccaron -29.44 KPX Aogonek G -29.44 KPX Aogonek Gbreve -29.44 KPX Aogonek O -29.44 KPX Aogonek Oacute -29.44 KPX Aogonek Ocircumflex -29.44 KPX Aogonek Odieresis -29.44 KPX Aogonek Ograve -29.44 KPX Aogonek Ohungarumlaut -29.44 KPX Aogonek Oslash -29.44 KPX Aogonek Otilde -29.44 KPX Aogonek Q -29.44 KPX Aogonek T -88.31 KPX Aogonek Tcaron -88.31 KPX Aogonek Tcedilla -88.31 KPX Aogonek U -29.44 KPX Aogonek Uacute -29.44 KPX Aogonek Ucircumflex -29.44 KPX Aogonek Udieresis -29.44 KPX Aogonek Ugrave -29.44 KPX Aogonek Uhungarumlaut -29.44 KPX Aogonek Uring -29.44 KPX Aogonek V -117.75 KPX Aogonek W -117.75 KPX Aogonek Y -88.31 KPX Aogonek Ydieresis -88.31 KPX Aogonek a -58.87 KPX Aogonek aacute -58.87 KPX Aogonek acircumflex -58.87 KPX Aogonek acircumflex -58.87 KPX Aogonek adieresis -58.87 KPX Aogonek ae -58.87 KPX Aogonek agrave -58.87 KPX Aogonek aogonek -58.87 KPX Aogonek aring -58.87 KPX Aogonek atilde -58.87 KPX Aogonek b -29.44 KPX Aogonek c -58.87 KPX Aogonek cacute -58.87 KPX Aogonek cacute -58.87 KPX Aogonek ccaron -58.87 KPX Aogonek ccedilla -58.87 KPX Aogonek d -58.87 KPX Aogonek dbar -58.87 KPX Aogonek e -58.87 KPX Aogonek eacute -58.87 KPX Aogonek ecaron -58.87 KPX Aogonek ecircumflex -58.87 KPX Aogonek edieresis -58.87 KPX Aogonek egrave -58.87 KPX Aogonek eogonek -58.87 KPX Aogonek g -58.87 KPX Aogonek gbreve -58.87 KPX Aogonek h -29.44 KPX Aogonek i -29.44 KPX Aogonek iacute -29.44 KPX Aogonek k -29.44 KPX Aogonek l -29.44 KPX Aogonek lacute -29.44 KPX Aogonek lquoteright -29.44 KPX Aogonek m -29.44 KPX Aogonek n -29.44 KPX Aogonek o -58.87 KPX Aogonek oacute -58.87 KPX Aogonek ocircumflex -58.87 KPX Aogonek odieresis -58.87 KPX Aogonek oe -58.87 KPX Aogonek ograve -58.87 KPX Aogonek ohungarumlaut -58.87 KPX Aogonek oslash -58.87 KPX Aogonek otilde -58.87 KPX Aogonek q -58.87 KPX Aogonek r -29.44 KPX Aogonek t -29.44 KPX Aogonek tcedilla -29.44 KPX Aogonek tquoteright -29.44 KPX Aogonek u -29.44 KPX Aogonek uacute -29.44 KPX Aogonek ucircumflex -29.44 KPX Aogonek udieresis -29.44 KPX Aogonek ugrave -29.44 KPX Aogonek uhungarumlaut -29.44 KPX Aogonek uring -29.44 KPX Aogonek v -29.44 KPX Aogonek w -29.44 KPX Aring C -29.44 KPX Aring Cacute -29.44 KPX Aring Ccaron -29.44 KPX Aring G -29.44 KPX Aring Gbreve -29.44 KPX Aring O -29.44 KPX Aring Oacute -29.44 KPX Aring Ocircumflex -29.44 KPX Aring Odieresis -29.44 KPX Aring Ograve -29.44 KPX Aring Ohungarumlaut -29.44 KPX Aring Oslash -29.44 KPX Aring Otilde -29.44 KPX Aring Q -29.44 KPX Aring T -88.31 KPX Aring Tcaron -88.31 KPX Aring Tcedilla -88.31 KPX Aring U -29.44 KPX Aring Uacute -29.44 KPX Aring Ucircumflex -29.44 KPX Aring Udieresis -29.44 KPX Aring Ugrave -29.44 KPX Aring Uhungarumlaut -29.44 KPX Aring Uring -29.44 KPX Aring V -117.75 KPX Aring W -117.75 KPX Aring Y -88.31 KPX Aring Ydieresis -88.31 KPX Aring a -58.87 KPX Aring aacute -58.87 KPX Aring acircumflex -58.87 KPX Aring acircumflex -58.87 KPX Aring adieresis -58.87 KPX Aring ae -58.87 KPX Aring agrave -58.87 KPX Aring aogonek -58.87 KPX Aring aring -58.87 KPX Aring atilde -58.87 KPX Aring b -29.44 KPX Aring c -58.87 KPX Aring cacute -58.87 KPX Aring cacute -58.87 KPX Aring ccaron -58.87 KPX Aring ccedilla -58.87 KPX Aring d -58.87 KPX Aring dbar -58.87 KPX Aring e -58.87 KPX Aring eacute -58.87 KPX Aring ecaron -58.87 KPX Aring ecircumflex -58.87 KPX Aring edieresis -58.87 KPX Aring egrave -58.87 KPX Aring eogonek -58.87 KPX Aring g -58.87 KPX Aring gbreve -58.87 KPX Aring h -29.44 KPX Aring i -29.44 KPX Aring iacute -29.44 KPX Aring k -29.44 KPX Aring l -29.44 KPX Aring lacute -29.44 KPX Aring lquoteright -29.44 KPX Aring m -29.44 KPX Aring n -29.44 KPX Aring o -58.87 KPX Aring oacute -58.87 KPX Aring ocircumflex -58.87 KPX Aring odieresis -58.87 KPX Aring oe -58.87 KPX Aring ograve -58.87 KPX Aring ohungarumlaut -58.87 KPX Aring oslash -58.87 KPX Aring otilde -58.87 KPX Aring q -58.87 KPX Aring r -29.44 KPX Aring t -29.44 KPX Aring tcedilla -29.44 KPX Aring tquoteright -29.44 KPX Aring u -29.44 KPX Aring uacute -29.44 KPX Aring ucircumflex -29.44 KPX Aring udieresis -29.44 KPX Aring ugrave -29.44 KPX Aring uhungarumlaut -29.44 KPX Aring uring -29.44 KPX Aring v -29.44 KPX Aring w -29.44 KPX Atilde C -29.44 KPX Atilde Cacute -29.44 KPX Atilde Ccaron -29.44 KPX Atilde G -29.44 KPX Atilde Gbreve -29.44 KPX Atilde O -29.44 KPX Atilde Oacute -29.44 KPX Atilde Ocircumflex -29.44 KPX Atilde Odieresis -29.44 KPX Atilde Ograve -29.44 KPX Atilde Ohungarumlaut -29.44 KPX Atilde Oslash -29.44 KPX Atilde Otilde -29.44 KPX Atilde Q -29.44 KPX Atilde T -88.31 KPX Atilde Tcaron -88.31 KPX Atilde Tcedilla -88.31 KPX Atilde U -29.44 KPX Atilde Uacute -29.44 KPX Atilde Ucircumflex -29.44 KPX Atilde Udieresis -29.44 KPX Atilde Ugrave -29.44 KPX Atilde Uhungarumlaut -29.44 KPX Atilde Uring -29.44 KPX Atilde V -117.75 KPX Atilde W -117.75 KPX Atilde Y -88.31 KPX Atilde Ydieresis -88.31 KPX Atilde a -58.87 KPX Atilde aacute -58.87 KPX Atilde acircumflex -58.87 KPX Atilde acircumflex -58.87 KPX Atilde adieresis -58.87 KPX Atilde ae -58.87 KPX Atilde agrave -58.87 KPX Atilde aogonek -58.87 KPX Atilde aring -58.87 KPX Atilde atilde -58.87 KPX Atilde b -29.44 KPX Atilde c -58.87 KPX Atilde cacute -58.87 KPX Atilde cacute -58.87 KPX Atilde ccaron -58.87 KPX Atilde ccedilla -58.87 KPX Atilde d -58.87 KPX Atilde dbar -58.87 KPX Atilde e -58.87 KPX Atilde eacute -58.87 KPX Atilde ecaron -58.87 KPX Atilde ecircumflex -58.87 KPX Atilde edieresis -58.87 KPX Atilde egrave -58.87 KPX Atilde eogonek -58.87 KPX Atilde g -58.87 KPX Atilde gbreve -58.87 KPX Atilde h -29.44 KPX Atilde i -29.44 KPX Atilde iacute -29.44 KPX Atilde k -29.44 KPX Atilde l -29.44 KPX Atilde lacute -29.44 KPX Atilde lquoteright -29.44 KPX Atilde m -29.44 KPX Atilde n -29.44 KPX Atilde o -58.87 KPX Atilde oacute -58.87 KPX Atilde ocircumflex -58.87 KPX Atilde odieresis -58.87 KPX Atilde oe -58.87 KPX Atilde ograve -58.87 KPX Atilde ohungarumlaut -58.87 KPX Atilde oslash -58.87 KPX Atilde otilde -58.87 KPX Atilde q -58.87 KPX Atilde r -29.44 KPX Atilde t -29.44 KPX Atilde tcedilla -29.44 KPX Atilde tquoteright -29.44 KPX Atilde u -29.44 KPX Atilde uacute -29.44 KPX Atilde ucircumflex -29.44 KPX Atilde udieresis -29.44 KPX Atilde ugrave -29.44 KPX Atilde uhungarumlaut -29.44 KPX Atilde uring -29.44 KPX Atilde v -29.44 KPX Atilde w -29.44 KPX D A -29.44 KPX D Aacute -29.44 KPX D Abreve -29.44 KPX D Acircumflex -29.44 KPX D Adieresis -29.44 KPX D Agrave -29.44 KPX D Aogonek -29.44 KPX D Aring -29.44 KPX D Atilde -29.44 KPX D V -29.44 KPX D W -29.44 KPX D X -29.44 KPX D Y -29.44 KPX D Yacute -29.44 KPX Dcaron A -29.44 KPX Dcaron Aacute -29.44 KPX Dcaron Abreve -29.44 KPX Dcaron Acircumflex -29.44 KPX Dcaron Adieresis -29.44 KPX Dcaron Agrave -29.44 KPX Dcaron Aogonek -29.44 KPX Dcaron Aring -29.44 KPX Dcaron Atilde -29.44 KPX Dcaron V -29.44 KPX Dcaron W -29.44 KPX Dcaron X -29.44 KPX Dcaron Y -29.44 KPX Dcaron Yacute -29.44 KPX F A -117.75 KPX F Aacute -117.75 KPX F Abreve -117.75 KPX F Acircumflex -117.75 KPX F Adieresis -117.75 KPX F Agrave -117.75 KPX F Aogonek -117.75 KPX F Aring -117.75 KPX F Atilde -117.75 KPX F C -29.44 KPX F Cacute -29.44 KPX F Ccaron -29.44 KPX F G -29.44 KPX F Gbreve -29.44 KPX F O -29.44 KPX F Oacute -29.44 KPX F Ocircumflex -29.44 KPX F Odieresis -29.44 KPX F Ograve -29.44 KPX F Ohungarumlaut -29.44 KPX F Oslash -29.44 KPX F Otilde -29.44 KPX F Q -29.44 KPX F a -88.31 KPX F aogonek -88.31 KPX F e -88.31 KPX F eogonek -88.31 KPX F o -88.31 KPX F r -88.31 KPX F u -88.31 KPX K C -29.44 KPX K Cacute -29.44 KPX K Ccaron -29.44 KPX K G -29.44 KPX K Gbreve -29.44 KPX K O -29.44 KPX K Oacute -29.44 KPX K Ocircumflex -29.44 KPX K Odieresis -29.44 KPX K Ograve -29.44 KPX K Ohungarumlaut -29.44 KPX K Oslash -29.44 KPX K Otilde -29.44 KPX K Q -29.44 KPX L T -88.31 KPX L Tcaron -88.31 KPX L Tcedilla -88.31 KPX L V -117.75 KPX L W -117.75 KPX L Y -88.31 KPX L Ydieresis -88.31 KPX L a -58.87 KPX L aacute -58.87 KPX L acircumflex -58.87 KPX L acircumflex -58.87 KPX L adieresis -58.87 KPX L ae -58.87 KPX L agrave -58.87 KPX L aogonek -58.87 KPX L aring -58.87 KPX L atilde -58.87 KPX L c -58.87 KPX L cacute -58.87 KPX L cacute -58.87 KPX L ccaron -58.87 KPX L ccedilla -58.87 KPX L d -58.87 KPX L dbar -58.87 KPX L e -58.87 KPX L eacute -58.87 KPX L ecaron -58.87 KPX L ecircumflex -58.87 KPX L edieresis -58.87 KPX L egrave -58.87 KPX L eogonek -58.87 KPX L g -58.87 KPX L gbreve -58.87 KPX L o -58.87 KPX L oacute -58.87 KPX L ocircumflex -58.87 KPX L odieresis -58.87 KPX L oe -58.87 KPX L ograve -58.87 KPX L ohungarumlaut -58.87 KPX L oslash -58.87 KPX L otilde -58.87 KPX L q -58.87 KPX O A -29.44 KPX O Aacute -29.44 KPX O Abreve -29.44 KPX O Acircumflex -29.44 KPX O Adieresis -29.44 KPX O Agrave -29.44 KPX O Aogonek -29.44 KPX O Aring -29.44 KPX O Atilde -29.44 KPX O V -29.44 KPX O W -29.44 KPX O X -29.44 KPX O Y -29.44 KPX O Yacute -29.44 KPX Oacute A -29.44 KPX Oacute Aacute -29.44 KPX Oacute Abreve -29.44 KPX Oacute Acircumflex -29.44 KPX Oacute Adieresis -29.44 KPX Oacute Agrave -29.44 KPX Oacute Aogonek -29.44 KPX Oacute Aring -29.44 KPX Oacute Atilde -29.44 KPX Oacute V -29.44 KPX Oacute W -29.44 KPX Oacute X -29.44 KPX Oacute Y -29.44 KPX Oacute Yacute -29.44 KPX Ocircumflex A -29.44 KPX Ocircumflex Aacute -29.44 KPX Ocircumflex Abreve -29.44 KPX Ocircumflex Acircumflex -29.44 KPX Ocircumflex Adieresis -29.44 KPX Ocircumflex Agrave -29.44 KPX Ocircumflex Aogonek -29.44 KPX Ocircumflex Aring -29.44 KPX Ocircumflex Atilde -29.44 KPX Ocircumflex V -29.44 KPX Ocircumflex W -29.44 KPX Ocircumflex X -29.44 KPX Ocircumflex Y -29.44 KPX Ocircumflex Yacute -29.44 KPX Odieresis A -29.44 KPX Odieresis Aacute -29.44 KPX Odieresis Abreve -29.44 KPX Odieresis Acircumflex -29.44 KPX Odieresis Adieresis -29.44 KPX Odieresis Agrave -29.44 KPX Odieresis Aogonek -29.44 KPX Odieresis Aring -29.44 KPX Odieresis Atilde -29.44 KPX Odieresis V -29.44 KPX Odieresis W -29.44 KPX Odieresis X -29.44 KPX Odieresis Y -29.44 KPX Odieresis Yacute -29.44 KPX Ograve A -29.44 KPX Ograve Aacute -29.44 KPX Ograve Abreve -29.44 KPX Ograve Acircumflex -29.44 KPX Ograve Adieresis -29.44 KPX Ograve Agrave -29.44 KPX Ograve Aogonek -29.44 KPX Ograve Aring -29.44 KPX Ograve Atilde -29.44 KPX Ograve V -29.44 KPX Ograve W -29.44 KPX Ograve X -29.44 KPX Ograve Y -29.44 KPX Ograve Yacute -29.44 KPX Ohungarumlaut A -29.44 KPX Ohungarumlaut Aacute -29.44 KPX Ohungarumlaut Abreve -29.44 KPX Ohungarumlaut Acircumflex -29.44 KPX Ohungarumlaut Adieresis -29.44 KPX Ohungarumlaut Agrave -29.44 KPX Ohungarumlaut Aogonek -29.44 KPX Ohungarumlaut Aring -29.44 KPX Ohungarumlaut Atilde -29.44 KPX Ohungarumlaut V -29.44 KPX Ohungarumlaut W -29.44 KPX Ohungarumlaut X -29.44 KPX Ohungarumlaut Y -29.44 KPX Ohungarumlaut Yacute -29.44 KPX Oslash A -29.44 KPX Oslash Aacute -29.44 KPX Oslash Abreve -29.44 KPX Oslash Acircumflex -29.44 KPX Oslash Adieresis -29.44 KPX Oslash Agrave -29.44 KPX Oslash Aogonek -29.44 KPX Oslash Aring -29.44 KPX Oslash Atilde -29.44 KPX Oslash V -29.44 KPX Oslash W -29.44 KPX Oslash X -29.44 KPX Oslash Y -29.44 KPX Oslash Yacute -29.44 KPX Otilde A -29.44 KPX Otilde Aacute -29.44 KPX Otilde Abreve -29.44 KPX Otilde Acircumflex -29.44 KPX Otilde Adieresis -29.44 KPX Otilde Agrave -29.44 KPX Otilde Aogonek -29.44 KPX Otilde Aring -29.44 KPX Otilde Atilde -29.44 KPX Otilde V -29.44 KPX Otilde W -29.44 KPX Otilde X -29.44 KPX Otilde Y -29.44 KPX Otilde Yacute -29.44 KPX P A -88.31 KPX P Aacute -88.31 KPX P Abreve -88.31 KPX P Acircumflex -88.31 KPX P Adieresis -88.31 KPX P Agrave -88.31 KPX P Aogonek -88.31 KPX P Aring -88.31 KPX P Atilde -88.31 KPX R C -29.44 KPX R Cacute -29.44 KPX R Ccaron -29.44 KPX R G -29.44 KPX R Gbreve -29.44 KPX R O -29.44 KPX R Oacute -29.44 KPX R Ocircumflex -29.44 KPX R Odieresis -29.44 KPX R Ograve -29.44 KPX R Ohungarumlaut -29.44 KPX R Oslash -29.44 KPX R Otilde -29.44 KPX R Q -29.44 KPX R T -88.31 KPX R Tcaron -88.31 KPX R Tcedilla -88.31 KPX R U -29.44 KPX R Uacute -29.44 KPX R Ucircumflex -29.44 KPX R Udieresis -29.44 KPX R Ugrave -29.44 KPX R Uhungarumlaut -29.44 KPX R Uring -29.44 KPX R V -117.75 KPX R W -117.75 KPX R Y -88.31 KPX R Ydieresis -88.31 KPX R a -58.87 KPX R aacute -58.87 KPX R acircumflex -58.87 KPX R acircumflex -58.87 KPX R adieresis -58.87 KPX R ae -58.87 KPX R agrave -58.87 KPX R aogonek -58.87 KPX R aring -58.87 KPX R atilde -58.87 KPX R b -29.44 KPX R c -58.87 KPX R cacute -58.87 KPX R cacute -58.87 KPX R ccaron -58.87 KPX R ccedilla -58.87 KPX R d -58.87 KPX R dbar -58.87 KPX R e -58.87 KPX R eacute -58.87 KPX R ecaron -58.87 KPX R ecircumflex -58.87 KPX R edieresis -58.87 KPX R egrave -58.87 KPX R eogonek -58.87 KPX R g -58.87 KPX R gbreve -58.87 KPX R h -29.44 KPX R i -29.44 KPX R iacute -29.44 KPX R k -29.44 KPX R l -29.44 KPX R lacute -29.44 KPX R lquoteright -29.44 KPX R m -29.44 KPX R n -29.44 KPX R o -58.87 KPX R oacute -58.87 KPX R ocircumflex -58.87 KPX R odieresis -58.87 KPX R oe -58.87 KPX R ograve -58.87 KPX R ohungarumlaut -58.87 KPX R oslash -58.87 KPX R otilde -58.87 KPX R q -58.87 KPX R r -29.44 KPX R t -29.44 KPX R tcedilla -29.44 KPX R tquoteright -29.44 KPX R u -29.44 KPX R uacute -29.44 KPX R ucircumflex -29.44 KPX R udieresis -29.44 KPX R ugrave -29.44 KPX R uhungarumlaut -29.44 KPX R uring -29.44 KPX R v -29.44 KPX R w -29.44 KPX Racute C -29.44 KPX Racute Cacute -29.44 KPX Racute Ccaron -29.44 KPX Racute G -29.44 KPX Racute Gbreve -29.44 KPX Racute O -29.44 KPX Racute Oacute -29.44 KPX Racute Ocircumflex -29.44 KPX Racute Odieresis -29.44 KPX Racute Ograve -29.44 KPX Racute Ohungarumlaut -29.44 KPX Racute Oslash -29.44 KPX Racute Otilde -29.44 KPX Racute Q -29.44 KPX Racute T -88.31 KPX Racute Tcaron -88.31 KPX Racute Tcedilla -88.31 KPX Racute U -29.44 KPX Racute Uacute -29.44 KPX Racute Ucircumflex -29.44 KPX Racute Udieresis -29.44 KPX Racute Ugrave -29.44 KPX Racute Uhungarumlaut -29.44 KPX Racute Uring -29.44 KPX Racute V -117.75 KPX Racute W -117.75 KPX Racute Y -88.31 KPX Racute Ydieresis -88.31 KPX Racute a -58.87 KPX Racute aacute -58.87 KPX Racute acircumflex -58.87 KPX Racute acircumflex -58.87 KPX Racute adieresis -58.87 KPX Racute ae -58.87 KPX Racute agrave -58.87 KPX Racute aogonek -58.87 KPX Racute aring -58.87 KPX Racute atilde -58.87 KPX Racute b -29.44 KPX Racute c -58.87 KPX Racute cacute -58.87 KPX Racute cacute -58.87 KPX Racute ccaron -58.87 KPX Racute ccedilla -58.87 KPX Racute d -58.87 KPX Racute dbar -58.87 KPX Racute e -58.87 KPX Racute eacute -58.87 KPX Racute ecaron -58.87 KPX Racute ecircumflex -58.87 KPX Racute edieresis -58.87 KPX Racute egrave -58.87 KPX Racute eogonek -58.87 KPX Racute g -58.87 KPX Racute gbreve -58.87 KPX Racute h -29.44 KPX Racute i -29.44 KPX Racute iacute -29.44 KPX Racute k -29.44 KPX Racute l -29.44 KPX Racute lacute -29.44 KPX Racute lquoteright -29.44 KPX Racute m -29.44 KPX Racute n -29.44 KPX Racute o -58.87 KPX Racute oacute -58.87 KPX Racute ocircumflex -58.87 KPX Racute odieresis -58.87 KPX Racute oe -58.87 KPX Racute ograve -58.87 KPX Racute ohungarumlaut -58.87 KPX Racute oslash -58.87 KPX Racute otilde -58.87 KPX Racute q -58.87 KPX Racute r -29.44 KPX Racute t -29.44 KPX Racute tcedilla -29.44 KPX Racute tquoteright -29.44 KPX Racute u -29.44 KPX Racute uacute -29.44 KPX Racute ucircumflex -29.44 KPX Racute udieresis -29.44 KPX Racute ugrave -29.44 KPX Racute uhungarumlaut -29.44 KPX Racute uring -29.44 KPX Racute v -29.44 KPX Racute w -29.44 KPX T A -88.31 KPX T Aacute -88.31 KPX T Abreve -88.31 KPX T Acircumflex -88.31 KPX T Adieresis -88.31 KPX T Agrave -88.31 KPX T Aogonek -88.31 KPX T Aring -88.31 KPX T Atilde -88.31 KPX T a -88.31 KPX T e -88.31 KPX T o -88.31 KPX T r -88.31 KPX T u -88.31 KPX T y -88.31 KPX Tcaron A -88.31 KPX Tcaron Aacute -88.31 KPX Tcaron Abreve -88.31 KPX Tcaron Acircumflex -88.31 KPX Tcaron Adieresis -88.31 KPX Tcaron Agrave -88.31 KPX Tcaron Aogonek -88.31 KPX Tcaron Aring -88.31 KPX Tcaron Atilde -88.31 KPX Tcaron a -88.31 KPX Tcaron e -88.31 KPX Tcaron o -88.31 KPX Tcaron r -88.31 KPX Tcaron u -88.31 KPX Tcaron y -88.31 KPX Tcedilla A -88.31 KPX Tcedilla Aacute -88.31 KPX Tcedilla Abreve -88.31 KPX Tcedilla Acircumflex -88.31 KPX Tcedilla Adieresis -88.31 KPX Tcedilla Agrave -88.31 KPX Tcedilla Aogonek -88.31 KPX Tcedilla Aring -88.31 KPX Tcedilla Atilde -88.31 KPX Tcedilla a -88.31 KPX Tcedilla e -88.31 KPX Tcedilla o -88.31 KPX Tcedilla r -88.31 KPX Tcedilla u -88.31 KPX Tcedilla y -88.31 KPX V A -117.75 KPX V Aacute -117.75 KPX V Abreve -117.75 KPX V Acircumflex -117.75 KPX V Adieresis -117.75 KPX V Agrave -117.75 KPX V Aogonek -117.75 KPX V Aring -117.75 KPX V Atilde -117.75 KPX V C -29.44 KPX V Cacute -29.44 KPX V Ccaron -29.44 KPX V G -29.44 KPX V Gbreve -29.44 KPX V O -29.44 KPX V Oacute -29.44 KPX V Ocircumflex -29.44 KPX V Odieresis -29.44 KPX V Ograve -29.44 KPX V Ohungarumlaut -29.44 KPX V Oslash -29.44 KPX V Otilde -29.44 KPX V Q -29.44 KPX V a -88.31 KPX V aogonek -88.31 KPX V e -88.31 KPX V eogonek -88.31 KPX V o -88.31 KPX V r -88.31 KPX V u -88.31 KPX W A -88.31 KPX W Aacute -88.31 KPX W Abreve -88.31 KPX W Acircumflex -88.31 KPX W Adieresis -88.31 KPX W Agrave -88.31 KPX W Aogonek -88.31 KPX W Aring -88.31 KPX W Atilde -88.31 KPX X C -29.44 KPX X Cacute -29.44 KPX X Ccaron -29.44 KPX X G -29.44 KPX X Gbreve -29.44 KPX X O -29.44 KPX X Oacute -29.44 KPX X Ocircumflex -29.44 KPX X Odieresis -29.44 KPX X Ograve -29.44 KPX X Ohungarumlaut -29.44 KPX X Oslash -29.44 KPX X Otilde -29.44 KPX X Q -29.44 KPX Y A -88.31 KPX Y Aacute -88.31 KPX Y Abreve -88.31 KPX Y Acircumflex -88.31 KPX Y Adieresis -88.31 KPX Y Agrave -88.31 KPX Y Aogonek -88.31 KPX Y Aring -88.31 KPX Y Atilde -88.31 KPX Y a -88.31 KPX Y e -88.31 KPX Y o -88.31 KPX Y r -88.31 KPX Y u -88.31 KPX Yacute A -88.31 KPX Yacute Aacute -88.31 KPX Yacute Abreve -88.31 KPX Yacute Acircumflex -88.31 KPX Yacute Adieresis -88.31 KPX Yacute Agrave -88.31 KPX Yacute Aogonek -88.31 KPX Yacute Aring -88.31 KPX Yacute Atilde -88.31 KPX Yacute a -88.31 KPX Yacute e -88.31 KPX Yacute o -88.31 KPX Yacute r -88.31 KPX Yacute u -88.31 KPX b a -58.87 KPX b aacute -58.87 KPX b acircumflex -58.87 KPX b acircumflex -58.87 KPX b adieresis -58.87 KPX b ae -58.87 KPX b agrave -58.87 KPX b aogonek -58.87 KPX b aring -58.87 KPX b atilde -58.87 KPX b c -58.87 KPX b cacute -58.87 KPX b cacute -58.87 KPX b ccaron -58.87 KPX b ccedilla -58.87 KPX b d -58.87 KPX b dbar -58.87 KPX b e -58.87 KPX b eacute -58.87 KPX b ecaron -58.87 KPX b ecircumflex -58.87 KPX b edieresis -58.87 KPX b egrave -58.87 KPX b eogonek -58.87 KPX b g -58.87 KPX b gbreve -58.87 KPX b o -58.87 KPX b oacute -58.87 KPX b ocircumflex -58.87 KPX b odieresis -58.87 KPX b oe -58.87 KPX b ograve -58.87 KPX b ohungarumlaut -58.87 KPX b oslash -58.87 KPX b otilde -58.87 KPX b q -58.87 KPX c a -58.87 KPX c aacute -58.87 KPX c acircumflex -58.87 KPX c acircumflex -58.87 KPX c adieresis -58.87 KPX c ae -58.87 KPX c agrave -58.87 KPX c aogonek -58.87 KPX c aring -58.87 KPX c atilde -58.87 KPX c c -58.87 KPX c cacute -58.87 KPX c cacute -58.87 KPX c ccaron -58.87 KPX c ccedilla -58.87 KPX c d -58.87 KPX c dbar -58.87 KPX c e -58.87 KPX c eacute -58.87 KPX c ecaron -58.87 KPX c ecircumflex -58.87 KPX c edieresis -58.87 KPX c egrave -58.87 KPX c eogonek -58.87 KPX c g -58.87 KPX c gbreve -58.87 KPX c o -58.87 KPX c oacute -58.87 KPX c ocircumflex -58.87 KPX c odieresis -58.87 KPX c oe -58.87 KPX c ograve -58.87 KPX c ohungarumlaut -58.87 KPX c oslash -58.87 KPX c otilde -58.87 KPX c q -58.87 KPX cacute a -58.87 KPX cacute aacute -58.87 KPX cacute acircumflex -58.87 KPX cacute acircumflex -58.87 KPX cacute adieresis -58.87 KPX cacute ae -58.87 KPX cacute agrave -58.87 KPX cacute aogonek -58.87 KPX cacute aring -58.87 KPX cacute atilde -58.87 KPX cacute c -58.87 KPX cacute cacute -58.87 KPX cacute cacute -58.87 KPX cacute ccaron -58.87 KPX cacute ccedilla -58.87 KPX cacute d -58.87 KPX cacute dbar -58.87 KPX cacute e -58.87 KPX cacute eacute -58.87 KPX cacute ecaron -58.87 KPX cacute ecircumflex -58.87 KPX cacute edieresis -58.87 KPX cacute egrave -58.87 KPX cacute eogonek -58.87 KPX cacute g -58.87 KPX cacute gbreve -58.87 KPX cacute o -58.87 KPX cacute oacute -58.87 KPX cacute ocircumflex -58.87 KPX cacute odieresis -58.87 KPX cacute oe -58.87 KPX cacute ograve -58.87 KPX cacute ohungarumlaut -58.87 KPX cacute oslash -58.87 KPX cacute otilde -58.87 KPX cacute q -58.87 KPX ccaron a -58.87 KPX ccaron aacute -58.87 KPX ccaron acircumflex -58.87 KPX ccaron acircumflex -58.87 KPX ccaron adieresis -58.87 KPX ccaron ae -58.87 KPX ccaron agrave -58.87 KPX ccaron aogonek -58.87 KPX ccaron aring -58.87 KPX ccaron atilde -58.87 KPX ccaron c -58.87 KPX ccaron cacute -58.87 KPX ccaron cacute -58.87 KPX ccaron ccaron -58.87 KPX ccaron ccedilla -58.87 KPX ccaron d -58.87 KPX ccaron dbar -58.87 KPX ccaron e -58.87 KPX ccaron eacute -58.87 KPX ccaron ecaron -58.87 KPX ccaron ecircumflex -58.87 KPX ccaron edieresis -58.87 KPX ccaron egrave -58.87 KPX ccaron eogonek -58.87 KPX ccaron g -58.87 KPX ccaron gbreve -58.87 KPX ccaron o -58.87 KPX ccaron oacute -58.87 KPX ccaron ocircumflex -58.87 KPX ccaron odieresis -58.87 KPX ccaron oe -58.87 KPX ccaron ograve -58.87 KPX ccaron ohungarumlaut -58.87 KPX ccaron oslash -58.87 KPX ccaron otilde -58.87 KPX ccaron q -58.87 KPX d l 58.87 KPX d lacute 58.87 KPX d lquoteright 58.87 KPX e a -58.87 KPX e aacute -58.87 KPX e acircumflex -58.87 KPX e acircumflex -58.87 KPX e adieresis -58.87 KPX e ae -58.87 KPX e agrave -58.87 KPX e aogonek -58.87 KPX e aring -58.87 KPX e atilde -58.87 KPX e c -58.87 KPX e cacute -58.87 KPX e cacute -58.87 KPX e ccaron -58.87 KPX e ccedilla -58.87 KPX e d -58.87 KPX e dbar -58.87 KPX e e -58.87 KPX e eacute -58.87 KPX e ecaron -58.87 KPX e ecircumflex -58.87 KPX e edieresis -58.87 KPX e egrave -58.87 KPX e eogonek -58.87 KPX e g -58.87 KPX e gbreve -58.87 KPX e o -58.87 KPX e oacute -58.87 KPX e ocircumflex -58.87 KPX e odieresis -58.87 KPX e oe -58.87 KPX e ograve -58.87 KPX e ohungarumlaut -58.87 KPX e oslash -58.87 KPX e otilde -58.87 KPX e q -58.87 KPX eacute a -58.87 KPX eacute aacute -58.87 KPX eacute acircumflex -58.87 KPX eacute acircumflex -58.87 KPX eacute adieresis -58.87 KPX eacute ae -58.87 KPX eacute agrave -58.87 KPX eacute aogonek -58.87 KPX eacute aring -58.87 KPX eacute atilde -58.87 KPX eacute c -58.87 KPX eacute cacute -58.87 KPX eacute cacute -58.87 KPX eacute ccaron -58.87 KPX eacute ccedilla -58.87 KPX eacute d -58.87 KPX eacute dbar -58.87 KPX eacute e -58.87 KPX eacute eacute -58.87 KPX eacute ecaron -58.87 KPX eacute ecircumflex -58.87 KPX eacute edieresis -58.87 KPX eacute egrave -58.87 KPX eacute eogonek -58.87 KPX eacute g -58.87 KPX eacute gbreve -58.87 KPX eacute o -58.87 KPX eacute oacute -58.87 KPX eacute ocircumflex -58.87 KPX eacute odieresis -58.87 KPX eacute oe -58.87 KPX eacute ograve -58.87 KPX eacute ohungarumlaut -58.87 KPX eacute oslash -58.87 KPX eacute otilde -58.87 KPX eacute q -58.87 KPX ecaron a -58.87 KPX ecaron aacute -58.87 KPX ecaron acircumflex -58.87 KPX ecaron acircumflex -58.87 KPX ecaron adieresis -58.87 KPX ecaron ae -58.87 KPX ecaron agrave -58.87 KPX ecaron aogonek -58.87 KPX ecaron aring -58.87 KPX ecaron atilde -58.87 KPX ecaron c -58.87 KPX ecaron cacute -58.87 KPX ecaron cacute -58.87 KPX ecaron ccaron -58.87 KPX ecaron ccedilla -58.87 KPX ecaron d -58.87 KPX ecaron dbar -58.87 KPX ecaron e -58.87 KPX ecaron eacute -58.87 KPX ecaron ecaron -58.87 KPX ecaron ecircumflex -58.87 KPX ecaron edieresis -58.87 KPX ecaron egrave -58.87 KPX ecaron eogonek -58.87 KPX ecaron g -58.87 KPX ecaron gbreve -58.87 KPX ecaron o -58.87 KPX ecaron oacute -58.87 KPX ecaron ocircumflex -58.87 KPX ecaron odieresis -58.87 KPX ecaron oe -58.87 KPX ecaron ograve -58.87 KPX ecaron ohungarumlaut -58.87 KPX ecaron oslash -58.87 KPX ecaron otilde -58.87 KPX ecaron q -58.87 KPX ecircumflex a -58.87 KPX ecircumflex aacute -58.87 KPX ecircumflex acircumflex -58.87 KPX ecircumflex acircumflex -58.87 KPX ecircumflex adieresis -58.87 KPX ecircumflex ae -58.87 KPX ecircumflex agrave -58.87 KPX ecircumflex aogonek -58.87 KPX ecircumflex aring -58.87 KPX ecircumflex atilde -58.87 KPX ecircumflex c -58.87 KPX ecircumflex cacute -58.87 KPX ecircumflex cacute -58.87 KPX ecircumflex ccaron -58.87 KPX ecircumflex ccedilla -58.87 KPX ecircumflex d -58.87 KPX ecircumflex dbar -58.87 KPX ecircumflex e -58.87 KPX ecircumflex eacute -58.87 KPX ecircumflex ecaron -58.87 KPX ecircumflex ecircumflex -58.87 KPX ecircumflex edieresis -58.87 KPX ecircumflex egrave -58.87 KPX ecircumflex eogonek -58.87 KPX ecircumflex g -58.87 KPX ecircumflex gbreve -58.87 KPX ecircumflex o -58.87 KPX ecircumflex oacute -58.87 KPX ecircumflex ocircumflex -58.87 KPX ecircumflex odieresis -58.87 KPX ecircumflex oe -58.87 KPX ecircumflex ograve -58.87 KPX ecircumflex ohungarumlaut -58.87 KPX ecircumflex oslash -58.87 KPX ecircumflex otilde -58.87 KPX ecircumflex q -58.87 KPX edieresis a -58.87 KPX edieresis aacute -58.87 KPX edieresis acircumflex -58.87 KPX edieresis acircumflex -58.87 KPX edieresis adieresis -58.87 KPX edieresis ae -58.87 KPX edieresis agrave -58.87 KPX edieresis aogonek -58.87 KPX edieresis aring -58.87 KPX edieresis atilde -58.87 KPX edieresis c -58.87 KPX edieresis cacute -58.87 KPX edieresis cacute -58.87 KPX edieresis ccaron -58.87 KPX edieresis ccedilla -58.87 KPX edieresis d -58.87 KPX edieresis dbar -58.87 KPX edieresis e -58.87 KPX edieresis eacute -58.87 KPX edieresis ecaron -58.87 KPX edieresis ecircumflex -58.87 KPX edieresis edieresis -58.87 KPX edieresis egrave -58.87 KPX edieresis eogonek -58.87 KPX edieresis g -58.87 KPX edieresis gbreve -58.87 KPX edieresis o -58.87 KPX edieresis oacute -58.87 KPX edieresis ocircumflex -58.87 KPX edieresis odieresis -58.87 KPX edieresis oe -58.87 KPX edieresis ograve -58.87 KPX edieresis ohungarumlaut -58.87 KPX edieresis oslash -58.87 KPX edieresis otilde -58.87 KPX edieresis q -58.87 KPX egrave a -58.87 KPX egrave aacute -58.87 KPX egrave acircumflex -58.87 KPX egrave acircumflex -58.87 KPX egrave adieresis -58.87 KPX egrave ae -58.87 KPX egrave agrave -58.87 KPX egrave aogonek -58.87 KPX egrave aring -58.87 KPX egrave atilde -58.87 KPX egrave c -58.87 KPX egrave cacute -58.87 KPX egrave cacute -58.87 KPX egrave ccaron -58.87 KPX egrave ccedilla -58.87 KPX egrave d -58.87 KPX egrave dbar -58.87 KPX egrave e -58.87 KPX egrave eacute -58.87 KPX egrave ecaron -58.87 KPX egrave ecircumflex -58.87 KPX egrave edieresis -58.87 KPX egrave egrave -58.87 KPX egrave eogonek -58.87 KPX egrave g -58.87 KPX egrave gbreve -58.87 KPX egrave o -58.87 KPX egrave oacute -58.87 KPX egrave ocircumflex -58.87 KPX egrave odieresis -58.87 KPX egrave oe -58.87 KPX egrave ograve -58.87 KPX egrave ohungarumlaut -58.87 KPX egrave oslash -58.87 KPX egrave otilde -58.87 KPX egrave q -58.87 KPX eogonek a -58.87 KPX eogonek aacute -58.87 KPX eogonek acircumflex -58.87 KPX eogonek acircumflex -58.87 KPX eogonek adieresis -58.87 KPX eogonek ae -58.87 KPX eogonek agrave -58.87 KPX eogonek aogonek -58.87 KPX eogonek aring -58.87 KPX eogonek atilde -58.87 KPX eogonek c -58.87 KPX eogonek cacute -58.87 KPX eogonek cacute -58.87 KPX eogonek ccaron -58.87 KPX eogonek ccedilla -58.87 KPX eogonek d -58.87 KPX eogonek dbar -58.87 KPX eogonek e -58.87 KPX eogonek eacute -58.87 KPX eogonek ecaron -58.87 KPX eogonek ecircumflex -58.87 KPX eogonek edieresis -58.87 KPX eogonek egrave -58.87 KPX eogonek eogonek -58.87 KPX eogonek g -58.87 KPX eogonek gbreve -58.87 KPX eogonek o -58.87 KPX eogonek oacute -58.87 KPX eogonek ocircumflex -58.87 KPX eogonek odieresis -58.87 KPX eogonek oe -58.87 KPX eogonek ograve -58.87 KPX eogonek ohungarumlaut -58.87 KPX eogonek oslash -58.87 KPX eogonek otilde -58.87 KPX eogonek q -58.87 KPX f bracketright 106.64 KPX f exclam 106.64 KPX f parenright 106.64 KPX f question 106.64 KPX f quoteright 106.64 KPX ff bracketright 106.64 KPX ff exclam 106.64 KPX ff parenright 106.64 KPX ff question 106.64 KPX ff quoteright 106.64 KPX l l 58.87 KPX l lacute 58.87 KPX l lquoteright 58.87 KPX n quoteright -117.75 KPX o a -58.87 KPX o aacute -58.87 KPX o acircumflex -58.87 KPX o acircumflex -58.87 KPX o adieresis -58.87 KPX o ae -58.87 KPX o agrave -58.87 KPX o aogonek -58.87 KPX o aring -58.87 KPX o atilde -58.87 KPX o c -58.87 KPX o cacute -58.87 KPX o cacute -58.87 KPX o ccaron -58.87 KPX o ccedilla -58.87 KPX o d -58.87 KPX o dbar -58.87 KPX o e -58.87 KPX o eacute -58.87 KPX o ecaron -58.87 KPX o ecircumflex -58.87 KPX o edieresis -58.87 KPX o egrave -58.87 KPX o eogonek -58.87 KPX o g -58.87 KPX o gbreve -58.87 KPX o o -58.87 KPX o oacute -58.87 KPX o ocircumflex -58.87 KPX o odieresis -58.87 KPX o oe -58.87 KPX o ograve -58.87 KPX o ohungarumlaut -58.87 KPX o oslash -58.87 KPX o otilde -58.87 KPX o q -58.87 KPX oacute a -58.87 KPX oacute aacute -58.87 KPX oacute acircumflex -58.87 KPX oacute acircumflex -58.87 KPX oacute adieresis -58.87 KPX oacute ae -58.87 KPX oacute agrave -58.87 KPX oacute aogonek -58.87 KPX oacute aring -58.87 KPX oacute atilde -58.87 KPX oacute c -58.87 KPX oacute cacute -58.87 KPX oacute cacute -58.87 KPX oacute ccaron -58.87 KPX oacute ccedilla -58.87 KPX oacute d -58.87 KPX oacute dbar -58.87 KPX oacute e -58.87 KPX oacute eacute -58.87 KPX oacute ecaron -58.87 KPX oacute ecircumflex -58.87 KPX oacute edieresis -58.87 KPX oacute egrave -58.87 KPX oacute eogonek -58.87 KPX oacute g -58.87 KPX oacute gbreve -58.87 KPX oacute o -58.87 KPX oacute oacute -58.87 KPX oacute ocircumflex -58.87 KPX oacute odieresis -58.87 KPX oacute oe -58.87 KPX oacute ograve -58.87 KPX oacute ohungarumlaut -58.87 KPX oacute oslash -58.87 KPX oacute otilde -58.87 KPX oacute q -58.87 KPX ocircumflex a -58.87 KPX ocircumflex aacute -58.87 KPX ocircumflex acircumflex -58.87 KPX ocircumflex acircumflex -58.87 KPX ocircumflex adieresis -58.87 KPX ocircumflex ae -58.87 KPX ocircumflex agrave -58.87 KPX ocircumflex aogonek -58.87 KPX ocircumflex aring -58.87 KPX ocircumflex atilde -58.87 KPX ocircumflex c -58.87 KPX ocircumflex cacute -58.87 KPX ocircumflex cacute -58.87 KPX ocircumflex ccaron -58.87 KPX ocircumflex ccedilla -58.87 KPX ocircumflex d -58.87 KPX ocircumflex dbar -58.87 KPX ocircumflex e -58.87 KPX ocircumflex eacute -58.87 KPX ocircumflex ecaron -58.87 KPX ocircumflex ecircumflex -58.87 KPX ocircumflex edieresis -58.87 KPX ocircumflex egrave -58.87 KPX ocircumflex eogonek -58.87 KPX ocircumflex g -58.87 KPX ocircumflex gbreve -58.87 KPX ocircumflex o -58.87 KPX ocircumflex oacute -58.87 KPX ocircumflex ocircumflex -58.87 KPX ocircumflex odieresis -58.87 KPX ocircumflex oe -58.87 KPX ocircumflex ograve -58.87 KPX ocircumflex ohungarumlaut -58.87 KPX ocircumflex oslash -58.87 KPX ocircumflex otilde -58.87 KPX ocircumflex q -58.87 KPX odieresis a -58.87 KPX odieresis aacute -58.87 KPX odieresis acircumflex -58.87 KPX odieresis acircumflex -58.87 KPX odieresis adieresis -58.87 KPX odieresis ae -58.87 KPX odieresis agrave -58.87 KPX odieresis aogonek -58.87 KPX odieresis aring -58.87 KPX odieresis atilde -58.87 KPX odieresis c -58.87 KPX odieresis cacute -58.87 KPX odieresis cacute -58.87 KPX odieresis ccaron -58.87 KPX odieresis ccedilla -58.87 KPX odieresis d -58.87 KPX odieresis dbar -58.87 KPX odieresis e -58.87 KPX odieresis eacute -58.87 KPX odieresis ecaron -58.87 KPX odieresis ecircumflex -58.87 KPX odieresis edieresis -58.87 KPX odieresis egrave -58.87 KPX odieresis eogonek -58.87 KPX odieresis g -58.87 KPX odieresis gbreve -58.87 KPX odieresis o -58.87 KPX odieresis oacute -58.87 KPX odieresis ocircumflex -58.87 KPX odieresis odieresis -58.87 KPX odieresis oe -58.87 KPX odieresis ograve -58.87 KPX odieresis ohungarumlaut -58.87 KPX odieresis oslash -58.87 KPX odieresis otilde -58.87 KPX odieresis q -58.87 KPX ograve a -58.87 KPX ograve aacute -58.87 KPX ograve acircumflex -58.87 KPX ograve acircumflex -58.87 KPX ograve adieresis -58.87 KPX ograve ae -58.87 KPX ograve agrave -58.87 KPX ograve aogonek -58.87 KPX ograve aring -58.87 KPX ograve atilde -58.87 KPX ograve c -58.87 KPX ograve cacute -58.87 KPX ograve cacute -58.87 KPX ograve ccaron -58.87 KPX ograve ccedilla -58.87 KPX ograve d -58.87 KPX ograve dbar -58.87 KPX ograve e -58.87 KPX ograve eacute -58.87 KPX ograve ecaron -58.87 KPX ograve ecircumflex -58.87 KPX ograve edieresis -58.87 KPX ograve egrave -58.87 KPX ograve eogonek -58.87 KPX ograve g -58.87 KPX ograve gbreve -58.87 KPX ograve o -58.87 KPX ograve oacute -58.87 KPX ograve ocircumflex -58.87 KPX ograve odieresis -58.87 KPX ograve oe -58.87 KPX ograve ograve -58.87 KPX ograve ohungarumlaut -58.87 KPX ograve oslash -58.87 KPX ograve otilde -58.87 KPX ograve q -58.87 KPX otilde a -58.87 KPX otilde aacute -58.87 KPX otilde acircumflex -58.87 KPX otilde acircumflex -58.87 KPX otilde adieresis -58.87 KPX otilde ae -58.87 KPX otilde agrave -58.87 KPX otilde aogonek -58.87 KPX otilde aring -58.87 KPX otilde atilde -58.87 KPX otilde c -58.87 KPX otilde cacute -58.87 KPX otilde cacute -58.87 KPX otilde ccaron -58.87 KPX otilde ccedilla -58.87 KPX otilde d -58.87 KPX otilde dbar -58.87 KPX otilde e -58.87 KPX otilde eacute -58.87 KPX otilde ecaron -58.87 KPX otilde ecircumflex -58.87 KPX otilde edieresis -58.87 KPX otilde egrave -58.87 KPX otilde eogonek -58.87 KPX otilde g -58.87 KPX otilde gbreve -58.87 KPX otilde o -58.87 KPX otilde oacute -58.87 KPX otilde ocircumflex -58.87 KPX otilde odieresis -58.87 KPX otilde oe -58.87 KPX otilde ograve -58.87 KPX otilde ohungarumlaut -58.87 KPX otilde oslash -58.87 KPX otilde otilde -58.87 KPX otilde q -58.87 KPX p a -58.87 KPX p aacute -58.87 KPX p acircumflex -58.87 KPX p acircumflex -58.87 KPX p adieresis -58.87 KPX p ae -58.87 KPX p agrave -58.87 KPX p aogonek -58.87 KPX p aring -58.87 KPX p atilde -58.87 KPX p c -58.87 KPX p cacute -58.87 KPX p cacute -58.87 KPX p ccaron -58.87 KPX p ccedilla -58.87 KPX p d -58.87 KPX p dbar -58.87 KPX p e -58.87 KPX p eacute -58.87 KPX p ecaron -58.87 KPX p ecircumflex -58.87 KPX p edieresis -58.87 KPX p egrave -58.87 KPX p eogonek -58.87 KPX p g -58.87 KPX p gbreve -58.87 KPX p o -58.87 KPX p oacute -58.87 KPX p ocircumflex -58.87 KPX p odieresis -58.87 KPX p oe -58.87 KPX p ograve -58.87 KPX p ohungarumlaut -58.87 KPX p oslash -58.87 KPX p otilde -58.87 KPX p q -58.87 KPX quoteright exclam 117.75 KPX quoteright question 117.75 KPX r a -58.87 KPX r aacute -58.87 KPX r acircumflex -58.87 KPX r acircumflex -58.87 KPX r adieresis -58.87 KPX r ae -58.87 KPX r agrave -58.87 KPX r aogonek -58.87 KPX r aring -58.87 KPX r atilde -58.87 KPX r c -58.87 KPX r cacute -58.87 KPX r cacute -58.87 KPX r ccaron -58.87 KPX r ccedilla -58.87 KPX r d -58.87 KPX r dbar -58.87 KPX r e -58.87 KPX r eacute -58.87 KPX r ecaron -58.87 KPX r ecircumflex -58.87 KPX r edieresis -58.87 KPX r egrave -58.87 KPX r eogonek -58.87 KPX r g -58.87 KPX r gbreve -58.87 KPX r o -58.87 KPX r oacute -58.87 KPX r ocircumflex -58.87 KPX r odieresis -58.87 KPX r oe -58.87 KPX r ograve -58.87 KPX r ohungarumlaut -58.87 KPX r oslash -58.87 KPX r otilde -58.87 KPX r q -58.87 KPX thorn a -58.87 KPX thorn aacute -58.87 KPX thorn acircumflex -58.87 KPX thorn acircumflex -58.87 KPX thorn adieresis -58.87 KPX thorn ae -58.87 KPX thorn agrave -58.87 KPX thorn aogonek -58.87 KPX thorn aring -58.87 KPX thorn atilde -58.87 KPX thorn c -58.87 KPX thorn cacute -58.87 KPX thorn cacute -58.87 KPX thorn ccaron -58.87 KPX thorn ccedilla -58.87 KPX thorn d -58.87 KPX thorn dbar -58.87 KPX thorn e -58.87 KPX thorn eacute -58.87 KPX thorn ecaron -58.87 KPX thorn ecircumflex -58.87 KPX thorn edieresis -58.87 KPX thorn egrave -58.87 KPX thorn eogonek -58.87 KPX thorn g -58.87 KPX thorn gbreve -58.87 KPX thorn o -58.87 KPX thorn oacute -58.87 KPX thorn ocircumflex -58.87 KPX thorn odieresis -58.87 KPX thorn oe -58.87 KPX thorn ograve -58.87 KPX thorn ohungarumlaut -58.87 KPX thorn oslash -58.87 KPX thorn otilde -58.87 KPX thorn q -58.87 KPX w l 58.87 KPX w lacute 58.87 KPX w lquoteright 58.87 EndKernPairs EndKernData EndFontMetrics t1lib-5.1.2/Fonts/enc/0000755000175000001440000000000010733501626013122 5ustar rmzuserst1lib-5.1.2/Fonts/enc/dc.enc0000644000175000001440000000650710733501626014207 0ustar rmzusers% This is an old version of the Cork encoding, with no value but historical. % % These are the ligs and kerns in addition to those found in the % AFM file. (The only ligs in the Times-Roman.afm file are the % fi and fl ligatures.) % % LIGKERN space l =: lslash ; space L =: Lslash ; % LIGKERN question quoteleft =: questiondown ; exclam quoteleft =: exclamdown ; % LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ; % LIGKERN quoteleft quoteleft =: quotedblleft ; % LIGKERN quoteright quoteright =: quotedblright ; % % We blow away kerns to and from spaces (TeX doesn't have a % space) and also remove any kerns from the numbers (although % the only kern pair that mentions a number in Times-Roman.afm % is one one.) % % LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ; % LIGKERN one {} * ; * {} one ; two {} * ; * {} two ; % LIGKERN three {} * ; * {} three ; four {} * ; * {} four ; % LIGKERN five {} * ; * {} five ; six {} * ; * {} six ; % LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ; % LIGKERN nine {} * ; * {} nine ; % LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ; % LIGKERN greater greater =: guillemotright ; % /DCEncoding[/test/test2 % now 256 chars follow % 0x00 /grave /acute /circumflex /tilde /dieresis /hungarumlaut %/ring /caron /breve /macron /dotaccent /cedilla /ogonek /quotesinglbase /guilsinglleft /guilsinglright % 0x10 /quotedblleft /quotedblright /quotedblbase /guillemotleft /guillemotright /endash /emdash /.notdef /zeroinferior /dotlessi /dotlessj /ff /fi /fl /ffi /ffl % 0x20 /.notdef /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash % 0x30 /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question % 0x40 /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O % 0x50 /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore % 0x60 /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o % 0x70 /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /hyphen % 0x80 /Abreve /Aogonek /Cacute /Ccaron /Dcaron /Ecaron /Eogonek /Gbreve /Lacute /Lcaron /Lslash /Nacute /Ncaron /Ng /Ohungarumlaut /Racute % 0x90 /Rcaron /Sacute /Scaron /Scedilla /Tcaron /Tcedilla /Uhungarumlaut /Uring /Ldot /Zacute /Zcaron /Zdotaccent /IJ /Idotaccent /dbar /section % 0xA0 /abreve /aogonek /cacute /ccaron /dcaron /ecaron /eogonek /gbreve /lacute /lcaron /lslash /nacute /ncaron /ng /ohungarumlaut /racute % 0xB0 /rcaron /sacute /scaron /scedilla /tcaron /tcedilla /uhungarumlaut /uring /ldot /zacute /zcaron /zdotaccent /ij /exclamdown /questiondown /sterling % 0xC0 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis % 0xD0 /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /OE /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /SS % 0xE0 /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis % /igrave /iacute /icircumflex /idieresis % 0xF0 /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /oe /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/germandbls ] deft1lib-5.1.2/Fonts/enc/dvips.enc0000644000175000001440000000720310733501626014740 0ustar rmzusers% @@psencodingfile@{ % author = "T. Rokicki, K. Berry", % version = "2.0", % date = "22 June 1996", % filename = "dvips.enc", % email = "kb@@mail.tug.org", % address = "135 Center Hill Rd. // Plymouth, MA 02360", % codetable = "ISO/ASCII", % checksum = "75 515 3715", % docstring = "An encoding for PostScript fonts to be used with TeX." % @} % % This is almost the default encoding produced by the afm2tfm program % that comes with the dvips distribution, when it is applied to a % StandardEncoding PostScript font. The positions of the accented % characters (which afm2tfm assigned more or less randomly in the % previous set of fonts) have been held fixed. % % It is almost upward-compatible with TeX text. (The primary exceptions % are dotaccent and hungarumlaut.) Some of the ligatures are also in % different positions, but this is not important, since ligature % positions are defined in the TFM file, not by macros. % % The character positions were assigned in this order: % 1) non-composite characters in the afm2tfm encoding (except dotlessj % was included in its plain TeX position); % 2) available characters in the Cork (EC) encoding; % 3) remaining composite characters in the base encoding (starting at % position 130 decimal). We don't include all the other base % characters because that changes the height/depth/width tables in % the TFM files (because more characters mean more distinct values). % % We leave the initial positions open for the Greek letters in Times-Roman. % /DvipsEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /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 /dieresis /asciicircum /asciitilde /Ccedilla /Iacute /Icircumflex /atilde /edieresis /egrave /scaron /zcaron /Eth /ff /ffi /ffl /.notdef /.notdef /.notdef /.notdef /Scaron /.notdef /.notdef /.notdef /.notdef /.notdef /Ydieresis /.notdef /Zcaron /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /cent /sterling /fraction /yen /florin /section /currency /copyright /quotedblleft /guillemotleft /guilsinglleft /guilsinglright /fi /fl /degree /endash /dagger /daggerdbl /periodcentered /.notdef /paragraph /bullet /quotesinglbase /quotedblbase /quotedblright /guillemotright /ellipsis /perthousand /.notdef /.notdef /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /.notdef /dotaccent /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /hungarumlaut /ogonek /Idieresis /emdash /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /.notdef /.notdef /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /.notdef /agrave /aacute /acircumflex /ordfeminine /adieresis /aring /.notdef /ccedilla /Lslash /eacute /ecircumflex /ordmasculine /igrave /iacute /icircumflex /idieresis /.notdef /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /.notdef /lslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def t1lib-5.1.2/Fonts/enc/PSLatin1.enc0000644000175000001440000003150610733501626015211 0ustar rmzusers t1lib-encodingfile This file is intended to be read by the function T1_LoadEncoding(), which is part of t1lib. The syntactic format is really simple. The file contents is scanned according to the following priciple: 1) There appears a "Encoding=[scheme]" at the beginning of a line. 2) Then exacly 256 lines of text must follow. These lines have to start with a valid charactername, followed by at least one white space character. The remaining of the line is ignored and may be used for comments, e.g., for numbering of characters. 3) After these 256 lines all following data is ignored. Notice: This file contains ISOLatin1Encoding as defined in the PostScript language (Level 2 and above). It differs slightly from what is specified in ISO 8859-1. (1999-11-16, RMz) -------------------------------------------------------------------------- Encoding=PSLatin1Encoding /* The name of the encoding scheme */ .notdef /* '000 000 "00 */ .notdef /* '001 001 "01 */ .notdef /* '002 002 "02 */ .notdef /* '003 003 "03 */ .notdef /* '004 004 "04 */ .notdef /* '005 005 "05 */ .notdef /* '006 006 "06 */ .notdef /* '007 007 "07 */ .notdef /* '010 008 "08 */ .notdef /* '011 009 "09 */ .notdef /* '012 010 "0A */ .notdef /* '013 011 "0B */ .notdef /* '014 012 "0C */ .notdef /* '015 013 "0D */ .notdef /* '016 014 "0E */ .notdef /* '017 015 "0F */ .notdef /* '020 016 "10 */ .notdef /* '021 017 "11 */ .notdef /* '022 018 "12 */ .notdef /* '023 019 "13 */ .notdef /* '024 020 "14 */ .notdef /* '025 021 "15 */ .notdef /* '026 022 "16 */ .notdef /* '027 023 "17 */ .notdef /* '030 024 "18 */ .notdef /* '031 025 "19 */ .notdef /* '032 026 "1A */ .notdef /* '033 027 "1B */ .notdef /* '034 028 "1C */ .notdef /* '035 029 "1D */ .notdef /* '036 030 "1E */ .notdef /* '037 031 "1F */ space /* '040 032 "20 */ exclam /* '041 033 "21 */ quotedbl /* '042 034 "22 */ numbersign /* '043 035 "23 */ dollar /* '044 036 "24 */ percent /* '045 037 "25 */ ampersand /* '046 038 "26 */ quoteright /* '047 039 "27 */ parenleft /* '050 040 "28 */ parenright /* '051 041 "29 */ asterisk /* '052 042 "2A */ plus /* '053 043 "2B */ comma /* '054 044 "2C */ minus /* '055 045 "2D */ period /* '056 046 "2E */ slash /* '057 047 "2F */ zero /* '060 048 "30 */ one /* '061 049 "31 */ two /* '062 050 "32 */ three /* '063 051 "33 */ four /* '064 052 "34 */ five /* '065 053 "35 */ six /* '066 054 "36 */ seven /* '067 055 "37 */ eight /* '070 056 "38 */ nine /* '071 057 "39 */ colon /* '072 058 "3A */ semicolon /* '073 059 "3B */ less /* '074 060 "3C */ equal /* '075 061 "3D */ greater /* '076 062 "3E */ question /* '077 063 "3F */ at /* '100 064 "40 */ A /* '101 065 "41 */ B /* '102 066 "42 */ C /* '103 067 "43 */ D /* '104 068 "44 */ E /* '105 069 "45 */ F /* '106 070 "46 */ G /* '107 071 "47 */ H /* '110 072 "48 */ I /* '111 073 "49 */ J /* '112 074 "4A */ K /* '113 075 "4B */ L /* '114 076 "4C */ M /* '115 077 "4D */ N /* '116 078 "4E */ O /* '117 079 "4F */ P /* '120 080 "50 */ Q /* '121 081 "51 */ R /* '122 082 "52 */ S /* '123 083 "53 */ T /* '124 084 "54 */ U /* '125 085 "55 */ V /* '126 086 "56 */ W /* '127 087 "57 */ X /* '130 088 "58 */ Y /* '131 089 "59 */ Z /* '132 090 "5A */ bracketleft /* '133 091 "5B */ backslash /* '134 092 "5C */ bracketright /* '135 093 "5D */ asciicircum /* '136 094 "5E */ underscore /* '137 095 "5F */ quoteleft /* '140 096 "60 */ a /* '141 097 "61 */ b /* '142 098 "62 */ c /* '143 099 "63 */ d /* '144 100 "64 */ e /* '145 101 "65 */ f /* '146 102 "66 */ g /* '147 103 "67 */ h /* '150 104 "68 */ i /* '151 105 "69 */ j /* '152 106 "6A */ k /* '153 107 "6B */ l /* '154 108 "6C */ m /* '155 109 "6D */ n /* '156 110 "6E */ o /* '157 111 "6F */ p /* '160 112 "70 */ q /* '161 113 "71 */ r /* '162 114 "72 */ s /* '163 115 "73 */ t /* '164 116 "74 */ u /* '165 117 "75 */ v /* '166 118 "76 */ w /* '167 119 "77 */ x /* '170 120 "78 */ y /* '171 121 "79 */ z /* '172 122 "7A */ braceleft /* '173 123 "7B */ bar /* '174 124 "7C */ braceright /* '175 125 "7D */ asciitilde /* '176 126 "7E */ .notdef /* '177 127 "7F */ .notdef /* '200 128 "80 */ .notdef /* '201 129 "81 */ .notdef /* '202 130 "82 */ .notdef /* '203 131 "83 */ .notdef /* '204 132 "84 */ .notdef /* '205 133 "85 */ .notdef /* '206 134 "86 */ .notdef /* '207 135 "87 */ .notdef /* '210 136 "88 */ .notdef /* '211 137 "89 */ .notdef /* '212 138 "8A */ .notdef /* '213 139 "8B */ .notdef /* '214 140 "8C */ .notdef /* '215 141 "8D */ .notdef /* '216 142 "8E */ .notdef /* '217 143 "8F */ dotlessi /* '220 144 "90 */ grave /* '221 145 "91 */ acute /* '222 146 "92 */ circumflex /* '223 147 "93 */ tilde /* '224 148 "94 */ macron /* '225 149 "95 */ breve /* '226 150 "96 */ dotaccent /* '227 151 "97 */ dieresis /* '230 152 "98 */ .notdef /* '231 153 "99 */ ring /* '232 154 "9A */ cedilla /* '233 155 "9B */ .notdef /* '234 156 "9C */ hungarumlaut /* '235 157 "9D */ ogonek /* '236 158 "9E */ caron /* '237 159 "9F */ space /* '240 160 "A0 */ exclamdown /* '241 161 "A1 */ cent /* '242 162 "A2 */ sterling /* '243 163 "A3 */ currency /* '244 164 "A4 */ yen /* '245 165 "A5 */ brokenbar /* '246 166 "A6 */ section /* '247 167 "A7 */ dieresis /* '250 168 "A8 */ copyright /* '251 169 "A9 */ ordfeminine /* '252 170 "AA */ guillemotleft /* '253 171 "AB */ logicalnot /* '254 172 "AC */ hyphen /* '255 173 "AD */ registered /* '256 174 "AE */ macron /* '257 175 "AF */ degree /* '260 176 "B0 */ plusminus /* '261 177 "B1 */ twosuperior /* '262 178 "B2 */ threesuperior /* '263 179 "B3 */ acute /* '264 180 "B4 */ mu /* '265 181 "B5 */ paragraph /* '266 182 "B6 */ periodcentered /* '267 183 "B7 */ cedilla /* '270 184 "B8 */ onesuperior /* '271 185 "B9 */ ordmasculine /* '272 186 "BA */ guillemotright /* '273 187 "BB */ onequarter /* '274 188 "BC */ onehalf /* '275 189 "BD */ threequarters /* '276 190 "BE */ questiondown /* '277 191 "BF */ Agrave /* '300 192 "C0 */ Aacute /* '301 193 "C1 */ Acircumflex /* '302 194 "C2 */ Atilde /* '303 195 "C3 */ Adieresis /* '304 196 "C4 */ Aring /* '305 197 "C5 */ AE /* '306 198 "C6 */ Ccedilla /* '307 199 "C7 */ Egrave /* '310 200 "C8 */ Eacute /* '311 201 "C9 */ Ecircumflex /* '312 202 "CA */ Edieresis /* '313 203 "CB */ Igrave /* '314 204 "CC */ Iacute /* '315 205 "CD */ Icircumflex /* '316 206 "CE */ Idieresis /* '317 207 "CF */ Eth /* '320 208 "D0 */ Ntilde /* '321 209 "D1 */ Ograve /* '322 210 "D2 */ Oacute /* '323 211 "D3 */ Ocircumflex /* '324 212 "D4 */ Otilde /* '325 213 "D5 */ Odieresis /* '326 214 "D6 */ multiply /* '327 215 "D7 */ Oslash /* '330 216 "D8 */ Ugrave /* '331 217 "D9 */ Uacute /* '332 218 "DA */ Ucircumflex /* '333 219 "DB */ Udieresis /* '334 220 "DC */ Yacute /* '335 221 "DD */ Thorn /* '336 222 "DE */ germandbls /* '337 223 "DF */ agrave /* '340 224 "E0 */ aacute /* '341 225 "E1 */ acircumflex /* '342 226 "E2 */ atilde /* '343 227 "E3 */ adieresis /* '344 228 "E4 */ aring /* '345 229 "E5 */ ae /* '346 230 "E6 */ ccedilla /* '347 231 "E7 */ egrave /* '350 232 "E8 */ eacute /* '351 233 "E9 */ ecircumflex /* '352 234 "EA */ edieresis /* '353 235 "EB */ igrave /* '354 236 "EC */ iacute /* '355 237 "ED */ icircumflex /* '356 238 "EE */ idieresis /* '357 239 "EF */ eth /* '360 240 "F0 */ ntilde /* '361 241 "F1 */ ograve /* '362 242 "F2 */ oacute /* '363 243 "F3 */ ocircumflex /* '364 244 "F4 */ otilde /* '365 245 "F5 */ odieresis /* '366 246 "F6 */ divide /* '367 247 "F7 */ oslash /* '370 248 "F8 */ ugrave /* '371 249 "F9 */ uacute /* '372 250 "FA */ ucircumflex /* '373 251 "FB */ udieresis /* '374 252 "FC */ yacute /* '375 253 "FD */ thorn /* '376 254 "FE */ ydieresis /* '377 255 "FF */ t1lib-5.1.2/Fonts/enc/IsoLatin1.enc0000644000175000001440000003170010733501626015415 0ustar rmzusers% % t1lib-encodingfile % % This file is intended to be read by the function T1_LoadEncoding(), which is % part of t1lib. The syntactic format is really simple. The file contents is % scanned according to the following priciple: % % 1) There appears a "Encoding=[scheme]" at the beginning of a line. % % 2) Then exacly 256 lines of text must follow. These lines have to % start with a valid charactername, followed by at least one white % space character. The remaining of the line is ignored and may be % used for comments, e.g., for numbering of characters. % % 3) After these 256 lines all following data is ignored. % % Notice: This encoding contains what *I* believe is the ISOLatin1Encoding. % It differs slightly from what the PostScript interpreter believes. % Please note that there is no unique definition for the % charactername appearing at 45 (dec) in ISO 8859-1. % % (1999-11-16, RMz) % %-------------------------------------------------------------------------- Encoding=ISOLatin1Encoding /* The name of the encoding scheme */ .notdef /* '000 000 "00 */ .notdef /* '001 001 "01 */ .notdef /* '002 002 "02 */ .notdef /* '003 003 "03 */ .notdef /* '004 004 "04 */ .notdef /* '005 005 "05 */ .notdef /* '006 006 "06 */ .notdef /* '007 007 "07 */ .notdef /* '010 008 "08 */ .notdef /* '011 009 "09 */ .notdef /* '012 010 "0A */ .notdef /* '013 011 "0B */ .notdef /* '014 012 "0C */ .notdef /* '015 013 "0D */ .notdef /* '016 014 "0E */ .notdef /* '017 015 "0F */ .notdef /* '020 016 "10 */ .notdef /* '021 017 "11 */ .notdef /* '022 018 "12 */ .notdef /* '023 019 "13 */ .notdef /* '024 020 "14 */ .notdef /* '025 021 "15 */ .notdef /* '026 022 "16 */ .notdef /* '027 023 "17 */ .notdef /* '030 024 "18 */ .notdef /* '031 025 "19 */ .notdef /* '032 026 "1A */ .notdef /* '033 027 "1B */ .notdef /* '034 028 "1C */ .notdef /* '035 029 "1D */ .notdef /* '036 030 "1E */ .notdef /* '037 031 "1F */ space /* '040 032 "20 */ exclam /* '041 033 "21 */ quotedbl /* '042 034 "22 */ numbersign /* '043 035 "23 */ dollar /* '044 036 "24 */ percent /* '045 037 "25 */ ampersand /* '046 038 "26 */ quoteright /* '047 039 "27 */ parenleft /* '050 040 "28 */ parenright /* '051 041 "29 */ asterisk /* '052 042 "2A */ plus /* '053 043 "2B */ comma /* '054 044 "2C */ hyphen /* '055 045 "2D */ period /* '056 046 "2E */ slash /* '057 047 "2F */ zero /* '060 048 "30 */ one /* '061 049 "31 */ two /* '062 050 "32 */ three /* '063 051 "33 */ four /* '064 052 "34 */ five /* '065 053 "35 */ six /* '066 054 "36 */ seven /* '067 055 "37 */ eight /* '070 056 "38 */ nine /* '071 057 "39 */ colon /* '072 058 "3A */ semicolon /* '073 059 "3B */ less /* '074 060 "3C */ equal /* '075 061 "3D */ greater /* '076 062 "3E */ question /* '077 063 "3F */ at /* '100 064 "40 */ A /* '101 065 "41 */ B /* '102 066 "42 */ C /* '103 067 "43 */ D /* '104 068 "44 */ E /* '105 069 "45 */ F /* '106 070 "46 */ G /* '107 071 "47 */ H /* '110 072 "48 */ I /* '111 073 "49 */ J /* '112 074 "4A */ K /* '113 075 "4B */ L /* '114 076 "4C */ M /* '115 077 "4D */ N /* '116 078 "4E */ O /* '117 079 "4F */ P /* '120 080 "50 */ Q /* '121 081 "51 */ R /* '122 082 "52 */ S /* '123 083 "53 */ T /* '124 084 "54 */ U /* '125 085 "55 */ V /* '126 086 "56 */ W /* '127 087 "57 */ X /* '130 088 "58 */ Y /* '131 089 "59 */ Z /* '132 090 "5A */ bracketleft /* '133 091 "5B */ backslash /* '134 092 "5C */ bracketright /* '135 093 "5D */ asciicircum /* '136 094 "5E */ underscore /* '137 095 "5F */ grave /* '140 096 "60 */ a /* '141 097 "61 */ b /* '142 098 "62 */ c /* '143 099 "63 */ d /* '144 100 "64 */ e /* '145 101 "65 */ f /* '146 102 "66 */ g /* '147 103 "67 */ h /* '150 104 "68 */ i /* '151 105 "69 */ j /* '152 106 "6A */ k /* '153 107 "6B */ l /* '154 108 "6C */ m /* '155 109 "6D */ n /* '156 110 "6E */ o /* '157 111 "6F */ p /* '160 112 "70 */ q /* '161 113 "71 */ r /* '162 114 "72 */ s /* '163 115 "73 */ t /* '164 116 "74 */ u /* '165 117 "75 */ v /* '166 118 "76 */ w /* '167 119 "77 */ x /* '170 120 "78 */ y /* '171 121 "79 */ z /* '172 122 "7A */ braceleft /* '173 123 "7B */ bar /* '174 124 "7C */ braceright /* '175 125 "7D */ asciitilde /* '176 126 "7E */ .notdef /* '177 127 "7F */ .notdef /* '200 128 "80 */ .notdef /* '201 129 "81 */ .notdef /* '202 130 "82 */ .notdef /* '203 131 "83 */ .notdef /* '204 132 "84 */ .notdef /* '205 133 "85 */ .notdef /* '206 134 "86 */ .notdef /* '207 135 "87 */ .notdef /* '210 136 "88 */ .notdef /* '211 137 "89 */ .notdef /* '212 138 "8A */ .notdef /* '213 139 "8B */ .notdef /* '214 140 "8C */ .notdef /* '215 141 "8D */ .notdef /* '216 142 "8E */ .notdef /* '217 143 "8F */ dotlessi /* '220 144 "90 */ grave /* '221 145 "91 */ acute /* '222 146 "92 */ circumflex /* '223 147 "93 */ tilde /* '224 148 "94 */ macron /* '225 149 "95 */ breve /* '226 150 "96 */ dotaccent /* '227 151 "97 */ dieresis /* '230 152 "98 */ .notdef /* '231 153 "99 */ ring /* '232 154 "9A */ cedilla /* '233 155 "9B */ .notdef /* '234 156 "9C */ hungarumlaut /* '235 157 "9D */ ogonek /* '236 158 "9E */ caron /* '237 159 "9F */ space /* '240 160 "A0 */ exclamdown /* '241 161 "A1 */ cent /* '242 162 "A2 */ sterling /* '243 163 "A3 */ currency /* '244 164 "A4 */ yen /* '245 165 "A5 */ brokenbar /* '246 166 "A6 */ section /* '247 167 "A7 */ dieresis /* '250 168 "A8 */ copyright /* '251 169 "A9 */ ordfeminine /* '252 170 "AA */ guillemotleft /* '253 171 "AB */ logicalnot /* '254 172 "AC */ hyphen /* '255 173 "AD */ registered /* '256 174 "AE */ macron /* '257 175 "AF */ degree /* '260 176 "B0 */ plusminus /* '261 177 "B1 */ twosuperior /* '262 178 "B2 */ threesuperior /* '263 179 "B3 */ acute /* '264 180 "B4 */ mu /* '265 181 "B5 */ paragraph /* '266 182 "B6 */ periodcentered /* '267 183 "B7 */ cedilla /* '270 184 "B8 */ onesuperior /* '271 185 "B9 */ ordmasculine /* '272 186 "BA */ guillemotright /* '273 187 "BB */ onequarter /* '274 188 "BC */ onehalf /* '275 189 "BD */ threequarters /* '276 190 "BE */ questiondown /* '277 191 "BF */ Agrave /* '300 192 "C0 */ Aacute /* '301 193 "C1 */ Acircumflex /* '302 194 "C2 */ Atilde /* '303 195 "C3 */ Adieresis /* '304 196 "C4 */ Aring /* '305 197 "C5 */ AE /* '306 198 "C6 */ Ccedilla /* '307 199 "C7 */ Egrave /* '310 200 "C8 */ Eacute /* '311 201 "C9 */ Ecircumflex /* '312 202 "CA */ Edieresis /* '313 203 "CB */ Igrave /* '314 204 "CC */ Iacute /* '315 205 "CD */ Icircumflex /* '316 206 "CE */ Idieresis /* '317 207 "CF */ Eth /* '320 208 "D0 */ Ntilde /* '321 209 "D1 */ Ograve /* '322 210 "D2 */ Oacute /* '323 211 "D3 */ Ocircumflex /* '324 212 "D4 */ Otilde /* '325 213 "D5 */ Odieresis /* '326 214 "D6 */ multiply /* '327 215 "D7 */ Oslash /* '330 216 "D8 */ Ugrave /* '331 217 "D9 */ Uacute /* '332 218 "DA */ Ucircumflex /* '333 219 "DB */ Udieresis /* '334 220 "DC */ Yacute /* '335 221 "DD */ Thorn /* '336 222 "DE */ germandbls /* '337 223 "DF */ agrave /* '340 224 "E0 */ aacute /* '341 225 "E1 */ acircumflex /* '342 226 "E2 */ atilde /* '343 227 "E3 */ adieresis /* '344 228 "E4 */ aring /* '345 229 "E5 */ ae /* '346 230 "E6 */ ccedilla /* '347 231 "E7 */ egrave /* '350 232 "E8 */ eacute /* '351 233 "E9 */ ecircumflex /* '352 234 "EA */ edieresis /* '353 235 "EB */ igrave /* '354 236 "EC */ iacute /* '355 237 "ED */ icircumflex /* '356 238 "EE */ idieresis /* '357 239 "EF */ eth /* '360 240 "F0 */ ntilde /* '361 241 "F1 */ ograve /* '362 242 "F2 */ oacute /* '363 243 "F3 */ ocircumflex /* '364 244 "F4 */ otilde /* '365 245 "F5 */ odieresis /* '366 246 "F6 */ divide /* '367 247 "F7 */ oslash /* '370 248 "F8 */ ugrave /* '371 249 "F9 */ uacute /* '372 250 "FA */ ucircumflex /* '373 251 "FB */ udieresis /* '374 252 "FC */ yacute /* '375 253 "FD */ thorn /* '376 254 "FE */ ydieresis /* '377 255 "FF */ t1lib-5.1.2/Fonts/enc/IsoLatin2.enc0000644000175000001440000000402110733501627015413 0ustar rmzusers-------------------------------------------------------------- I hope this is correct representation of ISO-8859-2 encoding, which is used in most Center European languages. Drop me a mail at , if you find a bug here. ---------------------------------------------------------- Encoding=ISOLatin2Encoding .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef space exclam quotedbl numbersign dollar percent ampersand quoteright parenleft parenright asterisk plus comma minus period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore quoteleft a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef dotlessi grave acute circumflex tilde .notdef breve .notdef .notdef .notdef ring .notdef .notdef hungarumlaut ogonek caron .notdef Aogonek breve Lslash currency Lcaron Sacute section dieresis Scaron Scedilla Tcaron Zacute hyphen Zcaron Zdotaccent degree aogonek ogonek lslash acute lcaron sacute circumflex cedilla scaron scedilla tcaron zacute hungarumlaut zcaron zdotaccent Racute Aacute Acircumflex Abreve Adieresis Lacute Cacute Ccedilla Ccaron Eacute Eogonek Edieresis Ecaron Iacute Icircumflex Dcaron Eth Nacute Ncaron Oacute Ocircumflex Ohungarumlaut Odieresis multiply Rcaron Uring Uacute Uhungarumlaut Udieresis Yacute Tcedilla germandbls racute aacute acircumflex abreve adieresis lacute cacute ccedilla ccaron eacute eogonek edieresis ecaron iacute icircumflex dcaron eth nacute ncaron oacute ocircumflex ohungarumlaut odieresis divide rcaron uring uacute uhungarumlaut udieresis yacute tcedilla dotaccent t1lib-5.1.2/Fonts/enc/IsoLatin9.enc0000644000175000001440000000373210733501627015432 0ustar rmzusers Encoding=ISOLatin9Encoding .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef space exclam quotedbl numbersign dollar percent ampersand quoteright parenleft parenright asterisk plus comma minus period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore quoteleft a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef space exclamdown cent sterling Euro yen Scaron section scaron copyright ordfeminine guillemotleft logicalnot hyphen registered macron degree plusminus twosuperior threesuperior Zcaron mu paragraph bullet zcaron onesuperior ordmasculine guillemotright OE oe Ydieresis 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 t1lib-5.1.2/Fonts/type1/0000755000175000001440000000000010733501627013420 5ustar rmzuserst1lib-5.1.2/Fonts/type1/bchb.pfb0000644000175000001440000010200710733501627015007 0ustar rmzusers€Ö%!PS-AdobeFont-1.0 %%CreationDate: Sat Nov 3 22:32:22 1990 % Bitstream Type 1 Font Program % Copyright 1990 as an unpublished work by Bitstream Inc., Cambridge, MA. % All rights reserved. % Confidential and proprietary to Bitstream Inc. % U.S. GOVERNMENT RESTRICTED RIGHTS % This software typeface product is provided with RESTRICTED RIGHTS. Use, % duplication or disclosure by the Government is subject to restrictions % as set forth in the license agreement and in FAR 52.227-19 (c) (2) (May, 1987), % when applicable, or the applicable provisions of the DOD FAR supplement % 252.227-7013 subdivision (a) (15) (April, 1988) or subdivision (a) (17) % (April, 1988). Contractor/manufacturer is Bitstream Inc., % 215 First Street, Cambridge, MA 02142. % Bitstream is a registered trademark of Bitstream Inc. 11 dict begin /FontInfo 9 dict dup begin /version (2.0-1.0) readonly def /Notice (Copyright 1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.) readonly def /FullName (Bitstream Charter Bold) readonly def /FamilyName (Bitstream Charter) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -109 def /UnderlineThickness 90 def end readonly def /FontName /CharterBT-Bold def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding StandardEncoding def /FontBBox {-166 -236 1262 963} readonly def /UniqueID 15530632 def currentdict end currentfile eexec € |¢•@ƒŠA3ƒœ©Ò.+™ò¶v|Öu ¬ü²NÍ6s›¶I”Åg7 Lì’É”_ðt^÷ÿư©£¸Içé‡@ål Z÷‡UœÆ•j³3Ï…SÕ\ ŽõìkôbêÄ.s€Ê’®‚³Ö¼ò»]Vp”Ïâ}N¬–“èƒrÒX´~ 8vUŽ¿uz¼\Ýö+ÏÍ‚qòYƒ;¬yprìš0c¿s…à-ŒX¬ß³;Œ‡h²x±KשOLfœ¦¸ó JoðΧ¨,kÀžHé'Dü"ê¾XºÁEƒmµª×ðä‡ä÷!(“ü›hâ| øORM²O±ë0#ëí@³úb!µD2(èjo¸ƒõ˜¯þ0«?(FÔB¿bæoÕJž‡¸0æ²èžáÁÎ8®"f€\ðArºiÕç%×Ýev[‚&”0äfm]9áDz®Ï"+zÿá+ j%‘»¯$ßUÌ!¢µ/PGŒÈ¾•Ÿh‚¦€t™gØÖñKý쫆x.UÔ¦RŠØ+ñFýø“2Qfš”~×”ªpÀê%øöFÁÞ­A’á6‰‚=7°FýQa|óâÃÇx®^"#8ùkî ˜Ç;þ ûçHþlN²-£s’<¶…¥ØÑ oHþk Ž[?j¿{æSŸaPg;lÈÚÄr´ÀH?/ÒõeåŽZ}DäÈÌýÔŽGí¿•í;¶ýêÜ Æ©›¼ÏUÆófMqåÏó{w ¤ýÍ}G®ññ$&h0öOg_ïÚÄéâBhú°KDùÅ1Q0¥´¤ó‚Âè}ü§¢/ÿØ)!¨Òm Û—ñdMº‡Lä;®GÊ^ùûÌ*ŽIrÏóI½ Þw„)SK@h'ƒTØ÷.‰ü]H8rð ®j2”ø¡‚œ­½l|†•îT3[Þ½žSm†ºD…Û¡´úÙNRŸ¦ôI$é¨ÊÍÌhb¾½º¯¤bè,,ÑpÖ}ªÔ†€˜ ¼UZË·ÂâÆU%Þ9ÊmVÀz+;ôg‡µ×õ]×¶óŒ ¨0çºûtPy7ÔärU‡„Ñi¹k¸þE oÕÏdi(¯‚( &$þŸ‡9Õéu' ØwÒUuŠª—'Ó3M؃.Y¸p‰H3RÒ*F=à´HñD`”*Ï7g¿„‡$]Å£žû`chPêÏ6ºó^Õ`´—ý¸vdðG¤.ÿ=m¸Ÿ¼ù¾cPî…‘tt¹©O5å+) ý1N™QÓù$^†—@º„¬É&ÃΧ0¿iB%‚3g¡µ$ôë6:¸d@b`Ðy ³”.<þNÁ÷ÜŽÌ’5léhL\ÅMµg™MXœ"ºu¹^ö Fä`öØÓÁgƒý«#÷ÃöNU9dåí£b cO$¢2ÛUË%EKWÐyú(ûüAºT{gÖ´ò¬Î-,@µ«´˜ÝômÁŸçB26½€ïi!§ó±Å1[†U¹q=ƒL¬ð)D6ïÞT\ƒÙˤóížLH'¼¹j$KcSñ)>mŽ Åzüm@¤¯øÛüG_ÜT_{‡¾À %³wtÌÞ6sB™Ð.E,Tz§RæÉTVI8`7ðïäy™éø»£Iv€ÁZO·âýX¤˜›ì¯É£A‡ä{ñD°@åÂÙe®\üç9­vr2é+ÍØ‰¼8B“!¨Û»Zc¬ÙÓ;xy¥†È1¾›á¯Ò¹ß¿<ÀÃ;Zê ó=|Sœ‘óÐÿ6‰lAîVgô ~λ£ÿPl¶ÇóTÙP涯 ç;PkYŽŸô5¿˜‹9ÊZ¹OØ™® ‘šWÇu/Ñ–¢¿ÂY>Ä Ñ‹ ó¿gätM.’TpÆ evÝî©Oèùn&õÒ'Ù›¦v˜òc¤¶“ƯBBët?¦çæ¨c7×eqK¡8F§Z(ì \ßHCà"Kd-Âg[å9WÕhJ$ï|r·…™.â:Ãì—yte ùóÅÁ¹ŒñH]³îÎx+Ù¹5—Ýf@¿T¼¬‰¿µ¸O ® ý‘¸pm­ÃêD£¾ûð^¸e§‹9âqÌ:p‰mUš_†›^˜voÊÀVÂ¥—+=Uƒ=Ý$ÑŒ=ƒPݬwÙÓ½‰S Õ‰Q„7Å ™æÝ:ÙÝUÔ)Di¸‰žë s–U M oûö×2±»éó>È‚S±1•S$¿@$PlPyüI5¹k¼§ÚÍt¥AÏ”dŠúßCªô‡“d‡6½Ô-Ú\ ÜA¹™—(O9üɪæ˜×/uÌê­Zð˜¥ãô*5MÐsåFæs=ýÚ×™IÅ«w™-jXßÏ'™yYr{—€>PÉ-²ªéŒ 'ØJë`ãǾìl0æ²Û%›%x">id]RÀQ¿%Ê4þò4yJN“ñwgª8Wâ 0ê—ä i,×ný` Ð)S^ilŠÏ,õ$ú©Ð¥fþbnñú‚éŠã#äöíèŒß1†©Žé´µùj*"‰CH&º2j[¯X[H¾—d8]ä"Úï aðý´–íre$N%jÏ9MJ32PVžñÎúF êÇ 3–G rA%&|”±.¡ùÈ_:¸1–ÈÚ{iA^MÂ>ë™xA ?NÏŸ}U=G·ÛeÜ( ,Ý:D²rÓ ”ÃÙVúMsZk.¤«ðÉ^¡œJCÝREÃãÅr:’Ðâ`í­¾Ö¯|1Cop£ êi:ó”5½ºQh9žˆè$®¦1‹¼ëRAî1Ào­ Â!ãTt±*@¢D’üïyÏ™© CↇO•@¹¼>§Pï¼ Ï`M>“†×%‹éÕX-w«’33Ž¥ê‚O°ÆàÅ£• $3”Á&n1šqª-¯±Þ2ËX–ÀÕx Ë4YÏŽoþûbƽžøD í×,G­nÏßLˆ˜pçߨ*‹†8Ó'Ÿø¶Wó#@üÒããy(P ѽá¾îy¸yˆÖ_=¸wÂ>"þ!?ŸßÅ$¯OÞÉV<òh'…PÞ>·–^½pb¹ïšo†e&­KÂìglÆ£ 1éÒ?:lP‰Ê{ªÃmk=kö1?qÛ)º»p»¹=AèØ‹­OÄ_Ë©¹³ÊÀ»€ZxÚÎJÎ/k´C{øþŽ# ù…Ö:ëÉã9C ‹î¼–t`6Û!ãúW2W։˯O0a¾$â"mµ#Ð|X¤YÒ£¶ØÛ ìÇý;¬«¡'cßnÜr·×¢‡6u=Cà¬ýæP–ÀŽ4zús¢¥\VPÁ4ÿ3³+睊5Z¦sòhYÿŠ[4 !±_0±%A…cGo¹:âýòŸåûnÏ…ŠF».ˉHHr-…Éõ¶½*AüzŒÑA\Àï›ɳ´3ç=¼ñ}HqXNl¶½7ÕðWÜÿ‹’T½R;Fû1Ù—öA\‡&·ÉV†‡ |Ðy^wxªÐ\>~êiD÷gˆî¯|Wä,2{·N92¬!Wáƒ|šthûùÆ£¤ì¬+Ò½ ^È×7T£€š!Ø$yt¿£üÃ'庿bä}Æuá¯þ<°v%Mê;®–0ŸwØäI,’Á½@êH&Ì5ÿ¸ùN¢|¿TÀMWÁÁû?²Š0"øWÿ éÎúÐP;áoïüÛ<Q!L)¬¬2ÈoV G.mQŒ¯›ã‘mü¨ì»&Àÿ·‘0‚òqò”‚TNŒ ^[ßË!–zEµ<ä$Ñ®!±-qoÇNS÷«;"À}ïôמrû$$ö[0áWÀ8”[£{ô8¥ú¼Ø’ÿA“ÞËV/OÍÛ5":Ôuµ–à÷Å~¸Û&Ð’ ª6ñ<›Òÿ¥ÍADªÁ˜cæïb÷÷Õ+³tßa³FYФåV „_/M1F2±ôTù0ññÒQ?—“¯â`ùóðWÿõˆ<¶oŠê®;ðR‡lyêm Á…žß˜*#ðsMßìF}—=Æ|—›søLèAן•Tuá0ü½ «øR€N^¤©Öè#ËYIn‘O*Õ5²ƒœÚì·r™ƒ)$ Ìõ@¸ñŒ¬ƒ³th=½d|»ŠÐ}gÈõšÕT^îE~ ´ƒ(áÑß¾êD_ …ñ”¸Ö™‹ÉoûÔJ!áäçöÜŸ-¹­=¹¤De+\È&ùw˜7ö](ÒŸÓ\¾ö&[Ô–ùPà2þBzÆ<ÀV eðùéï¸î=J  ö!·=ê+ŽÔÏâ:eæ>7(a8£ÓÈ “j€iÔÓ U¡ïªHÅgj«™”›à¡8±ô®p}'&^«£?—Ý3ùÜÑÜôŸùcñÒÔQ™D^ÙsV·$F¶ÀAe“tPžâN8š;d}-*•4H8ƒš®Ç=Îa@DæPAÅÿèö^îvþ9ÿë#p€{ÚÁa‘+Zô¤öUCMk‚l»¢¢œNR QA\˜Âôó€cCP‰ø–JëVbíú¢Xir ¡Ò±ò 2 mÕ$ݩ웸…•¸Ó@"š½áééuÖ* «R×Jm²J+£NC,*òèdÙ©‚ËV‡®ÚWX¹¢®é)]Æu¼ÜB:ú𯭾ÛqÄ–X¼Ó %Ü« eu@#þ'W>o³ŒU9•á=ÊO´ r.È\¼‰ôÖO¤g<¥‘ nÈ•2< v÷w ¬Þ)ÆÃ´-@3Y©¢®Ðry8Þ+4Ÿ{1> ; …zQcÖÔrécÄòû‚>QuBä‡SSðœMyqJWã–*¤üÁk—¤Õæ_Ý3ùxdöNÿJû¼7Q®P × S¶(Nâð(°O>«áW:Ê$˜>ܦ‹]±lôI¬¼tä^Æëˆ;«@Gâ^¢È%.ÅßåQ§6Múmò¤jQµÂså ýÎ!\vÉrÆü¹Bš4¥@Ì ‰µkOH_+nó;•Ëy4QâÚÙ0í!0GƽÓÏ(O3 ‘m!ðµ5Ægz_`Ìï¶' ½ÛNcü½ñ„Ovñ}‰ñvÕÑvTÿ|¦î6åZü!GgëRi PØ~ÜìtuÎ&ŠøQ(~F.‘`äÇf§âô*Ãý0,*kœÏ&›j’GJF3B˜W¨jTV¯žvpïìvX9<3’ÏÓÌbIÉD¯JD)ól—%½4WãyþMP¡Ž¿ƒMóÊhÐJ)y½ƒAË[*ï7ÇÀfïžW a„M·@‰r\þÎÖÛ@(ž¤cÂ/háPf‰^3‘1vwW»!ÇdºFŠK¯”JkfbD­¬$nYÙ  Á‚¦[¶&× ­»âR U¿m§ØßDz€‰L=äJ’Ö]]mŸËŒÖz`Èæ3Á«_w²÷áXœ‚m4Â)3‹ÈSÇ;Ô4¸Iä¿Ð9-ÀfäФørŠôN.äÔ<“°]j ÆDŽôR7¾¥49_£½Ê›¬¤½dú]œ[áýÁvŽ w8ì­~[ÍaÎ'1’Þºw@A Ëà==èD91:‘ö0Ñ-‡#𤮠Üõ~ôþ~žg»Ûm%HÆc&]Eá ¤áv«ðÄ5A©ÒMòÑk4fnf¿5Ͻ[£íW¾/r“ÞÙ'ßJç°­FÏÖêp¼)mtø‰Üó—º?µ÷â(âeîŽj&]n)iZ•B7swÓ¦öÚ‡$—ª£­ÄÖëC„9ì·œ:… L0¾5 ˜h½GcÃ]Þ³j3ºhû D;w±xòŒ "ØÙ“õ_zñóØgoÞÊ­u°|E§4{…î–{•ï½€ïJ+öªå„LˆÄ5,¿èj#«2IYfðAë´‰¤Ö£²åÁÃØ;™à R;™› Œ`N¬ª LvûÌ7.ª®Áø¬¾ñK‡…nÿ3G€YOžâüc%„®pU bŒ~èÍÆD²ü*ÒÄ!¿‹”ÙÇã&KòµsÜ! MFO_‘ä|®¾Ú•ô;Kd<æé¼Ò‹é‡º‹Èüä0 Q4þ,ª%õv2s”u±w¦’ùJP»DP.>y8˜ÿr,Èb÷ÌhúUM=Ïćg4øy9òª”üIÒ†}á+=a°iØñ.¡ÛUÿDbÙ;¼aˆ ï¤>ºZ:¨f§ƒwÙ‚œ-ÅÌip]aÄ(³Ñw­RÒ4¸täoîg¸ÏñòŽ@ÑJì;¶‘€ÖnÈuk†žkqyf#ZgÒk£ííš*¨W w87/ÅXTª¹p´Lõ…ZQ×0I?÷R,$AU‰ŠNѰcYާkx:úé*½ßümòÌ8|.Ýöíq4~¼ÕžåxâNÞæ '…Kмõi¤%(ègˆ®»—JÖÄúáíß îk¼¬8î’" »¢g¾¡ÚŸù!k~RI\žp„ï:,jai^S‡ÕS7Å/CëxZÞ©Ü­.ýL 2%p´Ëù,\~8’pÅdÜ7ØS3‰Ú6òÁõtnq‚m_¿,P1üQ<¶å¸)³¢.ÚëÆ”g A°ëGŒ‘béU´ë+±ú<úiU ÓbΞ›J³Œ—Ÿ:ÄgÜëòµ„6Ú•w_B…¹ p5‚®ØúÙIÝ4"”W© šV&hª #±sÕŒäâzÐÜ&hG@¦õÃZ ÈPá>¤ œÎH¯­îäFvÿ‹žÃ¬Ïøõå:ìK6qœí´â¯Óí›#¸Ã‰“M+mùØ9¸ržåÕvv£\¼ˆnèþ˜}Ïæo¤‹Rç¡ã¡×÷_'ãH¨¶½þ2 %“1ýX\ýPRTÒãëáeßPkËOÇ™ðL‚]PÀ!9 ÿiãmñÍ6káÛ¹¼ß<=e¿»ß,AÖ2cLV`0ù¿u°óN€bÍ9m1šú–‡S^>öS¿¦ºÞ-™ür2ÀºÎSÜÅùáK« h(T›j…—®dÑ“u¢ÜL6™ƒÝáþçý[´ æŠ3ý_ƒ8ô¶¨eø±VÇñ]Ó(ÒÙi¬µ7ïj‘G‘„í`Û/ 1øÖã¿ÇÆš ¨PØ ¢aÖÕV<úÉ*‰&v&þ;8áIæÎF¥êP>ióá¯K ó~øè,ïYªµu@ô½‚ÊHg‚9x*ËäÍbFVe:5ŽÓëy¸üå½iÆ¢O›àF$ˆ6^{xx!Û'ï¢ÊaæçÄÊÝ8Ž ]w·Ö̼ ŽVïüØÐ¦oµlQÕ0x2Ù¦¬†IˆÖ¬œ€M|…®r³õé›´ ù‘eÄú¥cÓX½#×%V\žcW%{¦¤Á·o‹à:µ+’îÁ‘TÄ-ÔÉÍ 0±æk‘Ûâð”úc™¤(ÖkÊÄ gðÜÒ¼"EEóD±‰#Úƒìák¶ÈcòFQムµ·r?­©»ÍÂd>WÓ€æBÐU ÕâÝ'Â:¤1 Ö¿¡ms¾ýu™—žG졬ì@ôו¯ÍkÕÀ×E¤µ‘hCý÷|‡8ϧ­¿{—IÀ]s;Ú—•%_—ÁÏ\ÖNz)[Äæíü6~îŸ!€pdÕµ”Ò0£ZŽT²ÖæB±§ˆBÔY5¥9~vßÛA»F½>‘yu^NÏü@щÛ_.U¥ÒëŽð)òÒ­•‘õ­²fÀAâÞ¾Q ¤ðšr‹òÀ¡“(D?âÀ€­2öãç¥ÞN'aþJS#“Ž–*TÇe8Žëa‹So]"[vË×f˜°.Ä€çyO ï &-túöù·ÙôŠ1fW»‰ì浉GÚoЊ”8¸ø@g-d- ª(NHs¿ Ã4s]Ž¾Üº÷†ä‡’e²Hüá„ bn§¸ ON —·áY²¾K mØùp1POesˆ‡æ¼› „5B KVÇõxúG±?[î²bb@Í´zu©ù¢3þPwvRݼCGØ?ÀëÏÉ Io7WƒÛ*¤ÿ45ë·¼ö–ÄÉt…¹ë£S®BbuÅcGITŽºÙ Õ?ÙÄCÛ;wìüð¢sí¯×ŠÀÅkÉÉÙCMN!ýòÚêìtZ-ô`àоí¸'m5èœæ¿4­eHÐòóÑP–§ÕÝ8uÿ–W%È ­!ôí¸êýÍõÎ"`¯+[88M/„bÈ3Ÿ¸XýÉP'‰Oܨ‘6¾É,õVÒi·kû™.éDÄyÍm€Ø,6Ž+{oöØ_³š ]9Rƒ[mIrë¿,?ŽÖë—y°0ºô£"𜞸DJÙÅÃDz†½`P¤ÍvP*÷,Ò 5ÂXŒÆr„×F±ì”@—º•d¾¾Ð"£À»ªB„Ol¢¼‚bP•±øÛymÚÄRÉZü–ùºâ^tÍ›ñàøhða‚¢;+Î2#˜†<òÓÃ_¢þ7ÐŽŸŠ4^R#£\øí%gFèΗܲ›¦ODÎào™,a¾æG’¹ HûÀ :¹ëSÞLÌ9HÒ¡b&tVëjÏÙ{j»³¤T, P¸ÂV Ë®¨¤™²Ë/m|÷sa\“‘D-»”-.†¿¯Kr\— Î-Žà’v|fÐX?Lò/Ïôbà«bs:ƒP&²ºi„‡¥äxâ⢦+9†ÀÂLm«»F´‰òŠ{æ/ç;³€XP¾D ë=Qt“âº(ºsr¹šL¡Ÿ£`õ³Çë“Äeªfl‰É^V,Ta°"ô_‹}¸ˆStñ­ô¸; é•õÎÿoºŒ3Á–\v¦2Áf}“É#õJ–M€ëÔYb{ÓX&ÈÿasýVwõ żF‹Üº‰”J@×'–/ÄÐîk_Æ3‘Š0sx§—G”)>á]’ßµQ£‹×^©@û?ZT;D`®5ö§ú44^¡Š.¸P¥¤ d›€±Û8SÉ­n¹Qxq"­=Ä?K4 ÷îž…ï´mÏ^ã¨\ÐcRçàn´›/ÜJH<ßõVœÂ{1ZÇ™ôˆ MGÏÛ$›«ÙÞß3á!¯²aÆé5q# ©k°Ä¾Ë)@)¹C‡ì&ð¡Z’†o]58l¥8AB÷/ºªC˜  / ™ÊªAŸVùºNëÐnØä&Ú"ñ‹'¬ÆÄ•S‡ŒqÚëèAˆ/Iœý£ÒËÀ$Ãò)3ÆÙþ+`ÿzòd/ñ’ü Ë­ 7ž!¬ƒ?ké¸Ò$B`GÖ\Õ¹§Þ逧è¡—Ë4t-¸Íü0ne²ápŒÎ,—hXØ€ÓâžB/âQƃç:Gn¥<\àÙúAS¸ GÝö8ŠÝKÜ¥ â6Ø,läÒŸscI^üê^bÃÕ°Æ zi6FõSºÄ“$R1&™)ôýa0_²1ߪy *¿L9¨ù‹ä9l y"ÏÒ³ŒSÍÍ|'V릸§-Lj>,¨1­•¾çÑûíèTwâš8ýÅQ¬¶¯…§×VJ¢Ð`z'圬çbo·\7]†+!”'‰#ôí·à¶¾Vv Uõő¯õ/‚Úm ´ó-£:úá6XÔ(ïåãt_®HêIi5ǾBйËÊ=kÇàä‚ZF_YÒ GJŠß<×^€¼/q\2êlf3X°X6ÿOv‘n,N°'[¦÷"ðìþúéÂGʪM^S÷³ª"éÝ7£ù¸O “È<§WI=•6ŸÂpŠ_'¿1œ~ zÄóÝ *Þn°K¨{+Õ«t뾃š'®þë6(oªi¸\«.º,Þ?U¹^·hº@ŠGûìÇ 8ÚYX(‹&tÝ€^€i2eWf†ášišl—‘*Çhª4u°‡ 2ò?œ³á‚Q {Ôâéý|s Þ–}½¥9$ú· ‹ƒ®.ODZ„Y8%‰¹3P¨tt&ù-ªþùAÝ GØÂú?AªåP– ¿‰ñ ƒ\ðÈÙRG¥H1T"õ“ÎÑî/ÕŒš¶ÙÛ9‹ô;É€®{ø•ªç70DÀÐïKO? ÍeªQMJ Ù¼’•Aç£.¿úú£0è*ýªN?¦­í°g­‘û#ÚŸ¯!87öííîéŒìJ°EÓvK]ÿä/dÇFüÁxuõ;›Pàùã û@0 –øK.t?²)k0Ô ­üpP¥¬$ª=À‰önS\šÜÞÞbÂoësÁøµˆq[ +'»Y|ñüe¡1S(@]û§„bãmx¦”•aã@/XÕ}ÿÛ³)<¡s¡ƒOʳ^KÔ»”ïV”¨6bóU©Nk$bÐ|7ßE0x‰\’Ò¹ ½…÷ˆÚ§š jWØÃ/éörô`Ò†üj!©‡hgÇ8_öúª“Šâ÷Ò—‘(íÔÌ[[bÀ]+ZŠwõ¿hí ðLµmP´Ž€Ri¹¨>hºn•ÃØ·5ÚGÌÞD{}›ÑÁl“ûK™ßahŒGŒÌÀY¹X(ðSÔ¸B¡t7ºö»…G¦~Qñ“¾DX¯7Ã$¼í×7ÝϪm–ç;Ï·ÈW&¾r0ψp‹‘iK@Xí±{B®zÃ%Ô(<%Ô¼{/”6»\9g_˾ÃÀÃμ+`ì:4QˆÚmàP&-»'DÍÍ7ÎønGs>éfàˆLï¾jšO§âŽCVAðAÅž1ꤵ+f#8¢âŠ€ › àb½B»6ZY,GX[[Wdã{š´øÆ¸>䧉 ?Ñ8ŸÊÒ¤ƒTòŠQªÌçi³U¼qª£ÉÑ<;>Y¨ð‚‰~zʬ [OšçJ›GZÞ@ÿïÕ [‰wp$äËqÝ=âéè ¬„qŒ÷çf" ÕuÅÊý¬PÊm–Á·Ò®–vÐkôˆ«çRJP¥/'€CñL87ZÉwøiïÈ’ËÐÊÃä·8$ÌÚxI5ýKlU÷Î=07N5ºïö )˜|ØÞ?YíÛð­$! RаävW34Ø °ä+â;ªhš}ß? RÞ«{: qWÿ¬äP™öá^‚=†:ãí;ü„‚îì-Qbw‹rí$àÏݜԓÀ(ueX3yªŸŠ×ÕE±‹xÁR¿À´ÃÊAšš\†/QŒÿm4/„n´é3µJ¥ò4ÿàO鋟~åÌU4;L“l+&·+(Àó­s¨îXuäh "'ÅX¦P2¸omz,­öoÓ³À+­ñ¸Ú(97úìxL°[§ÞrèÓ™SYUä €OP#`¤µ(e7×|ŸÊMT^ Cë±äÕÆ±3š¨}ÍS> ^ïµùÓ 'µôÛqk®HDRŸyQ] £ló!ù6Ä(—Õ µøªÝúbE(FÁÒÜúDê,f±?“[vÜš\æôá0ó ‘ZOj¹©ÜðüW&› ¤ø  TоxRI>¥LâIˆ€ÏëªÐš?=íJü\(rWM©" Ìý7%lÿ,C"éþ°²ikö‹¥T øÂ ¬µ¯ä)§N]ÖA¸ÿÓØi8-]¢ÉñG·p@ƒèà ·i+`T°‘ÇÕ›,å¬G¶ÀȱoIß¶a™G[ &àµPÜ«\‡< £*l€P ·©ˆ­‹ #m‰Ža¼éiR@v®¥ûòÞ–c¢˜þà3›WhC¤ô_îµw³V‰XàÆ*ÞZ­Êø·ô H)ó>]I«Ä%ª•q@‡Ð?Wœ ¹¯Ó&;§¿iµÕÒœõgø¾Õ”„„ßTÃÒþjüzŠ¢Ì ÷ÄɽÿsΆiyeˆ»£Z±ßö9ßêæ i´«ZÒö¦„–öÓŠƒ=-¦H)¢ïðyÿilä–$-^÷vøed±!ôÁCE×UŒú€†Ð[B6À÷â­û”«9?ñ؉Œ€ð°~¨‘~ÕŠŠF&øsnòÞm¿äÐs,å ú:¼s ~Oú˜ë¨@â®ýX»†ýw£ábŸ:3,uFŠxc¡Ï×=¾we´½õW7Œ?A L(róœðb6ëÔÙÁ]ê)ö°d°^ü , 83j °v˜#RG÷Þ ¦&ºq_ ƒcA:U0êü Ý!dØ ˜ÜÞó_gŒö*wfÝ#Aö"Y’°K'T£Dµ›¶Cg‘CIo÷·spD‚?ç~ì_ŽÂ × ‘N ùþ}¬*&e]Å­gTU2´l…]š›ˤ×c›†꜓œ[,SéÆšó¤†‚…ŽÎ,Z]ÿP[¹xÈWX‰ªW-CŸ;¨«f©ÜÝØ‘CM8¥+x÷s\zÑVûV0opUÜËmÆ©? H·ú_1CCº ¾ù}uNÐ2ÃÌk,Ókª)[^ˆ–hM¢u$åf…Þ¦mϸَ$ëø!ƒJžò²{¶_àRL®™jxØ2ðnÀˆöÐ\[aI„ÛO—øÕö¢À×ï`8ßO]"Xð¸ÙQRzKΧ‹Û¤ôe!‡4“•7ú±™»$í'FG)î!ƒ«€Ñùø­À0K±w[6“fHâõ:ÃWï~æ-F¬hãý¤]¯o «ó‡c/š°UÂøŸºîv×Tˆ]À.g.,ÍíæÙþ‰‘ÚÿjUùìBA² H?ŠÙüU™¸‘n‚0g’¿…±ÆÖ/ªk!JÃÐÝlȶ¡.cÛ”ûÞ‡'%¶èü œ’¤×Óø ÍzУDnÏNäD鿯ÄVÃ|ú[æn޳Ú¸ñˆ¬¡˜ºàgl¦˜ÙË?¨JC°Û#…i¸ó¹Î^ÚNu Êl+ëUГ‘¼Á>rà"hz»ØSYfoÕOÆä£“Ÿl¦·›gæÑý;ŒfXŠƒÈè2úɽ¨úãÍ–¥7øltÆŸÁ–Úæã`ËÅcÖ½}7Ó¯ßt4nÆË¥°‹•¯8,ZEœ‰)GAYó‡w¬è Örü¹{«‚O²À”Ð)p TÜÕ Cs• i§4úís¬ë7SÙtIΖâžwOzŽÁŸD”}KFÅãê¡Zôoßa€&ÍJR¼ò(?ã–uã‹üÆag)|’ì'ŠGN„òqØŠën)áÒL¾[ë¼8eÆÓ¸ ©º*ÀH7˜l¶_îÀÓM~.£Œ3¹”ßRî…ð¿IýloÔpK¢Â•GIFçGüû‰‰“]S¦çäŒeÌ3j ”ºJí} ³‰Ül•À9k# Lç UB—H&œ»pmº‚äpqU@¢ŽzœâDz Dz‡‡‰õþS~g\HéD çbÿAø(þ«y4Ôy#;.Š´ÚÈW…îLæ–ýˆë=V«åÎs»pbU&&o±÷aÜÉ—zˆL﫯Ԣ[#¿y'Øëq"2;<Ž «w[Òú£€;Ä_UiìÞF(­·•·îÀô£¯¾Ä˜kŸ¼›ði~‡‚h& ˆJz¾þVð¡ÍÍöV-–ÑÎwê1Eâ®ÓŒ´ùæÏV £þ›ÏQ¿…GG½—Dò·²’Ö¢§ULjð&`”Ù|Õ$ƒt Ñ, HùÊð,É ª=TZ]kb ô©Kž¢Ì5úù^¢õ‘¼ÍµÂ f]KÚ {ÈB:*£Û¿QjÎæ¤¹Þ;Úˆj|­* œ@&´âíå`ô`gJ`šèÿj‘ǃ¥·q"ì‚¥)Ê*] †¨;¡ëÐã#™¼tî 뻚úDágËl®øGãD ¸$WÊ:lðÀƒ½‘É6µ™Œ“+P£;T¹Õä÷Jò«äÆ/ð)Lýߦ­ù©s€ÙŸ!Î|jÿ½"8œò;cc©ñ¨°Ò@ÝÕèÀmíõľa˜R*´ÄLcÄä³,‘È” ûå`þ­Ž¡îÒ’ÃúÖ>/ w¬ ªúÌsp©W• Ká½¶;c™°•PpÞyP¡¼:¥ ·íÅìÞ¢†…`—pˆÆ¹•Ü 6Ë{º8=_4õ)³Эյ0g…p|–ßa®¶OŒ j–ý(òM©}¼£âìš«¯×7t®”v3TI(À¥ñú!¿ÔÚÐ@R§< ± ¤‹çZÿ™“æ ”ë 1«†0eH‰ïö†šù }¸ì ðÌïJÓf $¤ôr_LùÎ7ü@5ôN3c²}H+{Mç©õ¾‘®Vkç€ûÁ"1óÝñ±<êàx¥VÀ§²ñ7â«U&YŠÞ?š ΚeæPÚ—÷ ¦É3ï Ì©øCŒÁ þncqìŒì¼öÖ§×’Ôµƒž.q—[’FÈÄ“y–"®,(Fà3É’ *Æ}>… ¨¤òz}5\uyƨúìP@¤[Á•£åLSí¹°ŽÆŠ¸Z#SJ‹*BÔ×ÂX”VM+É_ÿbNéù„k5( •i¶´ÿwü!À% “¶-ÁŒ(ÖQ{­b¤SVAƒòÑÞcÜž‡o™¿”dÜ+DäE¸_BCYï¦b @L‹xÎÚÂ*Ð9ÙÃä ä¹Cž·¢8Nb}Ëf@-»Õ¦ô‡ZbXTÍ%ÀK®©ª?æ_?b-¿NÊš€zÄûóÒ÷¼ä¡»ûî*B‚¤ªØ±%þ3mŒ@ÂëA]þr± žï °¡š!ûýĆüµ3)â‘Wñ˜ÀÛPüõSÜÀ4Ô'˜C½Û7|fÖ ¸5ª44ÔÕuAÑm‚‚-㦡³ž)Çó"+û;èîìVªáÝFü@É(J}Ý¨Š¥¸J6vvLÀÙ'€‰Ý^´mè¼ts0ÅgZн¬´vä UXÎ7ªŒd{2@ZçDà¶åÒ$R^2üJtVi-E'ǧ~à^RGÙôu*)—:è@[gÒ§D=ŽBh;÷)!6ëõcÓC<žN#swØOÚYC¿¨¹l’Ña°šÖ橹ÌÀÚ§0í ÁlýVF;ÓÔ9\Zb·Thg&¡òF˜·-bdK‡ÙªuµrÇâ­e?nµäbÙJû¥oôÀÕ2öêñ ‚£'7j‘œï£‹îæ(}åjʇd¶9Ú†ƒ=Óû¾éX9+œ>Í Wuäf‡`_ð)wž­ð‹ÇÄ^O¼t«¡õb¾rŠAEjkî¿;M0{­æ/2ôYý5ôiqJœÚe*âÁÎù>Eì#¸x^µû¨9N¤ø„EYSWî·‹Fù[RS“íFnvíûãP½+v•i<­„¥ÿç‡8_à`ã`wŒÑ¢â˽Ì(ÁÌ.ë´ÂáíëèÁÌh7IJ™ï–!‹­öé ³œÄu8|ðÄUºX&ש¨• ÷çRv+ì³'£Á,®A±_ï׆"!âÛ³2õŒS”¢Ç+XLI˜p—ô'«ît|™ààÊù13Îâ›Å¾îÌÅÌ'w©™…¾wü'\Ô†.QF¢gºG|ûœ(8‡ÊÎ_üºrTCÁ3*^Þh¢êWôqkw2BùD‡ÉÐ÷´Šb½ú ¹ä¹–ËGͯ€«ÝP £ ¿{˜èd¤èôº·xÖ¢ I•‰ŽØ2›U’}Ç [1(ýƒš¨Fh ¯D±îAÙêŠÎÕ˜ÃAïSôx?¥uý½_§uHÕ¾»dõF+5¥^r;X2.|ä.ø<¼c`…$ƒ@‰“h‰é6ŽëÖYQ×°{“ósmYÓ€a—ˆü ³™Ñwt .SÊpµ,ˆ2ñƒ ßêžEÃnôÓžÉyæ›Æ48°PÄ…Z|‹ýTêÄ)JÔÊN‡%”|?ëaïØšm±’:Žv‚»ËÀ‚L>MPù+ß[ë̉ø%ôWš“rˆý“7äoóòÀíßå¬ nˆóXäþöY»2á!3 ®x+1 0åwŸg®1sóËÝûr:>H<xì6ý}iIÍØgì‚É!ÐãBw'RÓ‘Ä%·ýƒ@sáùYä}Ïj¢ùؤÒ),b©¡ Öty³L öO@6ƒ~N`û‰ÕÒp·Aç†5l ô8ÕjYÆÀaØñ¾ê”2SÄ7Ok„”¯?üÅ{¬ya™Ú¦SÁMm Dã9_?Ž\ŒšÂaR“YBÓ_L_±zTü;•œûàs;ßk_?M;oí#,;€œî[9­>Ñ3òÐÖ@é±UåØ ½vø„µØÅùÎï§–>˜ÊÁ^FeæøÃ¦Ù±16RøÏ›>ßÌZz'»3¯¥‘&kÆ„u؈+™Bˆ _ÓZ‚(ËàDõÊ´Z6ÕMúØ€Z¡ÓáûtŽ¡Ÿ" [~T³;¬s;8¨‹‰•HãgÚB‹ëoí÷«wçÝÅ÷‰| 2à¦L]6zGÂæºÅ3'»<þê€óCLõØlÎâôZlì3î&X†òàëKrÃ|ÐïZÞŠ]¸¨«<,‘îé©6"R_¢Àç'àÏI8£"Ì™ú:ZœP+€‘ÆC~óÕgÜâÏ Ì#vRݲƒW²r¢7ƃjQ:\úRYŒ*ìÅÝ‘Ä#øþm“I'æ²íV¯¡/;u%ó\ÿòã„Az­°N¿.gUº?ïG]=^0VÕY[ÚVWÎ|š²v¯+újxûa~i¤¨ÑöGòS4ð13àß”©³b>ÿCF£Es•-èå<%EyÆ ^ë9¶¯õ fjz€¥|ÉФ"]”dç,ÄUã©ÎÕŽ’ÎÒŒëf•¸›`†–¨æò6xùMdËï§¼ø~½)B>¥îET±ªç G—k§(ØöÒ§ÿ²ïœxëó_pÝL±`Î?ÝÏÛïZµÇ÷”þec…zE7„H®êö³Q3þÃéCÙ1õùØÃr†ÍÃÍ ‰NÞ"ÉmÃBuoðvˆóë8¨ºPÏ-Gó33»±•ñû.Bó¢B{]¸7híUÃͯ†U¸ÐGÄM.ˆ§:WWÄys®—¯‘Eî믞(Ks-ꟼ‚……²„Š-IVòäЙo N¯þt¦>i›‚¶Æý<ÿr& ›ÿëÚ_qVâÝܺw<.eÜ~òWTø~Ï©zcëÉíqzÜz)ìHsñ…=79J%±óí–¾ƒ™]MAæ'lKòfOï+¦4i‰›zâ%·9tvlʲ:„aJéÒiKðGàSê×SbÚ‡­DRœÍTí;”É4QK3M-¤¤ÐWLË@ô‚šf+ëÑbbùUîöÓcE$ØÕ=§L¯CÄRöè<“þ¥„d ¹æ®ôøQè?ß³Viâól‡z¦"UÃQhxYÕ÷?Ì˘wïlüÑCų ƒ•€s˜ÀŸEI#M…én»„iü`e¼·0Ý5Mvgñ_æÄ6œM{AÑ™)§0k“?NöÅ´ŠrÍaM±˜/è–þ(MóÃ@¼Â—¦ôëŠ#rAÀ0A¶d[Á›à¦ã’$g ÎæG¶½Ò!ÄÓÚânèå"ùÅe¨í¯ø‚/,ÍAm6° „rñm…Øòìi"lµY»¨eïž'üw¾ tOILúñäðûÊãøŒÇ-ãtN¬ínüP½ ÿªóóy}W´ç­:XcÛx[1¹]„æJm¨;Ž)- Ïѯ0}ðÙ‚=o}•t³X?’lˆ¼+ö7)ÝÓHNñcrDY°+×¹ï?º$pJW%ºÉçÃww}˜~2ã6©ˆ€ÍèÂ)øl~pH6U0úœ¬zãèFZ]}B\Î C¶/öBÕf®…5*Ï%#dðPB£z»û’{_†r*³BjÎp6ʺ·y?²1RÇï¹fÂu-![½?m†Q¦&ú_È¿ê¢FVá⺷ºÒVû“GñÜzãbüŠ$¨†ÑRß8iï+ ¯¡ÉT|,Ãì§6*@úuèŒAIcà¸xK" ,ñZ0°+é.bqã K–œËáÆYÁ­»²¡öHPLzyPhÅoñ–Ê#‰% ·ug8ËéÓ'ȆȬ–`’yù ƒD?:Šh?<´ y‚ÃÔLø«“ -W¬Øô³lÀüé§­X¤Ä:ïVXâ¡1GG´›Š˜±›,5sÌ«^ù‡ 3éð®m[¡*µ‰µI¿Á«lß§ªS­QÇ¬Ž¢|2šD£+8fÇ<¹TI‹Dœ%°+,‘·¸ß†§^ýPéÿ‹¬rõiˆô fVY÷ÈñMnê ™…ܧñ¨o_Þ#©Ÿïp?˜cˆù(ÓÂÐCEbØãÐÚ±ÉÒââz¥ ¸q¸­Ð„9Û-3Õ­6€ÅÚœ{žG®)×O ¥#mZ¯‰V+½%¬“¾5ϧ4FV®½æQ…)–…Ét‰ÛÔ5 ö” ^nzB¤Ì`©i¶Ëá6õÈÖËȘ¥#ríXœ…ü·E×%vc‘keÑ6¸ ٠̬çh¶žZìû¶µ$Q÷md•¢¬ø2ÖÙ{d$6ß±Þ^Îr gÞ=B3<íÛ‹ #œá— g¯£¼Ø;ôoì4—Ò¤{y(¡ï^ ×}Ö)Ø)Ý@{† 3ëÁܺ´¢i‡ÊzÞA*={¥"è}ÕÖs&H243,¦(1"w(¤" â_þ!ñv‚ùnÌÌæ¥‘$ÈyÂYßpÁ(1RK"®r{ðø*Ø‹ÏÆ\ý œ‘þA­JkârCé0}ìÎD†©ã¼߯›#A\e¡÷¦ÅQ,vÚŸ–»²MíqáN+CRsûžÃjï˜Ê‚ª¸šÉ9í³êwÖUr–±f¾ßÝÄ= I^ Ma'\„Ç`§m¢ì°>Æ”r3<°ªô˜ûTï~ÀÏvKßmɳ§xwqÌëzcf´»[žFAØÜGÞþÚA%kn~\Ù󤆈ëÀª!Ößæ×?ÁÚË:Ó:°[šûL5OÙð[$¹S¯4í¨r—†±î C;ö{JoöÛbº‰Æ[mŽE ‘g¼eÌž jiˆç1P‹Jx¤ù4ÒÎËCÏrJ^¼’¹c§oa5ñkäí¶ToÖ0¿ä3ÈbFg¨ê€"çì·ç¦S¨dpÏ–„m'UÉ„DNÏì]"ÀÒ~0Ç@·'àýVÇ›­~ÑÕø§ÖùǙۿifyͦ”L¡¨iˆ.;Qœ ³˜ÈnÕ^á7žÐæù3ÿ[ì—ûr2àø"–À_I©ÿÁZ†ü$vÚýw5¹¯š®R@Ðf[ù-òœʬÓ#×F$hl¿2Ý åð䮑Mšÿ÷ßmÉ>!øàd‘±®šZùïðÅV[‚Ͻ0™éݰ Áyt(÷=桽ô¬5ªG¢Á‹hmÔ7ˆH‹s¾†´eÍö[’Zî)pDŸtÞŸ«Ì‚)Þñ¢ÛšÊ¯Sãxæ,ÕáÀ˜¾ÁLvÑJ—ºœ4ÿñÄ.‚â„··zç‹òëÆ“¬z}kñi~ ¥§ŸËüš£/¥ðv(Û~"šóÕkçß5üÓ½ü  q8f—Â|ùþ>^´ wqlù‘o³–x[|àÊüô4~”™{X“Ð+›Üï!Æöº7»S­ò?ÔÉo´`ÐXpY ‚OÛ¯«É?%­Èû7²$#¨ÿ”?yà6sÚ¼«… £=)oäô+^Ñ·¥‰(a÷n³.C‘æÝ°M•ŽM:[ÞƒC'éÁ.åf¬É‰ü„g–÷äñFû•//V ª”êlwwÜÛî9vA«ƒ:ûæ+©çô¼¬Œø-º„`xê3„æ)îe¥•ØŸÆ?â«ÐR`*ƒ€”óú¬~™fÇ´}ègZAþˆ¯"@5­G7f‰ÄågiÙv>Ýñƒ*Ÿüm–É»¿Ä¹·â{Uº©¶eu×¢–[„’õ WkéL.ˆ0syÁ¼D§ñ0–}Ç™J‚a(åÛDZC9Ý­ºŽý‡Ütqó^åþem­ V_½³žT%æëZtU ö QxEoCÑœÿí|s/\5oV{N‹ÿ]àH;ýa1¥(ùjNcìõ!ßæÓ,±õ‹7›æÞêfû&ʹk/×'2 £°L”—c@;þÌj]º9‹ÚRe¯· µN*³¶‰¸4¹&R6{§@ÈB}WÊÎ"½±-À»À9(†Ž ˆɸ I§¿¢ ` _8Ó¿HVÒYL4»eù& ´Ç“_nUb.Óu•wAÔÀ :*œBqdHáÏ0ÀG0­Î>{:%‡Í_ÚÓÃGM»iiß,DrîZ‡œPÉæ¥¡XÅ…(ÀM¸ l¬ÿ¯Éo×Àÿk÷RY²˜“abšasõ;T?—8’¥¤TÖNç\ˆX„4,‡7-ât‚Wýqݘ8â„UË4s°»_‚ɺœ˜K¦Õuͽî’ÁÀ¥óÏúþ0Ù¾ä>¹—nä·­qŒö*eDöÛºÜê»ÇÕÄbrÞˆìµF† <óýhs-î2¾EŸ9:Ým.ÿå!›YN=‚„’ôò¿ƒ®)sóŠº2¢-ÚOq‰‹îó(ÇßÊ/’VEÆ›Mã3/nªš\6û£yæ3?Û0ªñdhú’9M/Ö)¬W¼S¾Ýo†=ykGQ;ÓþÏ¢¨uYfÊ õñ^ÈXLz­Fo ‚^xjáS´xûã[‘Ñ»¦6-öŠN.oÊÍ«üË‚]Àïs8ÐolŒa‡ÝU<-øq?aº5ìÎôKNT8®ñYÞTžGÿ_UŒÏ_'b7[ÎìLßE® ‚ö¡°ÀùL_Å5Œ]Áÿx8P˜s‹¼ÑÇÀÛ~}—øZ†Á'ž‰Ç Œ¥ø1‘{ ëÝaú¸9É_ʺEÂã¦OÄì—(–?¾ÿon;œŸ¨}s„¡x}FƒŽËq˜h¸0Q™îן7:éF|W£Ð1 7X›Þ¹ºˆ|‚îˆö§¾V±lªˆfÍ|KÇl%7 2[^É.ƒx©óš÷)­ãbƒã±ôÕeš ’9|2ò¦î£Ö/"À;jšœÔß}±ò,½­ÂÉ5U1]‹iÏ­™ àƒD³£T»ç: Ëf·´v§‘àÞ·6?\÷2g{tÔ76]š‚s ­ë*#&Xe@è:Z­úÖWWÞYÞ º§Û*q} ^±]ÅX-!÷p´NQw4@ã“P\$`¯~6Í3IÑjµÆÑ & ä:ÝtSà‰6ïskS肦»ÏÁ¯ŸTNÀÍö¦ § û-r·¤ šë#HtÖ0NE£›Ç’C.<|óD[ö”—ž_ Š÷hüòC6d¶•>kµàG¿.¸NVR_‚šéׯu8Ößg´’Ô‘Š÷ð^bT„Æ6«ëˆV38"·é‰ë°?k¢| áÐynly) |vŒü „Ñ'²¨?0=Öà:ÀqBªËeæâ™àÀ÷£×Uý¦V'ïÿ0ÊGÝc©Üú’öГ>ì}¼Kh¤_+/—½ñ÷ÆÈ N: úg)+²S¼ÂJ/,¶ ëAnµG#¨Ádâ.Ñ…Ëòta»ê½°‡Z?xÐÉ›Î%ÁѰh7’ép«åP!" ms,dcayqÓÒjäTº€îùêà\“H¬î[${ïæM¬w…I[vdëXðlxÃUséõÈÇ9Eå^MXžÁ¢åÊ “Ý[Bq$óõ±‹Ú~ bYÇ̱íWТ\Z#2% -º§Æ<¦DA@q<¥ –7’Þ-céð&T)¸-1\ µ·Ô Œ2AØáà‰Tô…ú¦ç‘Âï40G¤oÍ8 ÖÓäŸüZ%…är?òs-w\¾2bÍ-zUˆA|H9`§nر„û8ŒX|‰$½ÓàU²iw]ÐóyeÑyo›@„ÕVƃŸxßÔ¿‚ZfQ¿îRÔHõ¥…/bÂÇéeT•šC>„ ¢?•l zô\À\§°_ ‰ /d3Ò73ršKá%T Þ_ï6Âfñ2†•Ëc\ùÈ‚3g‰yÂØÄ÷ZXnÎöpI›+)äSÈX³7¨€2½ýhc›µfÞXæBþÎþ¡2âÂw†èÃð{·ÕÙsGÍ;/¬[ìežuúÞ¦Äއ¹”L$¸¦dˆUõ>ÐrVYXÂüƒ)HÞl\qg¥ˆN³–þÈÝb1ºkH#a—0Ê)gÁ·h#ÖøÙ ?c=³ò?óeU6PžH äšk…¥ìÖƒ¨à;ô³e‹1 ¥ói˜d'ÔÁzd_Ùo`ÁÒ—dû_úáöÑsàS.‘Ó·‘¬îüù,€D¿]ðxEË€ÈÔèæ2d$ÞÔ_¦ÛÇîO©ËF†¦C‚•À²0Pó§ɳyn‚ÒîÔ7’þ8¢Äƒ™Å”]§öŒ?Âý»‘ƒea½0‘Y/i[_1a†˜ut»ñ»¼'(æFeïÁ6EœeÝ΂ºí*.ª§VL¶RXàË8µWñrïú;Û°#‘p Év#ÓJÇ&sù7É;!Ƽ¨?ÔÌ|ŒH¯;k¬Z&O.:ý`U ¿t}ZÍá²E*Ò×óÕò‡1èµtO›UãOU­!ÌGLÛ £*yæªÌ:ÍÅÖ¦æY$ãD‘¹èJÁäæ½V´ðqì¡DñSÉqß}ÃHý¸2–š~Ä£á­çÇXØLN­&Æûø'^‹õ=•i"…yl›à½®©èw=Ý4Ö´ÆWÁ[‘ÇGƒÕÜvÑÅ´)Ç)ëFìQº24JØÅV`4S/ãЫßEÛ¼v-? èÚ2}þä%aöÿÚÒ¼­ýQÞ«(9“Âë¶5x¸‡/\kŠ&ï<æEoÎõN6á{©I¬ƒ<’›þÄÚdBT³„Üî™ o—å|¬\Ä<(¦ ûU³¢ökSª>yoäÉC]M#»ôU\%’Fçâ£n™ú­m¡ÞôñV?6‰¢{6w±SüÔâ1^Z㜸U”rù‚ø#+!ïRlì°W—g8ÇZÙ÷‚…«lóÐI}ngä@“Åc‡ÇÆr¥1yqO”RÈ—½¥ËfñÈÓÏûëGã‚lãä\ÀŒv:ˆó‰/¦b_¥`'›#G¶ ô_#uýJ³!ÀY~‚p)¾Vq® ÷¬·†#zÙU)î­ý}•n{Qñb"ý·{ @²cz¿;šŒÞß28:æ # ±cë‘ÿ××”âo%]ä<ßï©:ÈP}D¥^ffH "3üx]>ý Ï•ø˜èáôy b#ü6çÿ:ôøâ{ŸÝìÞ¥3B’²ÿSÄI¢¬tYñr¾ÅÏÂR%»5Ž »ME›Âè‚ÑÊ/B’œýí 9µ®2!ßISaƒ#ÚŠr¿Û“ƒÿMU4;K¤ަÛ;Œ)Z+Y×öÅ>¯ÛúpUhì5“ZñY¢–À»ûªÄ½zϾ‡5Q÷ýÜìØ\y±R&êá¥8Ú~@*D€Dš•ƒ·{ÀRlZ°’QÝÞQ> Ë<½%» ‰3GkÌ’Gý[Ä%êL\~»&»¡qyz‰Öqî¥fu- lg@¬Š~;°-¹:ÞLa¶E›ÎnÉ(ú€/V‚d­n‹§Fø¹ƒ”€X*0èÙÀ5-ðþÚN#ìdáîW­eÖÕòÁo èLÑã¡’èc}g‹pÑÊ?¨¶(r4vÆizá¥è`:œÑÛ¾Ù> =d]¾ó ïö¢ÃJC™ LíÜ <vÈaý;T#+bRj/7Tý=éïd£F¸¦e|ñÌ> AÌÅ5ïØ{˜ìx_|7¦¥VH;z+¶õ¾âÝ/çÏö@!™jó í£¿{ñÙåîþÚ¼óÖ¯á'’&0ä—‰¦Aóá’&-»z?šýK~áÜTêšçhBÁx=>iƒNšÖ“ÆB/Ó3ž|– QUü#›oÂõJÕë'ŒØJfWQG9ÓI#&']_³\`+D cëeŠ{d›OQC÷%iÿºÝL/uÀ rV6/<,vQx¸~vgyÞ*OôÆ+Eÿï?jö— ×n•ÆgZº¦6#Œ0Ù>õJ#Î1dï œÈ¶lP"1Ãk“Õ0²«ëß»TÐTâüIÕ •x»íñ&ëâ…ý•˜"‡ÚÀü4üNqôP#@WL‰ˆoÞý·[áWk?‚×y1O¶ –Y*V¨"d$¢ÎÙ.ѧÂSF¥Ëª¬†J v-ù|ò¿0Dø¸e R(`R=„eÛ|`"ÐcñŒÀ° vûŒ[JÓ]äîÿ2®´b;0<™þÄ­)Mi´m+Lj@W¨ñIÕûŸ ITÆäêtTxÊ„©_Sf¹Û˜dæ¯Þ(hTN¼`Z±£O;Å ­Æjã[[ ²¾?†ZhŽ$ónNÚäÇÉ<ž ïG~Ž¥OÎëSŠ ‰ºæûÊÔÓ_ᕵ‰ÊÊÌYÊ"Žé=ç½Oc¤N‰ç_x p£ŽÞÈw£óDxó^b0s’Ɖ¼ÆôŽáò‹‡µaý»/ˆÔƒ CJà*ð£ !ÂR«¡bò}$—ÑF,óE¡´§×fº²Ý®ËÜ=\ ? FöE¾ú1 ¤RLÚ„¹]óUíÕ2ÕåŠoLCä’cäàªú€w‰r:Ѓ4ûöêÔŒËò§îòü þÙø‰X²3™ÙÂh5Bp«tkók™ë4—)O»úÐÓsQöéB7ßeß¶°"5Ã`œq#¯¤I³¡Žßº·ú5öË•RáËõÌ€sZÅÍUÙ]ϾîÂ)¡Y”·úÌ÷kÿõ©§á+#éÞ‚£"˜ö7L:f.2o¡‚DVðN…ÿ¬ÕŠâQùßßsÆúÕS“´` £Ì4E_M´S×%xÙßÜ2ààô–Èø_¹¶˜J}ŸÆ©:H··ê­ÔöFBI§,ÌiMmÔÚÇ G˜i÷}RüLŸ¢ ‹{%y=ÃECúÿŠJ¬Ý(!,‰¤ ‘^ÌOÊ—jÀU7ü'¶uü\Û²ÉÎk{É *©x™À?ÌÄ `¨à-Çà/f.N4žs÷¯ì§ŽäG¾€ãÄÌ©pUôZ¦‚pNÙ––ýðy»3ù®!øßztªëtÐÍ„-R–ÚЄ°g|ÙÝAWøJ6òÍ”}½"ðaQÞ«nôv’}0y¥|xéWýŒ4!#ÂÞ8Â#'¶Èxêù|ø×ˆÿJ×ÄV£Ÿ²î.ûÏêÿ“ ß:ò¤™úlõË||<ˆ=áŽ`aE¾’JŒU(«‡¸-p1ãµìôy1 µé”X,JM’%z•I {5¸Dç~sà‹i•íò»ˆ ^·U5s"0a é[®)]}Œè ¡ 6ÚÍ»Æbðí!•?j¦ÜÖÍô#`„;Ѳ);¨ zèñ,—¼X´måÐw!Í뼑±ãNN›•¤¯y \>ŽÅ÷j£k:±«+€k³¡”ew_y¡SÆôn@2f™jnÿŒ/S¾-- 4<œ¤ë7úÂZx6T£”‰¥Zg±B,D³©Ê¬dÒÈøÄ¾G¹ö”Ö˜ gµÄ¢1¦ÚÍå[ýÖÍìéé¤Âd¾ÐU‚zL,E66ŠßZ®Ÿ x¾y88m·(å7ËHÚfGaDà÷y'ÂÐj²Ÿ(‘é›`¿ ÑÞ½<ó{zÊ!eæåeÉ|²¸á±ÝÆÑR²èI%ÝxÐ2†_A § âÑʽŒ‘i†5°Žª?UñÕc(þæqo<°ÝÔ„Éï ›h‡#lþßÍœQE[bÉìr7t¼ Ÿ¾%öy¬µ~}ÑÔ[N> wçÚ®ú^¨ÈaÀê…hö—GS:W?ª´îlݽ˲ÙZ«rÓ&=ƒŠ—ê6¶˜-²ö#-ÿå?ÝcßBÀۅƧÙy¾[îV°‘´zž Š|ŽF¢bÄdmF›×õ5ïü'«ÅË®b‘O£Ïþq¼ÀÈ>—ÓÑS?Õé,Ë]Szhì—f³ÅàþÝ•|ÐêíVê_‰ñn¿.%kRÁ|;C"¨+MÜg^àUî%Ù˜Üo}8mU G&Äg÷øCÈឪI¥'išãi’\‹‘ã¹¶ û „åcKKýÜÞ4}GMðSŠýXFd(‹¢uÎuûÄ‘ÍOÕ¸—Áð¿¡g”ß †söÛ¸÷©îP昊 ¡Ø‡kŸÞ'ùÀ2¦9›!ö¯ä¹í†%p¢®±¤.êiFô£ä ¥ƒce„œƒåö:qqb<²ËÈC ac6ª”Al ÷ÅÁù›Ï^‹‡]÷ÀL^pŸ½ÔÞtý:¯v,S‡ã\Ù„è ÇÛQÄþéûžJ8ù Ë=ŽÁüýÍåÎ×øŒPyð§CÜBÕ;X÷úI‡½… }¡ëmëÃíÙ‚Cé4ÇŒ9°èО@ˆËaãe×u«én{êFÐQ÷¨¤ Ù•k®O­Hi^ñ!„;oUþ“é ŽIªüpjõ¼ac™ŒwÔ†cà ¡8ò¶ÍxHËR>¯ñ3ôئqxf м°ñ4LFª{®ÑÈQ7Eö³ =ý{U-ZŒ³ÔÁï×Ýàì˜5ˆž‚NðgÀcɹ÷wQ© šðA.e¿Wî•Xð—ìɦÿ¤s`WR˜z|HûL ‡†ZýÆW£«k…¯Ùöz©Ò}„5ÜŒ®ÄÚÄFG&ã?ê9ï=(jo–¡m=Åï]·yNël‡øq ½¸m_ãëõÇä°.4îzhŠõž‹ßÿ~†Î=¤ùºaK¯-g§zÕ¢Tt’+»<£6:­ —¹ 9ÔÜÂþȔΜ¹ ïÌZ„ã¶".è2u]å¥0¸ÒaqúgÄ$/Ѩéæ#çð­Í4xDô+lŽHÜkãý¶XÍ*Åô&­@Ã~å– øÒD϶g Ûí¤0ã\Qfc@0‡iįÀ:r›%œ 8*·ÛŸNtrøµTzïû—q´ä&W]W…#éÂé¯@é0Bv•¥K~­‘AΔžH[”ŒÌ¯ž·œfcr›Å!Ð1×]¹h°då€sÐ ûúâi¶ïΛï Þ’1![Â1ã\9 e˜1~Ä(}§½V|¢²¨£^9Ü3 ûÑAš¯û§Z6ïdxÊõ»yÛØ{ör tƒIØi&Ѳ·²¿Tj‡§@ïaB㪋¸i 5ü©¬¼˜º‚—¥ÚqBtøÎ@0È%"¥dÁ¡j#ˆk Ô% )4º±zÒÓ–dñ¤¢æÌFÑ Z–8£gQV4uʧì»)DäMBQÁX›XZ5iì+/êBÚPü… 5±ÉÖ k_nÓÕã”ÖáJèš›ÜVÑ¥Ìzz&67NDܺÝ׫É-”¥AsŸº5ñjôŠƒ‚ökHr¼ˆNK¼L†ç·×úŸÊfÉUü¹éˆ#©£oö8k¾Ý rÕgü§9.mTÃùŒG“v‘Iádø1Z܀ι◄¤¾q’«4oRÑí,iLvýç­Ñ; œm q}£P–÷úy¹>1FL- !¹îa íFĤ÷ä…å±°. r‡Æáû¼ë-üåžA÷ÅñÞá*ßòuabQóCžF“d<žždZ¦ ä|f,þ’w‰œ;òª}ZäÍRµåÉòL Ž/p2n9`ðÉ¿/«\8nx5*bàÿþ“AÇrR‘däŸþ•{*êB«°6íVJ ­èîÊfÉo—¯a›:e„H8ºSxèZÜiSm[2L…fÔ—[ùò—>˜¥PóÍàö_ „ÅæÊj‘Y²·ÔY\vS­FænïÝB雑Ãíz*¦ðœ\Ž]êoãß’o.¬|#]¬ó¾âfÓÒÜí|ºçëK”Bü9 ìOKšÛ'X701¼¨ôbÿíý¡±6ha,!—ÉÇ ºæ $@ˆr÷ŽÌ½^#Vq5+ÓNZF ÚGs”gênñhï#+Êè¥mò¶ÄX$Ü„:®pOAå½)€t8©²w9¤üç`Naæ¨ ójb߆ƒ¼6ˆê LñçDGÎðõÀ÷Æ öC/ ö·RÀx—X Y&­÷ŸÞ’Ñqå.ÍüRNOä\°ˆBkîMHLB‘ôs»Ÿ¾j+ˆyÛIœyMF¾ÖoÌй«r Î"y.€ãð›«Gžû 1ì~­Ç^Pe%?ÿL}í*ÐÆ“>¥svaQ¦.pŽ9Árö¸F?!Ž©%¹†2¢uS½ÏÕÞw˜¼úý-¦“Øá›cCHäN4“i åÝ$ VÑ>õPÁ^Ö'&Yïqé5Deóêg``¬¥Ò¦Üú)èæŽmLr]‰¯ãå>3žð˜g€T…Õråtò-ö=I¡jxTÇ]{ÆâûøQv(ì|7¢¯ ]à)Ž©ôØ~âϬÒn­6 µO~ú• ˆ­,kŽ=I_õ4Èúu­îŠÏË¢Üøæ¹c¬Ä¨Ó‰Fõa¤¹…ˆ= d!H0Kªÿ’qx»ceH2¥ß—æ l`tMZXêsØù?–8(HݸòAjùí|ªË˜âÀ5ùO »­ð£ Ï¸¾yó-…¶z˜§}å›rá~ŸlÍ1á¿|Ñ̉ÙíN·_<âh¢C€èËÉ‘‚÷â´€Œ»÷ˆR™Ü —戒¿ÚY5ÛÚH D…â)O‰mÜFij¥¶û€,FÒöÙ.8£R€µÛmêÈ{fB`'Ýà«ÀqÏ‘e¬!ÈN“ì5y‘þøj?6–D™¯ªŸŽ?)1 ‘j®wå8«åÅW^0ÅH‹bOëþ ­ B1¸µÜ7X£Ng}0QöˆèÃi§`îyi-íù|±dlw·©iq­Ik>O.ÙŠŒr\ì¾:­íñi'­JžÔQiý×Ã}ˆ»¬)ÆØu¶>t“Žw@¿è·x9བྷªÄ  ÃBÊÚoþ‹é¢5o1À»8QO‹XT•.ÃdYuÄÊ€¢íŸ8oëÐ\‡(?§ËKZOÉÖÜ‚Ê}õu:açܳ3¸Õ2­IÕf}¦I(9áþ$$ìŸ/–âÃ[rG]Ûµ]{B´¹ö¬Æ ½G}¹NoÂU"µäæÂÌúhέšA7Á¿À˜‹H9öÙšÓ!™½µaY¹¼Sed¥.*k´b´ãXùØLM–ÊÈpšOÄàIìß!µE+¨Å¥+ ˜L>­ÇêÀÔ7îÃâ éúŽìæC‚neÎjÇbß Ê¹"˜ß¾¦laè1AR"R¤Ê/«ó–âä4¨÷ÍýL¦CÙn/eüh¾×FÆ´Èh¶b|MÅùÕÚžW ƒ_œoîÌñ|jÂì8$0ÁÖðÎqû q3íþWWq–¥{Í‚òÜøê`by2ÛˆhZY•îd6<³ 7ÉÐâ 8+|:&nÏ=ú¶sQ!Qt™êßON½IψÍ„}Ó’–ŸD;æ ï<ͱ“T—MhÏD±~oøz#Ž¡nÜdRòÂ'žƒŠG ð;"ÙX©ÓwP‰fž¸œ72ïÍÐé¿æªn(‡Ô'd7CGÚu±^uó5}›°X`× ³…Ÿþ‚ƻŠ´§‹‘îC6 .ø"t·Õ_ÑÌ^!9_é‹¢åjå^n±ä {zÀ…¢5Ž,;Üù[_Z”GAÌtO©L'\~4ßtÖŸJNIùoºöõò¹¡¯ÌøY/ì\wý:íNI ©¬„ø%2Ðý9ÊUüqíðˆyÎ倯´éÝáô9$f ÂÀ#ó‚Oòã;x;ç Pi”ØÀüÓ ØžÚëÓ¢kGð½t«ê_ŸÈÚ;ñïåSómyhóscu“'ɵÎZ¼ï{RÊo ‘Tyά€ŽYøÅŸx&ó#ªP„A$pÈôsIFf $ŸØn9mê¯^aÍq:\ÀÕâ_ ^WþFH9mì?¨KDëq^¤Ì î¸2néxÑl·ò=—ßI‹Vǵ±•O \†­~%‰ÔŠÆmÒd…X£2ïŠx%ñW¿§•Óºû\Ñ3xËÞ¯öRD°$Œv¤R²l¬A¢¾IÑ­­¶æÅ%?†=µ¸¬tÌk¡Â/ZI/•¦â(ê•ö¡ŸJ‚W¶îÉuxz[×Ìã¸}îÚnb  UY"+Ã1žâÉŸèò ÕS»"ý²þ¹"Fg$ù âÀ¥^›õtŒj> U4bÿ ?$ŠÚtIø£Õ'll˜¢?e¨5ýŽ s›Ð“N¡î[­.;.HûÙ E¬Òé™EãÁÎHŒ¿»FøhhCµ–ÒUµTÁƸ*ƒñd~û„p‹xíÉ1?ÐzùC RHP]Ý#àÁÜ4ø@¢÷wÎcÓ×p¤Å€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €t1lib-5.1.2/Fonts/type1/bchr.pfb0000644000175000001440000010406510733501627015035 0ustar rmzusers€Ô%!PS-AdobeFont-1.0 %%CreationDate: Fri Nov 2 19:00:13 1990 % Bitstream Type 1 Font Program % Copyright 1990 as an unpublished work by Bitstream Inc., Cambridge, MA. % All rights reserved. % Confidential and proprietary to Bitstream Inc. % U.S. GOVERNMENT RESTRICTED RIGHTS % This software typeface product is provided with RESTRICTED RIGHTS. Use, % duplication or disclosure by the Government is subject to restrictions % as set forth in the license agreement and in FAR 52.227-19 (c) (2) (May, 1987), % when applicable, or the applicable provisions of the DOD FAR supplement % 252.227-7013 subdivision (a) (15) (April, 1988) or subdivision (a) (17) % (April, 1988). Contractor/manufacturer is Bitstream Inc., % 215 First Street, Cambridge, MA 02142. % Bitstream is a registered trademark of Bitstream Inc. 11 dict begin /FontInfo 9 dict dup begin /version (2.0-1.0) readonly def /Notice (Copyright 1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.) readonly def /FullName (Bitstream Charter) readonly def /FamilyName (Bitstream Charter) readonly def /Weight (Normal) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -109 def /UnderlineThickness 61 def end readonly def /FontName /CharterBT-Roman def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding StandardEncoding def /FontBBox {-161 -236 1193 963} readonly def /UniqueID 15530648 def currentdict end currentfile eexec €9€¢•@ƒŠA3ƒœ©Ò.+™ò¶v|Öu ¬ü²NÍ6s›¶I”Åg7 Lì’É”_ðt^÷ÿư©£¸Içé‡@ål Z÷‡UœÆ•j³3Ï…SÕ\ ŽõìkôbêÄ.s€Ê’®‚³Ö¼ò»]Vp”Ïâ}N¬–“èƒrÒX´~ 8vUŽ¿uz¼\Ýö+ÏÍ‚qòYƒ;¬yprìš0c¿s…à-ŒX¬ß³;Œ‡h²x±L‹ûËp5Á`iÝï–z3꣜ëiѦ3‹æù¤ˆ™”ôÕX‚åYCtë·V-gÌôn®äÑ©žV–CäÀ MÑc‰ÄÛ•ŠW×(üNR¾§>uŽã¹D/ÎŒŸ yP›¼¢^Et*ãRBB¦’·»¸h®tÙö#ùoÞžëª#.AöGÌg¢¾@¸ž&–‡v½spÅÚ•ËÅÄ~ Œý¢5@±áîY'hv Ž@~Ú¿‡®,5É>÷‚9?4KëÚ2îX{PÀJÃRúûhíÞn9’jÖ'QþÄ(_ü<Å9€E>טSÖ~Ùpƒ–Ú=¢ŒÑaxø<…v—ê5hªoBÈõºó;=¿LÍ÷½±]­: }ýgý®ÏÏçÀzpT¸î¦†­‹ B¿ÎôcgH2ÁBT͉e”FßôH}J2ýû,`Ôj0€racQZº~`,â6‚PûP‚Ã×@ç”ÅE0èk$ÖaèBf;¶½æTýeMP˜z  ê &¼˜c}¸³•‰ïξ!11“IütiØñÒ¾]§äig ºSm˜auÀ:§ç^4X,[»8ÜÜE›kÆY¢ê¹Ìåsx>¸¿Ï¸à/Ð÷Ãç;›dB¬"ù½Z“x?bQõ‹°-¾ê³þAÝw|BÆØÍ¥†x p-ì=™d‘¦õÇa3OëÆ­¿Ï6œ!¢Æ9±zçùlnGFbpó—ùtÛçeO0‰ÖÊÊìH¢Ø-÷sä·#U}®í ¸¹TÿëPD£¼–E…zü7Îw!òÊfC_¸Mí¿ ?/¯!‚}ÉXÅ[ÑÄ]Ìå¹^ lŽ…e KY’qÒo{–åFýÏš©Ž zìÂLˆÁÛ¿†SÉ%;ÇÙ&iX¶u￸ՠ̀cå«jièî™a†gÅß#9}Ëoùk$2fr< ˆ?ñ©ÆÒª`àzÒ†è(XÀ³³l&8Œqdð»‚U›J‘Ñxv‡T?åYK%c™Y|5!­=ûåoÞ“ülˆ/’•s»—Ÿ¿¯°ÂN% …N.§ªÃшKØtä 1é{µ·È:¬¦µ9Ô%† €“;&bÎ<‰ûtÁ¦ÙÙQV4ØšºÒ6vo|Dúšêp¢üƒŠ»"Nœ² aMŽ•IÇxˆ_¢ÝqDãÖÍòG\mÖõ^XœØpõVŠž¿ùùç yÄu®Ø‹&à85½'õ[Z’éâ”zoÉ=“Ó‘}iž^¸+¾Ù‹]wåK A ?0·¦ r ’|Q Ž|HÞý<, D)%mM+<ÿ-¡]®çló‘iæKoÔì¢'«ËŒÉÎÃ|`jUu:+Ev+"É`&ƒÀh”ªQ—³ gF+éºPkx;À•L©«€Fí <ÓººwŠ0ÂŒ³;ÀZãs²¸5É/:ÍèÊoº2•µýRïÉ‹wè¨kFÛæaÝzãUÀdÊYKqˆ \v¬R^:«à¨  ë*æxóæ_í²11&^'‹…áÃÏ7CëMê9Ñjý]¸^cþ¹&ËŽæT=¶¢ífŠ9í‹Osé4i‹Cïù¶Þv˜WL––Hx–éç„Kå ›¹¼ðú(à¼øZ)ù¸ŒÞVèÖ|+«7kœæþe¼ðÅÕÄ^ Äå¸-°Cy0ƒ¤jaaù©ŽkìYÆ7¼‡q’t’‰œ¿õ=³WÙ%‡ @È£>nþTTdm‘p¾s=\2í‹¿DƒŸx1jÓÏ,;;ßo³’a^H†$/SœÀÙeÿ|²¼OêÊó·x©÷A ÍG¼žSÁly{¼<]ð¸sóÉœ&‹\í¸À4÷Ù÷LòW†4x…•XÒÁ„XDÎuªVLârYý¹„…ƒíg²¦–Ÿ Ò•ýÜÞþ©LœG€Ó0Q‡ËŠVYo,© ñ;^ ,tGqÜró‘X½è¤È"{G¸ª¯z×ìÒ¤žÐœ#ˆ¦þÿO1]¹Œ™žD/6p©oD—mWë p Ihƒ×úžiJ‡EÙîºxͰäÞx 2“›‡ZÐÈWö˜onI@¶tÝ;DýçБºK§KðÓ›^¶ ¡Í€’û²©òy„h…ßùV®äfÁ¶4ZKaœV¥ÆšŒÓÞÎiRÇzZÏ`=óËRâ¶<HÍ÷;Yî±Û9 \6 K*ÿ)ŠLcÏ:˜ 8K‹ö‡•’HÂøÚi<½Ö<5‰O|y7+ÝsÞ·/d–gÜV“Cþ¢3‚ƒò¨»šbá”Àúø˜ÁÄÝU»ˆ"Û&l­3ƒÈó¼¢yo;&h”K‚¤ÿys˜Ã]:6wCãJ×W3¾t;&9ªœÓŸˆa*ÀѪfˆèývßÂŽ} › ¶ž ›kô.žý£,á)$KÀÒÖìªÏ”~8)âZ¸ä],Þyw—¡¹wÀ“÷ÅàæJYa?#èã!˜7yâa_È2}˜Ÿ„ùÐß¼ åûaÀ(©¤¹û9 VæmÀtv z båÔXåO%“·cmì”(1u0¿Q*Ýé^ ‹ÑÆŠ\Š ¯Â)½®çÌFáQú;*ãÇ­Ï<.‡½¸½/‡˜¡š4¦o¶9rÛË'öÖ$ÆÃef׿]y X: º.És.ˆnç@pâ‹¥—MgCÚSÞ2¿ðÄãDˆ_”L©Xq" +5.!É@cl,b+ûA§¢sOòE’|GòK+äçñÍõïçOÇØüY넞fkiÜ Ö!3 v³8—:ÕìGcÓï÷÷•…°Ö¿&µŠƒšiUj/QLj¢ìÁu_EHj ÄðÒXAß®ª+Cª× OèüMI¤ÖÆ“ýkPÍ#@ÅñÁãZ°ÖqSû™ã”z¥N xvTÎü*?ªdü¥Ì;'!o–Âcnûh,c‡ƒ{ˆ4¹Ä/(sÒTc;½$®VÔÚÅreÜÕiÆHuOºd†û j ~úü~3«¬Q£†üY•\¹C®ËŠè^ï‘a4]Hï…®ãŽîcë{zgÕsrµþ.sô3ÄùVùNý½kåªê¶ï¦ÍG°¾;±U,$åGL‘™B³CæÊS2–Dµn™%>Ðó”=wÇ{é,àR¼b&Ž„Ÿ¨³d)S9²p*ª‰f,\™1e$šÎ}¤ë8jaKW|+ô¦L  ô&½¤¾åVnèi8ÑsGèÿ‰mlü;Ö¼Œ…ÒÓI¶Ïx³¨‰Âsö2–›ü³¹mg!2ËEž%àò†àJ¼Z¢¡$(sßIl¥¹¤5‚jM²Z1¬ÕŒ¾q/ZWiÙNC—œì5¡æœa° '¾§Ÿ{|zQ`êê7¨6i‘ŽbW§Ü R²7)_-…%IŸ·ÑHc’_îÆI$—ºÙehOòaÙbDx×ù'÷^Ö´z'\¨îÝE%Ös"XG‡”XUéÌŸ[~„"*3‚zóÒã1ôßÁš¶êÏó~4Ó4‘؇EÛðîÉ13Ë¡â ÈZ"öÓÔh»ÔãØ,ÎEY V#ˆgŸ^ÿJòòö¾¾&ìaMO±Vž‘åô­€ZâCÝ üs׺HÏtÙõÔÃ÷¥ùiÒEîÚyó[ÇpÛp#bï&1%Ò¦ŠÑ-VvŒ´ˆ¯Ž!/Ύ“š+—Ð ^õ æ‚¼¡âø@Ö“–K•g‚V»„»jƒª¶¾&^mÝußlÄCqa|¶ŠcôìæGÐz+®W¦“K½bØæKÕלŒ2†ýÏ)z׫œÅ0õcn·»÷À e™€ôyظ ILÛ éO?œÊâÜ ~ÂYØf ô°¢¡™Osev#÷PÅRâÁï¶€?™Y ‘_ómð2ã^ÍÄg¹o÷ò¢PsÿyŸÞæU–¤ò{3YpŘ%ž«–böMô¼°´)Ü$ÃÎç©b ®‹x,À –Ap¸Å‰eKa6’&sCÌÃi7>"-èÚ/–œŒWn€9ý(%ˆêÓ< ù¯x_7)$1,/®û6½éä“âUjÅN|½Y®ëž¾Ùm&‹L>³YÅ¿!ÂvÈœ2½Â ñR©hIRéq¨2*ß³ ¸À„R[=Üúô1›¥U)¿eß­ЉSÊeX¶ç‘èuë%÷üè‹“,!>@ß¼é×йQÛïd);_¿S!z¦…Q]µ$ùU¥jÑ´ÓŸ~æ·l‚µÿ¢v”¯!¯Xç2ø—àÎ#=±ÂÒë¶`þÊGÌ+ !Ë?~#€¯o‰þ–W‚[´îîd±º"JðŠ%¶ŒÜ¡ó!UqZ²ð>5òÔ™ Ï™ñ)•ñ _ÞÍòȲã7 c¯ÀïV~ðrn¥¬ñJ‹ôù\å7êzPÐ(¥ äÜЃWÖOõ=‚ƒ5ð=(ÔÞßL!Úë -?ÂÀ8Ÿ89ÌèºÍ»d^|k£h}OQi(û¾ÜeKÅB‰âŸ$Þõ/$QH|:»'P †$0 ÛÞ@Z/“.<~z°™jœ1>Ä×ï‘·Õ“"VQc¶ªqÞ"ÌJI¾ç[2L¿ƒ-lË.Ù³ú´ªï^ª~ÉqX§É‹@[ižÉT¸) „¸[IKI²ä‰T‘š•»Êеô ‚ù‹÷-O¥5@û£o“¦ò¦åìåh 5ÆÛã¹Í6S[K³Š\}º‘?­Nâp ˆ³9E¥6p‹&Ñõãe „Ž[>˜ñäUå.¯ôSWFi„ågëàêýL×Ë!ð/ ¯_@Ú/j6P¬‚rªÉνá=JY?(ãNꥷٖýò~ã*B&Ç’ ʪÂO.Bâ‡HuDšBù” …çÞŽ/îÔsV#kfÇH¢ôà–d¶fÉ®dãeǪײO f6Øò)8˜-¢ Í£E]4îa#ͿҾìÄÀÄâɸëNÈäÛ(3L6m¢vJþÂJaÜ%ÄŽ¨ƒú¨U9AMw€àÊ;èP O°z q#äT0àþ7Vi°‹h)®bùƒ¿^ʃ¾FÙ‹ÿ…Ö0Ñg[8f¬Y‹²µÚƒG‚Pâ'û kDU‡ïë!”dšy“‰>÷… „x´P¹\Ë2JQ…<†×(µ«0º:á*Ó›0x2B<ïF$Ê&â ò¸Ì0®ù[`ÿۥȷJ„,ˆ<ØÂú{jCKy‡/NƦì¡Wx7æGÞÃ2ø=h ƒ'¹KD–v¸WÂעܩ³'Œˆq»Ì ÊʆtpÓÙÂ)ªº†¸ô2B·òÏVÔ-§É\£G2C´í ,md…˜ré£.”±¶fø .Õù¸¯Mr…äZ^c(  Ú‘®oTïrƒéf™µ£ÛpuðüZ⇿é†×‚¼ß}Ö#Ü(ÿ¡›µßÓfsÓŦ]sÚ†Ã_ ÿDuႎ“cMj0oíÝ9Ñ*Ióždâ–øV-¯V`2=ŠÜÃ#Vˆn‚¸Ñ[Ÿ2BÑZ.¯GR™›ƒ ’?ÉwW“x-RØñäÑËõ¬Vô°Rmp”ãÓb#«íÝÃñã|Ñ[ o^µbú”ÑH:z¤ÑžÁ†¬ÿ›nÇÆ¢nY?ל¾û{Ð"ݵ¸ún:.§Õå%šsL¾"RŸn^mDáêÛæ ºŽ_™}Í»c,úáQ(i,”c D.+ñHµdeÑ”Õ(4ć|0Ë¥~ñ¹Nz“ª\q¯èTfÞ'>=WÄ>dqœgF¤Ý9ž4/"ö_­þÕ7£wa_ÄÜ="Àe ׃oÖ‰Dð÷™áÄOz}Ú“1Ç(€Önµ[Šƒ> àPͶÃÔÞ…×Ðæ³/Îê¤ïqüiSPçÐá3†]_‹ÀèEÜéà?™Ì ËÕ[ÜÐnªÔ;dÈÙé¢OŠ{dH¢,àRßÙ¾ý—ø6bŒ~¡gì=|vCùTgG\p ’Á¥œôÐ_ joîÆÀé«£Pé¶Ö™ÛÞýw2£³uÛþß!heÔ‰&ê÷”?õ.*áF¡‘Œ‹i0üèDzŠ$™¬%ÊŸ:]œ„êþN‹éz%MüÀ]å¨4X5æUás² Ébò…¹ÆŠæ?CÙÐt®ØÄ0FˆŠÈS›0êH”§Ý\ÍëC˜ÇåR¿=áî-—žàdÛEŒ?ÔP9}!]xžê²cúù%Ýí)Ý£Oz¢¿)p3Ö˜Vr³“Ø)NÉ|âíµi`«ÌÎpC[™˜@ ×clâÔ¯9‹ÚÿLz)é^ã»éŠáfÈGçÏÁzÖõsôÑÓMrŠìu¢ÎS4Á-Õø*æÅª”^»î[õ~Ãéúàоí¸'m5èœæ¿4­eHÐòóÕ©nI ,iŠÑá¶]+±ÇÀÌø³ø@­µå«±ø»Šª¡×F>Öœ¯/”P'Û,*¤ÆýÒ{sùñ3»-[å8RëO¡¥‘t¦ÎlÄý_À%®÷Åù°3~‘Ep¢Œ}Y"yx ï4¯}´ÙFd–ÞåØ eIhW½dóWWÖ§s€o+:yx ôÌÜâX M¡_A,®§~ЊGüDT¨ÿ]tü2¦\¦ýÏg˜>ƒ,ˆ&ÂÛ¶þ†"òò|cãdJ>€›àâßÑØ6­£`@vÓ»å‹>3\WGíS 7L´ZÕâð±‡ÆìrlÈ'¶lÓ2ÝTP ¢dßþnQÀç ÚÍ«T‘‘©KJ»°%¾ÿ[´G¯¿œÓͬ$[*SR™mËïœîa!@œÑ/'Ùáª-šO–û |ý¼èøeÏêällÑC ÄûÀÖD êl"!cd sLñÊë”]&7º¢Ñ„š¥ `øiQ«f$n†Q9.s®ù’dq4‹­ðS/õÆÜÛ²Yˆ]¨3™óö— ã>º[lÌ­¹'"¨¶£8NŠú3¬1°vZÏ@É*"€k¦¼¾M9Æò<ô…|$F•,#/NOb zž'™1Xè/;Ñyï4TŽƒï;(Γt¤ó³Úò @ ™_Bå8i}|j÷ùƒ¥"N–DôÍ*•ày—›4àñ¸¯Wï}ñFäéÍZù‘àþµ‰MgŠLÞ·aúë®Ù‡â´¨ $r¶úaÎÎð“có1Å,q*mÖ%ÕÎVõ&êñ[*ê6HÅ]zkR<–ë1Äç‰æ5>´ÄýbúX®cPvOƒ†2ð¿¡Ûs'/ IFrãÈTÁÿ…,…ô/O ô‹ÚE@„ÆqGäCÔóéñ‡Â¶ó?WæŲmÊ_yð}$©ÈmÌu–ç ÿ[ <4K[?qy_3êЈ~Øf;Ÿxì ir#|™#Û0È^å¤Wi™7÷1Vy«'%è=yzþ`Ž»OÒPü—½%ŒùáNXU.tó!Áwa{:‘ð‡ø‘š¶=p\öïçü-PæZí¹2Âßp!÷¬Y(¦vs¦œЋW:c2à Í–®Ê@ÎOlh`¸AÛ¬Í(Ëÿ¿ a?c-t“x?¦50“ @6»¤вAHhnÁ–V}§Êa-€çã70¨e¡Ç#™ D››Ùw‡Nf\ —|ݼ!bðþÜ;…ŽïtÓ=TòõìùÚÖ ¨Ñ™¢hª6¶-´s%÷xù&áôÆX"*?€·zd€éuÕb*Ñ©&Œ¤0|ÙÑk8Ú%ŠÚŒ½ÁJ;¾¶ûràgœDT¬Ù¾aÐú8¡€.ávëlž®²¦ŒŠ«˜aÃwåx ã7t6«bqûä|·ôtê––s8»¢ß´¤Zñ[wà7²vÁ߯¦¢‘ ¼¼ EoÆjˆ#ñžÃu€sd“Z¥Sé …¥‹MÙl`3”~¦ˆ¨ s˜üŒ^&Gq»è¥É&«¹ÖKÙ÷ Öð’¯mmFÄ¿™C†¯uqŸ­_JZÆ@3U/¸O´z£r2^‘o®;0tÅ0ÞB O~sÁEvÆI€ËO®³E}[ý¢hâÅU¹u*|l£C'OŒ9W©ÜS§ÒðN„ŒT¤S¯µÌ$utTaÎJ+2À*3´_‰w‹6=/Aö¶A }VršQ«üš âį)éd¥øÞ܈˜ÂPêé 2FP4ƒÌ?2í´(¤|"Ù)B+ƒ'˜ÏÞÍ÷uFá?•¢È¤€3ÜéàÃå Ã&tÀ\äËå/¯ÛAT©%^ Z˜ª·à"øxFv×¶±Nk·?I—é)½ö" ÏHÊ23bvœ·#e«S]Æõ)iG¥¤9§®¤”l)_rñçÿTÑFǯTn®‡Æâú&ûw¨„‰#“96T\çȺaOb¿WéÌŸ[~„i—ÀZŠA‹ƒ½å¿ðÕB¹4Q¶¬UÖË•Ø|/q`k$Q;vcÝ4T 2ãêšù³‚j¬öäqbXn»ðã#…“±1Ñþä$b½9”äTÛr!ø}L£Š iž„Ê#ûP•ù aÒjû(cLh‘õÀˆî]À‚ö¾äÌeç˜P_v"l—¹óŽÎv×,OÛ¡a? œ§)´¿W¤Iׯ»‡ bÅë±t.}b/JŠW}Àõ¡Ôo10ÆøàRâ–o15šâjjWçfÿ§#€ýH΢‚©=r?9+ÄúÞÞ_´jR ýÚÀ«-VU¹º iö&4+1*¼˜ªÄPÅ4ˆty|•‡¤‹Ruw£üÅv\B?`÷‰¿ît/á*¼¢«K4RÚô— /“ž‘uïy4³ÕÞbÊAbZ0 )ZÀ ]4`ÚÑM Ù ž•ò7ŸqÓicLN}™‡{JP6æŠìn#çÂkR »L~Ô¦˜¬å÷õ°qõC"fŒÿX^ Ñý¯Wá…<eõ' ÄDðj})§Ù$shäòÑ ½z/p‡X7îÞ̉Å.½ª½ëð`zÄÕïz8ŠíÒzù•ÒC[âUãnÛû*Ä‘ÿñÅ õ¤ýÑ !Ê‹sG£ø¦Ñš»…,Vn”N²O‚#ªÈö}† ;¹ëÉD‹‹™Õd%Iìæo”ž5 Ó¡©€]~º4)Ûœ¥”ÛˆÉaEÑFK ZË?ëq肈Ø^:#hc]‹MX¤Ÿ¹e²Å,z£3fƒgqÓ†.ÇñÂ): ®^ªœ¹1Ê‚¥Úyׯá{Ñÿ ^°p)§|h’fÕ—?XwHF8¥o_ÓA`+MJlAø Ìæ™ž©)Üå¸Vëë ÖCÖXlîò¾)ÎA ôm 7• “.-ÄrÊнܜ–KsÚtÙ­¸9Ô1î— ï¶ 8ø%ê¿RO»VÖg·1•­v™~а%d9 Q뀙4.Á $0¡Bçui ’Þ•<Ìõ¶[Ôœé!C÷E¬J ¿¥²/†¨ÅRWnžna¤h@\©"¨Wƒv÷ˆÄ›6íí1åZ´9u+¡•ðXݰ<~—ÛàoÂKÄ¹šŒ± †çs dÀ]8ðDz›k±\8¤Ø{¼˜ i‰Ç윳ÍüXãwbFËJMp l&ói„íbG€uâYë„uÈÖ Èk #%]ÎM#‡mÑ(L¸åXf+…÷p¦ß6ôűbî~¦¯ºÜƒSuí:ØbÍúœöˆt†@Ÿ$ÀÉû„1¶%ácy6Åo&mR$üAH½®PßI‚±‹õQY óXžlthíLôÝÒü2'Ð’gm£È‚ ³ÌèU±¥hjõÒõæV#'§§)JB_ ÿ¢`fÏ€DqQÖÔ3ž”g8Å8ƒÏ4g†Am@jÛ<áÝûÜpîÓ¯d­ö‹™DWË”Žáó2J>ÉKG j‚A lt`•¸¶r6ª*S\Ý1u*BD,Á£jYæà`¯º!ÌW—âƒmëL¿^ô^„ε¿AîãM„·¥ÉÕw¦Ø'âðãŸ%ñ…O\éf“¨ÂÏ2}ÄÛóüDm±¾*ßYU•ýzîtŽÜömÜ Ovþ ˜Å$òôûõëÁP—!Neýµµ‘ñ¦`]JçÞtáT‰ Í¡©Ú›‡åŒÈÞå¸x·…0µ‘KýÀØèȦ§Æ¿q•s‹}3[rO*2‚¼7‹6þ~Wã©Ð ªö³ŸÞËáéǯ!Ú~9käj©b/ À+¿&M‘˜l=·ivèCP˜¶Õ©t¼ìñ‡fOÏT· ÿ¿ë­¨Òan¸bp¿æž,˃ü‘£j4Äœo+8”€²ÖjX´'eV'~–8©rÕ1õÖ06Yû'χ§ŽÛa1örŒçß­/û6f½£=ÊB²VóÙü€Ï…ãø;O@‘¯XǨ{ñ¸ïÒ–j-„ŠkSÈÓd 3ªð³¡i]©ÞŒßSÇvbkÒh;Á^7“Âè åÙ뜿zùØmç0÷«mQóÔŒh+ä|¨[V]mNyéz[6wÜdÐL蜫ËYÐðÜ×øê‹öo$’»Þ{ùÌ7m¼Ò$0E®áÝ6ܘCg½—ýãàúw«ëMûº®u…§~ÝG8ߺ¯r—`s£ý÷&šaöN‹ËKH†*Èé-gÿütÛÐ'sôÁ 4QåŠî0c/òí,¹,xð¦sVT ´ð§ð­-Ý­L¤p>±øÈˆ:ñë£F=¯i³2*NP™,É%$uVÏ^¬3cô¶(sq³«;‘Êò"˜¥²P0(pyá3?è5&‹«­ I*±¤A[õø–»ÒU_W“ÅQj¬ggs_×8Tþ­÷¶m¨7î˜ä¹gõ$º¢,ÔÎËë;ˆP|µ¨³=2×Yë!GéògŸÕ€ÍËz›²g€u|{.ºÉ_r‘Ÿ…+:ã{3ªj$l;¸a§HÆ[Õ–X @ÉeEäI‹Ö‰•½Z çDzöÒ€vâÝOÁ­X¢;'ÍëEI±0!:Cv¨`v¯$§{>EË“‹ŽÑ…ÿ)í‹O8f«¬M“1s „{c\sðjÊÖ¶ªî=]‚*\kµ S€f{;o ø»Á.%½çìä?¢Ù P혫™1ýë~\¬?Œi¯19®“^³îKtËâfA Ï4ÜLÔSOÜ»ëÁ@bô„Þ¤`šƒ"œU² èJ—qBº¼E­-È•¦À=ÀfÍ”hì·¦ÌørjN‚þ>˜ñ½Ï2Ãe¥jX@ŽYà…·W•mý™&›_\åøÕ´õìûgáCA#š, `´~(MèðXþbNÛÔ-/›Äª=u íS{ÑQ3e{~D‰Í uÏ/ÉEšô·'ݻݠ‘'ToqúNô·j·Ç„c)-j œ`c •µÅß\UZãÝ-µqäç%×›Cj­4™Os)˜õC±g·Bõóþè§9ë>ach…Ã÷ºci€ëœX#Æ$ÂàËU‘áÏ1ŠÉ­Ö kÕAŽg{ÿ ³ã´yèwb‰EJ‰]î¯ê¾™o1óºêËÞ‡d°{†¶ßCÇ\À¾hÎ.PO Ý,ö¬xµÚÏu‰ÌÌ—èoCBî?l´É8½Èy½|ƒ ®Ø(þÖÕò—Ú\>wä X•C\§¬o^hs ~ä(>mªå`½(kgŠFŒËùÈ苸nÜÈS.ɘæe›f™ˆÎ!|.{ËC'¬‰0?0¼'¤ªºVlñ¨$=îœÕ8޾QÎýÔÜ<=“›ñfÓg;%ȭŪ{èT9pä‘ǃo§½Ã›®¨¡QóD“ª6;jCD»qÖRû7&‹zXØì¦õúïsE¨ÿaþÞ­zlƒöÚVqi•`^ö(B[%eY‘‡@LÉh=È‚¼Ñ½mZìýƒ´ï ¡YP<ߘÆ÷-œ=o<¼Ë—PÒ¦ol[%Jmƒ>ïåÐÙv]c{0ïÇJm/vþ­ZQa2I/û(á¾~â¦)ÃÓz äƒ1Úãê®x± wüŸ†~àõDŽ•¿¦/|Á›[ ¬<ãÈ|!‡¸U@ õªhLŸ•ƒÍT#º“?¬¤W ÿLEbIÒúºÐö5Fµ ¦Á.‰Û§ñÿêJÙ¸Háù¿6ÎLóÇðy…o ÐDÐŧ Â?Èr÷¬pt‹ß›õí"‚wr®Ö͈4/áä}¢=«ovÇÚȇ÷]Œó–4î® 5*š®*ŒSÿ —~¡Yžú‰»M® B°˜Ì¤¼…qäî_½d‚päÁžûºÒ­õ-Å!j`³ˆ¸fø@û;q…h;’™l?_Åm½¿>äL>÷ÆÝÆìRÅ™`Õ8ÎU—m¬ÒËHZ2›ÏbÌô#Uù´ø ñ4k˜Î |É6pPÚ"é#31­?Õ¥ï‚ÒdÎýžòÀzL˜ ÛA¥éœÙ0uz„X±‚aC·—mm]*‚É´–áä+Û[Ãj*TR:QeoرlHoÑI_–B`mâ b>®!hbG8¾Ú9Xô#ð+LÛªPlèk¼V‚'Ò*¹,ÓoÊÃ%nqRéÈ·ôœ ?•Ú ÿáÌ13I*)¾ÿ3àlÜ5e8òË:ºs4ÈÖ0‡/ŽQ¹ñêuÏú<òGFª¯ÅCäüÝœ ârß&À@ Þì—Ã×Ï9_ÿ!âWCBy‚xóÄ@ÎJs2xþ äs›ë­à¦+¸ vÇ=Øû¢v£&Í"ÔQÏÜžÕênkpS3]àƒÅct?ŽÏ)+¤ŸñCäþVµÑò»Áh—3+K°Í/œ¼Ê€“ì›I´¥é&Ùs™<ÖÀÞ¤ÊIum¥o™»”é¹X9$™Cšw°‡%Ø‘ï*óVUË¥(“¬9Sfy'Öj7Q³˜œ@CÆå0V´’¬Ã×ä@Ú)¹KæÜDòkD3 ѱ‘—Gá‘ *–Ö+3yÚD £(2(Šyw‚X+qåŽqT¾ qA‹”S—@ó²ù ¶#lŽ•ç$ÇX±³eœUå(†Óq·#Iî·ðŒŽÁ ,a:jò4ŒÀfª<¨‚Øp…9*Ôôs± ’øEqi‚™Í¼Ï¾õ:pЇoŸØnh×0ÊpˆÙU:ñå^ð-ØÖz«!”»63…‡bl@Á&ÐëÅT™±òÌœèÓô`zÝaºp‰öÓï+3 nëZ¶×Eóü}Æ/w¯ ¬å c =ïí~dG¹„™aäGP»IùÀ¹8MQ¸Q÷b…I$"å¨uë¹Už¼7+ŒÖœ8äG½†òà/0f ³ÇXH¦=«‘ÆW}'„£ îýIÉ#È9AKîdÔîÙ€˜ó2üÃ~yÐùÂÓ,5†š›Ȧ?HÖ½"îÅŸÊÝY‹ºP ê)ä[ ¢PÛöžÊq> ÖðY·(`({/ÛLyD>3ÓUMXÄ¡çö0ÞÇ3Aå˾`y•Óbá¯$péA¬>ó p2ˆ‚ÚDx¢7:ipotwåw Ñ(2˜aJÛÞ4´ƒ¸Ÿsαö¼=;?z›—‡3˜òaÉ’*¨ÝúÒˆãÍ­2ÙPè¿uk(¡0.ÌÿÑ:P ^®bîàú'Î ŠÊƃYÃÅ-ªÛÖŒýf«^¨'²|Uh¾š%¬eÎü…)%¯<%V€ü‚K ÀƒŒªÐ–açàÇ»ìGö¿$´"}T¢Œ†÷ÝCëUÊúpz_Þ©Ýã‡FÏlVü(q˜ayeo`ûãħœýnè~¬g&ýç$­Ÿz±QX¿ñ'ûƒœ3 *¹Ä9"fMFocWp -b±íPj'µCçd“†0¢QüÀ|IŒ™=ˆ–n+ë. Åí`²Yn\Öö´I?0KUÉ‚‡¢§ ZóŸèîé³nè¾€8Mk”åÀý3æQþS6â@ÖE”üöÓ·T){ÞªCÓLFBü6ˆ²€z|8cøPº¯¨š¥Œâ_ûgѼŸï§J·lxÒ(ÿxrÇ–yÑ,Aˆ¬Lº’ó•´×±±Ðš-+yÚ®ŸçæYŒ¥¾ÆHÅ:Ýkx¡œ¬®j7Œ2ó; ÁƒX·fkEˆæçÅó‘õÆ›»D¼ï×Àe²¸"k˜¨9‚sSòý«|vøÐJp†V•Rkºyi ~Tž´!(Ø7Ð.z~”W¡aÇ=ÄùÃç~‚öw«5ó~Ÿh®8ŽâÇùŠTÚ§7áhÚw»r¡Ðì÷:î‰Å^Ug:ÂQjšÎ¶)M¿žEø(Uk¨è ?&ÐF”U8½æf)¢0¾–„¾Üöªî'îà—g üÜR’Òi’뎾¾…î&¡‡˜„&­Í_|)v \íËcÄߨ *üIš)¢ç'u88éÇn·hçwƸá.bÕ{oªÈ¼êC,¯ ¸b”’ìÆ.Ö¯©Ö32oâk¤£³‹zèÖìnÝ­Š»¿±æ/hŸMdõÄ·ˆø^zÎñ ©“ÓÞÏA ™vÐԜ݀…úxhÛ)P&²Oñ¯ îP©™²ÚXˆÍõÒ«hhü:×6ŽþÄ€úæl¾õaU½ÌrÙÞìÇý],Ûwdžœ­?M8D‘…ßÝÔ"n¸Ÿ›ù±<ŽyâЄý+zø¶¹›;ÏÛ!hi}†»Ù%gIûåºiéëK *ë;o;.Q‡ëøHÁÄW…õÌ_i^VŠFJPmäpY¿«÷ XFœï¹‘•tô¡œ¶§¢xKû¼÷“˜9tË>`ª©§*v÷Ø8N¦¬\ñ`ºÆDÀÀ®ÅÑc˜CÐŒœ…Ÿ{'ˆx•Et”µ÷GQÐ?ΞùÅ0? …þ–Zç<™Ãó±U&«•ôÔN<†b246ó·¬PÉAÒ¢Q UÕí=¨ º=ﳂ+,?b ´f2Ь@¥v- T,>Å øûðæ¼Ýc•øçvÖ×W'þ50•>22Ø<ÑÿÖû§5|p Õ:²7Ê+Ÿriv™¡s«â€)¯#p¨Ãa ¿yuT²Ó´xÇ») £#ßê¿Ú‚:ÂmqÙ:LàW€ Åù•‘~Z®cFV7!½f¥9Á­Hê„Ëþüû?‡»²«]…Èìœô(Þ‹l}VtÁ>½Û¢;Ìr—â8‹´‰”gQÂr û&HlÁµ³¤.è™9ØI À;­LjÚp¥øâ9ó½ O /œÕTAçòœWüÑ$/Zeù¤–-oçHÆœý7÷%ãá^ίüj3’~_òö¡92Ôù\Ë™t3•„«‡»—:8Ý0ÒÃú$umTx‡'$JàÈ™oEHäëEu°Ê¤Rdd¥5;À!; »FÅ&ùCVOzV¹½2Z²3ä×Â(!ì_*ð&¤ý‡ôú5-ÝÉ1³ˆÆ|ñ•ÎX×Û‚\Ç#h,ü—\ÀJµÑ—™jÃ8üùMê,W@w¸½)ÌRsÕÓ¹Ùa£ð8Jٳوa  "4}Íõ¦éÅM¡±¤–œ­¨7ÕÇbƒž-OW‰r†ž!?ŸäN‰Ïí»ˆW‡@’,+bÐ!׋ÃìÚÀ¾“9Jl›ù#•+ôƒÈÏ̯šâó¶i3…âD³›V­vކ¢%op¢Å<¥ñüâ¬$¼7YÑ”îœl©Ÿ|‡¨ûz÷i^¤*gטN”¹|æu±ZRÙH„_œ ™Sîñ.¾Æƒ½6~A®œ¢—„x;dç%)ó%ÑïÛp™jWâ?g"Žbà)F¡  XpŒÿúŒúì1 \j­{‰§$ùû÷Vߘ y‚à´1m ðŽ3J›QŠÓ¶i8úqáÃIH;PGõ §ê½-¡§mthkBÍIA£ÆòõÃr>Hmbñ>ªW7Á‰nšnW9 Ågñ»B½ŸÎHm»®;™_¢ñûå.r™à5Â$¥/¬çЛ´ ¨,DÆéÝÓ0LÈÅ[ G{ç©:"gP­xîF(I¢Iî0RØ­ÍÒ^ÒÇÇøƒáÕy™0g”@÷-Ó¹¨1W¤`ºÊý}{ßA0¥îhϦ í{I3méÝš²Ñ-è`²+“[ëë~•¢gajƨ®æ\QRž‡’`i$?«ÕÓ5i?NNñ߉ÌêrîüœÞshÀü/w 2/Ö#•uuðÛUœÌZd׃Ja¼V¯P­DÖñ™à ,°ÑZÜi,g¦ÔoîÆA±DxÀ‚¤¿?l˜œÇ„Í_´YáùÖ¯žYÖ>}ÝË„}ŘD©¦›õƒÂ¶¼ó8A«ÆS9ZT`u †B3ëK÷v‚Þ¯“•~ÐG(íßß}`¨Јf6\«ÓWé¡A1/С:.µjðÀ"ñ ÝXW‡(O‡Uâ1mJ!?§¾Ë¼W3Ž1? /R@ë¡ EuËê¦Fr‹Ý}:¤ï»-©*ùTé0æËR‰I ¿\É+£g{sÛy±°9Ë`ÁA¹AJa·Т]´3O|ò/šæKˆ’ÄHkpiT®™€mEM(Î,K Ÿ,÷Ñ÷‰âZ’A")@íy»#ÀçgêÑ o[,U0‰Ô ¶‚)û/»D#•Nt!ê$l—µõ‘ä¯Ö±i³eô:|£¸5kÑä_»9eÝ®"956zÀçx›‡:ÁÞõX.¬Ý¹ в$´ÖíìWeÓ˜=Óé>@]=% »þ®‰IÑ¿…‰Q°h@¦.ª0¤ƒO(í±.ÏAö¶áÙ>"ú¶±©Oùø%²Ø¦×>Ça«“ÜAµ9u™AbÍݺ԰wö,¦ØcnCÑEĦ ÁÜ„­¤é£"úŽ©œ‡ÅÎñ<ÞÉ÷…Y»àØ¡éÎ:'5Ž­=»ñ¬­ütF¸I›ßpBþ:Q»LÙÀöFãfåpgä•öÔà8Õ¨)ݵ ìL‚í¥º€Ç?PÜÂxy˜U3;‡#;O|X½RµxYG1ÕÆÒÍcKœMTØ9ÆWú¢\¬ž Ô® ‡œšuTZàã®óÎS‰5ÔÓˆ¦4FcûÍ-ñ¸ {†ac2Ñ(WÁ\Õ炊Tº‹Ú~F.ߘZÅCŠ1ÇÅ`m3g>Aä5Geh"–¯Ì&¸#œ¨\šAk¥ÃX²ÛK„?ýCâV€yͬþ x¼(²ðÍX~«ÂÆ-ôr?#®’&úÇf™4Ž›¢Þ´Y¹´…·`°ÓNñµyܼ¯ œ›Ð_ÅÉMò2©â@•Ѳ”¯ ÉŸné+”ðÀê åk7…19º÷û–BõÎ0àÎ'œ•PM}À¼*•mÙÓ¸¢â†5Qð¶Áœ42¸Þ¶y·Zb½o‡AþüQßÊÍ:»³“Æ oÒR#½ ÙB&o,Ño&š¸ŽxY¬Êòa‘"Y‡W_^ Ù@Ùg{ÞŒBR3§º‰mЫö¹E1;£EOŸ·ò”¾þžšÊlnÁ$Pë  $ïHê&ÀP _RÓ˜ >4°N){>×Q¤g(wµð¹G~o#@¶:–ü*óð)FºWÐÇjTSWò¡&~˱ý¼»»¸t,b>äYt WqòÛm¿ežÌ/<²ájwü)‘—E[š¶…=9=™§ÕÒÌkuv¾ÐNg^a0;öðÏðo„”°Šƒv·7œ)mv]#!ׂò£t<‘‹¦k?ËÀD|k†‚o³jºÒÃ%àÔ‹qi››ÛIÏjLI^®Ö vñœ`2¢œüI)6÷›“îlËðåwKÚ—WÙŒqÚ\M ƒ\E,²&¥4ß@“ÎJåq¥ßDÀW}¢\«ºª‰#˶+r­­u½æØev ñIç…[7rÙ ï¹’ßltlpÐ;T`δßTY´åFð?½šÕlYáf וWFƒ~‘TzN ½€ÕñC‚,<"<ýß"‹”UwZíkD.ÍÉ;þH@^.â8/Ns:³¶b~§µÎ×–IŠ‹¹žm„øMT ³óyœKþ¥9’ƒÂnAtNÔÄ8vÎPn^ÿIÁ-€;Â:œ™#±'º]~ç[Þë/T ”yÖÆK\›_¯GJzAކô{Û°½õMPQ‰x\§ÖRªÈ,!É—„ÕÝ›~»’ßò}—#}‘Ÿ™^ÉîXPyްF)øbR_–0='b±”QˆÙóÎŽHF݈À^ÀùÇ)B–y"ò¦ÎôÇ¢¢¬-÷J@•p!-§%€QÁs­1ÁÞ‹ô©!üž¹VfÎ7^›â«63Iá%a·å@²©²CâYƒû'I6'wŠ<œì—î­»Ÿ#bu); ª¼ok@[ü¬©ï·BÜý“ÒðoÈëasüV%ó1ëê$û‘÷—\BKd—-”&¼SÒj¥©¹LKà»<ðC/‚˜&;ºV=¼¶ÛUèüh:V!ÔÞ‹=<æ-ýÇaÿiz”Hh kÔáÚÔÕ`‚SìO sÃóÚsSV5ôˆƒæ1§Ø#‹¸] öƒœrø=ÌüX½Üúº,*[c®öž•;j‘[¦µŽ=«ƒåpœ mm ‰\RN®#O—Ua5ûr4Ùþ‹šQçÚ¾!g3È<îs`6I=xljϡžË°hÎáh[ñåÒ*/Óx?š <î’¤þÐÐ^$s—¤IÈH–¾•ŸRßÐÆb ‚°G³M#y¶ø³h]¤õó…bwü)„²\¬y‡ »ŸþºÄ™Þf Àj܇ZC”hõàÁ{ Î"BÓµÙ0¹·¯ÄΉ²²l€)b×M´»7¹'ÂBòÑØNti¼é:J‰­JÜNšýˆ2Êø´óñËÚ ‘—û 5hÖ\ñìŽ}ÖÇö”–˧6ˆØÆ›–ÁIseá\y!Æt±ŽHME˜%Êç®ožò:9O`¦EÈbM=˜Ÿ>ö¼*\óðíÊû?÷(¶“ãž/hî\4h1þ’<Ñt¬®ç9&ÌìƒúCäÉ£û ÷ 8uª×£’!ÀsYRf7°’m?@BfG*,{6V×,Oؽ þ³×I²?xpZJ¬ˆ)ëÛè÷ õI$)uts‚¯/²¨@§Wæ@D¶7‡*‹ )uƒ88 sA°Gˆ“Ø)í×õhçmµÙâ·~f1­1˜ùT#ˆCc¡ù&£"2ç‹`ì+TùÉ Î4^,\îÏM÷Àkb•k²¯£q¼ ìü Ñf¡¡Z\šA°Oìt\pߤ̯€àxOðË” ‘ª'(±óJ½˜9û¦å×<6¤¥ò9%*Oè¶•‹ß|]NÛ gÄ󸕉[Þ媀tnùPðÇ…¾wen Ì“¼äÕ5¡‹ Î슽«yŠz1j†S›4'O¦îY4ì ô1–¢NC½bëã1ÎsòžSê*ùobùÃKAU¿a0Âño¶ðεˮ1¢ë—„ÓÊÉÛ3W‰Ët£ GP¥eXázBÅ ™ð@V*œ(ünê„íÚ_³â<š(öZ³–.áj  czöŒQ¼¨'F >Ú[¾Ã›„8Ørd÷£ô"½<ÀmwÌXw*¸!‹Ù¼ äC˜2YjãŽv—bûŒ Ö-h 2î 뻚-^§£Áýñp"¦98Ô¾šùÕð¤H€ÀìÞPÜ句¡úWæ$6°ŸtPæ+PgG$YÆ.†«àxo¾ôËñ¯0Dœs!¿¦ã †ß-¢Ôuƒ7 $ÚØ‚uìJæ‚ÿDÇî·žþ3SÈä„b}m¤WœGe×±Ù…^?±ÇâF;?¯ƒd˜Å1K·¥.‚û‹³ÿÀÒwoÛ6¹ä ›á›Æq–‰Äþ$%s!|~@R´ýê*8ü<‡ÄÊ|/sìüÝ¢å îW¿øb­Å;²•ÿ9åä.ö˦&á»-©ñŠ„–âô (,;Û#x ÷]G£>EÌvêu’)» >4nVð§öÍ¢l_ızš.•r€³ÌÀ—¿käŒM0Â_9Ø'‹2ƒ·¢z>ÍÃJm;‹c×^~i»ñŠÒ èW7.wV¦ íK`¶«ÀZ l>±ÏAXsíYK –”0õðWV ô5R%q8‰"¶±°«„Bç¾=è1¼×S!kÖ(¥Ö;ÐûÍhÆ´v]NBm`„Â=g€9·L~(}Ð:Éž•@V÷ƒQÝÌȧãüd+£ÜEÙJ÷B_’}á«„ñŽõ”ýù\ñãl]ÈÇ“€â̤~¸"Ö|o)íd†ä©¤\ñº¼¦KbqG‡àÚI\4‚©¸¼ó¯Î¬–ôè;䘣FgÐŒä£#:ÞÝ¥lyßÙ’KÅzfsRd‘†ï ,ÄÍ–Æ&X<öIÌ"CQøMY9Í`Ì@D-Xû›JQÖ±lŒ’p6aØåvKrob4-,óâ’Ävø»ü#•Ú ñElu$MV¦Å*åÚJc›eÁW(;ÖøŠS¡uy$Õß$3Œä<õÇ#£.PÎ9e 3àì“ü P~{ŠÿcÔù‹Àb(èíÓˆ7¦ölÓvšlM>ª²Ò|ꂟCfÓvænÍz>úðC8öä{>C2«*•~Äv¢;üECM¸ URj$kk>˜ Zu:m£'k[Ù=h‘òÞäà¼K;ý5pöDz¢fü®-åø©-A±Îâx ¨“Ç’B8ëºá¡zX®2•æ³~Gq­®}•ÄÈ.¡Tì,RÏzXŸÏXˆäè=Ù¨×Îáž3ÄÀ*q§§eSkßÙñDŒåuBÙÔ9¨¦Ä˜¡#©UÄ[]¬qL°ŠÌ}Nœ„X’ËÕ¤T»C<'„ÂòÌ®ºuª)œ ¥‹ÏF2Ã4{:?´V³8|;?i¼Ç1ygEŽ|·raݨÁ¸¨âЊ|T’ z§M¼¸¾ÐôÙˆÑX‡=±p°.Tm†ìØç©s†h®ìÝÖ¬idñ€Yš?¬P¨¹c€6}Ý  ÏSÁ±–瑇qíÑÚº¿±yFA©ý]¸s‹A ob­§&€‰ÍÙ…±DÀ:G³°“x§$>ƒ•€Ðqåz¸xZcß›|®['"mü|Š)"PÃ%š\1ŒÊ!¸„[Ôü1Y *Å"ÙÔ2UÁz„ˆÿóÕUÓ•6œ…8T^Hp?¬vC³ ¢ÌÞ ˆÐ+%>w÷O¸ dp-­T‰lÈÙp?;S=µ” g-ÞY,y×±Ê.ñÆb{Îû¦—/jçÆ‚ÓÉ"°^àTc M”‰–L}j#zt·Z_°|Z6æjÃSóX5 ª=±ÝOˆî…¸õú"_Ï¿3~­Tƒ ý½ÆeËN6|ñC/©Üâý]ì5×g‰êið§ÔýI"t|MQj"ÀÅÛf7¼ï‡ã4M–lþåö–îK6g)‰*4ßD}0Gb°bù/è¨êo€Ö®÷tÁŽ…áPé;ŒŸ”îw_”4Ö’Õ™Š#Ťž…6½Ea;üþ_€`àÜkÆj»;‘c LóŠÄwgíƒmx”ÑFi"¦ŠxÿÀn~°ò¬=%¹ß¡žœ©jYÑ÷­eGŒdL‡ðûwX´v…a%ù ‡^£*Z Òø^l¯gÁÒÁÉ*Å–qïô™‚xsvb6 ßPƒÍ|]/Å©¯ÑàqäjSI{Ò€¨õ_]Ms^(ÈìIÛ÷®EÜ•YÌéâlê®PR|211¶'  ã7 ¾¥ëçcª=¢BE:Ÿ->[Ïk¨…1;éshÄ­mrÇ™ÚãÄ|7*«™¼:© Åï!/ðÒðÖ§ngÖÖʯÅ/›`»ýŽWÎ ¢¼ ãÈ5‚Å” ~á¢vµv¹I¹uüáùÈAôxºÙØ‹&¬V‡sŠšÓã9´·ˆòîæ°á¶N°ÑZ4ç·ÚT{þ¶³3 Qþ–¦üYy]ÈÌÆõß“~ð]›çö·Ò¶–9?kôãÉTü¼Z‰Ÿbœ6ó0×q½ <Âe¥·Ÿ§EM5­MoÂÄ ÄÚ£¥‹B}Ä"܇l‰ùÓs‡VYƒŸ²Ùê›cŠ| 4óC+htq#òF´ü”÷©k½uòZ¦À¯…wdý0»’;‘é1¥,±x ŒÞä¢!üí¡TärnIâõ_û+e¾½ÿ¶›ÐyÔ——nÁÏô$Ù\%Q&ß‹:1° ¢4<„O ãsE'ÛíèItÉŠ Ù;KÓ%Ày5Ê_DhØ<´U -ÄÑ\¿´Øçj9?V!WÍña0#iJ˜[ïÈþ ²8DRkÐ ÕèÉ0Ì¥%AÆ¥T£:Gž%Ü#ÎoݧX¬Zh*~¶gF OÜ98¶Ù¢50-ƒt–kDŠÓ‘èÙŸ³¾iL²«€ˆÿB†oˆšczÓ|L; RAZL€à[ŠÏ‡Vå¢CçSÄÏ7ýwßÙ”‰6•õ]H`ˆ¨ôFÆýË1BD0ÉO¹$A^Àôò ¿—|\×XQ¯¾äº\-ÝbªÁ o'cˆªBÍVô¶siVt¯ªGMÞ~x¾\Ãðš9õzˆ´KÆ„ C[Àù±ùEfÄ%cÒB¹ÊI€}5VÃÝò]³ú£ÔÌpUD82⃿°4¸£N†Kn0ç*^Ì=cš5Ž€j6ïŸ ·cMqe<œ[-ƒ·å®h(òt|TÔº£¸÷3õ¼ž/kô>ð3Á¨Ÿ *„ª„¾ÉZžç=ê …0IŒ÷1'jÍò{†Žñßuò’cñA&û<PKïo…¥EgÅZÄS\®¬ç¹ ë"Bq”j,{e 7—šÇÜÝQ_ZŸ[Ë{ cÒ¹d> »«:ÆÕÙÁ(!t> éaå½yUFF|¢-‹ê$.(<ö1 å9 s{ZH¸/(4‚GcÈÕÂjn ­Ð.‚¡6ñWªWýqy“ï n“NÐzͬ8«/œ.ùJ0ö o"ASö÷)mÃÍÀ Nd¡‰‰[Iu¦w’K>Ì‘%¹“(Y80H RÚ= žÌÐrÄÜGõx/¬J7HÎ ü“ ~·EìJ+¢·•~òFuy‘ÿµÂO@Íó“ .Q³‡µ}Í»ÈFCÜ#ª&6«&ñ.6·‡¯‡À˜"º¹f|ô´Z‚€]ï:•·zQæï‘»xõ3MãZnwÂæL%¹_¯^ÛØ À䳯ipæDd'•G Çáë FÊO°‹ß{ž”%öIkžº”Nb{Lcž¿ª]g—ôê>õ)N„”R»4…8¿ß¯ Ù˜ ›ò(A$LNàÌò\tmŸ¥äZÞ_Ëd;`L¢AÔ\©yÃoh¹È´Þ+HH¼?©µv}6Â>^I‘1ë§¹³·û]Ñ_Ò䫱$1iDžJµ˜^!5”§2luªyc9åw«J0IT~¢;cÂ^IŠñ—_3輿‘*±áÏ;)W©Š¸™¢3ÓUŒOº¼Z¼dÈó쉋y"K¨vIÔK}¹¾=7b"+ÈmpŽG#fëkËhhqá;{”È3=†´¶–o½Üàl;ãöʺŽL¡p Ôm%`ÊO‹Wòå`[%}mÙuJt€J·òس‹ÿC±âº› ðä9Æ]!s,sG|.»ûË5xùCÞ© SáöãYã¥ñô}Ry¢+XÄd¸Ñ‘áÊÊño_mȆ:Üîõ¹ H…Ø™ oiŒàxåêÀ•›b¿d5¡†Iâ“S®v¹:}õhwÌ/Áv9S(Ý~I“|£OÌéÒXs£÷8#ÉŠææV¢±Àl¨¯Áde”¸ÈË“L=d¯Ä÷}yêâ+Ш|¯*”øF% ‹^[q˜í„vIÇúZ>²õ‘?CçAV¸–jŠ@ÁúBËæÑsƒbømÛh˜qœ¸ùMu³Ú@0²‡Ðò¥î½2kZ±û:R³Îª¾®€‹´ÒM‘‰ Œ_›ò6yÂÌGc¿ÖY›f÷8àÙÒÜ-?áQ‘|އþPk°Û•Þ(á3tz¶àÂË~šíM¹å9Øh6[&É¢Ø¨í© :"Ým(A r•yk+­}ˆ¾RÂŒîÒNdõþõÛÕ}êÀª+¯þ̵©ÊtGæÈ r‚WEþàèP3*°s¥öá Z9¡Þb‰ÿ;¬4j7%PpXœ«P. E‰ä‹–r )û,J#Ý¡|Xú”…2äm!:Q·¨o¨ôÑ{¨õ| »o,TÉlï¼z•‹¯oI,Ù\„Li4ñêÿKcç ŽÌ/pMYvE‹«i·®iž=>¶—¬Òz(¸S!§LÇÀ:ô¡O ÆÌ<©YM¬ VH€ÑâÂÝIÙøØ¶qA&kºúê_³fDáLª pÀ&…>Ž{7ÄPyÐÈX§m“u’_‚Évã» /7FFb³šé.[PN©¦-O¤DÅ µîä8¼”ý ªërXÃÅôTyL$3•ÁÏÅz÷Ò’MS3\ê €÷0K3º¨ó´äÙÓWsñgž¿¤› žv¨‡`IÐ$<¼«T5ëùM‡ý"Ùà³P_ÁŒ¶¥&ï…ý:h¸² !–Ã42ù<]R#WÏo_° #Y1´…~û«¡BºÍ‹vÿD,l'ˆÐ"\¬ßÕåC@´0íÖ¦+= Ž·‚FÝOëó\Ë[ËE)%>ä…“U‘êr³½~_—]BÈ„½ ¿OÚ^qN¦O³~²Ƴêyk_P»TÅ wj4ò²'Ó“¨eL,¼ªˆÌܱyÞ—Ý/‚8l»sE€-âV÷¦n׊Àë‡å/z0á…¼Ñ.¤\ј)ÆŽ°gQ9â¼Ö¾äTK[ðáÐBåÅÝ£å,ñ»æùŒŒsù­[ nÔH^äEÍ)Ñæ5ï¹OÒxdf®,UéÝoœ…²fºpð?yÚ1dläõ ¿Òý²gQzÂÙ¢ ]8œ–¢µN'Ÿ»°Ò/½8ÎáueÀZâybèõúà߫֯WûÊ¥#Ë?1W&×±!d¾»)äDKH±ÈÜ¡•)ˆ _ˆ@ήÿÚ©f•6ÚõGÔCcv—8y³Þøþ ª½ð6?õsnÓéa ámFˆÔÂf OL]Æ^l ib’Žgž0 |–(:Ô0õ[Ùy¹l[ j"?„©rW™£ ¾ON+Mg×›>¬ñ€¹Xè†S+D§r)¬\üŸÞ`(©[¼ÖI ÜœÈü•!íI’šDãÊËë6X/ºÖ‰6Å×[ßMçö~–hªjO\L¬§A€-üPm Ümm·$YŽw=Ø FD s3˜ý+;U¹ƒTš+ÖÏG ã~ëB› s‡†?zfÑ3觪¦¤Y6•Hë)ÃÜýª-pS0G2:Nþ¸¾Áv;KEEÊ;żA£É¹(A˜žŽwB³s?85ŽûU¶W­ûHÒtþ£®†­T¥xö;ˆŽ"qÇæÆí1¢¸Î°\R®šÌᇜ¤ÍÐl.¾¤§3çh׿:©Bæ¾HB³É³Žs¨ûW!oÑŽ¼wçjãÚ­¤”—Y R*h_nœßð—¼LºïõVJôO€[@4ºNê ; wx°©“]C41SÔFÊ*2pëtaÂi®&\š‡l™4ÐVËÞ í✠ƒ4].#ÜGÍ“ )@Vd ž·•¤Â‚¹cí$ù€ˆhÞy‡Œz^ rùS\àýëò2Ò§Š°¾Xlˆª*ÔéÜ%zÝTl˜ú ®jè>þWŽ?Y–°+Ukš`Ò¹+è̬{„d+‘lQ{÷ì'¤µˆö<'ãN §â†Žz=iß |:öìXy¢ûœÈ_BÎaC攉å6_v½Óæ(tÝ×')Ü™öMG ËM6–ÔnQcGgðU¢‚à>„*,¶A5XAú†›eï1yÞtq`›w‰ízà z×1 Gn€õÌã‡þÒœÞãX®?ø²Á%Îõo6ÈéX 9.ìéÜ«zQR„~¾2~9TCŸ‘ÊZ[dýÐö‰áu6êIkXàò„_>ê¼Ç·:Û½Š×G‹jÑ’«Î‡u^o¸O OÆ‚¥"?TsçýÿUDƒ›«1+œ‹ WŽ$?wŠg´ÆöYÀÀH¨ Ù4ðC¹ržB_R¥?ÍÿYø9ÃŽÊÀ®2H*v3i$ÇŒw8up'i}ªë(ø  ¦Ñy¿Ñ0¬‰£!±rcÈ=ÿš×F8¤GpéïuØQ½Ô£èÿDk6b"Qmždcõ扪¸S.ÈÕ‰åúŠ õ¿‚B®¯P‹Ïµðs}·ÛÓe}ˆo뺃cÜíÉÇ„*lÌL6¶Ç cr”GÖB¬Npœ)Éû©‚ÿ=—)s A˜¤2ÁdÅmŒDB¥4Í-"'¸8Îç(žˆs›»¹b© ¤݇µÒÖÖïûÖèý²¥K[ÍY*‡·qÜ62‰ä8™Ò˜Ù'^Ybj:†5 Úȃú¬Òð£¢Þ <û+ºñlT¨àÕ21¾„gRR#EñÄ fÛ§Àr¾ˆ’ÆîÆ’TlVµ]I¼/êvYeIß´CErqüçÈ«pWó)­ü:îàDѺ`@Ù|Ÿ:é~¬*Ò^ ˜'š¨ÕEh¤š2Ó}’`ϺeE¿¤‹XÌiÿŠKŸù«P‹›c‘ìcv«¬³ èà7ä B€'&¦‰Ò ܳçó-ØêE‹ É ©·@:?FÖ-ìÆ&W›£j–Ym…®´•­)É•J?þH’·ô t$( XösΠ0ÝMÙ­áB(?QÇH²©†¢£ú<½mIžÔsÆ â ±Þíôm  ã@æ½RÆâ©`&µW?dÓÉq-fxŽî` Ó&¯©§ž1ª±kQ ¹¨¾ úEše¼@ß)@‹r:ÆØ5,Éÿ[PŸn‹ò#Ѝƒ\ßK, â‚å-È‘íUe™a†BFœÖ ÇÄEKVÑÖÊÒ"ò·„ä‚/SK-=fC`ã´Õ¦—Óˆ„S}J f³}Ò#Œ»ION¯»n­Æ€6¥$w¼³\ð'}¤&Õ ­.k€|!¯Â'ñ·1Êü=.wäòÈ òrPr‡ Ø9ÞmYEå£(ÎJÅ¥l…A¥Ñ$±ZwL¶â`M•Ø£u¸Q’§Õ$uƒb5A’f 8©kÛ DŸ ÐhÝžkŠÕUG>á—†ŠúyåUz{[êäÑÙ'À¸áÙÄa@“@ã‹1%­ÎÇ«L«)—Åñß–¬Œ6‘O^È‘c=Â"‚•¿Ãñ-Qp|¢™8’ÌL¼§ýõøº8¼ÝVNqt]q<¹Žþ^Ú¸¾Û#øI÷–Øm­)Eàç¶œlNÛø¼ØÝ-€aQ T sv"„ˆ~Ëó–îÂÃpz,ÃfÐ1%ìÛ¦8]"§V·N€©ƒzF‰fÅqLã\Y”±Lh¤÷£ŒKFoÈz—¸œíß[B÷§¾ÀwÚ¼±ÉQ"YΦqÞÔj$ÿðõ|¿ÕÍðÂ'5W£v`âT¥—/Ö¢UA%a¹>Â>ù‹JžÆÂª^ÿhª©Pâøþ#*!”rÛ/ÁÖâ¾ò 0bљɊ¿­C¡P!‰Þžûª^iו.4‡u–˜×²cIµ`Uåm1ìEÌÏ…+»C_ÂýМ—ÌR ó“Û»LWI”+zYìÐ!³†Ó1ÿsãöãMjjú O.nõEžœtÎøMæ&¦¡KtEËCÝ'‚ãć8®ä+ óJj 3µ—„Ø\¥í¾×UB¼Q) ð¨a17ƒ+)¶†BI.b\žndÒnKwàJ©hÂÆ6!ubÍæÍ½¬LAìæ z=%9Sq¶b×c”Þgw—ã¾G|åáߪ¦€Žë0ã¾#0œ*ñô8…¾ßÙñFÔ€0ˆ´'ËÌ,xE‰Ú?x˜ nŠæ3 póùß›¼“¬eâŒ%ÒÛîE!öNÎÅÈhp9 Ô5göqýaØ.Ý,1d!Z‹þÔü,BŽ>ÞØ3 –©¸$=™?áé_…÷p+êÐCAÝì¿™v÷yÌß.À‡‘Îý”ð.“ÏÈlšÊ$q.²aΫKBÊè0â9_ÎZ®Þ0 tùH®Þ ­ò ³qtÍcÓ_êUÀºnl±~õzžœ:èxô Ó,"B]0wŒ¨ÚOTÚ§„_lƒVœG»ù„OßzZ65Ý$©x0Û§Þû‹VU#vl.}+ÜÐ D_Ù& ªøavu Ù=ìˆhö±$ˆ¢‹GnoìÿïLoÊXÍž2J—ðm T:SâÕvBÂ1,ˆ¼÷uq‰Ì”¼É΂[H¾qf¥¬_½)x°ƒè¶ >9>(ÑÁì”: ñÇÁœ¦‰º*‹Ó k ø®Uõ&ª¼ÏÕ@À-&Ú}¢œ?aïrï!”¤‘¶£€‹¼ŒO¾ýªßsÜwDæÎ):¡,œoEÇÓÁ— š±‡÷£ ¿øAW1ƨÅÒÑPQøÈx¦¹í_:"©}•ƒµ¥+ê3n>&Ó {'ÿnwBƒŸðF î}ñÞ€èrÑ•KXbãó»®4³}1 ÝOO´êbÊ[ЮÇwt9@€C¼‹š7ñŽºMΦÆRÑïØ5²e÷= PøCŸA Sd†öóÖým³jºÐþ½dÍEyCÍòÕõ5ëw´Þ#"Ád—7|Ç>ÐuÇy×'ª?ax+c œã‰ê¡vrD’zQØùÏ\ó?úÎÈòK³-~oÊX~>`7;|ÃX޶4iÝô!J5./U@¼§Ç^ûê\e‰ [™æÕAf´?º'ð“c«f –ko ñnåq^Lx'†ÃÞx¨ÿ‹¿®ÙR=Mî*ó‰ÍÜ-¢ ÆÝSÃûaõý}âêE 9sº\cÊ.°¸¬TÙ?+Ýn>ø¹Û-ú‰J¼¨\ោ@»Û©wdš& ¸ø&Å#Vˆnökw‡+µ$ô“QïÛ«š£á óÿÊ‚'ŒAÓÉÉsF"¦v—q檘BHZ(GR}딜›¨­ ð{ac“{Jk0§9](ß°þH½·‹–i‹`Ï||ââ{¥«¬&½ÑR«±Ð[Ÿ7çÉÿ@¼\žóšž^Z YLà`ðû°LÅÊêDÂRÍçIöÛÙrN­FK™÷&(jGìGö™³ˆ¦¯\šE=W®b®…-¬ggh›ÅI¬ÜÍ…é«c)ç)vëk¹<ÜfÆ´NH>Ö…r ÈÏ/’í®*‹2w´B üszkŠZº% ?ê)fÿWx”34ü;Ê!Àô¸ƒ“ÓC±Þœr1y=82lÑÚ¯™q¶¸aw»4Êà2ã/*Ç€Îê1i78’Ñ¡‘r7x£wÄÅ{8ƒU´ýß è>N‡?„OÇÓ-x ^ðÙ$zõ­ƒÖ(VF d,+E»œ©à5xv‰SBÒnIPµÍ춨ꜿlùüséÏ´ÔÖD¿|´Õe¬|÷k& b³fôI“p'' ¡èÒ2–úï·m™ õ¥ù“š)û‚Ë+¬K!Ÿ¹ðM€B«kÛPã‘Ì9(Ã6¯žIâœÅó522êî¸O±›£ÛdâÅ;?wM”úËGÚÔA¡Ì^d¶Üàß+0:ÇßÎâao@z?d.{•[}~vpT¶¶póõïö´"ÖAžˆÉa>‡•DZ®°}÷ÅT]QÊ ÀNEµÜ®Ìq;Ræ.‘lQw0š—Çqãø”&^Ž‹¾x€Ít÷ÛX×\¥í™(DßIøÚ‡«=€  y}ñ:®A0¹S ¤¹á0ÄvkMß1¡Ã¶Z¾šUˆßqâ|¨k2>²UDh¹0Ï µh%ß4 ÄRå3m¼*qaõ·ÞAÞ1» f®JPëÀ¶vº‰Õȳ¾øc^±ÌHøªE…#Lû4;ïýˆ Iÿ^Þ%VXFkç£ÇäˆÓôƃ kÜÔ ÿyµƒ F¼ÄˆjÅÎtÀ§i ¨MŠê~^UÞ÷7/ØúÊZ(ó8e¾e“œÐÒU_+Yvî9›«Óªn²FÇ0‚·Ú%† ظQµH@Œ–Y>u’4»Ä;•ìi/âªr%ÃjoÄp2Dˆ=2}&ðçµôD¢cù«púin\íª­Uc2â÷)N0@À2X×îmL³Œ­MN÷þÜÝ©,9C·0T¸Øïµ¹CEðщŒë¢:ó éÝ·Xv×R[uAaYöù3á|gúWµoè÷\Ös¢ÿ&#âáz®ª¤½–2òï,Ä ¬ì@žù º—+ÐèOålª²püîÁUæ³Ã“mr óm·j¡/¥kÏ<üùÖ‘Çd`¡&–G"Ñ׌¹ëä£ —,ƱÞЛÚS…ëT_…^KD•Œ²%¸Ÿ›õÀ›0¿} ó9˜ãá×ñxÒ.Ò¶@»°6)nŽ÷ÒÎ æù‡$q¥Õ‹Ò(ÎFcúÍ— í;@AâŠ~NˆæŽ Ä&¢ó´&×ÕÀ€"µÑ1uýWJãr•Ó5šKÄ»‰¹*kSЯXwããþÙZŒ#z•ŽW . •ÖòÔÀÈŠÌçã`34ït_¨â«TU?94ˆ`°7¿¬­$IdxΖƒ’Ó…˜ÚureÚðwëMÒ³Ö£UÁ=@°øÊÿ±š‘ʽ|eª#ñè„‹ ±I©cf̸#ëêÓYÄc1®ãŒjÆûç“HTpƒïÄ…hÚ‰÷V~{ÜqîxîþÔfl nMI­… ‘ž!ºç ¼wTJÉãè0‚i±¸/H_ÐO°ýå¼ 1e¡ÈOM?Áœvg|Ø 6æ g7ëÀƒÃF:{xŸ?Ø Ví’•’ ìœZ޼«VÞ¸‡½a;Ú¬CÒÅ„WtÁb,Ö¨®c€ZAxã@ìîÀW¿I½k2pÎÅÕ&ZðRÐCQtÞi08û¢ilˆ \ÔRŒ®¼QbÄ—”’>PCšÓ¿…È ¼I' { µh&7ÖR°Nå˜e©²XáúReýáL£K{µ“-ƒÊ*Þžg?j–/¿"7‘Ô<{H;™½ãõ@“ÚÐ1~V]¢E‰ùoü\Y1«¬ &¡ïžj?±³Hµƒ:q³ªB5¢{ïJéÜØ¿õ8x½h–iœØÏ¬úTN´È„FIFÃäÐQ|Eì¾D%ù[šQc]Þ8¢úcý߀øµìü*"-NÇúÏ`úTœª{ì"ÐDzB_Râ"É€»¨QÚPq· ãÊ@«CWöxd¢L²û¥Wò_ë?nf3¹žXÚÓ uSÝìdÓÚ'bþ/@÷ä¢ñC[E•áûú[mÝý êzè:Ô »°°µ¢¥:lJ­ù¤_OFõŠ<¸ÌI·Vǽõ^±Ã„ЀpI—ƒPÅ=±¡x£6Ñ$–Õ„{’þ%Ç99·ª$\u–çNR©±ƒ±‡£Î¦¨a?¡ Á~ªVšu߇€¦È¸ìrgîÓü@@c½{Û#8¬[9Ã<߀öfš]%)ÿY[tÿ vü|ÂÒ€»ý¬\Ñ6YÙ¨ÛÔr+ÿ´vÚqzᎿ¨hJi\TmÂÞ¦E01óŸï᳦šäô^ÈMñdh ¿ƒøolÁJ-ïÉB€å…{Æ#„}=fò: ø3~¯­2iÀd#¥&_UÒü];ªGæÀŠR»x6ø©z˜–8£$Çê·‚EÈå-/6@ˆú¾Aß­&Jãó¤B™–ìS ,2&‹Œ­ ‰þê_TT̈D[ôÐ5€(½mn£Æ÷p 2N6kvxUñ=Õ$ˆýún^Ñ¥çåi3YFÇœ2J¾t¢J«çÒ³m#=@ù$ÜXÎâ&Õ;÷ð5dÒǯŸýY­Ç,ÒskV—ÛðïÈ:¥½;ÿ¤Î‰¸óÙÐ}¢ à×eÐ=—k½r=Ï%Ú¶=]£KçÊ4~ Ö˜áW¦¯Úõ>P>‘óý^Q¥÷_°E¶ÙÂîwT¢CDnQc×[ʹ[Oޯ˅V Ñv5fÆzK8 +Fe©CûJ¢ 6ôã„ ½B|«‡®wnqˆkƒ„~ŸC’ѹ;Žì¬~S“'scÍŸàAYvoB]© lŸ+ ËûôÖ‘º*¬&òÉ`@»Dµ>#ÀþZãG3þLÈõÞ¡ª¤ Ìy»-¹ì_eÖÂì¯d÷q!2ó©–Ùm[\òE mÁb›k³e9„}Ñœãy;× ³@»n›½|ò€è~þ˜q€IS ¥ûß’gA:³X"r:ËV'Ù$¹é À„"tÜdþjØâ5)êÕň 6ÍLËʼn—LE/ŸÉ“s^‰lLKƒ`N§º¾È;TC¨ÜÿHâÒ[˜Æ9%\ýgIÏñ#l¸Â‡‹óLh[òP>¸Ëñ‚ñkjÌñ&4­UfúžµLcSøæ¶ž“/ékÜEp0Ü–bÉæÿ(zÌf·š±“fK>\1Ýë"à¢p ä×ëS{$‹}y“Et¿»NA#ó{å˜y튺´¡‚Ê)¥´¬”,õæ£@)Ç/ãqHÞ8|Å^«¤Èqâ5€tŒ™y¯™—w^¾×ƒ$û²+ÄÓ\u¨Î¿ÞË"¦w÷Ló¢9VA8iÛàí}&ÔPý®ôÆdV es‘(0•Õˆ™HGãB²´¦6e»}"ÔpUˆ£Ù7•ÆïE1ŸRêö}Á\žvM›ÑzÚýæ\E«(éÍĬ¦môùr†¼{Ö÷r¥ Ί‰ Ÿ%®WRÑØëb­¢$,ïqåú$Ò!{ÎðæWQô#Ÿq°é/ví5##b¡éÊ¿p°VÞtZ;šzÃÁÃú¶?Œú…aê˜{K¬#yjLîÍg+þt_éÙá&p#¢¨~¢…VÇ¿v|i‚]¨×wÉ”'e#ü1ûv:3?5¦¼½W°lƒÊžÿ ÜÑ9 @Jú¦ÍˆzyÖZ3øÚ p ³cj¢’ø¨Ü±¯l†už6… ]àȱìðunMÜTXÊ:‡Ä[ÙÉí!ëh¥Vg^Ã,—¯þ}RHéë%x5À™5¦äó‡¡óD•ÜvôfM ËÁ*ªix3씣q*¸¹k+ 0çxtµ‚V*Á–Œd:…Tµ_“Ч+õæ>fÛw%c5o¢ÚAìš×‚"CmÔiØšÔìËzØõœ>’UÉíàÝsQ~?¯^ËQ3Ž>Ñ©Y©!^Ú,y]‰ž·úiÔ©w…iIa„Ë"+µ÷’:CuØW­\¨ê3õA98]±P€M€ŸgOŠš%¦´]Z­/fÅ‚ Ó*8ðÀ‹Ú`ˆ<½ÃxN²¸ù´Ñü +:(]GX¾îßð€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €t1lib-5.1.2/Fonts/type1/dcti10.pfb0000644000175000001440000013535210733501627015206 0ustar rmzusers€%!FontType1-1.0: dcti10 1.0(Level-B) % T1FMT, Copyright (c) 1993 Basil K. Malyshev. All rights reserved. 12 dict begin /FontInfo 13 dict dup begin /version (1.0\(Level-B\)) readonly def /Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def /FullName (dcti10) readonly def /FamilyName (dcti10) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -133 def /UnderlineThickness 20 def /CapHeight 683 def /XHeight 430 def /Ascender 694 def /Descender -194 def end readonly def /FontName /dcti10 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /grave put dup 1 /acute put dup 2 /circumflex put dup 3 /tilde put dup 4 /dieresis put dup 5 /hungarumlaut put dup 6 /ring put dup 7 /caron put dup 8 /breve put dup 9 /macron put dup 10 /dotaccent put dup 11 /cedilla put dup 12 /ogonek put dup 13 /quotesinglbase put dup 14 /guilsinglleft put dup 15 /guilsinglright put dup 16 /quotedblleft put dup 17 /quotedblright put dup 18 /quotedblbase put dup 19 /guillemotleft put dup 20 /guillemotright put dup 21 /endash put dup 22 /emdash put dup 23 /compoundwordmark put dup 24 /perthousand put dup 25 /dotlessi put dup 26 /dotlessj put dup 27 /ff put dup 28 /fi put dup 29 /fl put dup 30 /ffi put dup 31 /ffl put dup 32 /visiblespace put dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put dup 127 /hyphen put dup 128 /Abreve put dup 129 /Aogonek put dup 130 /Cacute put dup 131 /Ccaron put dup 132 /Dcaron put dup 133 /Ecaron put dup 134 /Eogonek put dup 135 /Gbreve put dup 136 /Lacute put dup 137 /Lquoteright put dup 138 /Lslash put dup 139 /Nacute put dup 140 /Ncaron put dup 141 /Eng put dup 142 /Ohungarumlaut put dup 143 /Racute put dup 144 /Rcaron put dup 145 /Sacute put dup 146 /Scaron put dup 147 /Scedilla put dup 148 /Tcaron put dup 149 /Tcedilla put dup 150 /Uhungarumlaut put dup 151 /Uring put dup 152 /Ydieresis put dup 153 /Zacute put dup 154 /Zcaron put dup 155 /Zdotaccent put dup 156 /IJ put dup 157 /Idotaccent put dup 158 /dbar put dup 159 /section put dup 160 /abreve put dup 161 /aogonek put dup 162 /cacute put dup 163 /ccaron put dup 164 /dquoteright put dup 165 /ecaron put dup 166 /eogonek put dup 167 /gbreve put dup 168 /lacute put dup 169 /lquoteright put dup 170 /lslash put dup 171 /nacute put dup 172 /ncaron put dup 173 /eng put dup 174 /ohungarumlaut put dup 175 /racute put dup 176 /rcaron put dup 177 /sacute put dup 178 /scaron put dup 179 /scedilla put dup 180 /tquoteright put dup 181 /tcedilla put dup 182 /uhungarumlaut put dup 183 /uring put dup 184 /ydieresis put dup 185 /zacute put dup 186 /zcaron put dup 187 /zdotaccent put dup 188 /ij put dup 189 /exclamdown put dup 190 /questiondown put dup 191 /sterling put dup 192 /Agrave put dup 193 /Aacute put dup 194 /Acircumflex put dup 195 /Atilde put dup 196 /Adieresis put dup 197 /Aring put dup 198 /AE put dup 199 /Ccedilla put dup 200 /Egrave put dup 201 /Eacute put dup 202 /Ecircumflex put dup 203 /Edieresis put dup 204 /Igrave put dup 205 /Iacute put dup 206 /Icircumflex put dup 207 /Idieresis put dup 208 /Eth put dup 209 /Ntilde put dup 210 /Ograve put dup 211 /Oacute put dup 212 /Ocircumflex put dup 213 /Otilde put dup 214 /Odieresis put dup 215 /OE put dup 216 /Oslash put dup 217 /Ugrave put dup 218 /Uacute put dup 219 /Ucircumflex put dup 220 /Udieresis put dup 221 /Yacute put dup 222 /Thorn put dup 223 /Germandbls put dup 224 /agrave put dup 225 /aacute put dup 226 /acircumflex put dup 227 /atilde put dup 228 /adieresis put dup 229 /aring put dup 230 /ae put dup 231 /ccedilla put dup 232 /egrave put dup 233 /eacute put dup 234 /ecircumflex put dup 235 /edieresis put dup 236 /igrave put dup 237 /iacute put dup 238 /icircumflex put dup 239 /idieresis put dup 240 /eth put dup 241 /ntilde put dup 242 /ograve put dup 243 /oacute put dup 244 /ocircumflex put dup 245 /otilde put dup 246 /odieresis put dup 247 /oe put dup 248 /oslash put dup 249 /ugrave put dup 250 /uacute put dup 251 /ucircumflex put dup 252 /udieresis put dup 253 /yacute put dup 254 /thorn put dup 255 /germandbls put readonly def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [-35 -250 1144 913] readonly def /UniqueID 4700722 def /StrokeWidth 0 def currentdict end currentfile eexec €°¡±Ôc, öøÔâþ³×Âû-iìœ ï÷Ju¤¤öï§S©°E²!¶Æ¹'hŒÉúõ¹Û`+#),ËÈÖ«JÈ&ãÌÏ•—mYÕ¯ ÿÈþkÂôÒ·¿'\›Ö)I²´^Í  4"L±°«~D`”¨X_˜O>IÀtcÿî#4¡FpOµA Z®ÅJ\.±{—T˜/NÊÀ ëû’ÑìmËYHƒŠ,ó͸;£Áo0 ¾àWõb,H AmÈý¢í»õü>oaÿ':· ²¶ºèd˜-ê¥ †A±A j…C¸JI½'OX›Æ+)úZ`b„š!jO“êý×bØϨ+-EMòïw»Ø+Eld?,­£+ƒ”Ë­4y[në*&]ƒª˜ZÖ¥ÔΓòˆ`Ž´Ò6%áº1Ì[B|uv×cÉ<`~AÚ΢~Q·–¨í§¯>êtAg)I@›f3_ÍX^ŸŸ˜LÜ™¯í^z ¬ Êf„fÖðƒ¸X'`1©2@g€ ÔÍ"0P@OaÆiØ„Djÿ0F=ÕRbpåÿkæf`Y‚ã·ƒëgi)¾˜jsõ¤o€ø¥ÑOœL†oÚ ”ãÓ1x?f)ÄË¥Wl+R‡3™âÝyû¹Øí†pÆÚºzÕv¥P@*†+‘³(¿(ž ²Íy€%S®½¶÷î*zaÏRað0¼Ï‰í`Y™LÂ…Š™™­œÀÆö î:òáúWå'o¬@û„•X-‹‘8ÔôD,3•ß>wß(Ò=«ˆ?vÞÐáˆ4Q¯€åfçS¤f¦åJÛc^y K³Þñ–÷š¥[uvÈãÂï*Ë=~€5|3Òò Mµç/"ÍtsEÔûŲª5YSÃÐwÙSÐ_É[苳’•‹-l̪(Üz«Iao@ýñä‘fœï:ÈÉ3 Õí#åz Ö¨,;E}¯ð¢ë,v¶ßö¢a§|!Ù71ˆw"çõLŒô óÛ\×#‘Xä#jd¹ñ$‡NF;-æëª\#âwÇû-P6B>„ ìUèiHˆüäØRÜ«å¸ÉhdaïýŽ”Ùdð[%ôåI,3›»x£ …Ïkk*¤×y]¶·M?”"À^q0Ô$ ‡é,7×›W«`ùX‹õ߻ѻË~cž ýMÞJ¬Èô‘¯MÁãÕ/¢y÷è‘äƒýd¬® —îÏ—¯FsÚoìø”=ÕÅîåýýV§Û;]ë(; Ž¬@¹ˆ,¥ë-(œÒƒ\‰ cÉã‚‘öžPWæ? ¦üš›Ý ‘–q©'w™ë¹xs(Ï%÷ȶc©7zî©•¦3mÖ­©êfµÛUsD$]å[ͼ Æ?ƒr䕎 û)yd¿Ù©g| °†òq*Zµ/)¡‘ù¸Ò@Ïü–>&÷SÞÿOÂÊ~0Þ'g¦Ia¹×`³uæ$ù|7µXxÄuöìO˜ 5O:Ï%o¢lh#\µ))†¾qÁˆ5Y–ŸK¬šÂÝÇßLòƒÔ„—æ]”6pŒô) }˜ÿ_OSÉC*±dVÂ/6u»o G’(Fãïó´ ßÆ‚H³°r11!ÁU­¬¹!&06°-†à»¤$ùÎDf0v¨½¡£t³R¼véeƑӗgE„ð'ú¥ß^Ò5𙯛æY¨&pÿÆrÎà•×`‘B Û.æÈÇË<¨â4 bz>똢ËAÊØKVïܦñ~í èŒÈ¥PÂÝÁðÕA~4ŽºšË¼Û#Õ¢)QìõDÃ2§@F‡Oª:o†Fœë½ŒGÿŽ«õêÁÐÄñ0Ì“?õ$DuBèS[:Ä›¢ˆ u†0Ù î zUä±méýE£ŠŒÂHçË ¨ÇT<ÿÊVEI|FÈPœ~Ì_†Õ6¿Êµ„QÕÇæ9”¤´¯Aw2ZÉ4[B@àð'®íq¸`+$¸¦æ7déKü¹ÑŠ’Ó÷6â´¤Û0¡3s3Ùïk@ÏÃÝÔ¿Z™je6»Å®‚åEÜ"Ä$¯§ˆÚŒz¤%ø9÷ô÷®oJñO·Ò[Ò|Ë©ÿd À£¤ëÕ ¶ËﶆÀ3Úó“ékÜ] ™Éùzã, †!Jm†»w0ù¶8L…ýŠûsoYÏý³‚”¢JùÙØº¹ø³Ëâ1A-(ñ=Í€U°9ƒ„M0ô5ùOõÓfgñ%uî'ï2™$ð½¹Ml¨P=¿Ãñz‚4,gî¶ÛÝÖ§“ˆªõQ«žïø6¤Þ32ÖešÕ¶4rùëü⢹ßzS»bÄ…RÏaÉ+•Op\’ÎmÏ:gs'Ý5/s€ŠÓB…dÁ1bÑ3†>°¸ºÀç·³Ëì]$©é@úOš›ò×þþÑÌ—zÎE’y2L|ÃjZëS„m4½=—»•ùžÚŒS¸ Þ˽²LŽ]a’ûüÎî^$š_)þ†ÝÑ^ú †Ðø=¿T‹PŠñ;ZZM–”á6Áe“ßS’è<짌ٮTˆÝ|}4Ұǯô)ÜyW’kF‰ …ž*ýeŽ¢R™™æAb)²Ew”sÞê¼×š¯Wô8†qûHQ¬ª5g™-Œ‘¬{V8‡*É×@YÃŽ|/Dõò'lW¿)MH³› V”DÒª!°zpÔÜ 6P¤­:ä)Xkeu冀v°9œ‘¸çg<õKª¶;™›p8ý°åG„\Ëq˜–¿Ä¾A«ÇO ‘H“‚E½þ³ŽDÚbÞu}øIV¬u!™ºmbî@KAEjñ©qPºÞëZ¦žÌXà÷Ž }âÜåNæ[PRrï¯ûŸu@¾ÿ\ ŒQåpóÆ?7à ‹= ­’±ùl_ÎÔa)%÷UãÛ°„Ý·i)SòªqÒνˆ"ÐZ ¶íÔÒL„žÏ+«-þä) <úØnû)ÈQsP°Y ¾-dß¾úüK‰˜Ø?[Àxþ­¡ë!Ge'q2Øü~î.¥R¢ùaà- ΃`¬í<yw£bg "bG Šð飭9¯>¬')qlBð8‚üÙó´°È®‰éwˆÔ–´mI5RrÏ“"È7«0ç’¸xå嶯õ’M×ÕéÐR¤Àk§`|å>nÛ­êgùFÖ)¼=Þ±*!(Ò;çZYP'Œu¥û'•S¬YûË ëä²±A¼Ü¹wCì2“syߟF£8~â›x=ƒIz„*áì~'zúLÏFHQP2èû;+Ã@‡} —,ék…£QPôÒÖÄ w8΄’A¡Ty‚¶aL8“(á2ª¹§RëóaBùF-Ñþ§´¦C#ôãºkB/?VbLãv”/s¾,‡!”H…«Ùfƒ}‚™¨áæÇð ñcBÖÂÛ0Ÿ+,ÙsvMÓeþx:òM§°|ùŸÙì5ΡŒ#BèÌY¾ž,:éú²GÍW"Ú@êØ}ÞªPæk{ÜŽÒOo0Ô©{¨¬ý¡aæ °2WtSÖìC4,G´HФ?Új&wqüiæØ Ž)™†W H0A1]– @49ÈÐ!B)•÷3èœ,O ·ßTdÛiN¡ô©¸üËeþߦu„)Ù!©Ý Í8ÐSNë—EAUy˺¾±#ãĽÀâ¥ßµÏAÕQP©œò}–pÊ”;Ñ·¼·ä´òñ(æ0A…Þ‹ Ù’ØXÐPGî™4f«U@÷<²âW‰ç‡ü·`Éw³Arº2y“@&¡ÄÔœtåÈó½b'zk½Ýò"JiGµ7Ûû%ãê1ÔÆDÄ W7 Èa¯Îd‡˜,„¯2§ZTÿþhÔÃsüs½š±5±¨U©ÚóétƒC>«ÆF‘Û/©²#Í !a®p/ùá–Ü~«³Ç¦l@ñ£àŠB –ϧy1:pä]Ä¥ì¢ã\ãð„ì¬Wi!k[Ö¢Ã÷áéÝ"àAø–@æžbÖ¶Ñ4V¿]"îZFÜÏè°J…x¯Aê›Î þâø¸±« ßèæö=ˆÓpÊoâ¡ ÷/ï:—YߊÃLq¾Ñ¾Z3·*ÏÄüÒýmY__>³¬œ£æ`e8n<1ƒ38.³¹©‰TŠNœ<DýùHèbVf.®}§|8»?§[ˆ9ËÀ·*Ø$•Íò¥¡´íPñþaæ`@ìaÒM¸±óÇÚ6@¤`Ôÿ,Ü”›ãšÀ^’ÇX-z2¾/¯–Úèx]Á§ðY¸"WSŸ4ª•‡o~»ç—LÈlú_kŽçÊç€4R¹ÏæHE|µïŸ'§’wÓGôÞJ@úþ(<*…G…LÅÓ6’–1#1ß±ÅÍÖÖª/àÔˆ•f؈ùªMÅèéÉšD:ë¾Aç´àâŒÞ¬$w'H¶@x0¦ssõzI2kŽü}¨u›™×wßV•Ÿ ÝaÀó> þ–ÈÐ.ä>€àÏt-51û—S°­kŸœ_x9[k‹ OŸ‚o-—”jRS>lÐî ^D<õ# NoâÒ'/aK¹ÛB¨qBñ9Eõ¹T%„ŸÖsŠ­wýŸwÌNèU‰xÔ6í"Þàf)Ÿ Ú¯˜0Ñ d¾l3ʹæ1_ôoZ³µ/<ƒƒ ¼2ï÷ƒCÝäXe4Æ/‚I]yESËŽGøo´¿8v·ð“RÑbË2ž‹8…GÕšK·úIãÈÿ£‰Ï8ÛIOB‚ç?Ûõ…Iñš%æd”H­áMµº’Ó7‹*G [ÇRlÜÖ]£=HrªÍJ :ŸC×5 èˆ$ ÛÈj—ë¼·WgIÀ÷òþ4ÄM¼C6¾IYhƒ¤¢0ÐÆ^Þ–²†ÑŒÝ`nQ\9ûv›Õã Oìq¨ÄjÄáæ1´™CuýŹ€#öïöƬ\¦s…ƒv‡iyÎ/ @„^b3úi¸ð·t‡RccwÚÅàÊJÿè™etAÈöÏäA+ñÂþdùvÄ œ1‹!ëÐje]­Yejp/ò4ZÒ£q±Ä OöÊךÞC†s­G{½Tël'ü6 °Ø*Q4•y¸YðWþq*…2ò•þÖ  2X=<Šp™,Bb‹è¡ŒƒtæmP}TbÂv•`~FTøå¬_¦F+—’–·†pêaòC c*5s†Löc˜C§äNEÜ´¶óÅö‡¨ c*ˆ4؟õ¨©¶É‘³ÙGˆ†): >A4Ðı‹Â·X[¾ÀáTyz8ëÝ0V9‚E òÜ÷u)î¥æ‹aóìTLZÖ¢†³ûyäÄð¿îóO¤Àê­\m-Šm«äw Vp«pD-7èƒCË'mžì¡#8ŽÅ®\RÓÃt°6޼#` °‘2p#CÄo–ÝÒ$æ,¤ˆ˜ÝéÝKpþe—g´›¦˜WË•œuZ[Ñ^š´êKÃeK'6çþƒ‘/P®øåÝsvé¶.Ï2CÁ A|¦ú–¼> ®–’‰Ïôµ[À»GÝçÛìÚ¢:ô;O ±ZýÔƒ}òºÓÁVá‘&èÿ dÔO%¾ì¥‹S1ý¥v;ÓUûƒ2˜vnÎi®1|´.ƒQµŸzGÃM¼6x¥IM)8–«…ŽJã•x{ý×B/KI‚ÅwŽ`.2„D p' ÝY¦=È‚8ÍAŸÃÄØmÎ,IÃ'ùÆ¡4<»i\.À|·«8x]b;VZ‹S/!ñ2t+&ʪÅÉHö¸°Ú~<'± ¤M+Fg;FC¹‰ÏÝ´cn'²<<2W>åàªäe‹ äP¿±·)ñèûV–Ó3¢Ï´cþ½ š. ¥QÌ*ß»\ø¤­V-P-xm2‰ãç`ù¶Fî ¸ÑsóÔr–‚³Tü1 ‘ •Àð}7噯1€¦¡Ë õ¤|€sņ%L¹1RûŠGºÇþXr -;6Ø“\W…f»Rrýc=dÛñpj[X¯™ßlóu¡¢_¶2’›W5Ë×ïŸ*÷öÓX¬7ñŒ ƒ©&æë£Õ^!篵´²žè!;;•·ä‡‹”(ˆ9‚¥%Œ¬@Di=ìü g”-o”O§]ã`Ä%øåÀ"\%t˜ÕHM2^{B¼'‰WÓzÊS€CL¿åv ÖM‡µý¶Â:g|8»°WÚú:íˆVwI«â¹¿17–¿,ÐñfѪ (5z¸ˆT²ïr¹Cä ŸÑB%hó?Îë³’b)N2çuàn æ4åz’#YÓÔuaL›C¤ïo‚ÈÁ0Aׂíø#°¥K< îš.ö 5@É(]˜ÿÁ=Ans |Zä©ÍD÷cAÌ.í‘— š­Æ@X±…@>;ÜaŽÒâ¾r"l4-/H@j¢þV·„ê½éî©õiñóÛï{ݣŚQ'"pQîË:øÇ jC+Œ“ú UqÖ뜂™Ìà&¡¸å¸¼} âÚÞ\¨ŠN© Nà{«qšŽzîŠLÝV~×­ºà}‚Và ÜöìûƒÞ‘ecjésŠÏú7øó I>È6Éý.o6vàBvI)ýŽ$|’PW4åkIžtz.œ»¼þôq+³&$yLyŠ ÄÈÿ†Dü¡/ÁëH¢½ücÙPr! f4½•tuš(uu›ŸA¸ùÚ‡É2%‹&—ŠIc2ý-HHñÄ=|üìK]cÃ9<¡†5 m½¯Ž¹>ð¸¢,\YÛ`/é ìÒ«±ýÁZA·hž€DÁ¸¶ÓÌS ìÏ»¼©#ÑKÿ²‚¡„¯ @~,6ã×`Žæ~s#ëpí_Üb‘æ‘^~ÖÙ²ZÛËH±6ÕšÙîÙg“†ŽêèC¨l¹íî³~–¨þð;Êo@º¾'D«â¾C5û%Á.ùÏ\“Ë<§`ÙWZ |k¦Œkô \‡a aRó)§ £›øãéñyC)¦ZJâØ.:»ˆÐo£Ÿp >²o'x½Ÿá1âEÌ(ku ‚‰K WÓUU}œ¶©vý7)“Ï3“`S}¥ Íç0¹,_£. Šg Ä£XétéúnÍÁúX+R2—e«[»š${{S±áécS%¤æuP«¢_ÜyVd”ëd%¥Ÿm¦Â0% ”`½kDkréK*41Ž ©‘]2 Øúª•?íW/- úJš¡Ý¬q»©† aÕ6\qRó_ 8øÝämêgdÙ´a°àA™c•ðqt¹û~fópÜ…Á/¢éVÆg4=­dB^hÝÎ}S° !7,Å¿öl‚‘LMdÒ\¿wêsÞi^˜¯’y¯¥Çì2Ðkœ†ÙQÙî•dÃZ0€¢IR$?ªÀüÖÓZÛIš6èó¢a1ü\8äüj{†…˜náZå%+°j%¹à2{œõËáaäÑ6b<‰‰‘ÙöÃmZXG=ö0]lQŠØ¯¤Ÿ<ÄAŽ){èÍ J-C_±fÞ b‘Á9×Ëû0 ý7ÄfðAo¿*Û²tÙ«e=2\›”t„fǹ̓Ӭ­Läü{;F IÉÿå@ý|É ‡ÞœRcMZ•{T@J´qÑ(ä%CtG¼Š×gU¼3sy•‰ú‚C Y×HøÈîÿGEÓP«kf9|Ÿú9µž—ª|9ÌŸ¹³êË:K_ ˆÀƃMyE§g䪋 5ÙyCÅq!R)UðB ÌÀšâ㡞kP/£ã)þšÐ&:Al³CëÈ+?”tÖKí©Ÿ»³„¸šKÍÿht¼/h;@°îÉ£SÅ÷¡„0fr¹²¢6šVÍÅNL×'9š‰ó³ü½®Ç™ç†âGjGЉê+Gp¡(íi´r;ƒ±Ç._[¶DóøÑW’QR7¹Âj˜ù ñ.ââØ+†A±T+Í¿ð *JOÞvDàɼ+z‚#ØX(aïu ÂÜÿz­Ècn0»ÕºABs4!º¨·È)…¢/ä{»æÅ’KÉbÿQtÂ’çƒEÏ4Ž$â¢ï÷çñ¼8N~×e{ßuÚÓ¦ÊZÈÖÄGÿíø‚xç‹ÏZÌ$]Vçøß±ep&*B ‚@ªx£+Á»­B[R@kÿrõ˜‡ÌtsÝ>ßé‘;0”³¤12q¨®¶ûغg½›xå¯Û¿ ó³BòÌÖÔö{jûOŹ•œUfâ»h9©;“ýȬk¨Ý®‰|ðñé0Ilè]#“Ed>£œ´h­HVDÛ÷ef6fô€®Ð!*|¨ÓãܪÌÈwý!Îè?}ª‚…RŒÄXª„ë…»,ìú*ò/‚vML.‚Slúôœ“¢y=U"ôµLn =.üûã öçÃí‚Ä mûd¹§NÜ\LDœðHWÒϲpôæÆ<#!–žSœ‡ŽPW¤DÙMEz´PwÌG±èÞ¢¬NW‘'÷>»(KX•-Á£àéÈùqã/'[jWòŠ6ÖøLiC“ô÷sý³*æ-œË£Q ]˜+͹ïî­qõ"3y×"QêL@•TX‡’ ë&ZWE,Ÿ†]Û<ôC;gŠRY”ÚôëâÙŽ$‰;"P¸ WH’5ZÏ•#$™”aCšSÈ=Up,»'«ðG@í]’!†T‘ÌI®IàוFz"…\×)š>޶{zg WSjÜÄ ’­°úëþA¼ñ-Ck&n¨Õáó½A‡oÙ•š’;TH#à 6?ÐøR¼õΘ_ÁŒÑÌO§T¨7á„Tt H,0 `hfLëR°-ʈÏ$¡¡ l0ù²”|µ@£ê"nß3p:“ |sÔFËgCÛIBf¨PÞu!õKœ Ã]õA&B‘’C†XHÿ’‹=JУîy‡ëIxìŠëÌ.4¿@~¯*áY†Öif6¸ xÿh½ d‰ƒD+Ç{€œF–@Ð[ܘb‹»`†ÇCðp6jÙL¤z‹ðÍÉ»»-Ê`!Ê$ñ·ÁSp o¾§²XÉÕÓøž%ˆ+ 8$)‰çƒ¥–BqžÓŽí;þÇüÑ¥ARv—ÝÏÒorﱡk”SuÂY×ONZ>š¥³$ú›Å{kŒ*ËkÃ’'¨"jö$cЊ)™gÍÑR?Øý¨õõ4vðJÊn~k<ôO>[V«IL†—–}a D”¤áPæ$Ŧš]û} ÿþ¿I`¥ t³ â¹â^¦œüíûÜ#Û'µnOóFŸÝªWmPŠð飭9¯çH¸^Àþ æ(äÛ~¡%…Üšå‚ ?„ ”¢*Y«¼‚}ê¸@F¿÷LÞÜ1íê”=áW ¢Óš PïDB-éB-äY—nt\ÃOEšàu!­as[i¦?{ãa£m["ùRƒÞ VÌT‡øKä|Äd¹g‡m—¾9ߌKªTŠÍ•ƒê9^l¦?wg¹›9¡ÁÕìÁIÏø“¨ëgფtŽâeUK} Áå.h ãâìË ¢göc±Þê‹¡r¶ÉBzÊöÀPá>¤ Ô|­o 0î a’µ&IÔ| —µÙèö -ôsϬݒ÷‡³e¬¼F-`ÂP Òm„Åxsã…üYz”dî÷×@ñ#qÕáM¸ ½å¾.ó¸gF4¨;°“¾J„”¡SW{ö®)'>þ(‘%—ÐPð¢ë‰Y”å=ü6C­H Ašv&Ð~$çh’;ñæ£W;ŠCÎMJ]Y|¨\ïæì#ÔçÉí?u¡IéwÝ·æ2ø7×JBB¤bÚHêÆ²¯b+^)RzÝ›!ìUÆÀ™·>ëLø¦™7ç ïõ'Eƒq¨u}õU^H(¼ÜìÑÉì¾ì'ÅŽ?Žö­ÿR[y$áî çÒ—‰‚–QÌ@“¡žÿ”2ìØ‡³BÛ¿„§Î5 "º¨+3¤O ¼¬za\~aìq_ ”ôÂâXV®ô¤IÇ«O†…Ã.Ô /:ro×ðf "½PÜÕ* yåŽ:þÓ¼jjÉy®ðñ`<Ð|9û_õq5É¿J'úÊ>"d*ú¥ÔäNÁºÒخ̨NQB{<êáý6Ó•d5½Búƒí/Oõ=q$†;b©æ11”¼è½¢‘üœÈ‘„¯ûþ•Nú6ò*8 o™ çÏÂùXŸ ’§Híí.@áéaÔªªÂWæx™môàÙ …s qÎ+÷âlÂUþºñäÑ–Ê9w|IÃ+Ã[ÄÑdÌ4ˆ17öUX¤bĶŒÜTvF¶Po‹g<×ßiÈS’¤o$~Ä Æ$f)àY}ಪhF¨ûiš°x,ŠÂª]™Z­¯ßâl½Ÿ)¸TŠo%ŠoˆlômšÃØp >œøÈÑ$Q–”{áÇò1(Þêí%“ÑyL;!ÄöëF;´”Ä–ë¾0 SQñó’-î¼ZQbÍ-Y±~þ2#ïõµ‡t*8öI;½Ø-/“êx¼ÂïåbveâÃp~`Ÿ+Á™ø:êi8S¾‘"ëWû&ïœFAPv•yVà1àþ³Ñû Dëƒí˃V›ù^—á¨é>“;M"0‘HC]˜‘.Â'+Ïs÷ü@Eɪ!õ6…Ö°°?J€ÀŶñi7uëBÅy*=¼nT‹Àן”aF'³Þ)û†¸0»Ê\ƒÃ†§V—€ÍŠüÁìƒç>É[D'L}J½Ê6ŠÀ,ŒšGtÜäÝk·ŽÛ\°{Ç\*j¿Y"«~€þ°ÈÊéÖîâ-^¢]²_‘BÉçQÏTiMâQÄaÊ‚[Iz­ˆ*’`€‡sj®ãÛ|T çµú®¹Ÿ*™i¨4 †Kk$Xœ4n.ÿõ˜(j8Í+‘Q@7'¸;5T’1¢t¼j°Âv@Ië Á(Ï•BVÝMÌM Nº/%Ôë»==†™Ü7h–g g?× ;CŸ»WŠþ}ë°“[¡ÚÕº™Ù¢šµ~W·µiä4Útõ¬Õ«?§tþñCŠ<—iãVx.ÙãÀE«› ‰©ìÑ“TˆÓ¡Q?dúåÈþ<ˆ‡Ò“¬$—ʃ#;ûͽ”|‡r¨ùûC#À¥òÈÁíSq*¢]M-}÷Dœ–_¢oÔqgÚ5è®Î²tONë (…$äK‘4˜D\£œ*é$™M m¬ðÃõ#âYM>Z¯3y2îU˜Ÿ£PÆz:ø!xë˜RÍ[õ®óþ»6äË ¬å?t$že†.0ô& åg©\òR×~–¾gP ¼’ê—FSóMWÐD)Tªµoàq%uD’‰E¸8ݦOº‰t[QݾSÿ=#ÐæÌAìžoÙ—RíÇ\D‚{…Ôÿè’ÂZkŽ›ÃNyIbýEÕÿƬ×ýØÁQB2e³¶¯…gãJa^ƒä›B\“J,^\¥¨.ŒÊd“=¸ ò'‘žÙ?/ ]hp4Lµ`ïøwöHxšÔÒC9íípÂí+];=oÿÔÁáåpP0|ûKÇ×Z“Ñ6QÏÒ¯S Ä;¸þ„-(0¤ñ©¥R"V;¦ÂJÑT¯ý .Ô—ÉK3ü%¶ÖLáP ”Š£[ê(vI+§§ËÛ9p²ò½Ž¯Ûè¨.x"ÅBY ¤bÓ.Ûîó%1²_ÊOa,‚íP§÷|r€ÝÒÝÙ¾ýôj[ÇòîòMúìdñÄ·“• þèòì»):¬Ã­\Y”)2:Uk¡ì‹LN²èùê—À™¾$®Ì 2ø|’ غë›X (ξ֘;~´ìh’ C´r"pëáró ¼w~ª?Ó §<º6ÝƒØø»u‘R§ÜA»%NÚá³U Þ£WºÔM†‹: kÀä=ƒ³ƒójv¾»c¯ 2>®Õpîe‚yJÏÉëG¬îœ-‹ã+ø3œ˜+Í%`Ù+'rœ8{ú˜­(çUÃí6UõÚ;©ð§ 5#%0ëæðp_³ ˆ´&YÏn2¾‰ ÚÂðz6ŸDÜÛpˆáóÜYØ¢Þ÷òß8ç>Âð›á2ï­šüñFÁÐ⫽86’Á¸ÕtTŸºs3·\>wÏ*rõÓ%€<7ÁªÉš½;'Tã¡C£Å)ÕsËbs¿øÎ-ž ËÁìk*4ÚÝÁ¸ã(ÃÜB±WßÔÏMá‚ç÷sp@WgÈGÅ&cŽuL1…•}Wç9|é ù<ÿ³Á1S9¡A[Bk›¢‰çî ×¶„jÌo|œ™ÜùS~áÿ(¬.ˆ«óS<{&Àš–!b¢öÕ»æc}‚*œ8“™üÃÛ¢‘†±¨Æk›ñ Ã-IÉŠïîäÔ€A&I¹>Ý®™z‡*3R,/”¦Êô¤ÉGf>g 'u ¹=ɹ„£vîˆSõº/SK™Ô9›ô†9R[Öý;ï¢+sj~æ ¯$O1ug¬_Ç>z}9-…ºÍ·½äÔa0ZéЈ¦‡Òsîï|š L¹Õ údù»¶!MÜpAó=(òÝYíÝÓú‚êX_*&7Ž-]ÂÜ\üÊ,¶Ü¶÷„‚aÊ)›éÇSù$ËEÎèh-ÏRU¥€¸Gà,~ªÝ¾BDû#©ÛuŽ%Ù.Na¸èD¿Ð{9Áriýäåo‘ÛQ©v@Y—Ùµéœz©jþN2U%êƒûÜÎ 3¤c< s§ªïvÚŸS6s´ÑùQ½*àBgaÐZ­)Ž·é¼#߯PãSýL…6Ûúð’•/óp3&^ðêßç`hC ´T£°ugU1Ç],6ä–Ë*T[ÝÆ\c»D¡Ë7!obywìÀ‘<vüsõŽS:ÒàÜû… ßïóJÎz’‰Ìd·¹_Ï‹Pà»|ç;c”7ç'ôÑc#¬§‰p¬s–Èc²ÃU®…Ýîð¨q‰#›;òs‹=$Ô×7òtȤ¶Toût3Î÷\o1Và·º—¶LµAƒ‡IÍxv}ˆhv”J±¸1Ò1Ãèlöw¨MY2šVÙe¢6ÄÂ=„ù=>m9u‰#ŸYŒÀÜþæ_¯õžj{ª•‹ý„†²åÃrxóÏûÕTefqÒ*·®—ΡöÓ(¦ëtò„Ê}%Ó0Ñ0T’gdN*IÅ7(a­"s»§JÄO[—"—Ô­—?<oaå]³m@™R:øϺ³†k´®%²Ç$;Ð rªŒz)ð÷Ù‚A %^…8”Ýé=~åz³Êä;ç7·ãBÅ t´¹õ¯ªæ«ÄóŽ_è¯À¿(•· µ2ŸÌ-¥£'6¡•O¢®¹Æa2éRm<ïÌAmbèÜ›¾kü¸½¤&jÎæ‘-<û©mŠñðk!Œ·)u¡õ°F¾a´§E?jv-áé®Z"ÔýQ±o¤h,X†=wšî6+Nƒd¤9uƒS¸E„å'ð/åQ ¬j¶À™ÿêI]Z:ý±tÈxÀo$i‰X´Œ¾¹);ÞAsëìdGÝKŽØå<<ÄšoE•ôV‚VS<§ —æ—¾5Ô´gÃaÖÌV‡6ED¢m_…~V¼zÍAaÚ :þj2”:Õ½(Ô™$_€Ã8˜Ý-¸a¼D yÉGž¢#¼¤#© mhyc‰Eê’ö!„½IRÓÔyÜQ' Æœò§]Ç&­„Vǃêï°íô0aXU&>Ä~Ô§o#ÍI÷žÇdëq 9Ñ%É7¬|$+Ì&ÀÆ“OñˆÅ[páî®i.¤²|&ûfxË•7ºò£Gý`#xøÄÊaIàµ:Î;:LHsÌÎë‡cÈ)ÑV7žu‡C±ÝIWAG€¿?TÞ+>zM•Œ_c1øHÞ`±)€XV9àw+ƒiý½´ p« ë÷:yÔBÑ¥†%%„–ͨYf%!á¿Öö-áú,î#rÎq.07 é‘Mzáy¼XóÐxWýŽ<‹àN7ÌÞÅÇðHƒ æ×yR×{%pm¸üf&Æô<ˆÙ1ïfKiÕøÇE䟖©þa’Ê\pµ¢“VµKè 6ºš'¦ýñÚ@ŠÑ|CX3‡éËlÂæíb?bÁƒ3Zé7µ'wÛ£øOÍæ ÂæR:TÇ,¦j7¡%7gu:3~œ£V*ä¬Àº f±È€L²ÃxíøoщRq…¾ôÂëŽ1RÓÄõ(Í%½ïŠÞÈ¼Ï B`²§‘ ÿDÝ=nˆ—°qs{Rù >¶¹tÄ70‡­Ç·,KwYyá™YóÝå9­Ìÿy˜€bÑ I,Pðú›StKu:ƒØ–›SŒû¤ÈåÞt´)ÚS &Y£X8Ñ„‚ì™ì߮ԉþ;RôðÚþhž¤‰²JÿSŽR{¾ê±&É@ìñN¢rÝÉgQ —çZä‘ñxžl¤š2vÌäsñøŸ¬¤ ƒý·Æøö›³˜(‰Ió¬¹zÔ ïÀEz§öK‘x‘ˆ®›p¿jcÕR¶Léç¶™Ÿ|9ë•ç&gBšˆù§§A®)+¨þ ªÿ;²ïý‚´rEZ2žÏ ´@§â:—8*DzÍÞ„“Y>:/j¹œ}øƒ·åŸ¬Ùå!”ØJðÔ©$Áƒ¡Âé™* œï©øG 0óm6ejŸ/ ÊþgÇfƒ1][BOê¼_÷ÇcF¥Ô>’Ú¹? (b²Ìã$ÜXMö­XubyUž{@ƒd»sV}€”Ï-f«ÂÎ-IÑ¥þZ<;ç£|è³Í{ÆC|R\Ñ5T³u<Ÿ+•³“?qP%µI¢NZë¼¹'ûì¯ñZ¢ë—#3ŒÅŸÉ!@t÷¨…àSå϶^+;>íÔŸÅ.ÓØî˜ËZÞ c õ#)%¿ÃÓ? 8Å{D×›ƒÂKö“^<‚Äüãä‚.k_U²=hxÙ-+d„O{pà„+¬ð“lá) ÐìßÞ. š³ižˆ7\ÓÁ„’íc2ÐNUHŸN…W8߯µ}²°}²pªUQp ø? Pu¼Ä_jU xÌåžï°®¥½¸ 1˜{A¡g»êo^öbÊÎÁºÊÓðp ç.Ž3JœÈÁ8 >6˯ÕØ.—R‡V~¿Ä}ÐM¤æO´(¡0xÏGehîÇ¢˜¹†´ËH†-´¶“š9Ø6»úü´ÁeÅèëŃãjs§XÒŠ©°éBåcŠªÙ«^›…ükeôÚ,¶Ú ¢¶šãíî‘\Ñ‘YÐt˜¨C'm»ÍK›{;yh'¹)º5§žäSÔ9ö¸÷ô¯9²‰Öƒe&ß:yMdâû§(ÆÃ%~o˜)—­)'OMgWY&3‘×8Ó1UÃ4q¿²µÝ,ÍìL{Â)Æwhà.ÔµUåøBóáÀHp%ˆ‰<&¿C¶Võ#çEÕ+4L°‡{,gÎq¡æ//›Ýek¡oôÂ…om¸p€@ ’8É[p;v ã/I=­ p¹AqOC£Z¡úYùb>ËOG¾ÀÌÛH± ÚÐ@"hý–¿ 4·3G@èŰuƒÎÇØôÅ\VâåÜOóị¯,Õ>ÒQUúõ!¹ Z oO%úé2F ¶ 6~§6~Èým$"³U`t5׊Jÿ‡¿‡„ u4 ÔÅrgÒÎNŒRÉ'òÅ™h?‰÷X=Éc©ŽEì4[Ë kÙùsŽ:5úì€Ë÷0AÕKæâ/‘_Ͷ’}ˆ—u¦=4†Yodb [[@eÛ]~ˆªÝˆ… V»TÜüo‡ÁZ\f/’|¬ú©._8“î†}ö»‹G¿“KT,Ê£‡pAsÕïêOùkÊÆ0Ú«¾ õünŽfâBGŸM´õ4¦`3GÆ4‚[cì÷BÌTT©Yã=ZЇ¶óêÃèüTÊnÐåIÀXÌŽÇ1IJ–[Û¦PÉ7\‘×D˜®2 zæQD¿´d"}sÜ3pá4”bf3½Ïu豜h5²ßa¤Dü/ |pZ5‰jxñãûn óc¹|l 4ù’c$Z…u ¯óÅ÷ Ê•}NÙÛš Ï™,ÿüJD–Ðh‡iq;!r–ÎM8,Ÿ¿-…J”æ ”A(dÈçï|7)™o½HF+au@¾cGÞ<¸Ì®Œ…T\ņûE§[¶¦»+Á"ÈûQiÉta+ÓO`!Ô·œ)å‡ö$Œ¬pG° j„;¤Ì«Ô¦Ûî EÂe)!èŠlY ØÚ¸ßeʲš~YÝÿœ*iÚ £õða×_ðYù¢ncU¦G &fO–9”Á_´h¼ÉÙNN[Ù^Îó)Œ˜_׬þý×Aª”g:) $ôxäï¿Yø ü…‹8–‰±˜ÞyþÌP‚*bB'ŒôF$ÑVø ÷rWÝgë²&¶"ïŒMí¡'úTŽxiOýQñ€«d—©rÀ\²CšL_ åQ„YtšZØEÚ[Q K¥DöB4¼ÕÏõÅÖQ„˜6¦ÝID×SèàC 6å[Éžö"R Eìã¶U v8 çÀ!3*¹|Åýi#y‡Èd,ô.2ÅClžñ_©_ÍŸ·¶ê:'œ ½-FzkU98ÜD¼¤vú/5AŽ‚\£¬q³õ²Ø«ƒ÷Qô*re_Ëàúeº¿µ‡ü™ ôqM“î•Æß¹$ê™Dûù[~í-s;´eT\͆Ðã†Û|äª ‰²¯U6,Oí®æDþ%R[»CNäf[T™Wë§6Ãa¦þmàŠ©~±a?€cJ¥ˆ/®ÓóÈÝpDFŒçŠb0`ÀCx«¥Î6î0ç{Ó!'ŽIÑx4j.-3Þr9V×wkò°v9&$Pøæ?½¨Å~Ÿ £}j)¬ß9K¦sN%»G¼I¥ß뱩‹11—8 ĦGû°¨~ÀK·Ý<$Z¾»ï¯ïrâR Èéý‘’8{É¢ßqÛßOÛ-1…$Ý¥G£ôL•$ ‹Þ4§;OŽÑ[^iï)Åþpí,ý—öŠ_Õ°LW¹8)kvåN¨ÿü¥e®Œ+œO®2ÎNž”Í£†T­Àôêjý‹Å€ÞŸG@’ˆ†~ëÛl'²Æ¼et±ó«Ü8Ý(hº; Žð2á˜rÐv‹IïMn©I]ŒWÆ-œÅìÊüͲFiÂC+­:–MCJUƒÚøqAMW{<|ö|…,a±yo))}ÈsK+‡ÊtéÞôh+ÁßÛ©¡þò h8^•«lê´ÁÂ-" ×ËG)wÙßUj2ëWuXñôQó:÷â‘Ûg€Klê÷Dcqdž«‡×¾EdØÑL+©ÕTì'N­y‘#7±$Žl¿=¹dã~ç›‰ï ›l$ãyýX£ÓÈ¿àv_™Ã¬…;º ¨óléëÙç9Iì Kå6sS¹ßùõ [c´©Íä"˜n·ÖÀÛ1‹:S^^†qŒ…7ä¢8lLµÒ¯š1ák2ºéÏنɌ‹Ì42㧠–¦€é­éø2“¤s´„K™•6ª1†öÒ&5ÈÉs“컸LÇ!ÄÚ»Aý íO~Îj¨†nç>’€QF4t –­¨±Ã` š“˜ÝJÎc±ÈÞö©“,MŠžÚÀ½ô¥Ú™#1tŽÀ’ÝóœÒºÍFÓdÛ3¯ˆ·Î–“Ú®ÅÌ# œ‰€ÒIR¶:õ.ÃÉ…9ZWszŒAŒéŽ3õp4â†G¶ŠÇ >p3ZV΃Ê_n`]‚‰,ÂûÛ7½ø>w¶Æñías‰8Hã8ŽAކ.O¼]ËZ‹C7â²Î<ÐîÅ8Ï~hÈu·ð/„sÅЈ¿’".?õú0PÑ1ÉåV²*—¥‚wì•ÊÏÖ»‹È’#£„ÛÊÜS^±V+|šyœxIŸ1³Ž½Uo#“w_ δOÉHøþ?©šŽøéxu‘¬¢i}µ­H¹þî~'}1Sp£ Õm¨ºŽ7ÀÄ£PÚéO#?r?8™iý²ãø.€ÊÄR%·».„šùþÝ·^JšoqÜõ@²Ú9îü8Ù‰7´“*Î ”¯izgìU]ÀîçÎr#é4Ø©þôÝIOÑLãõÖV K<ðÿr8ÈweÊÏ=lFE…$¨vMr³ªYQŸ=DúðŠUûPu4fk¨5ÎFºFS©ƒùÔþ\ä`a÷ÀqBëÝEå -£Ò‰§“\“¢Ð>GòÐã»Q䤯_ÑänRsž­ZEüƒÝj,iã®ÁLF#xÔA—8óÎ%½Ì¾àZ¶güÛQ~]­ç…~†*ˆÿèíÌâŸå£Ûìšx[k9´×˜ÝŽs#à˜ŸÒ‡8*7õÆ5Kš ˜8ý8¸žGØï-ôhÁñ›í—d|<4ÃúÃýÚQ*3²ˆ2e–fÓFÕG*­I©ç.`M%PO *ÂéNÂ8ŠÎx}àQŽ;Q*ãoÈOõ5§(L+oœ±WhÃÌøí\þ5D“½æ›ã¸/~µ,3HÏñŠïxž F¼7òÆÚ×ÊÓÞó!Ú]2Ñ!­É‹l{›¥Ú}k3ÏÀŸ ã÷>Ô³1¦ÆÃŠ`ÝKáÄþÅú¥ƒ'屫‚5eѹ:Ä¡dÀ·"²$?nÇ’­]J4JåŽêkªç]Zø~ëØÚ…‰úÏöÿó¹‹Þæ´ï\1D)+U ÂBä¯ïé¯m–®J5ü£Ð^»STKÌ…8)–B)ÓkÜìŽè€"żzîÙCñhŒy[Æ#¦Ù‡æÒ”Ь‘ÕCµ—KÚÙÏ¢Ž»±/7ešÆ{ygóÛCŽ)yÌ€¡X#çοÏ À~ï̵nlnÕ^+ 5¨7lòHÑMqô%$¯ôã‚Ǩ§üfÙ‘Š3ó}æ:¥Á@è;£!hè°@»sæ~>Èý‚M‰¤1ƒ rÃ÷éìiùR]Å‹¥®b(¨_iæiÉýzŽ| ÂÛ™F†›Å³N¡” yùV©.º£Ò{pý\•!Âd§¤Ñ›=+„R.éNokWRÖ Èå/)àü¾”Z¬|ÔÀØOlÂA.¶#Ül' »èúC6R#ü–-\¡ÌÏr ƒ/ó“ó$œþ7}[ŽõDY‹jÀÑ¿6‡ä¨Ëÿ<í§=ó¤Rˆ¯èºì±Úfv;ösƒù‰„qÞ}eØšó)®ˆ´ðJíÉ€öâÙþðíìç„>°8]m€ÑÚ±4Æ,Ðõ3AÌñiå#ñƒ«hn“ÉBv`Ž'B‡F2¦«WÜwË52f?›:>ç_»r.Ó6nÔI¿nÄrùՌÈ`0ù“‘ãxÚGÆ\Œ¨i@h4®È6è»ÐÙq>‡³rç%=L&S2¶Ýw Ä­º<Ú˜y¬$g8ßk'ër4F*®†)jK©òßÎaãThÜïïSsgÖž»¾eÓ'7wÜðsÜ¥=’®$çIôš˜‰C!ìv•D¼80ñ¤<(×Kà>˜Š»VøkKŠM„t'¢!‹3rP&˜K«;^Ìtº”|aqwþÖªÌ ý]ViÍÑ«‡“ TŠP”KAZ/t6®Ãç©è.%íÇÈÜ“J½$|Ÿ,¶.\¼è€N:& Bã«´ÈëÚ4µÈšÂþFJ 1Yöÿ¾§ƒvZ°µkI6àSj(Öª">'/åt–„¡ÞŠñ̸Ÿ$±4_?%lU‚‰þbüºÐ9!ή0ñwÄNB¤(ϸ• `©kò¼÷cBÇë¾;ýt°¦Ô,‡. mð0p©D2‹ƒC#Þd, WY»/–Sû±búS{˜y Íæf#¢dgi9?ê4oHiˆ›Ž¾zóS"|_S½¢‹ $^¾³ 8Ï9Ÿ-’úZºÆ÷Üjå¾ 6¯E‘D›“Hc©c'‹Ž|cÓÈó¿“ú< þyrÔȬAxgÿX Ý–‹Ïµ]$MAàÊ"DS½×¦ö‹Ü5>¹eüxéØŠ×nj%ïµè'ñŒÒ")öÓa£M5áµæ6ÄÒƒjï¥%Ð1/eG vŠâÑ[›hâ½b™æG)ÛŠÎ-u -ÕØýÿËe8ëÍ÷OÚü‹MªW‹‡4WCÝó¶—ûœy _T$•ÏѾ@rÏ„é?uÚ¬?$›ÓÞ÷P[‡¯!äý~Ó¤üJW©óÈI¸UM"n´¶ú´>aÒBl`œ¤™êAw¬å­Ã~rèÕhGË8ð*¦a:L. |Û¶xtnȇ”xßQ²êGN"GPŸTSLN‡sfQ+ÆY;¿ ã¯I/Ñ'O“vo€%Ú¡m&þs‹ \iAˆÚ ¶üœ\}šP’ÜçþN“hý`³:/u8#IšÒoVƒúExò‰ömºã –ºË||³T ÆA‘—XÛ «A`Ï '~Uo<ƒ ¥,“rë\j<þm,96üP\XgÆŸÞÏÝM˜|Ë›^•ËE±Nk戫>%]¯`ll–hJlSì²ôåƒn ÞNÙ slª§†_ödé”)÷›£r£ÉÅEšÎй÷TÁèç:úîíZÅ«Ãý"¼‰¢‘œ›À«8v¢y£dž¡?ú)P”ñȉu«º|}œç²›@˜ÆAiX± ¯[Ʀ¸¿ l2˜øe1Cè‡XÉs °‹ã ĺb~B¨Ñ,Š« êÁÁWºÄØõ—?gÚ{Uju}71¡uSâž-\±ûí°± lˆ±=_Q3&Ÿ#S¯Ps[! .îÜ>eÕ½µËíŠÎþâÝmþWúxþŽž»Ï“ýÃøTKmÛ#4¡9 L½!”ÕcXc’`f¥gp C)ùÕÉV@‹rBõBrh5¦eà2Ö>þJrŒTÀ³þ§‹·îDòÙkmPv“kÞ€›^("™y 팴Ɣ %L•>Je–1~y#5j¢ç¿?¤±&±@m0\*gÀô"¥ø{Ñ!‹Ûè¦Ñ Í®Üjš¹öb‹¨H$vçtôdSvÀýª½ÉVÖšçà°°ÖIל'Å"ÉY¿wâUî=©—þ¡$°¦LgXàÂâô©=pTÅ1JÈ£„šEš±zkë™ÝU]6Æ á‚k ¾þ(6‚§AGªûWºžÔi˜²n2¾ti–LVs•-Œèê‹_{ñº/!ämUAǧ ~TÅ*ý K&ía!ä¸Ëšø¾–]8o·eÐò‡1zC&9åF|[ûÈ+±ò ŒÇ³B1Y×GêªSð;ë2Dßi"<?Ýbê–ÞMP3;TÚ›ŠëŠ­–€5àb-wþñŸåg?´¡Ùsy×«î¹ ›{¥nêKTRQ:š?¤Éä@Î=½ù‘Ü=øKÛX׎Á²×‘Ò”ÐØ}Jâ•>z‹*tä¢{ * ŒOf ֑· ½Ç{Эø£=W"A-ïú(}"f:Ŧò(\ÊñgµVû+Ëp5³‚±2Æ)ÐQ¸ù5±9\PHºo!ÉõâXÁ¢ðB¨˜’…°ªOäf¥8‰¯Hr[ˆT>tÅ”³”ÆqDÙ”hÍÛÔ^æv­í¦ÅÑñ—äã YÔ˜¥:ÒƒX~B‘E|s»¡Ë¿‹U•«"W€™%ã”çTI+÷,dMŸXRµ©ï8VDxñ¾r{:’]Ù&$èCx \Eû?ßÍŠDtóð+òÄÁ9Úìã?ÿëà _¯S’%¹¢„G™/¹L¸†3fõÛ¾ è:TÌó÷}ÜoìM€ƒuF áÌQ¯ˆîèZÎ-íqz0:|¯a1 ŠEÙ­0öú‚ 鋊þ²ËÚ ‘tï$ýv³Õ' \rôœjäxÕau¶ø¤+—ÒùÛLˆ_§öúÄéa¿`³]l¾#T}´ÂQ‹ÔXdšÂ`¶i×Aæ4¸÷IÞjëîÁdÅ{"&pø½À¬Q´po–¼|`àãÀ¤ÛÙêmÝP¾MF“ÍTÃldóyLŒÿMѽߗ†›v25QÜ@Rbp«¯Ö»ÏE'ëpt5ÕŠ,LýÝ$¨4x¿ú-®Ëãþ­5a^üéÝ›å,ÆÖпåIŸ,FʈÄSLߢ•¹Ò£›y0A‰ÉÿøÛÎ;c"~ÏZÛs³c_³J‰W§€ƒÿÆ´ÿ`š„â+·M^Œ½î^ð mjÆîk¼¡¿ SlÝ w¯öܽuXz]:Še¿sJd½‰JAW‚7Ë5,L…†º0y’{šoŸÓ+þœ_ Âî/•Â; :}2QÿÇŽ€T¯ ¨„¦¨"¨ž÷Ó^åa–ìò•Y¸Š©vûé¯EÜnL|Ùœ@ó·GœK A´©îcë©>ñ$q;\y^Žv( ûÇ¡†÷ô?WºìŠd÷ÞÈ?SÄÖœðˆÅ3[Ÿ¶äÊÑo’Â퇙…FÚûC90ÊÜ+%ú±ÐÆ”nºØ¿ûÔM‚•Æ´ „¬Æ{©+2=˜?ª¦r»Wy¡±6‡. 3´ý»­Çu\öË€k,ŒÖ«Ü/?úsycRÿÏPab´­^ݶÎ\i|¬Š¨aÅKo¥-o@zRA#šb=8öŒÞ)¼*ö5µµGØ4|ª/· “~FÑÕå]_ˆå\Èc‰‘Pó¹:Àq¾¥!’n4Ì)ÖûÛÌŃïÄ€¼m‚…²Tw>3òøÄÑ¡AÍÌõbœ–#C¬·ƒy~¹^ŽHª³_ ä)d¹Pc‹;Á¾M=Rª-s[#mßç#æ÷qÆÈ­sú™Ò­mŸí„ùHa$ø 7 Â,€2ôKÊç³ab .8vªæ+ÄÏ=³Ï»ÀeCGKQ5뀞Ãà¨iIFMîg2«o¹u[Ƭä›ï*G¯Ç<(¨Ãêèµ^‹ExÅ"]¾Ê³@ÚjyÅ•Aú"ƒ®°BƒçNP€e)ùv¶há>£3§È6ýÉ5¶óÄCóRÍêi¿ºPö­Ìâ2,ŽÃ¨ôsHÎ^H¾[d­zÞ¡½Íû¨ïçD··à™óð@ªÛB¦åôT9j#iŸz’€Äz©væàÊ‚©‚Q.RðHz{©ú>+Š’íÐmE”ØÆKç tœ¡^;&^°®‹ç’Ž9_-dèg‹íŒ=ðÎâž‹Êñá=ÓoîëY¶9¨©·hÕ’Þ%R«x¨(/×— DI˜ž¹ÂEbûW,”ÜWZDñýhî¢^Žzäw}ª¬Þ9«¡¨C~³ž¼‘ôu¾wA³.,ë5ñlj 7yŽWÞ*·ÚÙ¤ÛlarÛ² ¾(‡(¥ž*QPNm]ÏZ‡©•¨cc,Mcò2¼4‹SS.£„¨NîpÞ¯![þ—ôàJª'ñ¼ ™ç)|¤AÈ0ã皇£èì3í•B`ù¬óí¬ xÏÔò8ÿ‹¾QDËÆë¹rñ¼×t"ªbJ[…¥ç·¥ ; » `»þW!/ûî ¥ ¦(šhïÔÔJe$‘]ÃÀØ+\Ö~v}/öo™BΔ¾£˜s¼D¤}$Y Ø’Ø=í¼‚JsS•^Ý"öà+¼vy™dþ/ÀY],N†æe|ÍÐìƒPÒ[j4åœÉ{X¬1?£cÒóW<0Î=ì}Ì|m«7Ïw‚Ö<™ëÞI3ËÚÐH tú„í¦Ì›Þ °ÜÂå$oIK^ý D~tgSŽríñnE¬ ½ŽF<|JˆÄ®S¹´Œ4òÙÉ3.•æ>Õ‘ùiM~³Q7Ÿ5ç¶n2¬I3¯FØÊHç%ÀZò6Snûù7àa=D¶Î|A-æ£<{kÔ£³>ñ/&]ã?hçá"„6±@÷ÓܨP'5’-æSt±>³´zpOBÉ>©L( 5$㨬ÏÞ)e•áM®0œëá)~< ÷zq>î„[âMí›ÿ"Å_féÓš½dhá`Ûq3+\rHG¦yü‰~¯¥©W”Y„¼ùìQõ”V9”ø ²\uBåÄ˃F)U/É4ñlMâÍú!©ó}žœPÊŸÒ#['«‹´õýÎ!ëŠÓ§IV¸{©ƒ¢R¶¶þ|Φü¹×h±ÿ¦ýäI6];É|÷=:*h׸€-œ ¤_Áõ³§UnÛÒvŒ¯œ 4Œ}L tDêñ»6~²·¡&ÅÈb6¡´`¥9t‡„Ì”nd])ï€ç…9 ñ6ÅD¢tyæeë)æ {¯Îã¤0“ïó¾JTßóâ B£ñ0zÔpãÁá<ZW5¼µ Ÿè°Ö™ ;õ^ '5¸ºîEIÓ)0„HÓt}uzÓ/¼ÇÅj¸+Ž"¥å—†€Ì&ZÔ ß¶,æÕ2õ–%-™%…‰Ì°ªÒ„¶¾qV•®ÏYQï;ƒŽ¢À:^¸Ü%G{?D¿â <å[âû¼ºÔõýúU©ô¨Ócª¡ôcÛÅ#kFÇæY·( }‹~Xx“KgÄ[_ÿÃÊ“c/•Zõ;ì%[ãÜÜ5-¦àƒ^ˆþBJ²ϱϭ¾,`ɵp…8Íԣɨë/>L|I²’r«É܃„ƒçeoè¼v3ž¼‰NÇÏ}lAýÑÄöv›pÏû#(/“íáócž¯OeÂá¿Ì$­Iƪ)*‰jBö"nU1·O‘@*M“MfË\ýr#f ¨›®÷­Ã<Éæá6à3™¾‹ÆÏ™x Mñ „Õ‘ínzö BI¡5ÖWBCµH~™Sxi?íð×ü)˜~A<¨KíO…¦è ÀlDæ‘3u¹©1¦d_}‹Q¼¶Ð£Ž£a™I|¸oVŒöþ øz)ðÈSB-@Þ¢1’0vò]C×z—ª Qß—ò¥¥KºŠP¬ÄˆKhTöìØ½;ñg&³º¢¢^©<ƒ­líÄ=pÓT Ô"98wk³»ýäzáíQÜ·ä9âÒw™ÒçãŒk]„Ľ>ÆY—QR† r>0ï:ð}WK«ðb_5j(¯Àá˜Iïn¼5„X„P†%G"Ö·Q!5 £~Ò F¿`_yŽŸ Žë*I’‚ƒ[QOr{›Û,\š°*¹,M†=øOg{RŽÜ/(%Åp€WðÛÍQãß#>α0ÀZXh]CþÚ£ªñŸˆÑ2Ÿúg¥¯ä62¾sܾï+÷+‘Šag§}Ì„ÞÇȾïÁ(–‰WÉR|@LÖS«Åùþ1»{†{hFÞoü,[ô_ÕÊýEP®ì{•+!0€Bö©qöÕ±”.É„,鼚Êe [~w5»š ®î¥IǪ§˜Î°¡ðdâg†:òe™ÑN£Ìï*üWƒZLr »¦I¡DDÎfä,Pe~×çxÞ{]O–‹ß;yuZ¿XqÃÔ¾åY€@JRýØE(cISY[¥'"iºÿÈ>öÕS{¢áô`ÌVÊô ò6âóBbãŠÆÑ>RRScœ@¤“oFo¡Ñ z/a*}«*Û©Ä¿°ªjž„Ì_V‹R<˜ªÔ髤€ª¶7Ncˆ“A?% /åðBÅÑÀgå°6õ2:žg^ƒé_õá©«?¨ù.ÙPá0çü Õ[”£…\ÂirZü¶ymÑé¯ÿ°Ú_` õC¸sä–Ž_ —ûÉT©Ãà¡L²;ËÊé{Þ%ðc<»ó®¨d†±\2¹á‡F˜»2¢¾æd™¨þ¦d_’˜t ¯)i¿ $µ¢liUˆZßB‡^õrxj,"W5xMBpÀVO¦‹©•\ô>Né{¦³êØBC%jöú ] Çæ5;%ÒKˆrf.ÒíRȾxÏ˃ú¼,bü‰pNgÒ$bÛzÄM‚Fšç3¤zd­Þù ºpý+-¥`—uÙÐJ"Ï»,$+Э2ƒóíL° ¦·aòÙÉXÒÀ9Žåˆ÷(žÊƒ¿j\BîöýJ!ñ-#-aI£ÉÕ)ÝIB„9s_Š‘ä';NÇ<¸’ h”Ñ[¡¬ðó݈ŸÝìNU•Ø¢WIá”tUnàÒ(—vJõÄëÒZGÈÏMs>¸UlT÷üìF(:$Î;}¦9ËëÓ×[ƒœ˜ÆGd)Ô*ƒÆ®Á„¡1–zeãš[òä(ÃŽÁ£YE œ²@ðžJ*’`ŒÝ ñÀØ/Eñ”1ÀOž<¤'­Ö︯=—út1VúZÎUˆó£(d¯ÕŒ¼ê,7?ÂðUuƒ:ÛYLÓœöÔaè}¯ß°§ ÃíZZF¡¢)U-ŒrÐ4Â7D‚™ì³Yæ?MÕ;ùÒë4a$î$ºA&r›5í€ï ó4Å{„<=d”c×䬘€Kz>vk5‰Cö3ª[€OÉJ[ÉúqpØ'òR:Øb§Ï-¥4—f¦øS¬B»NMþ±^@fk\H£™<ê4÷ÜG$J^9¤Q[ ÔM$ƒ\Nž";›%2\ƒbjÚTÎä-ÅQp娭û0”[n ÆÁöž„SÛ×Ϩ¶‹^rÍà7›U´ª÷Ÿr„ [ö¹L#B@ZhQd­,ÅõnÚ{Ch&'nN,RyUQe³õ´ÃéX;4‰¹ž ‘wT/>ýœpZ7®?Pãä;3£2…C—/`Þ(F!ÅVx†yÒF_”œ²k\Ãu¬ðËÒ¼¹ùG– ‰>¹NÎÍ5E’|G/xîÍZX¹1”ÛîÕ¼f;½Æ¡Fc›2”é7ú¦«gÉŒ Ûwuÿi©’2 %¶X†é³–2³­ŸsËç¨ÙvEme“M7kPyu¤é]åÊ9ñ³C Í¨«ð5Òç yQ1Ú^¢%•ç€Msë ZÙDþÚø`L'²GArkׯ.ËrÍnVtõP4ÉT–ß Å22¸‡ûµcpj©Ч"«ŸÙu•ù¨¼ùó´#`>š°nã“ôóƨΧY¢Þ4.ÁhaSÊf f=“6E8ø‰WÐþRrÚB†Îª*r‹PŽ:+1 ùKoÕbP˜XZxé¯ÄK÷n.ìH/óÏ×tùÔŒæ'¯…!Ëüª|òGÓ’‚é8ü̾زЇ®æ,™ßstÌhsЋ•qøãìž*”k¦PYÊ?¹NØ.æ$iÄs8àeF[L62Ð:‹¹.•ƒÛd¨Óîí42sESôÑŸv¥y£ul\¤ýÔ¯ ‰úÔ3) tRè,‡ÌËGdžYOÊu ¯]‘:¿x6¨ ïËÜy?”Ðo2s# Í×V¶èMTI7½í®K?`…Ôé+¨Ó‘É;·£Õÿ°?ƒ¾Q§ÈêˆNk×È'beùgÉJU¡ ÊÍq„MÀ¦ü"´ôðÂ,ò¸ª ù· –Ëšœs~óÀ¯’³!Yˆü€ÿ~:ÁwT`;ð}:<¶É& /o¥nÿx›ñàLiȹ]fX| G©a³«ï!˜ßØÞÀ‹TL|?{å9T¼mÚåD¬÷2Ò¯}¢5ILÙ_Ζ"?ÖX•:ìMI ¤¶õœÜNÛ¤u§(ÏÄ!šÿè#Å=;*oÍ$åÉFóâº8ÞÒ!['…§¶ os3bÕÜbê\Lz˜€Î‰R¶÷8aÏ~áÍãÆêù¦Â'”?µ6á"­RRüq/•Û.'â‡F¸§£t¦ÀNÿA›}j¤² ¹E;S^ÅF¤3Sº‚ ¶*í.òðÍñtþÛ-´¢£VãÎTÍÕ`ú”¤Âd±]w¨pȧ4£[-ÞOüKüw¹ç‹‰æf¶.J4 ¨»°‚È6¬w÷â_“ö£Î·YÄS:ùv/ŠÐØSçÂâ1¦©¿§TžõDK<âÂ@#_^ oú%ÐŽÉm«R0nùeÛ©Rœ®÷(Ù;¡ÇBƒÂuó¾Ö {¿á³ [:oæ ýS&òÖoÁ¢‚G;„‡ÒHÓ܉VkþÁ«÷ß¶«¸à tÌ@ÇìFNÚ ]sm¸6SàäãQÇ•øˆu³Ð¾M=ý_Qé,Sz> )ÀÇ –±ÌæZ¦^4:;î_²¿2ã«§!ÃP+öâÞ½5osôOMeêå×BØPN*›Bì#KÕYÙ Éi"òBò¬9„˜ßC:»m-%£Û, Lß°¥,­í,÷ŸŠ6òw˜þ¿‹EÓùDꕱ ºÒEô27ñ Øb<Ø.bV䓳m AD¸Ä4S²³ogÜøƒpµdIa£«CH!jš Ã0å$$ #žg)í6X÷L`ÿ†`•êÏæþÍW”›ðk³Ì/« UÕSLÃ8ªK@F1á°ð9æ6$TÔß!'B ‡“ŸÑý+ç0é[÷ *â©h:1gJ׾ˮOž $«Š¤R¬ž9<èÏâ.fÔôùqŒ©Î©Ýן-¾—š´i+|L° ÎÛ¶?c¶ï·1Ü:l-ÝëJ;ÃŒS™éÆEuOn mtîÿqßMaf|$b ³Ÿ_i°VŽJÌÁ|’ꨉ̜–þÆã®dÐC{Þp­¸ž¹ˆp4X³+M1`e‹¹¨‹l]=+°{övB}^w< Ò+Ö5Œ(¨õ²A¨S¦/x­u¹¹dé!©“t;Û;ãDÁ¡¬¼³Ô[ÑùÚØ  ¥Ò9X¤þˆFVé!£­a¦€šÃô:-l‰!ÞmU%›¦GÝøÜ{ص2CpšàOyæÒÛÒJKÛݸbtµcºÝk> M7´tC|¬Æ4Ž7…¶¦k°LCfzqþ€Ðy(Â굕­ãÖZ Éíw¨–ôÒªºY[ÇZUÿ3¦ÜKƒ#ºò×'¦fìûjdUÀÇ;ªÖ¬æÔïÛ’ªí3 ?UyÌ_WT¿IÂtÖ=e–­ §JÔõ!¬6öÙ8×KjÄúa&u;_«ªÈ1º ßÇö!¿ÆŒ4˜°2ùÞXáFÃ?e`*½Å‰Db8¥ø{É,Ž1åcC;ƒÀ‹FÑq©ÇœÜÀ:'!|Q³ÕaK+YÑocÝÈÕ½O6‘úJØÕZk!«gB=QØN\ T É¿Ó<ðÃá¦&…æ¨/¢„,™šÿšÜz*"»sçmg —t$á½øs Ë égB€I4BøÂOïš›fšíÞ7}B?ë!&?×¶Ú.à ĸȰNìc+{è‡dÊ‹vŠŸÿ ƒn ç {¼ÙÝPìùsM jüôÞe0a:¹F"ô÷?óÃ_¯>‹¤ì(…äýàº0䱃õrQ~ü@6¤sR0>Þ™&OÉXT#éÏ£ÕðŸß‰Ü&‹Ç \ *ió;ؽ¯]Ý5ØÃê½4–`y§Š>áQä¿Åƒ”Ô÷å.ã}$3ýŽš›¶'ëéw¡b‘nû×82«ªRí´ìòüä´wîbèau»²ûRQYòÔè¤Ì[aªl¬åØèn\<’ø$’Ôë"zÓâù6j rçø¯y’ª…kô[KÐåG­Ä)´“fšj´¬Gù¸žá© £G ×÷‚ûPøä…®}F/ÔU…"rŠc èf‚ôw#„à—vÍÛÍÐüõðÀÃÂ놰¤¡¡eÎý£ØF}^î¦i^Áª{š5ƒ7»„:ñvt Z.¡G B|ò,±û‰0_@ÀÏfïç)Ù'²îbPJRtœoýwª@½ÔžáQøÒÝò¼M©W{Ç”XNRé¨Ó/S=T,0GW5„ D ¡ÍÀcäkù¶4q¯°ŸÙJ‚mòBë«Ñ4Ë÷«#„‘±JmV×ÄU£ßÎS8¹ûoñý ¹U#®ÝÞÌ‘‰OÌHéÊ…GötÈõJ7K¿ûÀ¼±½…LÊ…c¦¾uȃÅÞßèKU®’£Ú[¶£1¥—a[6gX¶}·‘ÂG>B— o4íµÊØVL§€ô#ýªßËøQR:0uŸ…u‚‰S´d\iÝŒ‚öÀ¤‚¾U/zÊÙeâJ÷»â’m€Á›¾ŸZÙÌ)ëØ.Z  ðfcÄ·à~— µ^X{Ä?êä̵õ—@RñBò}ñåÒ¡ —Zv¡Šš Vd®Â¡õÌî½Üš¿°Ü%ZIºH½Öƒ1답Ç@·Išõàž?”µb½ÈUÔG»Xdž¸¶g9£tÆS3R‚ñ9r|íòðÇ(­ÉUm¸Xðan¯Ÿ•“ÁxF¡³Š˜.›]!`„ˆ ŸiÖHÆc»¬Bˆ4?0éFT©x¶€¦ö —6­œW;øÁÔÆ¾‘Ärõ˜ñ¤^ÿÐ ¢ÂL°”;½Ç¸´ZVE¯sZø‡œG¥B݇þ¸×êÍ›n}·¿\.ùýJšêÛr@™Ï˜rÎ[×ÙRÁ ™.ÁMimgã63ã`œmªuÊlkƒLëó>ÑŒµ¥ƒ2‡º %9g© lj¹&Ö)Àµ³|‰xg%öø| 0ÌÛ‚3ÀBÌþ"’A(Çy/v³­±=[‚$²Å½äŸXwíÉÇwS9·VzÍð)"èçúw…ÒîøPx ¦Î îC<©i›yôŠaSQ]eÛî¦C˜©7¹4b{biËoQ–ƒ„{ù¯ ¾:¦Pµg„Tæ  tûoÐWK¼$^ÈÏ´ÿK‰ñh—×G,  Â&—Tž_Süˆn³Míur|îD›Þ®$ôe4â$F»™öäíÚîs±/x9é€ÊØ—§ÁM‰E‘–tYΞsøöpC"¡µ‹LѨmˆ¢¢çþo˜¢€‹ÇϦÚÄX…ÑOÝÍýÁ¥Hµw†ü­Nå‡'·§ìÎ…I^ Š mwžØ…ð<Ò¼A¶A_Š$ýE÷*n$æ:ŒqʈÌÃÌòûMBµVnÕ°Aa¿§Ãûú¨¬2ËhîfÈÚ¶‘‹£Á®LUWÐŸÜ K’p Hëçã¿(™éAÅFÙŸPg±+페&#¶ß—^OO>ÿ›ÈKr»ä?—‰ä3á–%•…¥QˆÂsÅÍJ÷L<#W²­M~¼÷®ÿ•óÛNsæ]ü1ìÌëõ$¾\é6„7UÉžfóÿ @p^.xõ‘ðÁi±¢vÁ/xXL É+®Û®p¢&Û5½Ü=½U¿]Ä~äÇBžƒ©·\çôF{!WŒ-6­Xbí¥O窿 ’•bFœ–Œ×œ*Éç0dt°p_pðó¤¡ô@§†† ±½í{݇½O{GÍ3y?*¡r®#f4ýÑ8SM@Ér±!†Åø`óÃ×¥4«e\KŠcPÓgÀÛz))p.ØýØ·TYâFÚ/ÇòH¾³Z]¹àé‹DÄ-Gç`Þ Žu4&ší´C†7~~Ïx†½f/³šÙÀRž )øOÂX}÷@‰þÆ}«ðIqè €ÿù¶jóHº“ ëræ$ÝKù52¬’ÇY®Z£‡K1Á+ŠNµHF4ßfPõEoQ>áD,•E”¤¨JÅfûÝé#ð¸µë028Ïâ'5È”Qå(6ößý¤¡ø”¾ÈYð)âLV‹d¨EpGÙÀað]u$ÊgÔhAmùì›\ZÓèÌú¤wñÝ{õæÇ޵Ó)€ÃÔ.8µª_({Éþ9{[©Býׇ‘ø ÝpÞõMT»¤zìÜÍD÷áj{ð8ïùjç Þ›µ¥’즵[²A½ùÑ9-‡–GZ‚¯©k ØD7<{c'q'Öæó Ä𦸤LÁ ¿v'¦xUU'°qN‘åH)ý'‹ÓÅ,™T×MŽè mqP§4Œº›·x`K7eâåšø"ÒC¹ƒØ¥DŽJºï}žFøºPàq¤¥°Ó/‡+ù…ÖÐdzÿuþL²³°ñžr·Ùgßž©ë”|‚#ÃBl7›)E`£ gY¤¯åªVv/—ӓ]ÍKGq??A“3.3åÞa)ÉAœ­—¼«û·¢k¡å^»ÝÕbÞ¿²I ñ¿C—½¸‡M:¹xQSP‚9êf°%»³eç,ÉÍÞä²I&ƒ¨NqyvºQÔ=$+8·1ÉŸŠ—èòaÄs™,­Çzp”½©UêPW661_ûë¡'^‹Û: “9|O¶ã¯ñƒ¿õIy(ðþ¤ô§–wP¯‡µ:‚x*múIBÁ/œ™ÂÁoÒ(5ÛW°tìÝß!Ìøçª‚2»…ȦMÕZX ä\ZRT Z1a5o‰ßʱQ"¿°á“ùý+éÓ |ñnÍð<#óMæšËr6$^E$sA÷åÝ…£,±!° €&B~ÒtsÚ¢''^ÅrÌÜ1ñÐ4¢6-%â iã6JLž*—F’ïý¦Ññ~"Ïà~šÁEã·=…Ѓ$ÚŠhß¿™:F@„‡¨áwÔpò"uDß”ò©–H—Öq0Ÿ49GÍ”.J"ø\·+BGÀdwV<“A®}nÖ¬KãU«·xJ#J±Ä¼C_ ³×GUfŒÁ9?—+ª”„˜Ó7þsâ{ê#œ¾ÅBTÆl–MŒØÕ›\Ö˜e†ÝtèÌèÁ¦ñ9€5Yheš‰iÔþ3¬&`{[„mú5‡ã`Ûª²9Æ5üQ,ÃeÚ$AÒÆÈ~k(¡Åþ‘^ $¿~Ï$…€Þ‰äaüß›ý‹NZ¥RÛ®@{ õ=öš–òJKÇéª)-‰á³œ!ùïy®Ýbø?—qG¬bp²pÒÚý\-ÌR7x÷¸Ò¢rÁao­Ƥ[a¨ V‘ª|lÄYë&¢!ØM{²«Üò YÚ‡µ±´ZÍTT¼I“«â¿Q&mÛv“Q¨BœÑ·0 î@)FöSd œm kjºÒ@xL„ÂmšQÛ ´Úh†¤k«fÜÂÏÝ&`ŽwFîc2ZJÕ(5,Ù\ÛnÃøFy~Ææ˜ÇpC,J¤>Š¿"¡WÕ£(ç©.%8_ÅÓðPÁ´²oß4–_zÈ®Š*ŠsÃÒ—ÙTé@Ò&`–ø:Ò‘­rÀm{£ÎŒFM¦¼¾<ÿ u^ 7ê5|}.sp#`¼ãÉ8 ¦>¯Í{Ô¼Õ¢·‘ûŸ ù·”åR‰\îs#Fþþó<—šÆÜLc6Ž˜€SX‰»Öx6âYΘتž]\ù¨M‹[°y¼à—…Ö5ø…D¥61ú_±Ë1ÇWœ€ N¯A°†1ÜN‘0ÈX'²¢˜®Eç*->!éîz$B[F5wýÈe© VPáà’;q-t¨ùJ9 Èµ•9±˜¼.øqZÔî‹Í÷'’—Ö-מ khmé®6RÌáØ'Y胚ð%I©t@ü—&Ï,âìåmÍXq«ÓÏçâ¦/<áco½õ¢)~ñpa߉6ó{©ÂºÓ¯×§Fªkk Ù5ÄŠlWª[–ĨÞšK‰Aív%­ñ>0¾¦n…åg¾É#c‡þXr'É”œ$#ôù P#Íå 7L5Õô—d¹ù‰6F| !E©^_#†«£Þ3vÒ‚,=\ƒzoõ9‡XX•€b +’ƒžþ;Ùz_јœ‹·)÷vÒ»Pß°‰`;=ñZµþ öPh¤]Ð’h_ôÛ @±?牭¢z·ÁzW g9\ˆ˜a.äÂWû**ƒ\>£[9hX¼2g™ë°:dPåÓ¯`b‚M3äOªÉ”ÑV¿¡½ È%÷^³„Lš+ªù3ûû²*9*e/s”<þ'[€¨À1xë¬9عQ+W4¿3Z®‹èòBÄû8óóþ³[-åiRÓ\HÆãzÃÛÔãÓÆµÜ‚'ƒÇÚYŸàsBæô¦±-ôÝXË•õÓÚ7P>;¨6ì8+ÃïÏÚß^ˆ³˜b=ªŠèËø¬ 8ôYE3pL„(Ó8íî½!QôådZ}²r¨«*Bµ°Øº—Hß"ÇÓþcE$ÿ€ž&\×Oºõ‹í-ÖÒë«l‰?ÞC; éAد„ö¹o&¥ëd° …ÍR5‘;ÃsBËqÆ ÝÐliÀ\MË‹|:ë"‘Ì¡À¼sõíŒf¤è¢}ÙIŸŽ aGr®+ʬ¾ l»äm•.HE'3 ÊœÂè€ÿÓªÞ‘Å §È…_l©yõGj)@7DDéïò7#±¬pÀÇb~ó’?IfZ0ò.v‘Åÿ!·Œ›‚îk£ GƒK¡7 1LCc|îy2±9|@÷Œwá*Ψ;ŠŽç¼ž@Ç–¸z¬Ù@>tP‡®ZØÀQÔ%CÂ3ÞC–\(h\l4|b'Aê;àì*I{ p·ìèk€ªº'žÄ?¸iœ~…Amű¦î–oú ëQ/}&Zc5ÌMÔ“ žçÚÌÓ‰’ý³Ë¢¼ø§à È65ª’’*r¨Ä&øv « Ih|šfü¶|¼éÝ «ŠE)*Å÷MŸ8ÐŽ ððbŠgåÁapoÖ ¶#Ô6 €èJýþé ÝŸÿ­-y;™v|BŒ»®Q޾!Êêºã;0ƬÑ]¼ÁKW«¸¶Î„ÕžëF'É× E@GäbµIöc¹Tyz"˜ƒ­lwz×ÉUÓÞL¯œc¥8p€ÉHÒ<M¾éÉø~[æ½ÍàFS:8&+.v¶7PÖóvaÕ“˜`BÜúˆÀož º<0gÙb&™Úã7—F°õh&Âz¬@ÓÓ¼4ØnÄ­ÊœšÚ=î`œô |Mh]î p7üÊ*% ›ºs„I#t†µ ¸²6®®àÿ@Þ”–>g5Ý=¿a×2åìNçòöœµœD¸ÿÐë©Ìx KS\p_+˜Ò=¤dIä“j—Ñp±#®íÓóÙÒ”ó«ËšW‘'»—l{‚¨‰1|tº,Zå‚x]†¾ÅG5·¦è&å\Òsì6€®¶¿Ä}ZY`Þ×) 骢Onäy»%5{ ð á¸Û„¹÷PåI<ï8 &svLVïö=ˆ:}ç ÂÿPTR t¿WUÆé¦··¤D]Y©ÇuÔ¾b^FTm¥,<½1Vrÿy ¹Þ]™ó´âé"Û 8ù.MÊÒ¿ˆÚñ[Ûþëw<(ÞÓv?_yÅŠR{½ªè¨bÃ)5¦PVŠŸ5NêjAz«*ÒÄûa×ÃÂ3ù¹üÏiô\7P‹¥áp2Ãs·]˰š (Y#3 WÖ‘)?ÖìÑþA…Þ³”#À'Iuã¾<~ûÍ¢uÑ“PR§E!sPî[ ”öBö1Þ Ï®ÈDni*VùÜèèÇt?„wÁ "qSOô€_EeW’J^4íÿÌp­:R =íBSÁã»$÷±¨àNu¶¥m­3Ä÷Sl™JÙæ¤ ñ-Å Ó.·˜ÓÄ@p¸}„ „„©òŽò[‡em¯),K¡¸ÉksÙímš•ãV³‡¼ÿîäÙ'llj®½ž¯çÉ_DÉ%m~0|ŒGJ¼2uºê¡µè&@áª.òWÈìØ«ïXÜ*ð{Åž!ùu„Î4­˜E¯¬:|ÙA+V'áçè¬@‚ŒÞcˆ"–‘+Ýx¾0,i ¥Û ˆ·”Çöƒ~°S ý©Câ#ÝLœ_ýºMvÄ»G,¤½[ð>ž t‚…QYŠI=›FßHÙ;VXYÎu”¥xìÔ@ÍR¯³ò?¬‚F{"µH&ƒ†”ñK¾À¼¡|}¼2B4ưš|YéE×s60[į»éæ¶N=2ᅥjK-šÐ½gEe;…aWëª,¸úßMÚ×öa‰¯pmÛ5á£Ò@ºÿ‹Àmô—!ŒÍØî´ñB^hNš¡Ë°”%bË„ã+Õ©¢ùœÀ;tž£OFÑfR­Å*(Ü»HC»“wðHKéç•Æ9\Q=oÃ'wGµŠ ë ¨ªs²1]ó»Ð_ijlL[Þ8£q-O•vB~œYÒù&å ,é×çy%® æúÈòE¤æùš,\ÆŽºUŠoÔ,é?ÌÀŒ?ÆS`ìôõíêåcédE6¨‹€ñy‰±]Ò šT'²U‰éUÕÊÎ]¬®É.Öž ‹à~ ™©¦àïT…=‚} W ¤rRœ£'Vëáë/ÓŠ»(åßuÀæ}Q³ÿ— o¾tFAûöÜ5…'Ñ|XÏ_B9y.Ã=C€÷–½½j”»ûÈŠ~GE$5¦l||`g‹NoŽÜÙ"vàÛŠŽŒÛÖã«¥dü¡Dzó›õxdÂ,~DÚgT¹9F*výÂÜ©™Øô«î‡Ý^ç*ÎÏÓÀ±Ü Ø¿ÿ”ç:ç°Ã”I` ZüìJ°·xž²u§ËËMö±MÄNyý´Ò¹VÒoñIËŽºør">¿þjfn˜xèºEC (8¦uúO¾»t¯¿Úé$ílG{ò©l^ äcî 2Œ‚«?’ÉÊ; O©ÕVSŒv<Ý“8DæŠe_ä•n”EÓ›²k¶{{N¤qâ¼{ÁŸVa=pÛÉÒxÎBœóž«/l\‘DõAŠk V…¯CÔaTú%KU·„vðu]‡á™}·åÿS³f°ÖÞ¿§öu¶E£Á«r)§L]œ‘F\J™¾ŒŒcÑy Zqh ¼¦fùÒðW) c¢ßüx±R©ôºRyAÏ1£ÈË9ªGîVܺk |•n%°ÂiHfnc´ÿ…öü|€mp݇“S& Q}&™ØRÆ(€…éÞ*™}O¶/zÈÁ# ¹ÇM§bzíÑ3LÓ&pVõ^M¸‹rÚ×<ˆ6Ç'êfc,C£Ísl±^ ƨ¤ÇWä´œ3kÇ"&£n…0¶àãÝæ]Ø@=ØZuωí@ *Ÿ—8ަ—“¬Hj¥=%{u,Kp´ÂŸ'e…ȱ2 ž†¥(2eUsY(¹ø2Tq ‰Œà³è CEúïÇOg#ŽÙ¼‡ékâ4D~|F ®,b[ÙE/xg €Vµý•dtùX!ØpãW•òŽ  º™ð2™#²´Ô,¦ ”4MÂ9ö†iî ;Ιö3è`2 ]”ƹâü×Ð41a9„ë~áÎcýFDñû ¦Wßë Ýš⠄ãÔÖù?yå Ù:,Û5¸”“.=cx¨O1x©RxÛôhäÏɱ»vØÏoòøV{'G3¨“SD°|Ù3X©·=Áâø?tˆu¥çŸ,W¾†‡èÇsõÒ`à vî™y=Z†øpA> :»‡¿­”Ê£¨FP.%Î*&w6m™V“Œla½…«‡=ØšÇæ0¦M¢V ÇGò«ÔQ;®PÚn0Ai7ÕÄ·jóñ‹ô£U‰˜_š%_üZo“ ð«~üÜJƒ`öŒØ3ªg:á%>¤?è‰ÿ´Í\(ŽWZ±×} Ï‚'\cd–BÞá¸;ùPˆÎÜÝ׃>÷×óßbÅ;#í-:z¤ñe¹i{"wù–öR¥ŸZ TJãZc{çîÚtQ4ÑMiÒ”v³Ü7^hAØ% ºlÍ9z“Ô“]vDʺÓ"{ Ì];àqN”F¸± ¨¤“b3RÖð ý_¤L[mUœb ±fëyàÊ®&Ï¿H}ì+#YgUÐ-28[{)f@\ÎgVËÊ òH C$áÿ $¢ ÄYôu×0p ÊÂÇÐZëÌÿú+Ù à¯'U’:¡tá­Kv´o‘Íä¿û?Á3ÇØjE]ºÓÒcØ(O ´$¿ ÓÝcó{dô™Ÿ©çÆQO æNµ¹NÊ{j:Š_çrçÍè×ÚßÌÀQÍæ³Ñ¶‹›$˜«ãÛ&¥ñeš‰@McÊ!ÒpáΠܲé³&‹9 ¸.}Yy ý&²öкãŒÊ ­)ZnÒÜ Ó¢Jz$…1&)ð™Û3:u,…âG{<ºÉ Jâ4»ì·Ì”^²Ü†Û™2-Kø9mäEÍ÷–G3 Ïz=j‹±nßA:#”Ä„¾‘pŽjMÏò!k°ñ'Gò¬S&‡ˆúŸžË‘z_»uãØwHj’—릧†2ÝÂCí߬‘Š-îÜd½ƒm¯þŸ?Hk›t‚O ö%ƲÈ{a’=aõƒSO¬TtãkG‡9Íyy] ¸TÚh½C;ƹBÍåû%.±u,ÞoÄPl^9ÙëxËœ˜{¿)é-g—´g¢f€-eå•ÚòëúyG³—æÖ7¯-¾Ô]âÓ# F“ñhøø±‹¢¦­›6^ÆM]ku:Í8‰¦„éš\(oøÂøÅ ƒYÎp@=׎¼’/éï‹ã˜b-¡¦a}>ZÎV¢²$¼«Àž©ÖT§™ý¼¨\MC3´¾X¤^«®éÏ’|Ô*ÄdËÆ>ƒÐ6í^oŒöü1{èA+¿&bD+iMžhœw[…Nù¥ a’Ȇð1È^» !ˆÇÈJkêxô—s˜0 Š¥Ô½«ó…®°¼ Yj‘•¢æõV½ý€/‡À¹Ûò£~·pd´ÌÞM-àá:3¿b,2Võ÷x,C›ÏE§‚Ø#à˜|¯>ë¢Ò+çZ—/àå#–µÈ‰ÎhD•.!öý”ê˜Ed<¿GchúƒjÌj¹Ûfˆbr1·Ï•²RܾĽ0Mv†fËO $ Ì–LveÔÖ…'7íøUµâU1ö‚‘2éïÙ*KSAðNbqk}QlÚbže䞦­v¬·”ñ d·Ï¥ká\DÍt¶ivN—`9Ó'—%ó$èýÂaRM¤¹¥¶¦rŒ«ZÈäʹ³lS£Ïï=¡þˆÞZè%ðr]&ô†»7'sôÂ#{#vÛÐQum%áI™ûµàÃe Y}ß©`[®1ˆ¯;X•ys³¢ûû& í¯*fMŒÇÏ-ù¢ צéRù†Ó#Ð"2—ùE,•4¯¶#BE¬€<µ«ÄŽ¡ÔnšYA4ðD4VËú‰;GýÏçw'Ö§hµ/¥óTN™ÀájŸ9[%8©"<àú²=Çf¨Ë2ÿg­Ñ·Бoý¿5†Ú‘ ³Õh÷Í4 Ê{*è2—–||—’ñbä ®-Þ€=ž¼NîŬï¶ÁµØÓuµC"Ê‘¶»x¤9)Ì?¹}wN6Çq»¢åaúmæX¡Š%Àm7óÃgÎ*µäSÑ fùŽïXÛœTº ã6$ƒ@§5NS†Í¶’ bŽêóWÀ;s€ÆÏ;è¼çN÷’‰LÛ*¬uj­Á«o,ÇñYvùÁ±SS-ülskœÑúÆ¢Nó…NMí¨´DÏ¢°²˵m/Ó‚òúÐ(Ã3{KÚRʽø”^aÜóÐáMŸ—…!‚ õ™ðO‘¯õ1©(rFŧ¿žn‰dVèŸH[gþ> `b}_‹yÇ¢JHÉÁ¨#/mc?‡ª°)'Pu­ÜÕtÐLÖÁç†þôÎYÎcÚ.?oŠ!ò8†Ûë,¡©¬k&PhÙH­2†óô4áNv–Yk榀½‡S,åìP±áÐÞ{Úý¼öIµJŒ­¥¾aøºê>žMëNgVáym¦Á½´i-Ù» ›Ýƒæ^ÖLâ!©“ž»‚7†XøQÃn«z¦B7¡ry„ Öd pþ‚øk³¹ï„Á±(Ø×ìfü^wŽj’Òˆ¸óÓMô"oç sÃNáÿ¡£¹Õx|Kõ÷…rèläà„^ÂÇù!Š]E•¾ª×¬õêïݤ邎œoûµI=ÑüËr31ü®×é ‡ªÈ0ܬ”Èwׂç¦{}µm™`¤É‡²„ yyå ‡ñª¯V‘)‡…N*DŽüÅ Û$f…þ[ÌŽ¢N eg8Ù·á³Ü¶qr6ó±l—¹,   zÓ0Ïú¤(å¾õuV©W4}¤ÜÒȹœt5Z©~f¦/ûµZïéÏyȰÖXªH{TCCŸ›CÜkõîu$ Cþ†'rr_ë‘ÂÑQù`s©_ÆôI…Œ å€Çœÿ˜Y@9“kað‹ÁsZÇÝÇhm;¾‹‹äÓc½½ûYµ}ºC¾ûû‹ß…/®·p©\u0ìzà­WKb ñ0[•.z•žÆ‡1’ÿ"§HBÃëþçD¬ðŠaÁÀ²jÎL»f£Ñ8xLGÏŸØc &8§œ½aìúM<Û–Gz‰„t(/2¢ °]ܧ6fiÁôeЧ<¯Î§"©°S%jà Þ9IåÎ&œë’Ҧݣû¨…š6Kc¹ÐTı tÖu€ À·6.¹Ûì¼õ¼¤Á¶Ì@Zå…PKK•2h¼t®Þþ»£Å€µ·†«¼§`_¹ßK¼Ý0†ÌrÓžsØÒÔ{õ«‘òŽÏÕy5iÓ #2÷dyìÒÞâ0{5E¨°–ï ó®Às'/ 'ò1õ+>Ú*a pÂË€˜§ q ‰…踤ˆ ภµ# ª˜íµI´€˜‹‰Ï&F1µWuiDgƒâç}Ä2€:À%«¡N[¤ƒÒʱ´àJƾµw,íîåÎË u€¡Ê~)(—9F•»*g‰»½ÛN_£u¤ÆýêÈW¯³J0N€Mõs¬ì&tÖœ(÷Pš ‘@"zA%Äfßè•«@ÅeÒÀ|ëC8ØcW~@æs:{»^—Ç;¶Æwµ á©,qmª“è^¬YFâ8Ç$Øl]ù± µáίö4 kaç†&ƒ_¿’‘œøþ&`ñH2Ýå=Ñç×lZɹüzÏ¿ßG†=çˆp½3Ã.b.YæV4¾ú ÀÅo:7á׈Õ.Ž's{Û¬q[sdÀ“^Ck5~@ :7l¹µ.|@TnM–†ƒÃ“» dRÔñAê ×ð)É÷9D6Úƒ ôxá³YJ·œ K)20PàœLØÕyÚ? £q?p·Õ¬¥ÆÑ£<-^´Õ… ˜(·ŽA"Ÿ0À »Ï¨S´Bòg£õå=þÁ15xëÏ‚=®¥»£/È”¼Ñb@h/ ö5ì b~(ƒ¹¶ÒDŽRæ HŸ‹ñqh=×Ý”Êñ’ŸÏ~ÒP!&÷ÍŽ˜8¨˜+u~Ò:žbóg:ÈŒ!1õž€O2nÊ\æg˜ÇFRªŽ?≦ñÌ©N¿Ñ+ÿqò L‰›7®p¼g¾Àd½F+«]NĦ ½4YÖp“b†}”;òµ¥‘Y©ñ¹èš»JÔ{I£àËŠGF+õ*b5KUëûàOí ?ڔǶÑò(òR‚¥\­1Õn3ø³fY¬ ¨;éÅF=òq;â7×zGCKº¿9ÍÓ°ÀzÍPyxÁ%6ØTšŒiÅ+ o^ÏP,úâ3FÓsÿuÑñ¶®ˆ¥×2Mûª²QZ„~Ë.0M¾ÇÛx\†U€GzÅ7F·;Õ{:hNþxF8G•µ¾Ç…õZt¬ÓY4ïºÏg‹F.Çç«:)"ðß÷gi9 aÍd‹g—žJ ûس)}dÏF·E û õ¾áíàÙü&F?•¤*q rŒ;I}ŽvóDûyßau5®ÂÚlÕI\à÷µcñ /P¶¥µÖ–š1–‚›»`]Ú\`‡%Dƒ ‚vÞ™ [þ=ö‹*i¢ " ‚WŒø²{†6¶}•–LU±<ŒµÃþ8]-"B¦6ÄFÇ«+F <:”ƒ06øÉÛ’Áì ì¿w<†æ\tv_áE$»l¢ãâ ÄzÞ„kL÷ c>¶©wë^˜èöÓ/N»tpé’â#ªóÔP>µ¬ ¹l>ªw¥¶Uàv5 =Àx9q¬Crò« £xv:¯ÊZe!â*¹»V ¡Yÿe¬Èbyö•GùÚ¦<6Ëz±È"‡ÓÇ—iå®>}$‚Üx‡iùM™û,µWž¡ñW#ÐÂÞÙi‰Çl"ŽÅŒ×ð{}ɰÿ~äžïöÇw¨w!ð%O#³ŸâNOö©«<“Fš°ûD7Õ¦'-ói—û›AÏÅ|hàáèp/ƒè0¸&múˆ7”Q•·×¡©Ï3Y|óÕ+5 bÿu®µói|vŽ@Acw€+é°#23n…˜üÄ„åýM”ú‰4ŒT4  »ÿLÈ|/R¹ìGR=sýÇ;[Ãú¤ÃoEíÑr¨d×Öÿqg{ ÐfN®ß®Óôkô¤IJ„YùÌ¡s‹3Âmò¶®SQ1Ö~bHß –®ZåðLæK"âgpuïóÅàÿ)M ŸÀ]ÝS‚Û›œù ÚÖh(_²Æêä"£(D–«>ŽOèLÑ_ñè$(%8ñ!ïõq ê_H±&år5›M¨O“>Uʯ úðÄÓ¨S¡H3ÚKz¥f®ÕþȰp»¥`ñ;D,4\¯ê¢ª¯k(YX‰é,=„À'!ß`þùÌ7|ò7ÌMt´9 ϠĶO„©ëIùiÙ Škh, ¨L¼™Ü´”àÌаÛ½ó£÷k¼@ñ`—°©ã¬zWÉ„éePœ·èiòôk$é’9LÞ)|ãÈšî.nø/‡ÀâC(r <ÏÈ=LȰÂcLzWÜú³FWÑ‘`¤]Ȧ‚²fÕ‰¼ êßáø”øu)ðúu9mG‘áü4êÞÊ™ ³þüä§Wêß(°\,úØ…8†/ãD4U-æZ:–Í. 듯Úq8Ý“L‡¤ý`XÍ@öØí¬),¡ñv»$9À˜üïãàÐ$(1½s¡±µKŽÔËZç„´n…¶®ñ_Ñ\m0}7\=P”Â.y„†`аêÃ:XˆLCHóX'Q#-«õÜ€>ž«`Tléœ((Ô+pÿŠ“f| ùøíKòa1µ2 N{ÚpÕ¦€"—Õ[Èæ5Ÿ½{ÁN¬U~etÔ×aÆT?ªÇWìPK@–+I.`Î&š´¿HÍ<‡&ÅÁð#lP•UÑkÞfiBHa6ŽNcÐ/IEô†îV,‚¦h¶.¯èxãUà‹Oö ]uÚü.Rì6óåÅ#jP)ãd`§òþÆI´ Èëå}ÍÂ[ 4+>âÎ\|ëZ‡{ÉôÅÂÚ—NKeëI|dÊÂ’>Õ3½$z1Bòƒm•W€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €t1lib-5.1.2/Fonts/type1/README0000644000175000001440000000174210733501627014304 0ustar rmzusersThis is a copy of the Charter fonts which Bitstream contributed to the X consortium, arranged for use with TeX. Here is the copyright notice: (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA. You are hereby granted permission under all Bitstream propriety rights to use, copy, modify, sublicense, sell, and redistribute the 4 Bitstream Charter (r) Type 1 outline fonts and the 4 Courier Type 1 outline fonts for any purpose and without restriction; provided, that this notice is left intact on all copies of such fonts and that Bitstream's trademark is acknowledged as shown below on all unmodified copies of the 4 Charter Type 1 fonts. BITSTREAM CHARTER is a registered trademark of Bitstream Inc. I used the `afm2tfm' program which comes with Tom Rokicki's dvips to convert the AFM files to TFM and VF files. You can get dvips from labrea.stanford.edu. karl@cs.umb.edu Member of the League for Programming Freedom---write to lpf@uunet.uu.net. t1lib-5.1.2/Fonts/type1/dcr10.pfb0000644000175000001440000011726310733501627015034 0ustar rmzusers€%!FontType1-1.0: dcr10 1.0(Level-B) % T1FMT, Copyright (c) 1993 Basil K. Malyshev. All rights reserved. 12 dict begin /FontInfo 13 dict dup begin /version (1.0\(Level-B\)) readonly def /Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def /FullName (dcr10) readonly def /FamilyName (dcr10) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -133 def /UnderlineThickness 20 def /Descender -194 def /CapHeight 683 def /XHeight 430 def /Ascender 694 def end readonly def /FontName /dcr10 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /grave put dup 1 /acute put dup 2 /circumflex put dup 3 /tilde put dup 4 /dieresis put dup 5 /hungarumlaut put dup 6 /ring put dup 7 /caron put dup 8 /breve put dup 9 /macron put dup 10 /dotaccent put dup 11 /cedilla put dup 12 /ogonek put dup 13 /quotesinglbase put dup 14 /guilsinglleft put dup 15 /guilsinglright put dup 16 /quotedblleft put dup 17 /quotedblright put dup 18 /quotedblbase put dup 19 /guillemotleft put dup 20 /guillemotright put dup 21 /endash put dup 22 /emdash put dup 23 /compoundwordmark put dup 24 /perthousand put dup 25 /dotlessi put dup 26 /dotlessj put dup 27 /ff put dup 28 /fi put dup 29 /fl put dup 30 /ffi put dup 31 /ffl put dup 32 /visiblespace put dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put dup 127 /hyphen put dup 128 /Abreve put dup 129 /Aogonek put dup 130 /Cacute put dup 131 /Ccaron put dup 132 /Dcaron put dup 133 /Ecaron put dup 134 /Eogonek put dup 135 /Gbreve put dup 136 /Lacute put dup 137 /Lquoteright put dup 138 /Lslash put dup 139 /Nacute put dup 140 /Ncaron put dup 141 /Eng put dup 142 /Ohungarumlaut put dup 143 /Racute put dup 144 /Rcaron put dup 145 /Sacute put dup 146 /Scaron put dup 147 /Scedilla put dup 148 /Tcaron put dup 149 /Tcedilla put dup 150 /Uhungarumlaut put dup 151 /Uring put dup 152 /Ydieresis put dup 153 /Zacute put dup 154 /Zcaron put dup 155 /Zdotaccent put dup 156 /IJ put dup 157 /Idotaccent put dup 158 /dbar put dup 159 /section put dup 160 /abreve put dup 161 /aogonek put dup 162 /cacute put dup 163 /ccaron put dup 164 /dquoteright put dup 165 /ecaron put dup 166 /eogonek put dup 167 /gbreve put dup 168 /lacute put dup 169 /lquoteright put dup 170 /lslash put dup 171 /nacute put dup 172 /ncaron put dup 173 /eng put dup 174 /ohungarumlaut put dup 175 /racute put dup 176 /rcaron put dup 177 /sacute put dup 178 /scaron put dup 179 /scedilla put dup 180 /tquoteright put dup 181 /tcedilla put dup 182 /uhungarumlaut put dup 183 /uring put dup 184 /ydieresis put dup 185 /zacute put dup 186 /zcaron put dup 187 /zdotaccent put dup 188 /ij put dup 189 /exclamdown put dup 190 /questiondown put dup 191 /sterling put dup 192 /Agrave put dup 193 /Aacute put dup 194 /Acircumflex put dup 195 /Atilde put dup 196 /Adieresis put dup 197 /Aring put dup 198 /AE put dup 199 /Ccedilla put dup 200 /Egrave put dup 201 /Eacute put dup 202 /Ecircumflex put dup 203 /Edieresis put dup 204 /Igrave put dup 205 /Iacute put dup 206 /Icircumflex put dup 207 /Idieresis put dup 208 /Eth put dup 209 /Ntilde put dup 210 /Ograve put dup 211 /Oacute put dup 212 /Ocircumflex put dup 213 /Otilde put dup 214 /Odieresis put dup 215 /OE put dup 216 /Oslash put dup 217 /Ugrave put dup 218 /Uacute put dup 219 /Ucircumflex put dup 220 /Udieresis put dup 221 /Yacute put dup 222 /Thorn put dup 223 /Germandbls put dup 224 /agrave put dup 225 /aacute put dup 226 /acircumflex put dup 227 /atilde put dup 228 /adieresis put dup 229 /aring put dup 230 /ae put dup 231 /ccedilla put dup 232 /egrave put dup 233 /eacute put dup 234 /ecircumflex put dup 235 /edieresis put dup 236 /igrave put dup 237 /iacute put dup 238 /icircumflex put dup 239 /idieresis put dup 240 /eth put dup 241 /ntilde put dup 242 /ograve put dup 243 /oacute put dup 244 /ocircumflex put dup 245 /otilde put dup 246 /odieresis put dup 247 /oe put dup 248 /oslash put dup 249 /ugrave put dup 250 /uacute put dup 251 /ucircumflex put dup 252 /udieresis put dup 253 /yacute put dup 254 /thorn put dup 255 /germandbls put readonly def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [-44 -250 1054 913] readonly def /UniqueID 4700683 def /StrokeWidth 0 def currentdict end currentfile eexec €}…±Ôc, öøÔâþ³×Âû-iìœ ï÷Ju¤¤öï§S©°E²!¶Æ¹'hŒÉúõ¹Û`+#),ËÈÖ«JÈ&ãÌÏ•—mYÕ¯ ÿÈþkÂôÒ·¿'\›Ö)I²´^Í  4"L±°«~D`”¨X_˜O>IÀtcÿî#4¡FpOµA Z®ÅJ\.±{—T˜/NÊÀ ëû’ÑìmËYHƒŠ,ó͸;£Áo0 ¾àWõb,H AmÈý¢í»õü>oaÿ':· ²¶ºèd˜-ê¥ †A±A j…C¸JI½'OX›Æ+)úZ`b„š!jO“êý×bØϨ+-EMòïw»Ø+Eld?,­£+ƒ”ˬúšÀyrgWp¦¶a‰o~‘8+… Úy-]5¡<ôÀ”sy6r› ï~Àz%Ê‘OãͪìÁlHE© ¼Ž:¦Ö— "·†æŽú¢Íe#× aIˆ§o»…qjBâmÜó=Uqj#¥Íu‚E+Y4=jÍšémkÞ€ öŠ}uÊø±ôÕ,qļ"…mP•k;‰.$5ÐØ&€@Ò¸“ƒáMÕ†ë×êÓ1tÚ_ Ö“‘ÁŒyÎéJ/f¼]2Q¨«—%ðllÚ%¢>&¬1ÉèXŸ¤À:J˜ä-Sò Ÿ)ø·/YýdqÂÏàg§ã=ïˆ)cFˆû¢p.MÒ$˜$tôû¼=ö}€£ôméÿ³æ v7á‹°oK®“¡ÛuZ}Ê]HÝ 8º¦Dú=†}=硇e]²Ãœ§_?cð]ßò<â±=Fô¼'„‹È;€ª¶6WÓF̯óäÿ•õk–œ€8ì}ô¶JºHéR›‹µ«®$æ/ÇLi0*ÛˆpW7‡¨8òB†Œ‡ÚÇ'+wã{Ow–Õ’,ŽsGmj¹ž Èœ9 6`ðb·Óy³ C§èˆüWi´Ïaàãý”ä¿»t×°¥œ¼Ï¸ßÓpˆ‹'Y É*<ª~X-àSô´qÍk¦Ìaêѯe.B;Þ«m(éÿøƒœîÔ N€ 0º5 cû·ï`<ÂòFþå’&@åúüiÌ|‰g²oðóÅqît ¹oÔz7Å$”R†T‡Íu“w+ë+­oP¹ùŽéh¾ÐŸ`´…"¯à=¿-•B,7 Šãô­ôO´ûèÍ},Ó |^ YéŸ úвàa”8üeß'zщÀ2þmãYå~؉˜¸1ò Ìtc:•³<Ý´@öa(—^YL‰1lä;Œ,ÙAh4;çÓ®€@ÜÉ©¦[jÀ™u¥qc´¡Id1yt›‚ÁÑU¨A;›ûÓÿ©0n¯bçVæ/11ß‚îod‰A‹­iÚMQqì±MJ޹Ü!ø‚³i!AtÞRNê¡p¬©^–«0¼Ÿïß‘žu’\ó=I©‰SÁ¢É D± åÅ2æ&þW«½Âæ'³~`NŸNÝ{y†aCÂÏ“wÓMÆrp7ì¡@4­Ùœ£25v-…ægýàOZ¾Um¥yP«öÞÎÂ[*ßôž'ß'Ÿ, $%/T‹ ôe&l Ú:ÌU%,Ÿ;¿ç‚#[;Öåã3ö¶˜#äOtôÈ«"AòµÐZÇ[NðèÙ9J¡®™B'·€¾¥brð4 Iizn_Ðôb"ª ì$Û…Ü¢‰¸®cÿõ"å1z½rš¿d=ü%¦pÝ·™1ÌÕÞ(ÚÚ9•zà?Å»:4 Ûüm‰P§1ð@û8X¹´Cž0Œì¸æëI›Ó…p!cîŒÈVºbà-z®òWÞ‰ŸnàkÇuôðð(tjôiSŶ¥»Š·ÊëÂìJ½›yzsëAëzJ&'$<ßÚ©øÈhèÔÊÑG¡´Çð©9ˆ*¡ë:Ò.Œâ.P‰ä!EB8» ‘˜gÝOŸÂ3…*)2=°⣆),—üÜïÈV>7-YBdZ6¸Sˉ< mSzùúÕž”£\õÍ}éÇúÔwn€–ø¶= 'Ÿ8f‰A_bŽnÛutÝ^­içäµ ±®~¡~Év9Ò+…C4ª ³ “¶ŽŒÔÙò6¡£åx‚ηJZu?•¹¡À÷Ÿ|Œ5@,7†}ýÄbjò‹…ì¦W-ù›g(®ÙÛÕ%Ê}TÄCiì}¢M²c Lø†@¼j€„0òè¾Sëü½æ½ucjC­C°V´ÜÃþ$TOǽMÒ vwüHŸ^©àæ",Ý7;‡>æñZ„ô}´ Ù§ÿs"”%Ê-¦Ä÷´:˜® v\þÑæçY˜t5ߒǦ3·ð9ÄŸĕߵ2Rxtvžm0 üëÀðÞ£ŸWÁÞ™0Î@ Ö(ñ=‚ƒ5 8^€…±«¢RX¾«å—çeÐ>ÍÖß ¯º“AOær?Ò2,FØk~§ÝÀÌX—CrÑSµP÷îïÅã˜rÙ‡[©;rý"²øcîÕ gP³o~Ê”žhá¾2Ø+ XR“ùÛ£ûh- >çù¼*…x~àËWmµ'$ì¾ö€©ŠŒÏáÆÝX".8’&ß®U“×1A{5ÑóÅí oÐôp3£øÄ„ûçØ)b¹{]ùáÃÑ«Ú^÷n‡‡IШt”{~̵>ógõÀTËÞ,(rlI)ÈZzÜõ<{ »KádÁW¦!AÁÁ,È´ +¿mÛµÿüòÑï*r7†/¶3ÅEW¥/xgƃ؞ ½-¡Ý#*Ew¼æ|;®³£®º‡@¹ Ñ£sRÑÔÑMˆ{;5ñ ëÑ"CG¶±§ï|*ö]¸ÎFÖÌF:bdûiœ÷Ôétzž¸³W½%ˆôŒÅÁºöYÐtMã³KìDÇ÷K´’Ô°€Žoç¥×¡×˲Íí —Ö˜5nåЦM+Œ×M¦Ä­BREwǽú„J®Ø®Í Ì]¥‡ tD¥Éö” 'ž·ÓJ©šÉ‡Ú¾œÌÚ ÙZPV+QÍ7%.ŒL%GUQRãñÀ‘»W«%!cšöÌÓñ*½|ãaëq2ÈMê»s»­gå¨Î¸£Ú©ÿ>Ÿƒ~寓ä¿`€;À€ÐûåòÒ  [Hªx1ìxë~©àDÿ6<•Sœð$ pzÂdzr¦›…%À]¨(Ùe>ÀçÉgÁ•ø'ã+ñ5ð‹×í¿pT×±¹Ä_ì]ˆ´B{È\ʲíËLidkL¤‡®§2ŒIŸ’6ÕVÃæÏÏì *+Ìnnå´³qù‡È‚c­Øµ@Òro ÷›YNg¥¼;xöó$)Çt&¿Ñf•MP2 BŒÀøJ?@3óM`LÃWP\•´^»­ix/ÉŒ±š‡ƒAìtpî\ lOüœ×é/Þ !•°tNgçEsiñar¤i¸¨  cÕçJ”P ²=¡ôzx¶û,°@À+]m½òœ ‰?×Q¢úÑft†Z ÷2n66ÒZ·`2Çÿtè\¾†Ž†«®iêŽJšŽŠÖ(·MYèÙçHõÙMIQt[° ·¸MD„j;O#€ –ÕpÇ-±ŠíœäÁõ'Új´_¶ pëè&m‚[L+ê*P…úq€åÄ_fctâ$”³¤]ùÕš¯<‡ì$/ÛöÅ寽ª^üÓêNӑ锳ÃMþJŠÚ¥{HÝÔ“]}¥Ü¡˜†#Z/¨þòŽÿ2GU.Â¥û*3Þh|ê)´ [¯îÙBÏ/’éHz^) yú7—©¡Ñ¿«8Ò|¸­6„Ì‚ÅMaÙwxMA'Üá ù¥ôišêU阢ÚX\ƒS)*–àrDÜpMMòÄuŸîŸ]ËjÏÃðxÜØÁNvö˜æA–ÙÑš;à_9yfé¶²…Ð{myèÉU8¸ b!ú™çs.¸10©—g2oè„Ê»„±&¬4ª3uJTÂ( ònö@X]>^(ñ[ƪÓÿ÷λw–sOQ#޽ÚzycG¢¨!¾!þ9_€8³éß*ÀY›G³fÑVÌ/âvPÇ m…ÅrVå} ËëýÇí“çP4uܤ¥]sÝW@]uã‘æ‘ˆòÝuóf~BøìÄQ ÙÍþ3Vò£ëD©H8%L"3Y™÷X^Ô.e½‹é P•ÿXX¸ΖcÁŸá&M<ñô¤‰+:„êŽ&äM)Ì¡8ØÈt¯Aíf8†üeì£ðçºÏ;+?"Ü–F §‰E¿#]²;¹î¿BJ¤,s¼Â4Cš\>+ÿ¥ ‡2™Ð‰uýeg=ðüN‘ïªåÒæ´~[eh›e7_ŠŽtbÏÉ #þé3àRM¯å; 0Í tÇÛ¦‡ $Ý»›î&mUKÜÍ ®do³òç ¢¹ž‡cv ;š䥣ˆšPØÍÕÀ€wòG¢,Z6–ê6jôDÿå¾@­V½ d“¸l…óºþ¹YÔ#ç°û¥*TD0¬ÕÍ:E8‰ØÞ”NÖŸwËÆÞ™lx–ªS¹PÉ¢ŸUïÄ6ÕW`%ÌÒ˜?©Á­½êm–\o€ï4¹orÔÓÝyÚN>¨íƒ¶Â”Æ«–#ã”»"Z|Ô…I ÿ¯™ìžàýU?t\Ôxe`_Ž… ³û׊ÈÂ?+Oe ±6]ÒÃZøü`N€ÕmЋˆª¢}uè—ù5ö¼•­:z»|˪\ñ =åäÏœVÆTn¯È¤Û¶½d^˽,6è«À6"KÝÊëÉžÄùèliÎ}úL¸‰—Ø4ÉÇ<9â½¥ïÌ0û;€Ar8,èßkŽvóJ3CPã…DÑÈñᯠZ#LX*S÷ÈÀì ŠMãºø¥:\1ךƒ+ˆ½E‰TK O @µÅ°rtf!ìY¥@Kóƾÿ%#ê°4ä!­fӻϓ¤Ýµ*Ùië°I8s¢Ë®ƒl¤ÃBð™{2ïÛbÇnWç`HüDÃŒîþ}%&O,Û}õ[æ:½b±°¡•SÁ%ï¥cø×ॆʤFVLå¤÷OœÄÓ§¸íJÆ.à4uR»†¹àéñt§Ô:,"œN3(`î} Y‡›nQ·ƒ[X5?b³‰§xÕ‘\,rHš(<-v@ÊÅZ%D!vÚ±N• Î0£¥^"#2¤u}î$Nê'[J¤3ç ("ð#ÄÛ+k‘š“ÏÆ­äæç³Û1I£ôÙ>ƒ"áó§‡^C±*Þ³“†jÅÍÇ߃bº|@B€„ ˰Ñá5ª5?µ«U Û|\YZWîÈžàJDTó×™ÒH©{r>RÞV¾¬-š]›ÿ­9> b œCú¦¡ât?ÀªAÐÉj–>°~>œ§3;M$7ñ$tÖš"S⢂|I¸`rä%AäéN]®‹»`N²hãô˜œó´÷IhGCÒ0¤¦£² ièpK™Ç½È¯ð‹1äñ?Q`Ò§¢,Vß~ølË!B‹HÄêÍ7îÎg€Šèw#f¸…ýl¤à¿¸ oÒS:Ũ—m0ì¿Ø–¬•ÊoÙõ«CÄšÀ‹G¥nÖæFì Ê¿‚§p‹ë?*z{±ý‘l,Áe–emIµØW±)£`Ï»€Uí“%a5¸iQG´4‹1N“¥¿0 #ÈÎnûyß,ï’¸>"¥šî•îŠÛä¦xƒ¨èÞ‡g1"pIx3ˆ$Y"±_|5ÁNÈ~NÜQ@s)Vİ¢Žq Çq·¡ºh[¯qÈ’b?ѶýþôA7K&Mò§²òpfЕ'òÝXi{ Pý ]½Â«ÃÅ­÷! Ì8é/w9[ŸÏ“IتۯxMö÷jâʃËX#6­î_Þñ«®Ú[K®‚Qlqö¢Á©}aÖ]¨°Õ Wª_Jÿp@r@ù`0pÊ£Ž*VXΤ‰·²ý·1Úó&ʉƒH\’ÞÖýc‡x¤Auµ“ï཯g\‡ëFZ¡>ˆ`?Ù³ˆò¤ÐÉ›Á2›Cæ;Ç ÛÌjónäÙàBÙoå»™ëƒs²¾C¹Ä˜ýU›†~D3­k:‹ª«º‰üÜ ‚ðrrÏæ1—>Ú ²XËîy 2…/aj-s4æsÌñϦyŽ¿õ5TjšgY¬X)Á>r;ZÇíkº‚°êþOÖ˜†Ë›g9¸œ8…ÈYHRK@¨ç] 5Wp÷‰ô^ðúý<Qˆmñ×üÍ¢n…u”kÿBÍ™ÖÉäûýV MàÑ7þ~Y ¿wŸ´½"?ùâ#‘ú†_ ÝËs›H0ôÐeEÈ}û;|æ `4~÷òÕ lÇ(ŽÎ9ɹWB~ü2DJ®{“iîœdŒ{COJeÖ'’ˆ®¾ Å9Ì 4ŽUŸê?†ÍÔöE_] Ùα'?MŽ/OözRE—ÑÝûYJô†~kc½¯ÕIÒ ­Ñà[nï ‰×/Žüƒsýs£ˆR†b•“ öýMÊhP=KÒ^Dq[j]IéóÑ?l•¤ŽÓ9é@Ðñ3ÿT÷A3r§ I=­OO%)8 ÖTwž§gè„÷РÔÖM¯ œÖÑ ìè3MáÉü.‘γ’]3ý¸ Ëã½…ähPƒÌxCK{éÞªÉ ¸KZ èÆe £wŽ.1ª1€”‰ÿ>±ÞGL–r­ÎªwLšÅUž$ÒnÓFWw.x.1­üu~Æß‚Žg4},¼i™JWoG Ñõí 5«j\`Ãòx1ˆ­ /*†` írA¶ºäTÞÁ„1­ñÄ2Å,bÇ aDOšÉ5rÎE„ç¡-új‹v®×x ÔØ/MNУsš$zaA5t œ+jC)€Ëi¡ˆ¹ŽËaŒáƒžf½ûn”ø fW’àðB8Zaˆ‘SBÆùß/€äß.ØqÃ1ËÔФk%/ò)bAéL~´8°$”TðiUòº'2tA…·Ú»š‹T¶\缘0·ëú÷¹´^N'àÄž¥‹cëÈß`¡ÆX^‘DHkÁg]Æû4~N„Z^wÖ31²¼š‘‘ !©–ÕêöW’\„ YhˆËñtšïf=àþw¾ëèh„ëd­µN:³ˆ[‰í¾`RØ‚›\õ{ŸKálƒ†M‹î¬šé|•îœÙo¬ïï'Á‚’Âú MùqãåwÈ$šQty8°÷ ²1tØûCÃR‰-öˆ‡ ©ÈªUí ·#Îó¿é‹Êb‰V)å˜hv„)4)íÝöд)Ô§r–Râ¶™ F4á¡Ñ=Ð/Ó…#y¦þÛr]ÆŠ§ë”b†}”͸ˆr±ÓcƒîvŽçí“Vû}l^$ëª^NòØQ¦jÅo@Ø^ñcF §¹lCÂ×–ut[ëÔVA[Á[s*Ýãwœöq @%ãpIB¼0ƒ$V cq©ÔFªš«f—þOÑ 3‡‘ÊÝ2X\¦Êú¾…7ä¼®NR½‹\dŸGZ0Jz]ë ¹"»·YÛ¸¡ æöô½LþK¨)ñôû¤~#ÏG¢Þ¡Ÿö¤N}GüƒƒD{Åýß‹êœuMÚf:„•Á-º÷ÈÞu±%õãwî$çë´i·ÔW95A çuÿ²)ʆƒWI~qê·%qôÀkÉDžÒ)g÷ÒEÙäÐNðÁËCÚ/rðQ÷¬H™|ALºÝÁ£³ˆv‘8°&ùýsò”›[à«|!òh2/¹FüüÔ¼cý“5Ù]½‘°û‘‘¢BËK5ÒËíöZ8Xó8~—…dÚ›äÊU3t•'¦Aíªq¾½‰ñÖ¸à9Ë£q•e~Þ¯o9=fD iĆ[Hf¾Ý“âŠb{Íú¹x%ìKj“ÆrYQ|Ãð˜U® …‹¹•[ºŽtS«Ÿ|$ÌU»¬0›ÌÉRl¤û(}­ÐÿÕÓÑJƤ«ÿÆØ±žaëö_˜Hè98ù! À̇9nòäX€ ˜2,âòjF&€ˆw<“ä;‚®}4Ž=×q*$IáØ “˜O¯f¾ÇâÛíû€t†Õÿ¿wJÄ¿hDu{B²n ’›p@“b²\oòmÔ:"o[LÉFmÎ%³ÒëÒµÇוØ@8‰²€;7íU•^XG¨£‘ÆÚ‚«)A9‡kéçÿÆHÆðXL(|ÿ ô…ÐÃñ’Tí€ãù“OeÑ 2å}09|ôã×Ã.xŠãËk³iÜÞL‹ÀHUÊòÐ(¸Ý 6s:ŠŒã™¸¹ÏÎWhËÆ£ËgJ&qŒ%íOVÿh•ï¼¥Åh/Ô˽jØÀC[R1ëòù¼<ÒÜˤ1ÉÉøÕ‚C¾#®ü[©k »E÷·c±ÓĨo ó0§Áa5É`¼þØûÊ Q…g9‹8íêkFs@üµHáÙ™¤‚ÅÄ©ŒhÞ:Xç¦Ý‘–r•©„:”#¾ò<[fƒX¿¬ê/ƒXuåzÒ@ÉJô>*Ã.§Š‘dûv-PZ!—‹âÅ…"ž6*;%Õdr– 6 ß@®ó ÃpV¶ÑüãQ$]ÇÀâ9Øe²üZ2¯š]û6ûc\ƒ³°%]ÂR݃×ÜL×7¤uÑU¹¾ac'˜Ä:ª£°tЀ߽;&m$xõu¾ç#ßß~6ØbN£)êÆíäÀ=óê£s<ÃB†¬äþúÈÙOîÀ׆ïXà!J¥àHg›‹ƒÐ,šÉj0ŒŠJì"ËoØoѾ'ê²ÎFÂO¸×U‚Òy‚¿C‰Œ% ½mdWòÄÚ*”µH_û‡×`€<ý;C㥀6¯MüÍ…ÕJÄlÞj¨^ëÈž•Œ$ÈÄ:æ¹Õ¼êÔOÁ»¤†%ŒÇbûöø¸§­Ý%& *G%ìÝوſš–²û˜R¤¸hìûiJWîêô\mŒlu ð ³cùZÙšLüå¸]FéUÜèï=Í,=\Ù¢«S½(iúƒ 0´Ôtî&©P¶Q¶k]èxxH7†æ ³BLY]p{‰½Ã$”yx³Ÿ&V»ßi3ù(Õw‡ ¢a{~xÍúóÏ ß÷a{Í„#xѽ üìüg’¼2{ ±?üFœ¿`¦_Uø7“ÌO]±ÛµX¸J*ï¿0¤²v³Ø)` ïÀ€€´"s­ímÚ¨¹éQ2Êù<=/NNŠSOkì«õ+NUÒmc&ÚÇñü 4†ÊôÑ{–Œ4Bf—cB¯k³óV¦}جÁ§‘jϨXêQ{–óLþá`8ôJOc$–¡„Ý&Wè·ÓwÚØT \H•0ȇ›ÿR vì«3¾xŠp@oózz‡ÜfNeÆa÷ô©ºÄªÒÿ>;‹jö À©g?`Êû}ÄšõŽž;ÜZÖ©d±î!¿°5*|P¡Rf{”ÈPî‹~#§Á ¢#\ÝÔnüâjìžæYÚ~‡±G¬h H\jk|›¼K)P•:#_Y¤DgbiÖ£ÌU+s¿v?€NÛ"•ù àSÛk'ÆJË6˜y‡#À~VCd2oKdÚVjì…6;¯uKÏ—&´¸Ùbµà·}ßP¤¦-šóôG©—O”!ê)Ÿü¯GLæê»”c?סðJû½•žÇ¸iW l˜l?½†êí$Öà+ùüÛà8¨ä„ANàÄàéKn  ‘âaÃlÚ4£º Üi¶ŠÖ¼ö> DÒyöÕD²ï CLIÊd˜þí¹8±í-9#õ,Ê›ÌQ-w±©¯S•X|U´þY&)zq¬X(L¶Qù×*ôR˜ßli×40”Kcyu¤ p@¶È 9ÙÝᆲ€æÑ¿JÒTªžHéÕ>~0 íé>nk “ÎÙz‘ò üT%. ƒŒÌÖ“èZ? hŽD¡¾Îy6”dø¼Ì"ÿµ'f;áìíˆ2ÃY³†­5&¤ 0Η䖀 ±‰ˆ’Ò@Q˜{R|ˆ´O@«@ÚÞ¨”‚’ËúèáœÇbõLŸ5Ó˜Q¶ŒÂñ 6í¢±‰‡¿dÄóêñþ˜J#Û™™ìa¡o¯g“W`âjä›/÷Ï^À‹Ït¸ë¬X¦X£ìüƒÙ'&¢1ÿ±\$I¶n㺚¬6é:DÖb4Ón&¬ë43+œ*=‚BƤíØ5Üú.)é™Ùv³EIfk¥%Ì8š¬s^u:õ˜ »ô a2`€(Ú©OÆBø ËÆ…üÍ:˜½áç\C¥r&U| rM—þEkϪÜFZÒNøÂ² ŽD¸>dr9ZLJÙ¦3JOä³+¥<å¯èbÇÒ£ÈúֺR8AûóN-*-â>”aIn¯nD’jDmO–£Sõ"-‰«_{Ïoe—»ï°51¦S¿b¿á6J%{\ž»{ÔçF{Ì6 Èâ¹l8B.ʃSäÓ6Kme•CTI ÒÔ¿¦ØWmÌq›‘É16fÀXmÞvû!Öd¥34rµÐëâ³\wœQ±#Þ mïωPí\T–º9ƒzC›¼ºhÊ"…è@ Á:U˜k†ãUÊ/ÛÓçüòÔâmA”kÑ€_W‡×ñY<‡{ J¨Za”íp0Ëh•í”á> ݼ*·µzqè2¹1Ü:l-ÝëJR÷CõþZ:››â«7nÝÞ÷ù,¦Â3'M/E6ó’# (v·+xÒs]`Ó]G¾×î &[Fµ!÷ÆWG¦ 2)¯!2¼ µ!ìÛ´Jsi™’–òg7:ñcnÅ‚±½æeuP!äZû9HøÑ ,™'îº8C1¸ú™°RÇ|ÄCý4‘û“h+ˆ“s÷·$¨¢ SÎÈaß–4‘ {ïô·š æÕ’M¤­ÛºŘ&à‡’æ/.…OÏŒd±~Éç*™Ûz|*ðï{¥6eÒo¶e©Ù¸ÍÿsJÁc¬0Å`È_ï³:¿½¤±•øvVÏ ýáŽ-3ºäTç³P¸L"ŠQI’›¸£× }‡ì¥f}ö ¬Üó 1TmJì ™q¤Wͬ\×c »u®Þ<„™G“…0¾dèk±1Ãź¤È‹ïùùðÖ%G¡vÅ+\¶Ži M(­èÀ ïÿáåôé–Ò¯½±ú]:[ <{ÈÏ—6!YxyÏž¡`Œä ûL„3mî-þhÉÚÙU g4ªPU„n¾ÖOÅ÷ß]ÞåD×p´¡JD´UéFø–éøžáK|/Æ”HÊ$¬QÍ%`À…Äûa+`ÊM’]ë89ÙGFÕ6ÝÜcX*寽(ØÑ Ø ,²»ºRÓ(=õïÃx[£n`ÊÂ6 Æ9YA×_ú¸˜èjHðPøÄÑZË"÷ÔŒš±;¼Ãv“²Ã¨>Ùè|ëdÏ;ðM÷-O° ÔXÁدJ(L¨¹Ÿô+J¢›Qy En‡/¯­›JöíÕw£´ Åb«C¼Ž\øÛ»UÂçU¸¡ŒÚ…—^€5ˆË'á9)¿]…ò=*ã3¬¬ß7¼saÑê/^׿Ÿþë2È)~«±îÎ0va/I½ØyOkÞ»I:XãàøÇÝöï)%óó‘Ê¢†®Ö…é…å÷+e•b‘4"9„™ü( Ú8©w´Z ?]ÉQè9%œôO¢Ü{îÿ6åL³Íî<ý¹'­˜¤(ñ“oM6Õ¾¼ÆÿÙd(…ä¶sh¢"Tâ ÂÈU­ ³Ì1Þ—0‹ÇõàSv%E§–± Þ‘ƒò›‹Ù7‡nãôè-h?$>2ßⳑÈ5eä]ÕÚlim@ø —ñEvjîRW¼È@ísÆ-˜{*¹8l¡©œß=*¨çXÜ_YZ<žt Ÿ‚\0rsû—ƒBpÜÀÆÆ£lL°‰˜F,ˆ’œ… Y™ °Y™Ií±_ ²1ÆÌ,_«¹U-|p~}üU©¿G󛇶ycáj=`y)-ñNXC\z¸Ip‰˜íø6 ÖÎûfúüšBY +±™ÒÝ êjE´}0à-_ÁâúKÉ2“a6‡ú$¹`ç*.¿Ó:°È8(íðG2Á‹«%ÓÆ„ÓnçäætÆ^ÀCú>䤫Ú<4Öö5ƒ»4¶Ð? £%ßÞ?lbØÈDNØ…áÁûQB\1¤}NÉlH-bE¯,£Ox@yò­<Žé8ߣeßE·…7‰zxýÈ£t¦Ø Î’1«#ñ»´~ädùŸjóáT¼ŠÔ¶9¸2k=2^Oœ'w¥¨éP‚µ•­‰á€vìÒXC£ ‹W½(%œ{J¥(pð•c9³83³:AåoV¹I¬”³žHº¯­”úž§ä Ç/Ór°1ܼ…,*Bö{&ªÞP[œò=¾ó`%6WQhõï¬+Å"&ÛÛÝã’M”׳I½ÐŸ›n=Qanæ#Y«ñ¶ê롺·(>‘>/!ät/.`%ênØ|1@ñ4è,,Ú…ìK²~—ž`p.¯2·WW K5·K]ÉD3ótKÚtÆ`G° PÏ]μï•ãRPr¨·M¶@âìóþ¸6õþ||þÌm[<7<%)#IFÓHsû¨hÀdö{³<ßf4Ûí_Kæ]’'í„«DËOÝAµ8 /õŽ äKe¥øÄʈÄ)“g·hû%!$`ËCy…<G;(r?£ƒ”ä¾@“Á¡Àú:†ùË̉ﮃ†ù’VÏÓŸ$ÖÇGÂËåÎ2³º~'…·;Õì_D"ûBT:B¢) Bú­Íú,ünZPLLÚÌZ}~·ˆ"g‰X<%š` Œf*Øšì š¨TWÜeã“6£+L@;Ì´]¦ ÷[Ó”… D§B£?¨«•!3œ—8§ÜÇÿKQÆ›üû”ÿ;_—%‰ËVxè ð„îÿ²à¢@ÃMWÞk4%cE×xú]ßÂ^ Ùü2ëœ>Kfx™Znñ9m$lóêµèÆNj̹ƒÆ)„ÐülÜ£PŽ;ßwÂó@ÎÁT…¢ èø»§tÈlÿHWßÃoñ}—|Ë÷ºöñ«+doàÕHuœ1k[+TY3Yþ 3³Rï³7àöcÚx\Ñ)θ€XPô·‚çZàk%ÁCè^ß®wb16yìBRõ„Õ_¹4Üo»'˜èE»(Å>Рʉ֑"E¥ë^¯«>#Ÿl¨‚,ÜŸùf3î¾a†Sê*íÔ[©¨š”ï?n ¦Á<Ò”yÊâÜ´LÉùŽË"éí¸ÊËEù¼éÂÔžÅ@ýèÚèÃ|¶C¹' ,Dp`Ž™A ýw³uFeÏ”Ñï—Íßß>Hb¿¡Ÿ.¶â .áeÝÙ2ZùÁ(Ÿë³n¡f<Ë].Dl<ÙU¸ã5(fûC¥A@\Jis1lë!»ÊD‹G6í‚/Ý=ÉNËI‡·€Ò1¼à´¾eŠÿÝØ‹Û8pXBdžnu?íß”œ$!ÚˆÂJ=1N¿v€÷‡¢bs}§ÌcDèãä4‘Õûq¡’RDæ÷óßhJ”JUbµÞ,Á=ÅÞ.r_ü±€×E¤?sÕ‹ìÚ³áÙ¬Cçè¿ÿ>ÔÝïfé™Ovì8Ý&¥c}‰Rs¸Ô°õi0`ê¥þr﬷>ô3ûÖ&m’‘ùãdbô<ÔÝsÕÃ^;„É•dL™ÏdÎ`,>Á 8ãíñ/:Hž­áè'“->¶ÉküjÞ]~Òd´Ø¦mh6T#À˽d¬«œœ@!ÆÚZØ4‰üNYåS©Æî_i­2´-Š4UWWž™ôé7½ ®<€oÏÖÀõ‚('pbn8¾5j¥ƒ.»=} ý®Íaä½qÚNþ$ñ±uuƒ×2_³}oŠäW‡3~ٯݡ¤´Å•[ÿ*äÈã=!0ØBÍ„ŸZÂŽ­‚äÑäzÒÌ›=Ǭú?”wÕ!FÒFòèùÃÙ€Ò&—âj RÛ|Z%Æ=·vÈ÷ ôäÎÔÛ€œ§.Mëd”ùN•ÜËKz¯nÚ­ ­™†ÖùWð,Wô@ÿ–‰rââ¥#å)‡I£ÑÃD»ÄA¸„Ç}•Ñè5fñó´Ú ¬œvÙù_ßÇeÚéÜè.äeŽÙ¯²qý^½«D,Ý[@«”s6.pª¤¢•ƒ ë÷Å¡GâT¬=µ¶ÞÌçaÑeËLÒxž‰Çbu¶üÉó²ÏV¤?5ÌÕáà¨y|µÂ[“éþ9­Ü¹g /?™3 .¥U»ÀÂýÇÎÖˆ´­'ýº'lÛBí;Ôœ•.Ô›®e¦  ëˈo1Ï›ÓßAûá‡b%žf<3­TðÒ¥Ë5½®¹"J˜­u~;“}·ÙÕZ*äöq>_5ŽÀ#'°æ.äA#Ñ*…sȬÃ-r·  „8â¹¥P„”·iì÷½¨Uí‚ y—O[—°©ÀýiÛ\—™ „^„àŠÝJâͼ°Ê¶é¼ÖÈídŒâûî¶ ·Œcœå­ÆþcÃY<~ŠJŒPJN ²lÍד:=4„•þ'ã=Ãëj¹•ïEF¸Ÿ)RŒù,4zTO—£N?\Y¾>¾kio¿ê•– I‚ÑM¸àZx­Ï°­Hã ’÷ ÷)h>”õ–MO>ÜÚâj¤ð‚U’ Nûd’Að ÊSA‚ŒáˆŽ»V§ßœò»ë$f„Ìø_Û²F›ª‘šÖfå’„ŽÍ+iÈ1åS—è[VÃ9È16èÒ]󃿗y‘Œ?ÏY»¥’-|/l‡32U Wߌ¯rúÛñ®!‘³u$ØòâEÓßÙ›; ŽCÝëy©.yÃ$„)øç )»Á¾Çv޽­¶ÉƒC‘ßý޽ed þ¹Ÿy)ãŒt íÜÆ q .Bµœ‹`\0a™$a.#Ó¶Ù'û³™RãÌÆ’죸Õ/ws^ö9üêζ‘“×x_F+¨¯û.[òDŒ°ìœØ§0› T³ùÏ­æW{Ûdq¾<Šj.­:™ˆƒ¹¤S2¡–zY #ýüm[Pž·e%Ýýõ9«•ÃâºgÑ"wÍ¢]†ª{ò} y1uþ2ÈiáÍãEzùF«oAx/¬ÁÌë¦d™)4œmÜð²ØJ‡à26ªšNt_¦)1½h0ús¦Ö°é—Ô7¤d<%¨ð4Žž-ri„ÁKApo£x2ñÀ÷Gò¢ÅºF^G¦\.ÐåO®9gë’ò9$✦ÏÒºˆcÉÌ«ù‡“8¾)Û?î?, ßÙ‚¢Ã…Â+ÄòAæp±9—}°IÛ% ÍøD˜¶}†J†LKsõª¹Ç+Ýå,mªýÄg»»uP|cù{i/Ø•Ï Zk¸–è1ê‹ÜyŸ.¯w1që|CÉöð5Â8‘$>õ¼tr Isÿ¾Ô‚ª» ìt9Ç1Ðxêó«ä½ž?®×ì–i5 ¼Ãd+Ã+C«©§þ'ÔVl—ªdFÒ©†ŽŠLªLLq¹á1ч5å¢A8Ä1ó㨥ɣä~è_„㸑±ø–xÒ‹å+vÖE<„Úûµ8ût³ñÆÿµ¯:sÌT ±üäŠáý\ÐÜ2–LöŸ%°­Þ ×8‚T°}nDã)—X–Ú/’]dÐÇ­ ÜÇþ†Ü#àÍx›å¹ŽÃ`Äe¥ù‚œ¹Ô¸dPâp‘„Ú襥QxYJ?d™»ó þ’ôÍ[GÕÊõÄ[d‘`ÑH’6^M±H‡Kç$Ê;“úΘÎÏÓ9WbÚä^.ÿå®LÔ±Žê*\&m"º4N]µŠà>ãe~0o®îw.ÕÝamº§µÁ cIc[¢¿×¶ñ_—Ÿ•#\ï6…¿er{8É  µã-º‡$ûö²Zfšex`y+ÈüV‹{{Â%°šþx),ô˜þ2š©gBFΚFfJ[Î{Ç\Š©Ó\úAÅž“JB>a‘£ŠÐémàÈcyY!aøÀ‹d²GÃ>;.Bñó˜öwçÏiìf0ÂH¤ÎÞð…óºÔI§DïÀª9r˜fÊŠøúaÓ•ˆP&<+5Åa$¸[ÒîpB¢Íóa-XwÇ”} DþUIæç}‹¡9,‡ÔOÿ„ÆTpKʳFßÕÜ?æ,Ý’_öìaÀŸæ±^ãÓ@S Õ»Ï%»®;õ‡2Rc²~rRíBŽ™%®…–;xhlõ5x\ˆÄëè[;‹Îã“ÜF̵¢­ÂçóÎ?XXÞà¶w€TÏiÉb^{DÁ»ÄÄ¿¤ödhÜõ_˃©Œ†~Þ ¯œbt6“áoŸvÚBéS罡…––kÌ )rhÜ üÈpTÖ›lÊÁBº$íP§@—J-lëæ›!X`á’=²Ý›š 2«tªÓÛLFíèu£×4+I×®9l×XF¾–ù+X˜×¬†…& ò®pÎû‹Î,›2Ëh7¾<+ŸBO™$}„“Š6úÁŒœ‰`¢ûQ/…‹â뙽ªuDÇ—wl¦Œ›Œü$£ÿvlà6®bÓ±ÁJbhfú¹•^mÞH¨ùÎf™ÑÛ{ЉpR•èBðNXNU «‘*»a#CÊ¿'ëú ðšS †‘‹9GÏTRíϘÀÇçQ¢ê€‹‡Sõ¬&ònü0:Dá“®þ«€q-ÞZG†üX\äOÖFÄË S7iº$öŒèºò&<ß (xIû&×·ºÇ‰RÚzVj8& ª`Bã4·*úX dƒT*z“¥‡sнî\;4*“#w¤¬,,iŠ0©w±—Ϊ/ 6[Zg|¢[æ"BåÅiG>i¾"—Z!{½˜~‘iÁv`ˆüòï]MÙY©¾ëæË# A“¸,’ÍÂZ•®P° à¨Ë¤Á® \È‹aY´w‰õÝÍ˲۔ /ãqÒ$kîþqnèỠ還`ð:2Wcõ!üw6wÛ`k!槯›Ï€U| âÕµqÏ’á:¼êe4°p)%+Zã”Kxõò*y/ô„¢òImyÙNð˜6n†Çë…"2KÁZza#hs‘5½›MÜ/ÿuÿ•¤fsú'%±­¢«Åx-N~0!6RJX‚%!uäÚ6Ê£š¥†ù¦ÂrMIÎãWÑÒLZàØÂC꿸ڌ­£ÕâÛèûÓ¢`å÷[Á'Jcè ¤c§½tü†Ö´O\Qëö“YŒV[ß5 Ø…y##ƒø*E^3ÎÈëÅÌÝtø£ ‡i g˜#¡Âæ§Œ3Ê©£Ý¨òÀÿ " ´©…¬ÆfuÁù T¤=Ц>ýžÈ°ë(eLŽ)íl|P‰+þ?„s7]xZšV¶z0E½V”9ÈÁRn)a7Þkì0ß#IZزá÷e] Àpj%:ÅØ½ŠÂ«û—Üiè³K¨ AL?ß@R ¡5±$Dp=GÇ&I1—OXÞNa¦oï9»È#¤ûâð<i^AÿÔåÜ­q&–¦å7êysR¸ù=W0äí˜Âi‘™_‘æë6‹Rk¶ÏÚy3Ìt[¶·à€%Á#Ò­ÏHp؇ÈDiÓŒy¸ó?¤AA ²LGÆË"ñâ¹s÷‹á!Z–˜Ž%@b«"ŸWþ«˜›a_,B\¡HÉÛ¿F¡š’Z» ©úœ™b@}Ù ¦’•Á%œ‹¡½ú‰"°¦ã¤wCH!‰ªiÒM`½,éôIå5zà]ÊÃ[œÓ«¼ˆ¦§ÕüÆšÍzI’UŠÚÓ>úâR¡>5e.vHšcsiÇ;ÚU)¬„‡“ŸÑý/·lŸíܦ]/ ÀÄ«Kˆƒn1§háÐT9‘pû '«[¢•‡&A•‹,­‚P6ɾOád*$çê0â-“u êÐqæUÐd¿³½ª_ÞV®ú¦® r•œNÂÇiÍK%5Ñê½±|ƒ ü6®Ê¾Ý}ÏHösŠÚ¬BÒîÅ;¾0ËTh‹æ( #HšV™ª|©Ç¯\ñÙÆ5L*¤ûRªž'Jæ4Ç¢[tj½§ziÿk- U>±±(:£–·§\ÅC…ðTŸÁV“p‡‘Vì6Û­ƒgÒsBÕ#ƒ‰XD>µ9C»‘£¡£»m-Ê.™ï7Uo&,û$OÙìá~ èu¯Ôöd¾ÓÕ?–•(ß>÷Dfà¯ÔÑüv¬ ™ß›ãD$Ú6îX»¼’ƒ/¡š q +9²NÅÔ/"°‘ñ•••«Ê Ua"3¬x°X><{¿ä…jîo±£éÐó¹X#ºÂ.—ðêvNyB8$̘¶cbƒÇå’È+¤ö°/™e="ëW‹¥<˜q‚»×xı‡¹5g½õ Fõ°ƒhÇñ ”éŠpF.4~&ÒÐD!°wüÉ "(ÞMâøƒP¿¯£~qäDö-žd.~˜ZM«;»)£±9ê”Rv¤‡Y^w¼sTñuO=ºN1Y¤µd…åï1`ÓTm ‰n°hÄH?#¢,»G&Ùæ§dõ~4 à ñ¢î2I.q2,Ó›Xmçn 2 —€Œ¾Uo{1Ó˜ùì(‡\6oN“Ø¡5¡fðìŒKß —º-¯P€™´ €õJ q¯ÁJ¸Ö~©aeÈ£_ü…sdtä§|„a ŠQÁ¨6Ýú$?YF›3¤U͸w _ro”¯,¶p­i«øíµ¤ Ô=þ&ª‹ L–°¼.Ó¿’°½¼A›yy¢²h­’Øu~ç„1þNƒ$áqT;Þ—HN¡ì9Ø(¥ZIØ"$c¨ÝiÁºA•£ÇÛqø;>»Ó å÷¦…Ùb\ÎYq(P`¼Ú&>n0ª„A Ж9;Zwz) Õøü5ý„¹I4üæô²¸MlŸÕU9Ä£ðvÊ£àg¾çoÈŸ£na1Æ2æ~ʼn]†-(ÕN[BÑÌììí» UX×à É>LŸèV`\×O£ó-ïÀ€N«^1 «9Ët§¯á€„ŸkØ¢“#áO»(â[‹àüXze(ÿgOów¹²× \çbm6Բ‘â (Û÷A亂̵àÄéœé&LÝvu„H³Oa”ôalõ®ÚmïÓù_g)zzH2R¨4 ­¼v &‘ û ]²ÛòNWA?uz 1cÍ”õ/UíAC¯+—UÐÛJSîþ©TÐ"o’Ù’ÑPwÚ<á!êÒ%ð×AùEYæ EþçR—¶VÐIûNBfìÕUû?a:ºq…2‹”ðÈXý†jذç·9þª5‘£#Y‡½$|rsíŽßòíù“õN ¾á”ÞÍÇñÌhlèꟆ¢ù"ÚÛ³äK I¥¦c®·Žº^¥‚¦ ¶êÜÌmBómMjH,Íncg¡ š‹ãÏÇnZך¥QAfÿ}²0+êä:˜¡ò+hvšîÌEd¸Š*c‰Ê“…‰sÚ/µü¤:,ÂmSž6C¶€’gŽÄ>ð<ˆ”°ÐòŠW½å‚ó˜KæÄh¯ô¹fPû¡štš0%€Ì„ªß9Ü!Ô\Â7VÌ¨Ž°oË´†…ô³/‘€¾Öoýï4*M÷\}Q>ŠfÊM?ŒÒûÀ³.<ÒÕ3äëåõ6Œs,®Ñ#àmc$@B´×jvÔ å’UoÊMÚ©\8HìŒ7¬G1Þ%€‘Ú\µ¹(¹#qú:c˜\ñÁs_üØïóg0w˜2â ´xñ/¦æZÚ/M„8/Dß›¦!Êͺþ¯u ¬R!õú=¶½ž‚åª;óR.ÉËøaØÍ8½ã{áiîÏ ÚJxq-Õ”¼ DØvÖ÷7^ÇÁMHœ`ltpÿOˆ2ùìi³!8rçíHl¸•¤*GöþÊ13b’ã…Ùƒx õöêñÕ2Õ,c¡uÕA’®‹LáÒ¤¢¿<K¸jÉ…ue6fkÙ.¶#5KN.¼h/1Ë9><8Ó]?Äînb6ß:„ÀV¯¾…!¡G¬ùq¾Eƒ ÛŠ!E‘dpfŸÄësc„“ÑEôîP÷¼Œ1&ƒ›Ð0I¶QÙe›æb«-¼•±¡ATp$þ5š:½>ÝÖ{&lÈ/°¯”íŠ ïnÃù,•÷´É ,b®KÑŠ!+!šÙ ØnŒv}R¶±HÎg°“0‡Ž½z0Ћ0¬ˆº&b„*«ØÒoãNvé€80–b!‡oŒXN‘à5¡K„p̦„ªSl¢Sö1½ïPÂõeá" ‘í•ÓóðWD÷–©ç¼ŸàsïåRK¡Áúˆ©P†d[â>ˆV"Åd)ø‚`¯Á¸U¸+©sž6—r“®é*ŠkH 0žóájÔà¦Ì¦ŒQhá{äÈÓlÒ2:¥°€yšæÀ3‹L…Œsèß–'X¶;(,!” DŸyº†Î/A<(›(T išu?2¡Q³´OÍ“#:TQ!DbkL[1uÃÎêFñ鑌'4q:wÁB¶KšŽ·íÜ{šûIÎ ƒü'¤ýobG¢WÒn­ü¼ïË#[É w''vwü1Í-+¬¸ö/÷Â7à°ú ¶µWYå/ZZGcðYªä8Õ>LX¾ ǾŒªHkæ_g†© &¶î)÷” ±ôïY¶}* Ž¢€‹0úÿl¯ª„†OÄÏ\´=RV$†d¼ÒqŒ'7ÿWïä$:/º¦äuôóŸäGاdãU'Ž’>Å{yžÍP$n¾¦´.Í ,¨\µ4piO`³bÖˆ¾@; UõTLÚNæ’­WæÀDZDa;£M…›û ÁF *3€ç„€þçãÒ­54Ë„ ¥]ÛN~‘9ڿ擸Õû•ð»± £?½ §!ïÀ×¶¿xÆwós<+ƒÛ×µK™Äâ°dÓ'Éj5 "·wϤÆÇàˆ‚ÖŒw Ó"³ÅG 'Ö”¥=Ï0Ò(5`§¨¥Ïn Ø«UÒôÌþ‘ Z§äc^d§ëÁŠ£2\Xµz1$@ Ü–aàz›ßìdmûëª|IÌ´­;e ¬pL!ÂrFmF.ÛWäeeÓ­qýp0¨+$ $¶·ñrBqÅ2E»)ðŠñôª{ò˜Yž:•Ke9Í\\êÌA¼=ñ¢WîC&%·FA1€´}Þ_é £áL†ká¿ûp&ú‚ªPDõ-yÎR*oÉÛ£_fòHƒâs˜Þ—½Yptc‰š „õ3KA@ë^WÄ¿“d@:*çuœ )§I}„¡u¿—ðð¤×³‚â¯Pcn¡`ºèê÷‹?Åý´” ¾Dïd“±.1&ˆ%PyÊIÅݹÑ[ªÓ+Y_( ×Òþ=m+:Sr§¢=/cž}cƒmÎàŒ´‹ØV{£ý÷Qf\3…#°j°æ½3«/-k‰1kam[š R!¾b*RÍ%®ì™[hS; Mԥ˴øˆfOá» ?T`…I­®Žˆ'hP j™qŸCUqa‹nÆQ®ç‰Ø%ÜñÂ7Y¸F¨tÝv_¿þY5ÀqŒG _þ§Õ3ó¥ˆ×Á•9‹iÇGý—¿¢BGµ:`Ç:[šEèé²|m´žAÛðÅâ(Oˆ÷ßÎÛdðÔÙ\·$;ST>9ÐQ•@Pà­t¬’n7í‚T{ÞCî}[¼ì·í[ ,s8D;hÊþ_Ç{2[&”I˜\ÃfêŒ0"*QSÏãe»uØÈt©±Ó}Ç|·•^t JQ -ÜÔ~ºd¸cºq›ë„d*îGF´½ÃM-æÀÑ\l þÕomÙ-e- àŸKsÂÁ,¸ë¹LK$©+ÛºärÊàµæDL³ “rÓ=c?>5BeuKÛ$9YƒÈ¨9ÔœŒ=½ZˆH'r‡Š!b–ªeS± Nš•£CL+È»ûáu8ôf²&hí0y`ËîÒ txZ„LÉßgT¯„‹ð®QÓ²Oê @ÛbzU–²´ë»dL4Љòjû³ÔJp&è`U¥«µãA)Õp8›_ÕöFr‹ÓÚ\ÂJYçùx ]É/ññ¾9Eh@Ú^©–‘ òÏí¸ç;DS½(EÕÛv Ò—ø¤8Þhù%rÏäT£(*ë=–è>êèª6þBX¢Ÿ1U£ÔO ‰Üž¿ý*ÐÒÛ1[4o°æ_½=á+ˆ »¹‡Ì®h ¹Þùý&0’9Ôç~Å|ć¥iý ª€E2%5|.üJ™ÓcFL=V86&ºÂs5õ`4š'ʇìTï½ÍLR»Që4°n%Vƒï‹±]jAúz9÷3–Qp)ƉµÊÛjtÂ4¬ÿ!ëP¾B AƒÅ„V»ÈÈ•²·ýþKë5 Ù|y7”R#Ógf²MóŽ©Ú,Qêé/íK¸tª¥Q†9&G€£;¡|ï"Æ×-™ëÉ`ÚlEÜ]g{|ô’(2Ô±µ¹¿‘‚4 ½.îƒ;X_˜œêÚ¢|Ž¥m÷¸ ùŸ}^ø°pÓÑÆ¬3¸¢7¾qxŒ%å™ë‚ž&Ùž˜TõÞøÚxÙ‹Ü]¤Ý³ÛD¢Þ|aºž·PLóTB°©Pä 6Oo~.J†+!qN ÐÛ )f<€ê:ëú^ûâŽÜy«KYï┫„//ž·ŸóŽ:5úì€í<Û›TóV`àôåu7>a‚I¨40«k€©zåhã}éñs™‰9¦Z.zÐÒÜŸµ-çáo­KûV ¶×T@s 0ìÿA¾×sÿÖøqJÇý]¯ÒÛØƒ®q—ÞA±ŽÂÀ_ð‰&>‰Fÿ(|-ÃE#·S|’)âÞmtS ÐSîCHúOªÂIܧ±M´äA"£}p<7”Å¡4ÿuëKFb ŸÍîûjy¢î0u¾û‡%Z«ª¡P¶#þX_~iÊÞ‹‘Ü1Û±ø¢þ3Ûî2ÿ¯çŠ"„'ŸæV'žÚç´€5õ¼œøUOb:qæ=r“·èAŒLôFBoÁ…ô°íÎõ.0â’œÌ$9YƒÈ¨9燫~OB<Ò°¹×Oy|›Og rSQ× èwvG$ÇD¢¿•S¬.×#Ê)©}f_鿢›¥/ß[¢ÓÑâ7ûp)¶)[ÝA‰Ë¸úëgÑ&pº­ôZÑëùŸ«ÆGŸðS}ë§%[pdô}Ìb.:n´—¬ñ‡P]ä¸É –*>ZäËꪃ¥`1ùý(Õ| 2©Õ*7Zðz!¹Y Ñ&è4i<ÄŸÛÁ†æ`ã7Òë L·ÊŒ”Zã`œ³+™âß‹}Мðfʾ÷ò)ز¶2éékxC¦ÍÙû×JI"°Ì”‚iÂ@*нÈ%‘F[}"lo€À`“i̦¢õSà'U–ú!­2âDÿTõUZ é|ƒ`¨šäÉ€‘·Bz„ß³K],¸×©ØWN²CwÇò±|,C]Iø½²“{–î‘tš Q(\¹âšs„Ø«ðÄ©?©rI’q0$Ë%¨*½5w–M‰&ÁzD×´Ý…ñ¨·dÌ!ÜÒ oɲ,bï9Ô‰=#RÍŽ¤{6…›4Ûg‚jòTêÏí@X³ A`YŽãJàhÂ_±äk8K^ÜÅü€ѽe[¿mø"/—i:_J :ß;^Ú¤ï3:†¶Sl›Ö)HL-1¢ €Ò_ráqXþ=RXaK÷ûGÂâ¸h«“t˜F*Š*·o¿9@ŒÖ²Æ»„ó,)g×:]!n|s"3u°×²QبÓbQÒ“LÈ„Bý~DS r‹¦]ŽWZóÉ“Á8!®;ûÆé¶§pØu®´äMŠ˜¿ªê< ·Ùˆ\ûø&öZO[œIs졸Ø."'Ùˆ÷}Ë|íùVŽ:ÌÍÜÝhnüÎvKª¸–+s°\ÿ‰ ¨æ/'JªÁZ–€FÔÿ )+³Èbv '/y²}Ð}{:ŸÛ…ŸÔæxD3þ#͘qžž-Sévà²d"M‹£öÑl—oz奈¿†7~›|/ ±éé|sP¨sz§…qô×òH•úñó`Y8bOì0c4E~XÝºÌ `Ñ‘+*‰ù=ŸvìáÌÇK“6\YT#¨2w„Οޗ©yØbÇÒ<ƒ‰ÿ :EMͺ> ä«€Ö™„Z.lä¢óFÏÓÅT§v¢K;ý;Ó̪ZÆ•¿ÜŸQô¥rDoÊU€~™Ûô™)/`9Á¾½qV¾C`‚3߀˜×q4ubËý¶t¼âwžÛ#N`ØvÚ²=M,„QG<í6(Š"›ZÑy´*ß«æk¦Iúî”[#%Û®8áÕøA6O4  RÆ<ˆ3£³²¾¢1ÊF›á]Í@aü‡¦DÊ#ÚšÞL“gƒ *å ™¾,¸Kh©¡ŸcZ&ÊXôÚ—ÁËÖ­ÑÄûEäì¿%똫øšÙ×T áÈïtd©Ö#€‘ËA´·9º(òª#èÇB0Tª®¼ž$‚ä–¡ÝÓ7ðÒÞP®Üá1žŸØºî]=Aîõc¼¯üцÅú?ÍpÚ›íú·Ònñ;öóeuÌ9R3ªµ:4©[Ä S‰‡A„¿q×—D¤KŠÆã>´ÚáÉ&A—ÀJö7~1Jˆ`ù{›êWù|%Ô5YZn¥ ~<½† ù²iy bñ}uE_PáÔ8mQXDØ=ÙÉ7Ôð€ ¶Â@Hœµ›µæ‰‰«Q Á²4Ij`ï-–W0`~Z!@â¬éÂJðzQKÛ!Öþª”uµ{ö[<q˜šDá²a¬ó½¥˜V …$}ÇöGU€ô!s™t<Ê ªáËŸxBn†Ä+¥žzj»<ñzIøà”•9çR*R‘”V–ÃÔ¡)Ó{-¤ñ¶X atŒ«ìñy=ù—k«ïKÿL?û4ŒSìÅ(]¬yÒ¢·~ÍM°j!?â©§—“U‡/u¼ïüvÕ_k(TŸ ¿õ«µÁÇn ¨Z¦æF&Bœ¾lµµ×DBŽ?mè«WGê _[*/¯¸æ,ÿ‹Ã1uQpŵiÍòpÎÈÚ}ÿѨ6þ®èôºÈáÃ6³í1G=Ó½"e úÐÚ±ýcá,qºÝŸ2ôS§}BîØ!O@M§åjO[3Þ0Ã_4)ç%²Ê;iš®ór£ƒ†~2à gØ1áÚEåÛ†‹‘”®µ³A} &'½‹È§kMN²›ƒ……€,yÞ·cØäëŸn÷¹Icü€å^¿»j•OH}î&2ç!„QµÂ=ÂQÏwVê„-%TbÆ?•1~eãÅ>Hn&®®;¬€¬Æ¬f_xš&/ !¬³Ê¦Çq‚È3ª´N¯s »L1ÂÂ{EfZ†¬9/pþ5fÀÀ§WöޱÕTÃ*|\M~}FuúÈœø›ã[ Ç[ÝÑ‘žO­7Ì×X‡|@$Ýô{s~ûC­—1ÈÉžÇü­Búvp¨`è½Ñc…SÛÛ¯Øù…«LkPH€&è:A›{r]|sW?¯T£ÊÌYàô­0¯œS©ÀmmIùV6 8eicÃ)[8.ð€–h‘(¼ø±6ÊE{@\“°:%¶9š2„T°åŠãb‘ƒ#‚5Ñôó{޲¬ìIx¤#ŠÈ‚æ†â2@V¿4HÖ®y8—n¨d‰=û¥¦‚²ÖA±Znû±Ç#4¿Ðá21ôÐ7Ý¢°¿¤PqY"„8¸‘öHâ€GQö=xëõ€ÂžÙ² /×jvß}Pø R¡ÊŽœ¸T¬—´'ªFaûïä¹ËOÞgtã{ä^A<¥§gÁp#ú¤6¹CýNïH>ôw†Á ]¶¡7Ay²ÑY–çÙ†¯]8#â@Þ_¥/å£O[ü®í5ïߢËäÁ¡©”PÈp]“ÄuÓw,|±âg)$óÉx¡ºâÉŒ‡5z9ýw_ïðeÊE;ðs.F˜­¢ð±Çº[r¦ ¸ëUçŽÚÃ|¥‰Ä`^ŒÒ>Ñð“#¡Ûîa œþ~8Ïѽ/ç«ëTGMØn ’öcìÉÜ6V^Q±V®|÷19²J·+QG Ù£q€J`ÆÌ°léj |¨ìÖÀé~ f;‰»±ä!vXùŸ æÞ‹¬A$¹$ôå›þË·¨è¶$x9uðZWäDÏ”í2|+ƒñ‰VÒ™†]8b«€éÍ£é‡íŸáï¬ÑÈaÖ‘.Ž¯Ã·¯BodÃ]ŸÃ63úÂñuT^Òù;a®9¹BQÕ±KtZV¤ñù>5P.-»ŒÝÂák:NtÉâ¿Ã죽ý,©Uù—Š'±ú¹ŽŸºN¯¶?eçLË!3õzëÔËéçe ±xTâÙÉ—Žƒ¹/al\dkÁ7Ñâml幞Ña´íÐk ßqQÛ÷>ÚYý‘)oý&²M…ÞpvÄ{ÚÛçÁvÛ9y,:RAµ|Ÿ GaÛ$”3FîFë@Ä]/\S+ƒéçäøÉ'i‘­¹äa(—”±»'¯.‰|‰~Nð{­Ú‹#§EgpäøÓ(¸™·®m’âÁÊå¸û%‰“·]ð”îy`ÀüIdsµ$B¢MŠ ¯‡ŒÂÂ›ŽªsV.ˆ_É& K/ïZöéOʆ÷‰«ñÛÅg‹;¡ã0pSwëàéÂ1â 2§§u¾Mq U+Oš×ÏEŽÀmIWп™ëªœ(}4;¡@ÒíDÅ÷sâl{¢íûVx©.åŽîâðîXÚE߸„Á õ’Ú4´ÃU4Œk«S7/ÏK íö¹3ŸZ³kmØ"T<Il0×ðæ:ãç¯ìŸpÔ®™(Ò÷Ú¼bgåÛ1,=N;©!n¬(ۊȳ&æüagåIèŠÇ+ù!·CDqX…WûéÜäG Ü––H_0Ãh@V#Æ ˆ d@ËÓÒa3?\ƒû+G œ]©³Å÷„_nÆøÐÃÓ;åkÈ!&ÄÅü öðFå âÎ÷¦œõùá[ŽBU0˜ÐVõ‡º{Œ=1ÇCpìÜù\¡`Oã6u‚Äó¸Áƒeœ@xJÿc³/|àsuZÅ[™ò, †ÿ~ŸÔBX–n…1_y^¿ò0ñy‚X2`š"¼@ëœ$¥>ò­ý‚AÜ‘Œ¾·ˆN».­ ùhÔ2ã!` m1ƒÙ„*vÓ+‚qBB:»}² {ƒ”·NdFÕ›˜­mº/Fïß8²ä*EÃÏÑÉ-¼®nFÐ'ú¼ÈûZt¼pM‡a …B1J àB³¯…cwA‹6EUø8­ÿÜÈÞ«kmOº úõ6$±#d>²ŒÊxœ_v>8ÐÕæÃk±/­¤î+íÒH=\ã@ÕÛ2¯ùj q¹•¢/CKŠÐã¼Yµ€;»!öBÓ(*EXÑÄ”ý¿ X¯†M'ØÀ§žˆšÄA¶w]’½gf I·ÊY‰B‹¡¬kpÂL¼å¹îiZµá‡XüV ê!éHfr_Ñ —÷&ÂFì¾[ßcÊãæÝn”&3L¦ø?j›ƒ@÷ ½ój®åc2ÄÑ«˜ÊËŽ.×ê`Tpõj)ý˜óÔ©ˆÜ³ð2‚8’ˆžhÝ¥:ÔT¢râ%B[a}í£!ñ#Ý\—,À_ôh¨ŒŽÐ*€& ‹S6?b¸óUµN39H&êIé÷½Yom/ñNˆÄŠÖ^%ÿåä¸ôa9íw›^§9m½¥ú†ô#êÝNzÁR• ÖGŠŽB‹ý¥“"ŒÓôÆcúçöy7öù¨76cþ ~õ³‡o=Y”æ™#…Þøæ`­/©†˜V@–µƒ·óГ抔G5×]îBŽ2ëUñÓs±3æúΈg=ç³°<‘ú x«Ô(&øîÙ vÞªoÉ“Xk©Ÿþذaÿ\uéà8U…é"kñ©êN7ô•OÔ&þ`”f¶ã– ­‰‹nú’ˆÃ§cal°­d^Êô¿¯ÕÏ©HÀ)`i}×gø×Bò&˜£=‰cØ_nGÓÝRl -ÓCA8Êì/6‡özðC_² rÊ÷W†La¡v0"¾ÅÑwK›ƒ@¯gxq  ),׿6õœÂe!ÜgÊ›ª8¾‡:˜ã,jipJò*õ¸e2™ôÒÀ°ípØb~LUŽ‹>kêYïV¯9ïÙÂHÃ=ž( jß~°òµu'b,ˆn?€x.˜…}sÅÔW¬,S˜uò꯮‰íÜ\¶Öäs¤ºÍ›—¨6µ\álRØt¥Ôà;Ó»»=­r·=j·7GHqø¹ X¨6¸%Èu×N%¿k©§2FGÃçòÇÍð€{„Ϋ«¸þ¢Ë_^aï¦[S´¸¢½Ú$ÜÙy³ë®·þÖ}é×[M v aèþ#S2Ýi=jš²q~%óž]j¿œÔô¿¹ëW¾í€å„â}°56ʧTnˆnèFn¶GRt)²_9uH[„ R5«áÞžž5Äÿä÷â` +I‡E©¹Â—¿Eø&p)ŸÓº³ÒJ½%?…â&?™eÒ6v+sÊLê:¶„?…äÍšÞ«¼9äiÓ^’ÀÂÓ¹VS¹/{䮺¨¾ïÉm8`˜íGú™Ù\€¿-ŽÈæMäÝG.1äJ>CÒç–íaú > ‡Lz:}]k³Ïˆ@i’’°Q—5Až(ùPÙ¸„: òàD;üâÐ ï”@È¢ø gŸ,á8ƼÊ\«kg–Nºù¯…û¨êóø“€U²é$¦RÁˆeT;§’x«Î0šäv8{ÛH«Ÿ#v¹¼OAT|‰'a!†Q,Ñ#3ñIl¿L}úûÿ±Ò¾ÅŽ‹"ö ¬L‘wdH¿ ›Ý,_ž¶àïQïü9.‡ÿj{¼û ¹t’S‚ëZ Æb>& (Æ‚ÄSÞ±ú!ôS @vVàô‘b€Ç‹:Ìù°æÂ>œ»û‹)Ò¯dÿ ž¿‹Ž`”&–þ]@j‡Œxi«‹ {ô‰~;=mp-Nˆ¡ÁâZGOþ8»$ÑZØ× *¢õoŸ Úv$ò"Æ»ÿõ<ýš]%0iÉ™òÂo(MùüS¾ì%Àÿ2÷£7 Nä–w¢$–Ãô«vÓ@D–ÅäâC`}V~! ÅÒ­OÍF©, |Ä-wZçŽdÛVáLÓƒ‹ ý0“0™$Œ›Ò±Ê¥üŒgu­làhE"U¶atm‰Y•,N¢w–÷‚ Šàà!}¤åë÷úØŽP £¿‰ÊÀ­Û†¯Å…7ˆ6W\Ü_½ÌZG[žÉ»&éûàÑ.SbøÀ n7u1›5wèú!ú eëEñÏ]ý¼Ð ÿ¿Õn­Ãÿ]h01Å“O+ó*ê2e*Ùõ2ÄÊ/×±/u'À©°ãËoêÀ Ù’‰5wpòÛ.(ÞȬ’³8>›ã\Ÿ ·Bi–íùLº©M 9 Sõ™jÖÃÛ7þŽ7ïÂC ^(Ù¿ƒ Y´ÅjªJ.O„§sÜPƒÚKqSa‡ ÉgAކÈn©Äø”­Ž~ áÝFnL.$ÆõeZVÔ”Ïf:§R0ÙœÆãÂõá‰8• 9%÷—;7ÀÞQ]‘ómÛÅ1É&\‹c´˜D X+¿—DØ×ּ뭵Í\Aq³è¢šæ?XÕ’à—yyÉ€ÃeCû©aþO+XKßÀŸWÛbþ®f‰?ÃŽ%¼DÜ–i÷¥RüÞà ÀþÉz.\`*@À[  ¨…q o¸¡¤T[Šó¾;C˜Úç5Nò@L«@„´ÍpÙ“>Èɤ-.ÛÝ¥¬®Ñèì¯L§~áMªQàMNö-D-¼×“.‘ {¹^£pG¼Ñ[@gaÀè*²ï¥FòÛÊ…qù|ƒD è>KY–zóRþ¨´›û" CoT•þ«}æÚÌÞc­±«;‘‚=àó«RCV:èa=þ8x~ÎgÊzNÔ“w‚HeA„anò°H¬ò½OcN?·­RlPZïvֱްóðKð…¾ÂÎKcæóúd*'ýyQÍ67Ø{è¯ÆY!tèid¯&I¯]„¾F2º1ùMr*iÄ&ßâèë¯ExBTQJ¢L„Û›V49-AµÁüF ÛŠƒ8žrK|’‡òÑcpV…#pcú9B7ÚW(u¼ùÚ,s},ïij–\ÜbßÈxõ3×#šÈ3ÐDµcÜFtbhUlKIÒˆœm(Z9×Ó »TYR#™#ÞÚ'rÖQ;Îe³6´á6yŠž,þ$+:ÙÔ¬n ãÌ{íl°+ÅÙÌÿ¶¹E(û„5îc œŸË9ÃÔѺüO(n‡ž…Wê°2%É$0Ðó-¹6˜ 2Ò™Üd?,³ŽÎÊmϾÁ‹e·ŒGˆùô¬¡ë~WÐ2,LáŽ`]ó!žñ5vØ]‡ ¡Ið~–‹4Ð6¿Ë~i I‚uÔ¨yñÎ#p® ¼Â6¹/‘8{Õ©"¨L4FeÎAÌT‚@-b@[õ+톲¥F_Ó1ëCx²6wkÓtˆxé:36دgY>Rö;©Alèù%s@º"8P©5ÝNZ‰Ä ˆ ~½?±I÷^ â#šT2 ·ƒ³|Ȱ'é"Ø"®rèAúm˧¥ÞrÓ5ÀëÈ‚Yu8•¢‹"Ø`¢³4PvÄmd™ãd£!}]†ù#¡þ\W›NÏ<¥z‰Œ{4¢ì˜‚Í^ßæb£w±&ºó­×”_Õ'ÀGZ¹=®©B2¬–È"T»F=#p°•IHQÔt’·ÒqýÃ>®!DYÝš`Ø s/òXIØ=ê:ɬ¼½öG¸ÓQ½»^eü󆱦²µïaÆØç5³–) [z•éøã?¾b£K€ÐlZmÔ§ç-a°·H±l\!NÆ,´¯‚ÆŸ8ç–…ƒX”}$Ñ—ç?¦XHÿaޝiß$~’̰fÆ’´# ¢œT /XF½$ü‡«ÀKçT¿U‰C’Ï#¢¾<³®½9 scG—1:.Vp°"rýÙ -ëÍóÛ {Y÷1•)§¥£Qÿf˜Ë«RÁ#· ™ô>Ä—á~Þ¯:”ÈøÃ»š§t‰ÕXž‰À€!9Ëßf8ÏÖÒÆÊ7•áÎV›™±ñ3»VZ!Ymk /ò%$ÌüR±xêÎw“Œ!ÈŽâEÊàR*M{$éàZæððÓZ» òWX9ÌÖ9¾2“Ó'm›ÒƒWq„û~¸ù´êÅ ‹Z+ǯ4d"¿qéçÏMHaè2WÑ0_%­['‡ôx˘ðüçœ1-¹´šPÝ'³¶hžù•tÈÒ*Õõß*¨‚oǃ(7öíNËCoÁĪK“¿»hDê]ƒ&Þ[/»ËÄû».M”A6žÓvÓ3ÒWo9ðhWáåÀ†0¨2àó;_¿v •%Xîgïä¯Ç/H§Žá/gngËgÌo)ç¢QìÂÕÎ,Ê\äÆŠc=@=Ùsÿs™%ÏiÐZêËnG’£¿]•‹ð½*J)Ø6Ó¼Ôxhì—>a:’Dl”’«aÿÓS‚Ì‚8²ZÚ*áÐ4Êsc¦|éìK T’d‚‹40~"²À¥dÕP峩ir>ã[&­EÎÇ_¥!ɬ>ºË|¢Žlæ'Sb€=a+¸P#׎ùš1V²—àŽ0°êb9jlƒ 6 É*î‡ ßO‡3X¦Ù«4“Å‘à˜áŠÈ.ZØ3",x_AIˆ¿dQXš ~<l«›ïD‡ý‘M6ááÍA9®°Iõm4‡wõëqiz*øñÏD !ç·>„¦å[èÞO'pU§Ði§Ÿoùey½éoÁ5ËO+Õᤲ6¹ÇUaj÷_P#Û‘]‘ª :2—«'WÖ¡BÂpžìÐ<*4›ËCøEë—½ô×<^9F}:耇ðnòûôôf¸‹»ô¯`’èÿÆÛÕOž°çùÊ él ¤§ [4 Ù]Ñ'Xü·¼ÝW¡'Ã]¤2s¾J“þgDÚjÅ»f& _NßㄊÅÈ nGF1‹ülŠ;ÛaÖM¸>°z:¹',{âàšOA÷’fD‡#ïϧ ¿g›Çƒ™â?tÐ ú—T§*¬$RʪP@~>ÚÍ ü ¯†KÚT¿ÿ­Y–s+»ëÜxÁ8ÑJÎF¿¡f”!§\ö-|˜÷B.äê@¥ õ²•‡êù-pe(8‹Ä¡p½hㇼº™ Ço-B ­ p„.œÿ×еG&ÇÏõ‡‘åõ'§DsõDÿGj|’ΔmïÜ[IJâÄöhCȸ+„ùd±Ú‚÷›êöê‡ü§9¾Ö,ho¸çƒì£Ëm4Ý¢¯6ÂjÍ þÝÐDô]Øøë_AiÇëµ€+§î)i«²˜ÖoÎÐë&Ò7TZÓx‹ó0 b'͈{rŠ€MyV»Ìþ:SøÉ^ªCûi'”·-”™,>ʼÓ÷ïrI"ßRä„]ßPÎØìIˆ.•ÖÎ…µõéÝ”^ß§³M¦&%u9Â(ŠûËÍÕ™ü\.Ë'î~ùÔÔ$f–Ìÿ™®nÊYM¶jL^æA°ÿß+¥|º!'1½39ÁÇòbh>„F˜^ªš¿ýб¢¿ïeîQÒ(ÖãèŸý‹3öãW"v"<°Ð[.g=N”P/¼j­ßÁ\v~[î\4 „Ü)€”I‘:›ZY¹ŸPè(‰á#©xׯǛÿ‘”x„;È–oÁ¤9âf$WÒÅ Ó¥½f»>l«‘§q<®=CLÑ«ÙY(£kÜ/§Xti0ŠÄþì%A®{KÓ˜˜¸ãEž=ÙþgÆê‡dV£‚óó´áõ;¯v ƒ%Ýܳòš“ÝNæÉöd(¬ýoSVÀZÆ~$DfW;YYç±Gä;"D¥?Ä~ؽ·ÌÌÏÓ‹jEK2u–4#D¬„’–‡îOi·¦Ä.89—µYûîT`tÙ ÅgŸŠ<šV!ax”›ÍE}ô';â³,f†1Ü–=e¢=Q§LÔvKl"ÜÚˆ(!‚øÇ®ÏÚãe=£è[-@jO`6[³ùH´ýçLCÓÔǬ—»X9Í7‘R˼M2FÄqȈF ËÛkeFÜy/ó©ÇMôôÇ|ž+¼G¿ìÅÙ#»W¸‹²g`«ï‘Ç…Oh¢4.£„O %ãyàîCò¢DíèbÚŠ[`GÀæóíÂo0³½€ä,‰w‰ªmÚE¨kZš¾Œ nÜ}©K¥rÎou=4‡ÚÙ‹¾EId…D^ŸJ Aì> ¼Œˆ° ?Tx÷RïIžcbð'ïÜÊBpfŸ2'!DÉwYñéUßá]Èh%Hè0)ÃÛeþþƒt¸ÉÆsgÔ5(¾×P`‹ÚµSÈê®®O!,ëOËK@èy©çH{·S*ˆùåW±«Nã²ó*¶žE (Ì_n…ï “ì¬M€›ˆðdº§–Å¡üŒT^e|Zb‡¾X,¤D5°•Á ݯeCŽJ|ÔèÊS° ñY;ñµAiI¿ŒQý¦ÛÜȯN¬üБ'€zŽÔä ìa´",R ˜*ëPX@l\;è1œûa<½ÙèòÙë%ÀrvJzÝî@4çw>”¹Ý&9B,´†ÕÏY'‚âü›÷)“dêS× -;Ýÿ0‡›¢›o]<”Ÿ’4rþ „,Šsî(¿á¯\k×(UBJ¸0Ì!Yº˜^ƒœ²Q%« #&¥›‘[]©Ç $&ùÊ:»?,³Òâæðµä  ÆcÝÅó»ý½Æüãª&&/G¿(Õ=e–‘!„Zâ}¬~â€VŠÉõƒè¥j·&â• ³ˆO$eS#ƒ¯X̹—›·úÜ$´]Xf½$ß ›6˜‹Û x¤D4ªlºhQWõYNœ¹sSýÍZyf˜©<¤[Ø‘ õ¸YÃÜ{¥›iœtèØÑ¿ÍìêñûŠººÆA>B–ˆ|“\ç ÈLY„qúÒÍ»{}':(ìC<ƒª&þŸ‹‹w5†!Ês( S$µº}Ðnð"¸wÌ#ÂFý+¥š»<ö 6Š\dT"ø˜$ÃGÒý¡M,\þáÍÝóÝ÷]ûûQm ôciXmð]/°éqwÍ#ø}Œ·ªÿN’ αÏz$QrûCo?K–½$ót+/ÄWgSÊO„µ2=‡Kø/\p ;^¤Æ&»#Rm›§ûï–¸ÛÇ)©†¹rE S¿†@»`PèǼ~<ó™à"(í’r–ä!>g2¡Äev7_R…D°Naѵeè^c§_^°• l°/ð«ílX!Mz.Ksh=; ?d6:½EÎ{Çæåd› 3墧˜D¿‘4 ÙÄ+Yïp[I¾ª5­F<‹ŽKØÌ‚Àñ‚’»½”¦˜\Øù† ;›‹/GㇾhÏì¨jÃãUÖ\ ;çÎÞäê^‘:iæIÙÒÅü“4C­V. °Ô…Vä&ÁLXÿ7—4‹R­E‘CÁƒûQŸúùŸiüO¾íiƒú¦4 ”§ŒZœ‘zgn¦Š[ê¢@£õ?%&Qð½­ùjÁ1m쎾!Œkc®™Ê¥q˰·“4¹Ú-Àƒ»)O‡¼þ/¯ Üdsö ðlðNdm¶sCccÄ í†‹y åI$Ãfú×·xûÚO)³{D¨ P–*Fͪ?ûϽÎOD®~˜[>.È%Ô6# l|áÌh|ÃÐ9œ&ν‘DêE¾l”LÂfÛJ$¡ÍqµQ”•ÃjÖ7¾‘^åÇü¸‰^­«¤A‚k¡ò¶3mÙ¼õPa¡·âF9O%}½DAjäf+9³pPŠ3@ ]%Ä` N÷–53›ù t¤4þñh#ºlh K•ÖT]ˆ¸@©Ä%”+„Ê©ØÏÇÔð4½Qz–°ý¢Î‡é˜^9aâÚMHê˜ y€ïÐ I °O(]Ä ð¡ÉE‡³ÙcâtíMØWÞhÐeË63øgÏt:¾[ýbQóvŽ :‹‹ešU8Ÿ¬T¹€`RÄ»t3úl3zÐDÍûºªñ™úŽÛCÒB]Ñ)5!C<#‡æʈ3þ%ù(”’Ƨ¸Úv¨hç<–-¡7çˆ$<›ŒžSØr±„ w¦oTtº„QgлÍõzÕté¦ýÃ0ðµÏ¤—ؤ#¥i§‚™BÄÝw8.ŠºÝÖáDÕUk-Wg¿ ¹¿Ð¡ x¶ëWÊn8ãŒÅœ»-µç—µ†ÔF+á`³š‰ù–J`#Œ…')ý¹«ò„PiåQg¦Jç@ ÙŸ†ûây¨‡“8æ¤änòÙà?ÇxîŸÂé°ôû `cW ;…¥CI-;+W>TäQ'£ézWÜÄ…7„šÞv'£­æ‡aú4RµjàE jxÜ–‚8H Ï™ºµôÍÖfæmËOröT«·ÚŒøW$a¤¢—Õ?!Œ!å¸áü«}nš{F] ”"Ê¡ùV}Þ³å1è’9Ð|Ú¤ÿSm2ÛFÌýmŸË8æþA"pšŽˆ=± %:®Ý’ö‹<ÊÐÎ"¯´¹ NÅ=ñ¿·b¢ÖKt¸´m:5þZ,òRÐqû3·0ÉÔ­‘J —[’>DK‰!´üm# pú΂^“ð€ÐB}öÆÍo`Û–ßg EP¾2‰ñ+ÄsÚòb‚8Å©Žößý*†wQ@u%ìôuQÌóµ÷dnÿ€‡¨¶ nˆ¶ÿFõÌDÀÞ.¨ñŒšÂæTħì˜åŸ *ùÉLÞ~›é”¸Zµ»s¦8‰)s$€s|_ŶðUÁA3Ènkd§< ñ¡<9™1`?³n>;Ä‘þ/³-/«Ëó.åÎÝÃLL_Bƒ|óÈ`b¼0޾[«(Ð×0»G*Ûyo4#ì8¢¾)81ø‡ˆ¶cGdÜç‰ ŒúøBëCý;+ôõ=$ÄZè™Ýž”5|¡m鈦Ö>åÊÙgsW¯IØ®!I:RÖ¸ûÑÏȾ]TDÝ$ô’ø÷Ýæëüµ±h‰BŒ›¾óìÌ;ÞR¤ñÎÎ3JŸŠŒ;A½™ß"ÜÔr*Óƒ.€ ‰;Yçæl²Á¡ŒZ2„iZõ“ô k*?>ö‹«gïᦨ¸‚•Û.†b9ÏMÞƒùŽÕJMýœ†/…„âÈñ¥˜ò:|ÕbVʨ°Ùl¦ ™Ù" o Ø$=)ûÇ*)^ÙHo}W=RäRSôo¬›vÛœ±¤U`Ä\“k\pÎYÚˆªMñ·X{dvÎIáÑ[pR&îÔbr‚xgŽQ•é¥åŸÌÌY‹á¬ÀYî­¶n»ívÚŽºº´ÏÌÇ“¹•Òv{°Ë/°)ÿLÖNeë#y£uXOÞ9©s³†õ·è³,úe6N1^z®ù½$Ù.ß÷äÅŒ«Á¯Ê‡†P²cwë¶-s¤FûzS~+œyõრˆ-Ä»QWíF•÷Þ‹€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €t1lib-5.1.2/Fonts/type1/dcbx10.pfb0000644000175000001440000011543310733501627015201 0ustar rmzusers€%!FontType1-1.0: dcbx10 1.0(Level-B) % T1FMT, Copyright (c) 1993 Basil K. Malyshev. All rights reserved. 12 dict begin /FontInfo 13 dict dup begin /version (1.0\(Level-B\)) readonly def /Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def /FullName (dcbx10) readonly def /FamilyName (dcbx10) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -133 def /UnderlineThickness 20 def /XHeight 444 def /Ascender 694 def /Descender -194 def /CapHeight 686 def end readonly def /FontName /dcbx10 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /grave put dup 1 /acute put dup 2 /circumflex put dup 3 /tilde put dup 4 /dieresis put dup 5 /hungarumlaut put dup 6 /ring put dup 7 /caron put dup 8 /breve put dup 9 /macron put dup 10 /dotaccent put dup 11 /cedilla put dup 12 /ogonek put dup 13 /quotesinglbase put dup 14 /guilsinglleft put dup 15 /guilsinglright put dup 16 /quotedblleft put dup 17 /quotedblright put dup 18 /quotedblbase put dup 19 /guillemotleft put dup 20 /guillemotright put dup 21 /endash put dup 22 /emdash put dup 23 /compoundwordmark put dup 24 /perthousand put dup 25 /dotlessi put dup 26 /dotlessj put dup 27 /ff put dup 28 /fi put dup 29 /fl put dup 30 /ffi put dup 31 /ffl put dup 32 /visiblespace put dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put dup 127 /hyphen put dup 128 /Abreve put dup 129 /Aogonek put dup 130 /Cacute put dup 131 /Ccaron put dup 132 /Dcaron put dup 133 /Ecaron put dup 134 /Eogonek put dup 135 /Gbreve put dup 136 /Lacute put dup 137 /Lquoteright put dup 138 /Lslash put dup 139 /Nacute put dup 140 /Ncaron put dup 141 /Eng put dup 142 /Ohungarumlaut put dup 143 /Racute put dup 144 /Rcaron put dup 145 /Sacute put dup 146 /Scaron put dup 147 /Scedilla put dup 148 /Tcaron put dup 149 /Tcedilla put dup 150 /Uhungarumlaut put dup 151 /Uring put dup 152 /Ydieresis put dup 153 /Zacute put dup 154 /Zcaron put dup 155 /Zdotaccent put dup 156 /IJ put dup 157 /Idotaccent put dup 158 /dbar put dup 159 /section put dup 160 /abreve put dup 161 /aogonek put dup 162 /cacute put dup 163 /ccaron put dup 164 /dquoteright put dup 165 /ecaron put dup 166 /eogonek put dup 167 /gbreve put dup 168 /lacute put dup 169 /lquoteright put dup 170 /lslash put dup 171 /nacute put dup 172 /ncaron put dup 173 /eng put dup 174 /ohungarumlaut put dup 175 /racute put dup 176 /rcaron put dup 177 /sacute put dup 178 /scaron put dup 179 /scedilla put dup 180 /tquoteright put dup 181 /tcedilla put dup 182 /uhungarumlaut put dup 183 /uring put dup 184 /ydieresis put dup 185 /zacute put dup 186 /zcaron put dup 187 /zdotaccent put dup 188 /ij put dup 189 /exclamdown put dup 190 /questiondown put dup 191 /sterling put dup 192 /Agrave put dup 193 /Aacute put dup 194 /Acircumflex put dup 195 /Atilde put dup 196 /Adieresis put dup 197 /Aring put dup 198 /AE put dup 199 /Ccedilla put dup 200 /Egrave put dup 201 /Eacute put dup 202 /Ecircumflex put dup 203 /Edieresis put dup 204 /Igrave put dup 205 /Iacute put dup 206 /Icircumflex put dup 207 /Idieresis put dup 208 /Eth put dup 209 /Ntilde put dup 210 /Ograve put dup 211 /Oacute put dup 212 /Ocircumflex put dup 213 /Otilde put dup 214 /Odieresis put dup 215 /OE put dup 216 /Oslash put dup 217 /Ugrave put dup 218 /Uacute put dup 219 /Ucircumflex put dup 220 /Udieresis put dup 221 /Yacute put dup 222 /Thorn put dup 223 /Germandbls put dup 224 /agrave put dup 225 /aacute put dup 226 /acircumflex put dup 227 /atilde put dup 228 /adieresis put dup 229 /aring put dup 230 /ae put dup 231 /ccedilla put dup 232 /egrave put dup 233 /eacute put dup 234 /ecircumflex put dup 235 /edieresis put dup 236 /igrave put dup 237 /iacute put dup 238 /icircumflex put dup 239 /idieresis put dup 240 /eth put dup 241 /ntilde put dup 242 /ograve put dup 243 /oacute put dup 244 /ocircumflex put dup 245 /otilde put dup 246 /odieresis put dup 247 /oe put dup 248 /oslash put dup 249 /ugrave put dup 250 /uacute put dup 251 /ucircumflex put dup 252 /udieresis put dup 253 /yacute put dup 254 /thorn put dup 255 /germandbls put readonly def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [-60 -308 1212 914] readonly def /UniqueID 4700707 def /StrokeWidth 0 def currentdict end currentfile eexec €á±Ôc, öøÔâþ³×Âû-iìœ ï÷Ju¤¤öï§S©°E²!¶Æ¹'hŒÉúõ¹Û`+#),ËÈÖ«JÈ&ãÌÏ•—mYÕ¯ ÿÈþkÂôÒ·¿'\›Ö)I²´^Í  4"L±°«~D`”¨X_˜O>IÀtcÿî#4¡FpOµA Z®ÅJ\.±{—T˜/NÊÀ ëû’ÑìmËYHƒŠ,ó͸;£Áo0 ¾àWõb,K›P`–¿DØAùNÐû„!$D‰•À.t£l]]/è¾ú-4Ìz¾‚PDªc0϶é±—Ë&kfˆ´þd×4C'ºïªît ø¥I!ë8©dÀ¶† sDSò²${åØNIuH%v˜{mCJËnàùcs†›¥£¹C–Ú®õAäøuÑP…ì5ç!æÞú°73nE1çë†s6›‰àMÖ­"ckœ(Ïwç/µU10`‚ê#ùþ48 ËYRMÑ3PM[˜gþ)ÐrÜ(èÐê´Z…¡oBLáÇ™ánª…¾Ñ·¸3ºCêøÚ,6aŸ¾ïŒò1{)qt¾žPûK®?aR…JìY% Xz^îñ˜½H;Ž>ã°“ÎðþŠvQZ–§£¡íNJõY€£ûlc&/pª¯Õe°„Âð!D$¬üÓþúè@PÌð¾a:tÄLTƒ¶czÿ&üØ>Q=]±±MhnOw™·Š~ÅY¤‰õ(+«Æòg™“Ö×o'¢S1äbšèCù¿j3<£ {å–ú3Ÿ±Š£%ìø¡Ú£¹j¯ö™ÙYvžþ6ój^JßnºÍèO™òXï!½Eyƒ^©Á/â®|:OJc¤ hÜu&üÐjÑ*Ë 8:æ5‰ìî8žªÇÒédPBb4ôóJy}áê;NqVþªÌK')ú»¨‰ËYYýùZÁÁ.Vœ:³1ᬀ‹ç<ï*Ó¡?–À"œÃ5’(ïoM3%ÜñY ÿ¤¹7½nêGöÂÿ-¬JÂÅ„æÐ÷“Ðv¥ËIYŽÖñ°)ŽM¾Î²z…øîÈäÍàúÿùÍrlÐH%6J C¢ªJ&1ާ„¥ÂÔTw–i²:^)»´€Ð«-{ðzŒÖL+QSL8Ð@&×E°¢ Ü›D2³ušo¹"†º¿åuª<´5|ÊMhÞ†SÖ:ê1å5ëË¡¯¥¹¢]ŸpÒã´‡xD¯lïÖQE€öBæSÆõ˜‹¡oÀ\®ªÛôøË÷ŠePR7’Å–ƈg¶>!üŸØÝ¾Õ¨…ÈOHž®è¾3°‘ºúÌu”Q@wÙЭœÆaˆ!I°àP¥"Ÿ•Ñ ¶o Ø[I+)žX^`M_ª5͘K§ª^ÐÅÂjÆM]á´VŸë„ÖMvÍ73ýHñD/—žáTC‚¸"«ˆÿ?ÁÕÿˆfsÆE©ƒs‘w*•¡Ù‘<Û,^ö´éÛ­—$Š((9ûïÕ©«àfkI†häô:¥¸HzKê°û¦ü¹v~ÿå H°o™”k#¿‡ø251à?ßax@•çu½ôUoö½´YŸ±\ˆj=‚ðv™1yAáÅÄ î‹{Ñw2[NãEýfL–T¼­iî%ŸÕ(0iÛ`$C«¸,¢í‘¸ÇÙIªìI%–*Å-µ+ ÒóÜž+5ä4  ¶¥Ng!˜ñB‰§W@B$¥N­hãæLGqÛ™éfíåÑI5íÁô¡˨CJ¤,EkŠt{j¯1-U ´äÛÞJ?™¶¾y­Ø?˜=¿Àí>4¢¡¨{Q×3òÊÒD£/EŸïôÛåÆkĆÊÝð¢âÞ‰@æyaIFÀ•nÃJìð.5Š’`·Ò ¾í?çÊïÂɘô­5Ÿïµé™%M~²)‰Ë1h§ÊêàÏ ‚§2‡>ઠ£MN“ûçý‡ e,UÔ™OŸ#+˜£o¤®¡“<æá/•+2ÞZ—=a DÞ€p ? Ÿ] ®ç°#¿8Å|%!ˆÂ}&]\Vsæ'ýáFøï°Å%QÆ¡¾>ÚÎR0x8ÃrT“»Ø‘cj•‡à6ñ(æFí?7"e ú,|Ís–F¼¼ÞD¾™ÆÏC"—Œyaë€Mv¦]j>%P„·v/¯+ì1¿bìëõ÷_vºBœi‰´K…¨ÍÿÈßD߉±ýN¸S¤L|ECÚç(¤M(Ùß/ò“éXË·!ó6£ˆÃìòöÊfŠÙ_g{8¦Õœû²ãas~ùò ]ö•ÌW8)­hÔåîÕ}vHˆ ÷†"‡¿g2*ã¯Ì&a.ÒM|ñËÔBé‚ä>™›Há.ð™›ì¸×ÎÜíÈ‚Hí(ÃŒ†YÎwÿ@ÛIÙX§è~E¾cEm//@V•CGË 'Š‘÷øK,á~ÁáRÄÎÑ2+5ÉÇÁ0_dîù¨$\ÀêÞ˜¢>*ò L”÷Á ]g¹f†#èR‘÷õPÇÛÎâ%£@ëMùpüðÊŠ å\S16¡ô‹ó`ÁЛð|C›»xD~×X¦“y·ŽoðW˜"·Òóá½?ÐÉL¹8¾^¶®Ûßsž9ï7:ä@f ¨Ô/}7”!9~é8úf³FÎqÞrØÍyíkô-ðàX5ZV 0YD¡)¯Ïê¿<®¼èŽé Ï Wÿìq뮈Ü|õ_O…ÅxçþP¥Ù™ %E@­ãìj2ºwhœ8‚EpC-±j¤[+@KØ)ŸŸ¶Iõhý°cPXbÇ…œÙ˜®Ã ¬8-†×âÆð™UÃ7fRüÐæw2M¸ÀŒL,J9»ÜjãÓ‡0S5péÓ{íúø¾Æ1½Ô”™E„ö,’Ø×æ¼*ÞŸ¬™5S_b[gY(2*™ûîE4êÉÍ\XXj•<Ø«}Ú‰Ôá³QçÜåz’ŠÇúáíOdÞö<%¢sZÁ*Kò¦tÉ“íµ›nïÆ6§ŸùÜ® ¨ÝÈF6Í w+R.©sÃЬyuéê[oi`ïÀøkÇávrþ«Â^súý}/À2*¹ÌZª"õi´Z4«Öï"y_¡')ã(KØ%ÎÛpë¬<Öø9óXÀÙy~*ýoVºZÒLøµÞþÖ/Îr3bÍlœ©øÊ4ÊnÒõ1#Ô_%þÁZF_:¹x®0NÜסK*ãÈ}TÀaÃ\MÍ%ꨈµ9ñ§¸æ=ÿ¤ât´tÐÎ ”.<ßæH+Ê.©8ãIý ZÏ~ ìq³¹7]^ຶIPIei ,-CÚ¢Pë)`q´»&‚À '˜£ÁFòÑŸyjßcÜ3Éï¸C†·ÁÕì…ªr;Ÿ *#ÿ½9äuZ%­ã'¢QWpZÂfÈâ&ñ «Q :y§%¢áaâ0 (Ù2ÃÙ¼³˜²/a,,pœ´";’sZ¶‡I'ó\.Y‰ŸAô+Tälc|Löe¿'/»Ú«Zå¢?Nޝpïbë_‹û£Þ jðŒüðÔ°l2["óŒXÇïwåa»˜i4$“ä^¥Ü€+tÉCK•ŸLçß}wÎT–zHŠÈ¤2:®•¯ â¿q9úI\¾z•¿;µa ¢áyÀ Ž˜1«å·€7‘²1Í™[10s¶y&É Üd2ùH<©™ªfGËûb#ª$Õ7Éz”xX‹}4Öj/¼„ýìÜ–ö¶¾àÃs0åèáGCI½¾’c÷ᤠ!ý[ðÝßK-Þ+1k">í·<ü¢`ª)¾êÞUf+V'œ…¤ lëeÃNüº*Ÿ7øL$À)5!ž³Ïÿžl^Yº—ßãâ¼Ií•vo¤ß9S@ÀøûÞÜQÁNËä‡!ÇÜíÇÝúyEh³iÀ…)ËÀ Êr½Hî¥iH²©0àÛ~ÅZŽxí]®’‹°)EC¹ÉÏå§»ÍBׯ ƒÅö§¡RB’¥es塯¤t¸ü ¥»:Wtz>XáBprFоgg0DHÝ zA·SßÎ…mXÑ ^§uO÷˜ÚD®ƒÔR¼jH¶×—èš«á›áhµØÅ ÁÑÈÜü'%VîHÿKn†ohÏ’GÔª%é¶v„¥õŒ. 5Rȳ·‰.o“^{†mhSÏãªiå‡UoY %ؽỡ„á¯Lú ñÀ‘C2mO‚oÂ@膗kΤ½BÃ-³‰á(“|h`Ä¡EJpxúï’©˜h¹„ûšwäÈôwSMDŠìf´ ˆS°È×µß /aÖ±I9×  ܰÉ'ɧ˜M88¯ˆ¯8qV&Hägú6úwÓéÖCºpJçkO+Á [H‰oý)½ñ¢ðëŸd/qt¤‚’üdº×p‹. †íùµ„X'ÇaΧW¸_šà‰îGãH¤‚0Úä㪰ǂOXã<3<™] ¬¾Ò¬ ºÕþ™MkÂøc»Z!`‹±v[åIPÿ±Ô*îá'e‚уK¸»[qÐÄ)(£›¯î=ÍKÀÈ·éíËx\Êò‚`ÝÆ4«šÅzIÊŠà`wû¾ÑŠ_ýAMgêP²¤ ·]9"]Šæ“<Ó}{èÖlÓD¯Åw 6S·.î, Å8(NÂWËÜã }Ê-3õ™J]#óòL{âs“¹*eæYJ9]­‰á¡ñØe``êÑsÅJqÆwj¹ÐÙû·ÑÀVKo`ÿßH–ƒ“‘²–Ù³ˆ¼u;nÐÒ”Îá”Î ŸÛTÒÉZz˜×†C§IÏt¾÷ÁÊî.\Rõ¶y¢Ùye2'œ³|_j!ÍoÚøÅ»vïpC×/ÓQ©24јۮ‘Ù §åô"Ÿ6 “8i·ÚPÿ/î¸N oQОDZã4A¿«ø5ä$%YkÅ’gŸ•[íÃ'­æ|¾¤àúɦôZVíß!EÝü2ìuOèX‡÷ ý¨JG…&¬,Š51ã+£¿9оîÐyúÕ&1._°¤¡g§uîjqÜ-Òà@VŠcfsÍÌ—PÛ³IÞØàVtÏÿSÄykÕ˰ÛQ²ÝÙ÷†û)„·jŠõUxŒ|H^«¤]ør[¬ï?:ë ĽòÝå¦ÜœQ–Ò½±Íáæ± §“ÝÁ¤üLí„¢hü´Oꊄ=RT·ãÖ€\DŠœO¨Ž0’Íõ¿‡£ßËTÍnß*–{9΋QH dSj±©àßÅóàhnî墥¯¿}D#äëΚân5¼©vN‚ {D2-ÜçlÜtæy‡­˜¯Êã˜Çõ"‘>Wå{Æó»¢×+j~`ºVBÏÝ`Yzej=,¹¯˜Óëã[·¸•ý´niY˵YA¦}¿çSnÏ)à(6ÇÖv·õ²4XÝ"~pvÛñóÇ®txÇtHŸø*+ŸÒ@¥.õwªéOHÆ_˜èáìïß…-ÁÓîÂwmMÞ78Ê\ª)Hâ4šµÜ™,µî!eD- Ú"fÔPAOhÛ,ÑÐ,¸~î’"2ûC 6E×)‘1ÅFÎzü0"ŠM²Öµÿ™µ¥ÄÐ9e­I·5¹gÂcßÿ§¤NçU;öL+áFgs–_6Í”¿šN^ò7ˆèî?î¯f¶¯jÍ<§Ég7"AuuUŸYñÁZÉ|Û)Ø?àhTC#.JŒ]÷y±ÄßÄM fA“±;qRÄKJË}-õãc|lCóÓïñ»!ÎXJµ°\S­Ÿ€‡à<°ÀvŒ!!V,Fù~×táÑ›ÁÕ.°5êU¨hu i^ ñ´w.¦e¿‰13Ò P—6ƒÅaÒÃß+“rÁÊT eÓûóG|… ]aFì?ÓõA¤¥Ws•/Lé[}k#¹|¥aú0|TühG5œÊ>žn/zˆKϺþË”c(¬ 5üãÂÌ3žŸKqûv–ClØ—iXc~s |rç^p· lÛ .ý:@Áh¥¶—ž+åçÓ±K˜–dt.9òL)hfÑÄ%¿zª¡Ï3¤c]ÓIÕƒD,>j&´àÄ®q_/”ª0*èÁ‘òÍVþþ8Lš+¯Ñªi¯€¢€ k•¬*˳°ž›;q)Ù°B0Ø¢rcõö˧¶ÿ~ UJö‘ä–N•7¯¥6×¹I@ÿü˜óªK°j%/Ï_}φ).¬‰yT2cv,Ø%Ê ¯býf¡xœHeOc7Ã>ÿ9 šÞðd™Ã‘“ÆOÄ)ñ¢ws¿²)7J©+—eHÙ-RÍ?ßO1Eî55±Éã.w 8#ݲZ´Ú§QÁ5`ñSbã Âe“·Æ­Ö“%sÂÐoY\ ׂÝÒïâ›Óß¹ÂjCWJ—8SáxêǪsæRÞ…=ÊþÜ®³ß "»0Lj\œîñ}Yÿà'vŽ©aŠˆ‘[¦Öú¾%Õ’~]0¾¤!XVi%aá2¡+¶i7£9váPªcYšÐØÓ uWñSØ)c:ÒŠµÞv¾³\ÿ#”kœô §|vˆŠnpÇp":½Z{òo©AÅÈŒÊ!äÚÊ”VšŒrr ¼U«Ž©1 ì:O¨k¼XÞª\µÅ/ØQŽ\Y·ÐƒæÏ½Ìÿí0¯¶¥õ4…TW¯Ô—_ÞP@ñ@l Ãy±mŸ?×ÔþÄe€ôíÛV¡øBÚ;pÚø¶††ŒyV,oUp\x³<8Kí,v'žž‘‡îú ÖN5Θþ†Yª Bv"ÛÆm¼Y°,ÊŠ–sÐ÷’Þ°1¼Ÿ[biØDÛž€[ÇQºX¾2MÈS’ Ú1) œÖÊœç0Ço‹'6ZšÅÁî3F0´Õ÷JXÔ.u“âþÀ!Ø6[ë"ïsuò‰ÿgé²Äc¹Õ)žN>¦3æÐzŸêÜ =¨H51õkð¡ïzØöÕožL7<_WµG«y:\ç',7E}&„wiÖÌ¿¯AŽCÛø=¤.'±{ºlØZ6¢œK”ûlL8y§3=ëýìèÙO˜N {ÌG(ÍA@™H×3¾vÇD…)¶¤6bˆ`K'i²/UÿB=çÀ¥HM@ÉX´rSÙûcémKçùí)Ü7aÉ@0nØÔ&zKÖ“+-èûV‹ ÝS±àÁý•¼»B#Æšˆùnág¡ÈG m‚‡ª"²@‚ÂÚá° 0‡¬ä›—Š28ÊQîg©¼é_?ÂÓªãÉ´_þlŽ}-©1®Þ3O)2œqˆ1c’|«ò‚ÐH1½ïu“±aÛR›@àê¢/#ô@,Iùåë­Åé+^ õìNvw³æË+ÿÂØ vXK@±ËŒÿµgSt1ʯ¼°3a×ù}5!¨ÀjRt°q‚±G`…ìÜoÆUÏÑÑ,£ª'ïÞlXÒ ƒýÊÝnMèŽÑ³çÞÈ?gÍê~ÝpÖj囹I§K%oB%='v’4wµQà “ÐƇОVMbŠ´Ñ¨p­ óõÕ 29úP(/ýûN;i#}ìáäS¦Ópc …èÞEË&°=l’àÁ½x+ÁÿôøDåXVÓ«É ¡ŸµE:öj‹ÚIæLèË,¡ó¾,Ä:»ožÚiç¾¹¢FIî“«­šÀfrµŠ8¬é”«›FšÄNG‡#c‘ ±ò+ £›‘æÜAµ€¾™®ÁÍY³Kj©ú(ΙCy@­Æ ¼L¹ØõæA3ãq]?cŽà™<žï}fVM!ï×`Ðôm÷€f­“4åÁþòIzWÈ„¨ÞŒ¼û²/ÉöïÎá[wƒ0¡™cxf2½bÐi~fj€…Ñ–Q<Øÿ»Þl©b`¥îróÿVÓ¦@@«¸S[ú»‹ô‹H¹(¤Y?°ΦáPnøÏHްhð)ªKó„2.« Ñe±ûîÀ—]F”¯+¬{iÞRnÎþHŽ+ë ùƒ 4¹«”±x$ñ¤Þ¤'h•vo?”|Vweñ®m¥{B)ðRù[Aý†U œì:Æ£ÂüÝ XÅ,Þ=CeF¢Eg÷ÎŒP‡krô­0®^Ú"^1Ú1ž[Îüu¤5 |çƒÅ;CÇÄú¡•š(Ž}¿5Fi´ïÌ ‘¿\½ŠŽ24gI~kÏa“D¥ÈÒÖ+s¿)<šPWŒ@0§‰~åN± )\:5Qn/Ê)6õ¼¼nø~Ægdw"*€ýÅÕp\[&4-Ó[ïBõº:€zÞL+a~ËZ’§,x%ã‚·,ÃgÕĤ¿W&AyRÙÀó¯Tž0áJ¬ŠKÙô•ÿ—^ÎòNº4ò²Ü@´M¨q<͸‚‚ÈŸãr!¬\Ï%ç$‹ÞI†<ëÆJ‚ê³Ù.¬Ò_bîô®ïÿ_A4ªóî8ºõÊð²Óvù…ÚŬÍZ¢…ã ÄGþÖ«nƒÝ „ã9pu¸„ RŠ'劷iS)ë}­ÁáR‚ c—•8S°…»™éø)|à=‡”мsêV‹f3\ßËÔ§duÆØjŠ€ÉÜ7IØlw|s¡VÅÉÒ%ùȤ~³„uš:‘ÇèÀ!A ör\ŽáÛ=£vÛ1 TIJgGƒ|L}†IËŽ/Âþ¡k.³’¼63~ýÆÌSþm€*dqÄÔ;$`3õ“+oVØw;i’0Ò0´çä¼ s’éЗQì7;ë¯öÚ£ƒ6_a"RïÑYù_E“üãÛ®ó¦×˜³s1æ âðálöµ ‰F¾úÅ¢þÄ%^VÓèÀÁ‹`M¥vÙøž®‹o)'æ­ÒtjÆ婊[ˆÕ£îT>!íƒø†˜6ÄšíÒ=Š÷éí ë™Hr½€1aõ†b‹oñ ø£-Wn= ík£!*—’Û“Nsöƒë½6û$WD¼ÕWYÉ—Åg úm»^ð(8לȬ̖ '}î±€Qú“Ášö;¨Åa–û=}Šœø ¼‚‘“Êv ïk£°Z–KOÒžžëÔMÐ1Á]ôš~Bó4iL„û¿n^ Ç7·ñ@³ø—YŠrÂË’Éì래äzUu §äšY U®ß°âŸÂy‡©÷Z;üzö§‰â«‡+^‹X½Mgæoár¡LIq^1íH⾉_Gá.sÄC‹À6íÚí.L%¥­ÂÌåâ´ JÄü¥‚——¼|Ð;Ø)lJÝLë¬Í„}9ÇŸ­E+8€ýiöevã/¿_©…@¾©þÜZ›‰G‡NŽÎI'¹~ }«)˜C‘W!v´>ƒ\ò±(€‡QŠI)ÆR•z6½ŠÈ?É ¾£H“Õîk½{»Žea‹¥û’GÞ·Új¼ÿPòªÔphdOº?ÎõÕˆˆP‡e¯ô¿å%ê¬狪˜(v¬¡8ƒä2fE¯ß] æ(mÎRš˜î”)´5„ð‚![o¥§#‡,8Ô.8r¾Ô¤Ò’;¶X+j‡â/?VZ`q,¬ùbã~Z3³Š·5ðï} è±uÊ]šWewØœì§O¨ãÅžìžäV7<À€züçP÷ïNï!óš1HH&Ü—BÓ’0 ±±Œ2ìAE[¢Ë¥­÷Ÿ-—rµêeFÏ„¯ ÷î÷×¹UjÇ×]]¯u]R0œOÊå-I‚1Ôði¯†×[PØGeŸ¾R…羋ÐÎM•´ ¦ôVp‹s)zTºzxžð²8C²ƒçSÄíÜ…Ì5?ôoÕs¾'Iµq¥×8/Ø¥j„ ¯1±brýíºŽJïüýæ9ƒ_nÙÎäB¨i˜ílõ`H-\˜—’ ¡àÙ^ë'R}^Ë–ÎeQ†»V§L´äI•Ï-mû°;½wgÈohÀ óUàÙªÈÒ_’M~œpy´&ÎE;ݱ™?Gä(,¡•¼Ó ·øã²–ÏUH0f5#¹ð2Næk„G“·ñ®½øåè‹,]5gFî|G±º4ôÇÂF«;³NkrÑ}àý…GK-†?§Ã;õc÷»öÔrΉâë,%ÍËŠøÎuHº¥Ý³ÏjIÈܱ¹`¡to·[4Úßž‘ûÄ ºû!Û Î¼£]û•ŸVrÎv[:ºäM9«ä¯@ ç’_:Ø0ŨÔýXÅ™;‡ýfQ‡S£®­jó¹t+ü Ù1R¬¶s§ZV ·‘PšIáƒÞFBr9t¾Ymã–¯†ÊP*ÛK±Çëd¹±•Må)ƒA²›oÂ_ Ñ× UnÕŠ) 8¬hw:VJâ LÜôv.˜*\¦„& ;´R\þ9ãH%*ëÆ¿òïÙ ×)ku?)õ »þ¿Ž—­þ¯™» d¨ªäâ¹iM©ØiQ.ñðè ˆPã0Óù6¦ä j•“;/ÜUÑYþ³Êtáá¢Zn¥Ñ X²y1¸œp«dè:­«Ø/‹-|ƒ‚2Ö‚¸(¥L[ò| JL ¶Œ¡ 5݆iOIšJÅex±_¥ÄfÝÔÛÁüàÚ•Ü<†/0_¡ÃëgEðžAF;:P²¨[S§]¤óüaƒ¼\î wá¿éiˆ‡èK½_Ò£„c¢Ö«“zÞžàwwì)a~À£†3ãêÉ›Tµ†spèüÛifÒCNÓ{u°å®ýN”ï>b¬n€oxg;4ØÇ¯8 ‘«x·ï¿Ô|¦@‰X'‚Ni, ê~\1C3ÛÖ*WuÈ-!ttºiD±å x0OÚô77[Am!Ή Oœgv¢þ>Õûó²|äÅWVº—Ý×ÚÂgr·«ÖÄ2žDYœX­¦ ˆjO•‘P—7íÅá£"Ãj{§9¨3!¼là€Äk²B¥¯!nVI”åû%~òéȧ,ŸÅ^Íˈ&'ù稞–µÄ„l 12¶†M%3·Èù9¼rƒïÃlûRmxÅíÜßï«}Þ8Šˆ Ò6µÛFŠ¢;Ü•1`}¥»²öŒªSF§ œ[ýÅ|Î G²Û ¬’¡õ::qD]d%E”l²ß0uÖm ×ÔC Mfïãczlƒ[xI×4õTÈ?ê[w6 ¢%ÂO6ÌX|œ±ˆ4 Û°‚'7iôÅŒU¢µ”y.Êm› yd‹U(Àº¶“IzånïŠ Z¿·m;PýR2D_ŸÀßI¸˜¼´NÔÆôn²ç4*Ò†DF<·…·²S+%‡+Ä,yÛ<-KÉö­¸Ö¦´½± ¬¦æ‡b»Oùð L!“,Ä ½&`'W”žw&NåÄlt™æ—ñ…)ªfÔÏXM 8n X«NP*‡ŒA:N.­ã‡¡žO?G¢4¯q7v=³eÇZ¸Žä„©nœCJGYß Èwa]»ùJÆK™N4˜ŒÆT×ÅïSßV­œV€àoÏ\ø‹Öá^”‹hØSƒ;³“`+ÐV\ŸOzÀ­—Ÿ*1'ÙŒà]ÕNadúÒHÁh§áo‹J°·B@/;±äEÏô•¬KN.­ØË¸X‰Qô zz5ÍJo—0±Lkïäý!˜Óéé¶ iI’L àP'H¸C‰ƒ“[Ní‚È °íÁ?™ ~“üùʾœR¬T}Õ¥é%ò+Câv¢NüÇÅ쟮!¹ª1}½G6d#¯È ]̺O} Ø¶Ý,Ñêàp»½­X\ë4>—3ÖÝS8 ^‚­,¿ônmßfx‘›’Òõœçü#ÚÎ×Ýž;+K~óv¯¸ï¯6¼óÈ÷‚lÆá`y'tz¾xâò×4WGºzÑqç¸Å›ÐÓ§ø»|½ß¤Û)þ„§ÿÝx°¥–›~‡q³àjDÒ´~€Bq»=± /È+»ZÀ‡Œ±Þ›,æ‹ÏßËú”ÊwþO[h+T³ãÄE+%‹œ.4¿üÏyTbùË“|w9t}xx‘©ª£'iWGkCøp’–¿þªêS²v'Ÿí–Xh=kÎÆ·Ø%CUçªpø)¦rOÍkÐþ'©‘BLš7b†)„Ëd6L9J=lvå#oñ’û¢‚gŸyxF4ÒDé ˆzQa€Ð‘]{Œâ93ˆšûoØÆs¥Êðƒ®“ð@©*$çò„/5fçG¿ˆÅËhìhíÂmÅÚ{•ãEÈöúyv?ŒÅN&Ó¤‰ë6I¿N{€ÃÆÛŽ—ê„kÁù!f ø;‰Ý8#Àq˜To¥+-ÿã°3‘Ѐ^‹üåäæûÔ›F$O‰‡ï¢k0T‡ÄV9XÁ?±6\héúÈÎÆ¯‡lÏצґX4Aæq¯ ˽,U²†zÁåx€ý6 ž¸qÃ’6óú‘LqÛôËÎôsJÐá5j Ê]²‡!ÀpLÔªD¥’c|œþ¿eù¯_ ×/ºN‘%Öné˜á!%eÕR]¯… qRµV¡”T¿iòBœ»E½¡„±Ĩs[”·«„Bašý‚%'½Õ™N>^à•=7Q<Ï­‘(×å  ü¯>ÁNã y<Å«G½ÎªÜ^Ã(¿×©—!¦†ÇDæLM)-5fà 128¦ølÈî®·À=åÿ]ïbÐç ” äS$ê ëůð€®å=MíòlŽÀÕfB•X²#Iî‹ öV]ÍÚÖ9‰²¶ÌËEnßð²8#‘¸-j ÄL„íEYÕo %Š7ŸIÆïAƒú)Æc¾b”[’ù]ÞdìqËø,.•ò+¬³ª¼3cEÆ*C¼ ÒݸÂÁÆ:ÄÔx1—/²ê\ªPµ€X.›³½7Òõn2P²YÝ=.'˜Z‡o®L¬äDØÖksõáÉË„qeø)U€d(ñÿKù•¯Ú}ï¸TÆÆ‚xŠÒÂö“ åÓ{é%ÄjM÷ÉLâJ=ÓË1KÍPò&Öæb£² СôV“„tt0Lšp =¾ÕNÎ?T0òúieqؘð!“¦²êžV‹¹{½†²<€È.G¶d;ºÿHœ±¿O9XT2ð¶ˆRiø99B¬wJ×Ê‚Æ:Ê5úF¯Ó³ýÿWÙ[η~†¡éX_;ÂöÇE{%ë ÂÄ©xzȇýmYª|“´´£¹äq>ðV ‰Î δإO ÄÊúKM Ì޻ŽrZRXœÂ`Hƽ ¶h¸¬ðx;1˜;3f£ªNx´zÓN.¤H–¸¥˰;>%„`Kº[ñ@^UmîªVþ­Vc„1­¢r•Yã¹$XÈhl‰Z^ÀD·äˆÊ82\ è¸ NÔïÚ­ÃÁE3ÈÔß[ÿ¤w›&ÐíBÔkbö§a\l”yòÞÌ¥“{‰«×ˆ3ƒ…¥² §Ü”ë½íÙÚ‚‘t|#¶Ÿa‡äz"kãÊJ](i9ÊC¼šç‚T+“FДŸâù ,²ºïìåàõ_ÌæWÉV0âÍHgð³Ž\ì¿LÚÛö’DêœrŠùlÆŒ9óì#šÓ:§{6g}Q¦8'avã<¸Tžº´°¬Ô¦k°¶K=âZ1È͹‹.BÙŒÅÝPW‚ÿ‰z;ô×7þ»‹¾~×É.Tôv²(« Ø@©‡¦G“îý…¶•ÃÕOŸ×Ô6B½I4 ·À|œÁ7ί¢Ö°DÉWòð„ ÄyÍ, Í50dƒSBîÛȃŠL€Ã‰–umЬ³ŒÜ²'.@ÚE5øhA…Ì%=–!öÞ¹ùÝ•§õ.~û¤) ÇËŸÅf 3ªgè?ͧÍÖ£×V.Ž7¡å ³vìÈëž<(ßÑ^ú3Ä>7 ãH+cvk‘|‚}ÞWÒz yÐ µsGSk²G¾Í%¦‹š½û6B}ByÆÏgA~¼^@åúwžÓË¡¡wP¼L˜úé %/<}8+ÇÀò{Îe4@JÚsÞáÏßÿ´Xp˜²¶F).~¥&2Pˆ´Yw¡2^Ñç2” *X´w‹¦9×ÓÝcň%Oå¥Kî1 îª:C¢¿š•M–C°(_?Üd–úœJ«°|­:X'¾azÏö ïA€hNëüsTCÑÁwh³XÂjŸ ^ªÃ9Ú0ã|ë!üÅiÀø<4=KqÂ'Ü2%4ÚÕ}ÑQþ%÷,˜ý"ýßwì2t#ÉÔU¬X :ž…çB”‹é;'µÏ›lÞéù»nɳo\º%‡aÙ»vn;Évz2ñÉ–Õ!ª°$pJfò^pû"*Ž-a}D-°°#»,lÝÛ‘A @0BV íÈÎR—4!ŠÅr¤á£IÂq²-Mçúe$½;Šdc²–Ý·¯J!\¥ùÆ7ï#ù«ê/>HOàB$Í™mÿß8Ç)Wå"Jì^ ¢ÀÕ ጘ:ÒKßß7§+JÚ™Uø×€×“ˆ-û£— 4«Ó Ý´Š)ü¬–ê-eþ·iÈQCƦ¨·+ LµPcV¡Ú?á.fHV Þ÷ÖÞÒu%ß(Í4,Û·¹ÓNî¡§öï®i™7t¢ñA?ë€U*«?§•]4 àÉ}ö$ª°ËG*Iø¶1 -7>ÅÐηöèß$tMw°"A–©Þ½vSPà‰×Älê¾Ç¿Õš—P8äAÅá¹ä û,  ^±02P/ svºžehšËÊ?3HømYð)MÏEò‹¸¡†–Q–ðí £°]nª¯êjŠôæNþf0 ¢tÀïˆÈWj1<Œ³T0øîmަ L™Iëë?i>›>­4^RJjØnck–ÇÆì”{©R ½íø†C¨;âC ;$Ëiߺ5žkZç®Óc!q“ö ¼aŠŠ¾&¤B¥°Eh£é;¸w÷„Pa“h_•Ô—Pÿ ëý´Ì¥ÅoZºé\Þ5™iÉ7,y©ŽZÅp{ÍÉ“a0˜pY:b”q7”û€Oa÷9¾"¸J%ôŠ#ÊLì\UdO¿òÇ1ÖX!ó©#ŠNa ¸•]m)G ;ön4¸LÑ´5àÀ&žuŸáqÉa” Ùè¯ÀÞí¬Ðåe°«ÊÃç틆ü@p[)ŒQüÊýG>Ö¯å6Ç¡»§l8…ÿÞúå¦4-Q¨þN~3¤2ý¥\L‡ïZ×á±n¥£~©åsÜ_ó,o}·¼kä+«‘Ñm—F®Ë -ü¤Ou⳩ðëÈs™‹ÂVÒÓ¬ŒžÔÛç\kM‡§ÖRpQ™]4=£îƒáé ÿÛö$ÄÁ+þŸ¾˜|wÁ¸& ž%9ûsƒIË79'PZ rmáЃ6#Š–×.úª»ƒð– ©£ºÎ)tÎWkÙªŽrêoA5Ø–Kuæ@¨¶‹—3î.Y¯™~çG<Ž‘ÊÓâùu™"L›Ê™y‹Úí(âíl³!?(¬œÐõ*aÝ5{Ž·¢@¶ÐÔuÒ쨀gž%ãR?´æœ*Í6?öÏÊ-õU<^(…ðYÈ7Í$‰ÛM¯™—Ým賡CQ O'­‚ëz7Ü ¶KJâ~°[Œæ„eRåwûð'¯ô2ç+ºŠìš‚OMOk"Ñåö|ª£(ï·4}Ø®6ZÔ kƒíÿÿÛmJ¬ìhAXÉ4w«:¨]‰Ë.´ŒUˆ9rk·:ëö~û\hûÓ!äù¼jS 2ÛÛo¼O°¸R/ÖÝP˜•¦/ÿ­ZJtš/|ð‡k÷NÚÁn\¹:xûuK{ÞIÄ}ª@ØÏ_‡î#JjSûA.K,'¬Èsþ”U׊êÍ®[DëFmË æx.‘ûl¢æÝm`,x¯ ÎcÔÓ7[é¼Õ‡›W2æf6ÍpÖk?á‚ÚÆvK˜Cí³@C„½‘Â×cà§ãT”wXzõØî镤%µ]ÑïfÑæŸØu`”1(µ‹?’7ÙºàdK†ߦ*) PÅs笛™–á¾7_Hã3‘‰bé~ø45F;î?si¶"•ÐÎ^Å™}DËGî R·e8E·#½éÕ•¬#žZ)Ä9LR.>ÈüZÒkCö„±>§õQƒå‚•a̼,B×/ÝÉ®Â8ýå×"7ì@ÍÐHÄ>šX€\îÿÅ94NŒûØF•10>1åZÓ¤‰ãžW!Qã‘ÎW2òç½]U<¬fÞKT~)…iÆZޤkDjVäcÓÐÓT£Z±ù l[0 ø-ìp†SzöÃ-ÒGØ!jÑ Hí},b3é¶ ‚ÑÝí!oÙ”C×D‡]÷¢ÔÐÅ]²â7ù\óºmÿ Ýní.Ø”õøÒ—«¨s‹ç¬F–ìÕÄ|ôÈ!¥&ùÇÜôB6çü •ǿʭðJÌ>œžô-BÄ„³†Ð„Þª¿%†“pÌ?<¬¢ò0ò›ð-®Å”gaR=MyLð‹dVYûÖ~F fæD©£Ç>«š™ÔœÓs¤‘Ü&1ïõµ£MG‰.œn»7 N”ÄÑ‚½ó¨®oì´EnàÿyÇ…Mö0¼Fe[´UÜ °!Ê ö4!7¤"ìK™.ÿ\ƒ™ÎI‹‘ÙG§èà[†ÏV8¡"•d n-®#S²Ëçéÿ\LmÜùŠÍÊ8#€ÆŽØì¶ ¼Çæ#¾âc;áø\×f3N‘ëÜ´a™¤üÉè™’ÿLóU}²AÔ*œóÓszMkW¤®¾Léxe¯½ÍZ|! ‚`J%çŒÑ¤ý±$Ù…E„µç‰n»G`V­shÇv…î*jB9¼„Ä>rç<æuhö•‘6[p^—ÖùAi*Žgu¹So3ÝAj…Ò”¤"ŒJœ:)Qh“Ü$)ý¸=#Úîj姯òS³?W@ka‹ÞëTÐÕYܾJ¥ÔÏcq¶ý€æ¸í=ÙÕk°—ñøýÙ+>ä²skÝš†Kà|uXÿñÆóh±§¾’~܃>Ï”š¤ŠØúuÝÇ1GcÁ1•mѹÖS¢¹ªùDqD„TB'bD ô0²Bª‡ÓkeÖÚ?H‰Xâ`ÒÆ:‚ðX†Çð䯼 ÀÖùöC0žJôÿ¶#ãûö4Áe:}OÄ}ñˆÞ®¿s£;a?¿UJ8º g»¦û±l‘] éÃX%ÑÂI7>êï¥ü¨•ˆ ¹"õlTªF]j¢ƒ÷Æ|ÑKbi#µS8_S8b­;+Xùò3!ÙQ²t´cj¡ô–F&*0¿­5Ü¢5›¾0Í]£¹¨qÛ@{üî®!Üf© «VñÝ>³^SsMñÿè$*ì¥Ãy´oh{â &â_V<Ç&$Ôè~! “VcXmr`A3íû®º±Œ©1̬Y…"º·}. ;ñ‡È‚„¿—éˆ%<ÖËêjëNKVJGÛT7ªWB"«¤å`ŒøÜ4’ô€8ë)|ª 4‰GÞœê+„ŒôJ ™B¯zk#F–%ºŠIT FËì¾K0ó5 5ý^Ð©Ü 1ZIÌôMÌï?2å#yI[ ½u>•¾Ü =8rœ»+‡?ô©xk»ÿ¢¤n…‹Úˆ½š©–œSSÚñïoåq¬[µ ­b/x-Tƒ@pù>XˆÑØ Ý|¼òÂäîFÊæÊçIgóµy·pc&Æ@Þs ` Ε÷3ªŸ*äº içÅgEE‹RÌÌ oÈÍM_¨M»†£Ô)+l¬ìšæFT<Ì­Å|H¿.âÍ™íÅ rÝ>|J0™Êb0§¿| [¿C†¡µ.‹ø÷ƒN1ßŽ[™ñlúøâÒ—¼m{åXƒÒzGl}q§ n¦— ‰‰gz?Í·™©`VxÄ ‘8–´ýúŒß)ÛOk,&ˆ·4§¨‡Ü Ð}»×¬¦ÝP;«ðSÅi ÐÛ£,‡®¡dVÀP¬¡n˜wcÏú׆J›bൌR È< z›B6ôéQc_É ÁÏ<}عàôÒVëÐØ2§–½èäKjw—³ùe¯~Úc`ÛÞ+ŒRÜb|;¶ @ ƒõŒõ©e6¬ U¬®ÛeR• £ëI ØöHàTƒ•SçÑ‹Rò‰æonù8¡–)c(G×3. ’DÎ4Ú»‘úMÈ–m~<s¦T|PºÅ–7Éu‹ÓjæO’XãÑ·&ïCè^xU«„›Üi€/Õ€mÆ}禳 *2íkÙÿè쪀`c™Ë¡&*Û(‰•vB‡jüÀ6ÒÌ3,¤ì¨ΗÜ:œOVésÜò<äcšNLÏáèlj26„$3nâÖåÖ˜nÒ¨Ï8ú?7Â@³ , ÏËlQÝeR?>Rç½ß²ÈÑs=ÅÜ·Ù$V!ßâ—Û+*D¡l† ÒûÙ ÊÓ-™Á£U}õk}E*uRÛÓYH_¯”v\pY¬Ó),Ù¶HÅïˆ(¢Z±±Zà=ˆ¤:%"¬t ˜’¾ý Óá4™zxuÙËX”`©æäÁ [ýÇ—ì¥Õñ‡v Ò)gÌÃiK ò-Š‘Ì‰T`ë¨ÇMûB¹©}°€R8õ‘Jt°bjšÂz~ĉ>þp ^Ü POÒ"\£An´Ãñ¡Û©­A4~+2v§àÉ€`©ä_xd½ÙŒžLÁÒš^•@E’þ²E·ÃÍlÿlԪ崅ü´²jH* ¯ÌˆÆ•Æ[cè\͸ïÀöžó|ûšP‘¦9LM~Od³é@sß)6Ðñ©|¢⧸ãòŸ‡û׺©ÁøR9ǶPüØõÃc+Fg%¹…5kÚ/¼«éú¡Â.3Œ«êwBÙÀ/ÜÍËõd…ÙÑlצC¢¶ÖçLŒqxlvmtï/Ûœ¸ð”{'-œ®êêRVKñÝïÑ1gO]Ù¦ T·Y˜3(ÏP™e°ƒýÖœÇ{·äºbOÇúâw+a„¤& ~T&kÙÈVºè yKEÄOܼ¥nzÃh…Ú¹Å=ŽS$›Pôe-ÙAýÚ¼ÞQ «¾Ðé£õ‡ì„ ÇÆüpùT`ÚtúX“+zÍ„ÒÖ†7¢q¹sˆ,ˆQ—æ©kmG†ò9”U– !âÈ[ö”tmNªj˜u `nÛrGËŸÞ±bI«ÁRZe=›ˆR5¢­[<÷ô5‰D.é«Ë“qì;jÛz}·„ §ª±‡ÊbZÞý3V’0 ³q©”‹<~”qå-7ýÑÈ_¹ñE¯™`Û”›ðºMaðO…ì Öô_)€U‹TxÕ‹(¿Àc[»fÐa™„Ä~ëpSÿBHi𨦬‘Sò•*TIJd#ä£gåçú"F¢_Zßëêæ0k¸Qà~· V›¢(8Ï@ ¯h¼Ùë AÅÓ.Ä9©’=ÂçèVnZÁÃB ráoö¼a›ÞP_çx—¶8DHm Ï·©œ2;ú§§(ÑW}Í@È€]ó47ø>ú¸þƒÕPncéUzB ™¾iöû0,Ôø?N3õð' Aeì§hòkkÏϹäcãîtWˆŽËvéÕk &**I‹±Ä$PØ1K¥xÕQ1 M?%IúçUx_ –eL[ õ·*GÕM‚Ÿ–¦!ËðRñÕý¡‘Zõ‘„m«Âo†•Èdo¬À ’çjbžºžÞ\*~e°ŒF¬aú¾®¨|Ä¢P†~9¹E”L`Álõ,øÙ O·ó+“Öý=Þ5¡ŠX¼N?LAòùy¼Ø ÿ_¶ûÜ2ǦÏä{X^øn†>/Ç&ŽüÞJkTä.vÇÅ40¬º'MÛ9–¬ @q/ó)›å)o¡ƒŸ×­{¿f¬Íûí¥á‡*ói¬[îüª-ìîG [à"ºoÇx,PKu¾–'ô¢súÙ]IX%D볪DI·}±ÃOQaëâWÙ©dÕØæ.·?@ .,û0›Ñôq¡)°Ô'$¶NÚPÉÓBó!%ZÎÚ›3hé*xÆ•N³ÈTbm~šT¨6Æ#Hø™';‡«‚e¹Hýã¿™3·"|J÷m˜áô+Ô"‚Fï ½R´¸íÙ ö69Í€»Ô&ËÿbPTR*ZPáBµÊé3™ Ci¾?½å¨Hæù+àw$}4mZ]Höˆa|4£TY| 0)‰¥^ƒ)™ômÇÎtZÂc _DYMWÿoËÿ"å´sExC ͳy—p} ÷¶üu}¸×W¬¸`C£0KhWD§ÀãìË쟑ªãhäÛ€ÚzÀ׊±ñr.Ú«A[ &:›ù8¯ÕF²ÌV}ú~³®ØÜ“»÷Ìâ•5]y™!mLD”bÓJç÷1!ÿ’Ñ&‚%‚ ”˜’xÐsÍxÕecy´¶±AØÕÂ5ÐŒáOé/Ðòn}oešËÈIf ~ƒÊÊ05Q¹[¿D­ü÷h=5ÇåNµ"3GÐ3Uö¦E=X‰²KèÎ#[¥íå¶ëo‚Í+wÙ²,hGÍlžû½ÿ¿O”Aç´dß™c3¸K“-(ò¦¹…8¬ ¯@ÖˆðN¬8›yô0SîãiîN#Na::u»¿€3°vq<èížP!³“¸LìÝ´Ž²„…2*ؼږJXb/o‹”5ñÂPµ܇b(ê€Ëžiᚣ.ŸgÄ¡¥AÁ!ê¡ vïVn*âà_Ç ™üw;—â²`¡4šY+ç°©HUM¦\h¥b¦wö 9A°¹Þ5 éµ »ÃCôʆ÷_TÐ@ª"!U+7üê¢S(¿5£¶µÕ•‡üf_„Â0ù\´f]Tã‹Ú¡©y<²ƒy"‘ãæ\!/brHïoÂwYý^öج°>ËÖÈn¦.|VüÄN˜•æ{‹ÈóRä-¨Átó¾<Ù, ë¿dÃõ:Ö?ãÌé¤G£O -1…H„*ަק’؉à'ÃrÖÈ«¡Y$îl·€Bå§:0 OXPT Sd¿åß((Œý£aÇèMÞÏ£áÐǘ’X÷’ôK(e¬udmÔ—f–ÞnÁi¢øíáƒ|Ú™¢!N>2~k˜¼³UбŠ¶pquXÝv•zv“µëe=ªâÞLÐ Ìx%Ýç™LngyY¥¶×1ðº>º"p¦5I¾¡ ùk¢y"äló°Ön½ì«ÂiÌ£äCÙFJÙ†ÌÆ,!Á]¤ämçéˆkw±ÒƒxÕu-s‘aw†Š¡Ük/n‘X»[ƒx“Ëí_žL)@[õ¨ˆæ¦”vt»›Ðú ›Ú%”¯õñ+Æ; ×%q¸½„aʼn†Ó0¤äDȘ`Oç |CN—‚à&¯¥G’ÙS) 2SÈ”öE±U¾Ù"ÂpOM¹vwl“³'”5) ªŒ”ªMŒŠ¹NÐ=(=#5]j‚'ÅÛ fÁÙ@c=Dj4A˱Ž9Ñ0¸5‰Å =þ÷‚°e.ÍòÝ·Ü´fO¾„Mrœûåt#¦mœ»½rO™ åìÝþ¶d‰L “Á ä¬@¹†TªUþ¨Ñ˜1úibk¾n¯ÌørÐ ƒÖõÊ´šmqÔ¢!3cBÂ]%or<éEo³° û×)D)6“AÒÆøßm"ðRÂퟴ$ÐÈÄÆŒ ê_ªà°Vþ‡Eå•Ûù…ÿ8¥à,2Á™A #¤,)f4žàCƒŸ"ÙEú_pŒÍcà3NEÿ²àkãl ¹’ˆä›‘&³ýåJshk‰¥£]ïH8Áq3úž1bLþÈ437‚$I›—ÛÕ·z¬É$Kç³Wòþ2„ø@r7:íD\SFl[ë'-PìY=‹cÂV¸†ýJÆlÂä¬Þ§l{K|~ڼ̽ç¨_-B$&ܼj(þÃêåQ"¼j)¢m_ƒ„ÛÁ}rü!ð5›¾xtî;zÎ 4ôz|÷ßv«?Â!û LǤô‰}Ñ"ÍR[ù"ölj÷V¦.åË+ñµ«áŠªá3j8 ´˜BJˆçKl2X?ò-C_ß6À#XUwx°R†¶CþŠœú u ÈI<‘ªëð/€'«t%Gº¬e•hûV‰èhÙIC+ÅçMdLÒ¡¸éêpD^ºyáôaÛ¨º¨·€  ò¬â*QwÔX6¹{´ËÐy-.Hó[-ÁäŸo5(DƒÓý½yõ±›qAž\ ]9ð½ù(šâÞ¥èí™u›3Øã3Rgpê8‡j¤º×Ýjyí•Ð’ûRz¡‘U»Ðyùèû‘L–»¹~Úîq³‡´H*5krw>|©ànky>Î$&õCAtéG˜qçÂ.Gõ²°=i”wý,3¹]uLLü`N÷@.G¿+ƒºEãÄD”½îÏ;Ú$ñ"€¬ïaÒ*å^W)9¿»7_tèn9:’£:qÀÚ1M(/ð=sVQx¡FÒåó’x¬ÿá53}d|F†‹K°³ «?Ó ¡GÚûpžåŠfƒ~A7z6:“ú a{˜j%\YpOB‡ç˜áß–Õ\G‡¤l|ŠmË_\è¯ œÛ*áO Lòéß¹ç?2ö.,t6–VŽ6j§sÉA•pì…Y’̇£W*P»P–@ªú•8¢ö/9IýBã,½ó}óq|ÕÏ5´Vˆ' ­ŒÌ¥èYù§CÙWÏN7o»ÙKwÈ`I(¾þõ ¿ñˆÔQN{k3 huµŽâ†­ ™Üì™îÒ@f'bzžÚ¶–æ”ÔÁ6è¯Íîþ„¿QIA*¥ \Bd¥ï#DB¬ÏE—Û™ V Q53ÙT’Ë®“Xë½>³­ónXÏIU/æìw¹S j®ކëã9…}Q·™ÌþI†Þá7"¯"¤l,Ã8,íT04ý²<åoÒ]qàÍbl=º|)ÆŽbž–ºP˵-ã’_a%à+Lió§L$oNI¤4älv× ÀÀ¢ ͉Hì€ÈÁ\%Óuê –^wdl Ì3â1œû©FýØ&_ÃÀžû‹$ÄøÔÐÛ¢ƒrOš ‘Ó™\pÐ?GY“êÌÏ´ | CV¯p™\Љæ¹0%Õ²c2`ÐBV³wAO (ÐÊk†eJâÕö†Dœu_+ö… ]z; ‚³ÚêŽ+é~Hlç—ôß ù¶©'8™>*'/U¢2¢GV0sA qVýá?W„:I,2‚¸µõÌÒ²ï§éÔAòo¹eU=¥Uª¢@0QSœŽÇ¢ŽÚS±ØPµ¢öfó'NçU8¬ˆüfäúþ1…‹ó jÂñT¿ÑÊ*”ëÕb÷¦kᨙOe'¥6hIH¿t=é Ú”ÃN’=÷áDüfJÕ‰Õ˜Ë}EO6R¿¡²5dö'LŽ”GÏÇ/¤¹¨W‘×ë\›û”^w%Ühä¼öÆ[É ´¬]à$ud.Y(\›ýhüapˆcX©´È‰&úK¤cþ+kÌ+ƒ¶Ÿ%ìê‘Q„ãéÞ¯ëp*|K¯%Ñè3mÙµU|P2w;/­aª5;)= )Ø ªÉà¬Ô«œxõÄ *߸ôÊ@œwâJÒ×å ­Éê©0vÅ[‰µ)F£ªFZ« 2ä§Ü}U臱tW\޳(æs»D~  :¨fÞó€ "z>UϹ€ûÓG²kôKŸêéMÚsÙ¶\klİäÛ‘^ Q¾@cWo+¾CKç˜×ó/àscEû(\¢¸+?Ãò´ë%ÿؼ/]uá%ºÎœdŸQÄEŒÒò–$¾Ÿ†åQ>%íâpDÖ!” dÀT6 n÷ãX@¥>ý‘¯ô÷Ç2äÓëëQ År8ÜÍeHz=óImï¦pôt…™wŠ·G¥”‚8WûoS^E¹]ðâ‘Gºx…Ž: l³Pì\ªyÿ#OÂO­xöpäë(Î&ãàó4*ôþ'´)óÇÂàFŽÞ^Â#˜R²vûEdm›»jåq|ÚRèayˆÁµ-¨²Ç'ê*B]Þ‡ÚmA|xæ¡‚¿EZ6:%B±-½LJ‘£!Ã3ûSTr);°œ¢`¯ÙÁUDgŸTIÞÝ:–û°öA\ÑUƪ‹´³ì¿=õ½s2T7‰d: qm4N³µ †´ôFí«‘m ÆiýìЉê_ãIBÈxöoЪî[ža½ÑÖJ¡PhB¡zý¢ãàS…N_æ¿2þ£¨Ï¾þé¥Ka6ÅÆŽºUG<*1MÇÕÞQbï„×£âB*öP6©žÈšL¾FfÌÙ–‹_±`n3VM[+(­M­úŠúÙ‹_Í÷rº‰;D:<ÎD u–]íö¿[–ÆØ;î¹Ê[€ÉëªÉã¶~ˆ#õ28ýÖ}ÓsûíÚÕMšv©‚¹ÛÝpp%š¹Å9ðð»f?¿!Ÿ8šÏ¡v 6Àúf+&6¨“TT­Ü”cS¹Ç£<­Z–V-o‚Ø?ÓÕ×@œt­û't•Sò~Aá·hþÇpJÑ0õ{úiüBŒûh1ÄIà'<²ýÞ凇VP˜£°¨ÊÈv˜ùœÖ5§«2÷‘LÉÙH¤(oä…àlµË蘵üdÙHB|Ψ41Ôgýá2Ý™^Ü&ï›»tÀµÒL&¯ qgW˜ ¯¼hëÖH±æµ*XV(xCH<®H—Þ4ŒbŽ9¡9gëáÜ1 ï½ ÊLM,AwÁ“ RT–_³úJXÔ©Ž¦§xLYvfÑû†dˆ´Øôû[±åØŠº[©·1«á2_©RY1%Ί9Únþ„ÕŽH2L¸  ”~[éJñÞl”Ë0ng†v%¬ßš‹ò±ë.HT ':,Àsì†An®ÈËŽŽÌʉäƒ3oNáëjŸ$}û…É \ {aÂõ×Ó,i)1H0ºœît”=¡´´_×À1ΉS ¿Õ‹ÀkÝß'ß¼6ÂŽz‡IÍ2h®¯(Ԣ˹ùxG_:Òûȹ )°`@?t·ü¶ ȸÚöú·S’›v‹µ’ᣣø´ð1§óD{p^£Î¤°ª©Ã9fVVÈý±ÕUÏ.ÎþîÙ<35„5\¤~Ÿ0Ç'›Ü»¸Å¢Á(-O»d~ sÓÙRë P¹ƒ>µyšì.š›Y¯µ©#WÖFïSÞŽó¾t,“ð G.ƒ~Ñ”ŒT¦9ZŒ3 Ïå3étnÊ`Djoƒ’ÀîÇš mÒ%º6¸f0¼L¸á¡¡²Ÿõá?ewÜ ¢€ø³´R}H=:ÛL¦”à rͱOc¿ ¸ìÊUȱÑyM™f{-@äð‹^–ƒßqè”r’•Àäy@|¬dl¸!^f›?ÇPO!X¦²n)¸ˆmÓDvôìjëzÎ$0M„¬Cá•»5€ˆµ–#P°›2˜›ÂK3ûgÀ4‹ÜBIM%©¥jËé=’Dò§«v’"Ê^ÜG/Ìw®ð¼_À^"À°T>I›)èÝ~ãÀb>HaP†Í|7ƒõ½„3çNóþ¬»ò•šnKÓO¬¥®“”¦rŠ <é#hE9ÉzcYÈ ÝXrCIJÙÄŒÀc\„W’µ ðuÈæ}ƨ«(MÁeKæFüöÓ O³# ȶ[æÞí6l³Iú~—‡ÒýÔP0³Bë0Îú*„{ $ ÈÊ ÕÙâgdpp¢ŠÀ /¶ ßSçÞ¾ýD ¥÷vQå7©Ã½M Š"†ºgˆ4êÞÌhÛµb°/ ôL5öHKyyM¿!ì(>;†¶v£PΆ©‰XÅÂߨ¼0²)ô›T–L¾'V¾\¡2àuç®Qôa˜(‰ÄßyWå¶ûI8„†£‰útµ_ý+mp§íˆÔÊw~@'WÚU«’hÀk3c5€ÛP­mCVX½ûG!5¹Lb™åyº½J_XÑÜ›­D¥fxÙ2‘>r/”5Ù˜ôÀ ÄÇžÂ2óTÐÓBËT4%s~ õ²µMXLóœåý¸eë óOÚw¶B¾Šá¢¾å¨­é ¬C<@Ï়ƶA/í§–ú`ÌO¨èNR%@·@׺ETA=S ’(9]‡÷_çgìÃxúÅE7(‚ú™àŸ]£ö|àI;I^.õü° ·g ™ê 5µÓZ¤öÚ.< Ü4QHæÐv‰P_ÄÓ;R@ªtœŒÙ Zœ ù/†J|±}šJ é[K[~n”⪺ëõç-i±íšAˆÛåi—R” ðêÁð’Ô½vk—¾¤£™¦—Ž8’ˆÐÈÎ\sä­Íþ¦}Œµ O­w,Pd½fƒOd ó(«”² §€9ÉÁœØý*êý ½“x^™ë X“½Mµ°:ëÜ|ˆnt¡õƒ”Ï>-š_ͨÅñp²c´:NûJ½Àð?M~^TñŒb¦ÝÒŽcF+Ì-¾C`®€wEŠ8BâY W@è õt1Ø®Ý&çÚÙ|å(=±|òXûÐó¸Ûd"%{»À*©¬$ÛQ¶HfÏæ-:¼HýRbéM¥ô¹æÆ>gÉN†.ZQ†þ6o’'Ýö(PÅþA¸7³x3Í%ÍÃ1ñå[é+õrnÖ£óÕf®>Èj^ïÏ4?à¦M=É⺥ے²ííÖí*†hRß©b±¤™Q$<®ýºàÓ£^8WЃÎ"­6Ó©b jÚ/2¾G¯úèD= t°‡¬H\áP™,ÒÜh¤ÉL„‘ Œ2Õ¹kjó-£'¤n‡ÜÛ9[x+uÛ<—†è—ìú±ÙVðªÍµžNæa§‘ú?7Ø#÷èB±;jNµæž0Ž“*ÜÐë›õÈ’¢×¿ÚíÿeÇ…‘¶yƒÈbü§"±—XPðò¯ee=š¡ü¢Ü+R)‚¨±bšò‘ö=¾Y:{Â,cAÙ£ `ÁêýB6ž•ã?ØèˆCbhü§ÝZ y{µ>£É'Ò0Kuû× U**øžZÚMâéþ©žØìäîøâ#wù-³æ~bÉṼ‡!„yñ3²™ÃÑ5£k(»J„x´~a¼<œRµ®÷¹½¼Î†G¯S½DªÄ mp3ht1ô”ž l/Ôr© ¸ïí†ïê¿úµf¡‹üÚ÷ŸMFØ9ûñ¹«p3®uy m¿üHd|¤ Wk©¨u$Ür3>T½Üöñ¬òîlÿûY6U[6£p }»î?{ØB• ®²i8>nÏAè^dv8ÍBX"tç›4‹²žMš¡bôÎëNùÀ,3iÎgEsÇ„¸<óEí*b’ížCãv:Bè"E´P 6´Î¬D²°ÅUžçL+wªÙ&Óû&¯Ûº‰dû©o‡%Œî)1ýø$?Í.x1´Ob:¿oëÛòP&ÐÞ¿î×OKv¢*âéÀ¿)F\ÆâÒ!€ÔºÕ¿@úZÄ&Ù´}è^>Ha<Ž A‹åv0Õ®ñà¡îÁú˜°0†u´ÒÎÅîS’íáŸë‰ÿmz÷’ýyõ˜ÇíŒí§g½é&íо°K™× ify”X—öIŠf‹–Ç\jÇZÐq`µû†Å”ýÈ‹‘ºWkÎí:T“[”©±,‘%RM(ÚÁ®‡‰zuÞ£[ìA$C܉®áët{]ÏØØðÏNPƤ¸äõ.un¸tš?J"Í¡cU¡¾aæ>l?S%б~QóI„ºS;t;“áJá¦ôϾÀèßhÙ³/Rì~ÐÑíé;ð.H˜Ìç1B6aÈåŠ3òÖžÃÏæ­lcɹ¹€TüÞ6Mé{Aâ „‘]–ŒÌß%¬úKºeîj)ÈÌù½*kìW3'}E@ái#jm‹!ü"^³<º›rˆ$×o†ùëêõ'W¨OH¤¦ùMµœÿÛP|]HU%ïRJBÜw—FUil¢lüuÚ:’dnâiŠDéj% #I0¥ò]R$†þÑÕ|Þ+ëUËcvÉ’rF„ðœíCª=OW-é-+BÇl¸ý%¬w®QQŒk?oÑÂq²MWÜß Ñ÷ê>p †œH¾wþžéÞÅ& <ÀpjîÕÔ óíxÌÃxxfn©6Ô>:ïAÙÿl&qêŧž¾ ëî¨Ö£bò»-ÂZ¼|xÇ?Lk€9j–7¦ìZ0£ŒD_Ý+¼ /!O›êTÍexµ¤\ÊöÚ½˜¤Õƒ_ã&0˜Ý p™?’Ìh.Kœ:³”bB v+XàTfí`ÍNîxt®(»& ñ 1±CtÚ‘«‡veΣuVT[ÕÖ€˜õÃ\®–"Ô®æ|iºÜd|^Ýd:ÐmµúÊ­ìã ¾ùs@·' 5ÄU†šWó ៯ÍËÛ®sJoz{~LnÄÔX`%CÍ•èjÓM÷(7¥†‚¨ý/Å3ƒã%$2¡J¯¸¯Ì°Á:9þW/£ö„€QãÜX>¹ZñõŸøAf¥¤8Å"±ÙÒyÈÏÏ´Ü«Ô,p$¨- ûÅêÊI¥\³Ÿm`ïð\lèDºf yöÜñæ&Α†ˆÙpN4LBÒQé2î|ùFgs°—¹!]•j>ÄÂCóÜÓT È"HÕ²HÞHØ]½ñ¢^|ï£<ãW¼G)½W³U°QwÑøÚ;³‘÷iÚƒ¿©ÕÓò’s›2ôÞýÕP¡*J¼ëì´Žh‚åå1À YVb^ð{ƒýx>‘p CîÓ]ê)ð<Ú~ÂÖš­9ÏÞï±}ö,õîVR0³kÝ!¦óBY5Âü2PøÃý§å%–"dÁ  Dí®5zZ—%ÇN(~0L“™Ã¯dž†ÐˆÂ)‰µ¡ó*[êÿ$…GïÄ;E´‹ÇJy>ˆ°ð jºŒ?¦Ážtºz åÅ_¦ ôyô1uçz½*Ïm‘P(v%ôÌÌáPS‹¶“kXÒº=íqs¬o¶h΋KV: ëìøw‡Ž­ÆLŸPƒÚ¬Î²<+–ÍkõYlÙ3D õo2K©+üß;«—C³0ðŠ9€{Z¸:ÆnýS1²>fÞt6Š~÷ ¶JAÚ èÎ~!;¹Ÿ®¬ ¾ÉÔl÷æDyÈj{EF–]6HI„Tl/7¿Æ¶ûL_ÜÞdœDwhñ¢5çãQ$´GŠPjß’ž è-«HneAI}>ä]]÷=öÎxY#JTåM‰¡Ý‡ëï·çîžÆMýæ5ñàÅê—¢ømŒQgkf=wú—è~«qý…ÆÒ?î£HCÒ·‚7»› v ËÌ6º9ÌO6iO üºçîKT[Oy2>!'ÛX(ÄIŸN8 *û–.p¹¤x äÑØ*ÌðrR¬Î2bµZÒýè°XK³‘ý§2“BGÅtlÿŸß#­tC¨PNEw~‰ëãŸ)²?ûjFÁzú`úEÍÜV”ðê0ʽ è0ðKtáDMàœæêS äO!>÷‰L­#¼8ò¶ÖGÝRÍ'RÿÞ@³HÝ…¢†g(Ðé ·‰AÊKÊ#¡LÖIôÜÌòîq¤’wúO×€ÓÙä.¿c§Zœšî2ï–ŠÁD\ljX‚kzîDaì¦Ç]Èr“×`­ô2ˆPâ )©ÁV´‹z8ß0®å4Ѻò¦O‡˜•Pöö¤/_¢y—û‘ó ÓÇ_u´†ÌëœÞ¦“‹@Zg­œ¾–3/˼³¤^ŸŸæ>ð±g…ÎÙ~Ã:¹Ø¨ô½^‹ 9©¶L)áqMæTV·f©#¿káØYý&èBޝ–Qpû¡g_³‡²[«joìp°Ké#·Ùí$«€"‚VšßÀ¡fŽ1uèÞ‰kŽVÉ“Ê9°çÝ2kZ{Å!µ}R yYžÆ•qíŽ-© ÆÐ³Ù:­ï»Œûîú«$Q¦LÍ{Œ<Ï=—¦Àhs „› #ÉZ…RÇX)è¹e,ï¥l9•+2&äS*{²V$–¸tvâv™"º‚ϯ®¼$W®Ìžgeèf[Û57Ï&ʬÒ\°Žèä¨-RUDl+Ûÿ¬]U¦hGá —Ô—lh¾5aiÅ<†ÿ“ïiÌ(¶vÏ)¶Þ &W‹Q—áÝ‚Ð=!á—þ²“¬CÍbh‚ÐŒå †3ý4ñµ(ðÑ5vÇïïÍPÎþ¢÷ñ^ªtô­óù3°Ö?·éMã±…Ø´ô½…çŸ@Š ×ᤠØþÔºŠ#Û—€ë|Œ »/êÊBt™0h`âWû†òR%nÝØˆ«><Œuûúãa1O!Ý0ïlhéÄáÖrÅÞY[­ÆcŒKië}é_ç) ÈëÕ"[àO×î%þ,#çåúZ ¶ÞY‡rçsAÀå©eÅrZËâÅrN›Æv›69ßý©^‡Çëë¤j¬Ø ÿÿÖÚöÊ1>ó§ x”ïÙ+ˆ¢D©{Մбv ïR!¾@3Ö ,W, Ϻ•Ú§!ƒëU'Ù›Æ5›w9qº¬ªôîǾÈYRˆÁªî¬ „†Z1®þI,P­ 7évI:,WÆB0岫0/¡1­‹HŒœý´Î5+¼¹¾»ý3蔫º‚Ä%¡‰I7‡ˆ„çK<¼b!w+ :Ó2AÉ^°©A•²âRjd•¸r¾=R¹#Í4ʵ}ØÚÃ|§)‘rI,ufw+|YwB¯²NȆÈ9©}Iä†ñÍÀ=+†¹ ¼ÒÀ¬döJõ¸Ø(E•£_G -œYÑÃÿ"FíÝ@ˆp3ÀùËhytrf iÃ*K©mRÜºŽ¬>Úd0¬îãózbªÉï}½ˆÉõ?©©m™ŠUã#òƒ4þ%,SO M~…†›{5ÒÄMöpZ›Ù›åÚ¸’¦Bð-l0Moú@µ´ä¸ÂnBE÷$]U)·Ðº¦Ç:ûÂ_¾´Bæ ÇŸ<Šbk„ðö±@{|#Òügå©4å'/“…àH°… ðZï?öêTù܆ç¦qU¨ˆ%HxË÷({Ù½ÃñÚxŸ7 B¢2Ž!"…4½zô­Þ' V”fVyæLe䬹¼z!"÷KÞØ!©³›~ÌO'þâ~¿GÍÀ¢%ñrדvÊ¡.¨|¸fÄå}¹9¿zD—`#H/]!ÙOÙÞ¥U€¬ƒ.Èýº +ÄEŠSè" П³¼¾’ë'qMYð3xþñk‹5Àã¾&1˜¶Edy‹#='^m¼`#·½4øCÞ>ÊMHÿQVdæcô«aÚŠ-¥;ɾ¸O¥Öd­Da]#‰üºt5múƒGtw!å‘ð„ØZxÞÄôxöfߊ‡D2©qÿéz×´ùÓŠÜé/¯ÀA”«~`‘“4#>¡ë«5×iå.¾îˆs"pîµú?LU‡þ-©²›k˜/FûxœjJ+™Th,xªìHÎÚ‚-Ì‹Ý :˜u1Ç@¸ÜŒwO- …Av¨Ÿ<{Ôõîõïªc(íŸ^Æ|§ RZ%£#°|Ø4™ùäd¢ý4]_]œ 1«z?¸†E^x·ïðFY¡à²mvËÃ:ög$ Ñ®wFdÑ>ªbí7'U¶:”C†¨ÏF•M%Z jV¹5¹~àb;Kà_úæy›çEGQC& *Û‘ÁJw¡¡ Gþ¾Å†!4I¥ ˜äy²Ñý!Q|ÍéÁ8DNþ[êo sö”8ݱn2Õ)ÌBVeª]–u÷¡¦KNüƒÐv¦o-)h°îäoÔÖZ¥fu¢¥>Lw…hš' ùÌTfCÖ©–'=º2aï¹»ÂåN×6¾¯R{~„îiG=A+d½h4nk¤<}x‚¤*Þ ø Ÿô5Ft´„12ÑS¥‹ìÜÓ.~>¸Ûëœ7™¶”«8M¨”ºõ´j-\®Å-/Ç’p0jþž!Ë5û‘ -Cñ€ç(9©É›Oú8V!¹áü„mÛò0¨(ÞøØñ>´=LÜÈîÒmçî€ ¢\ PÁïžë£ãš°€ãÎýNÙÙþÏtji|[þ_í©|ê±á-w·”îé´u…ñFëÜóC^_°jY?FÇÐJ†<ÙÓfQz4ãœt†œhÏa!±mz›°¶LnÑ ¦»³>é,èð¡Õ’âãVñA{¶B¡3oS/yƒ)Á1Èb¢žüÂdØ/a%ÿ‡î§†ö '•·v<#hM|Œ ¢šS .§-bSÇè†ÕòUÐúÿpRÝž >Cm$Õ'É}3e¸=°œ2·ôólA»á( âu ZUÒFÚr›OiiÕû9¨ÄFÞ½€À"¹<;Œ0ZÇ/á~¶í=(ÃÒ” ‰ *„§¦™™Õ,lÆ~ tRͬwˆˆDªÿù2 %{ùm:£ÉR[aW®~kÆÔAQ!øÕQG–Ñ‹yU`õ"@êõÓ&̽¶P²óÓö£—„\THfaÜûÎÕÚ È©åÆ¶?W‘Ÿ+‰vOã—{j2žˆUÚ5 ‹˜îs¨°ˆ')k 6U:P¡LþtVz#Õû§~EǺ©U³¿Ÿw¨Laê¾ÀbjbxÁdy»¢™$¤³Ù›OžÔ9d ¸%VNµÅè5>ζ¶êø#r߬F?˜õÇaE¯Èßæ[w;Iþñ˜¬¤Í± %ŒŠ‹à›WŸf‹âøÑÓ]oëAÕ ¼4â]"º-þ­?ËS¦b#:Ñ5³Œ/†I1£•Qƒ]kýBÓœèJEÂU¶,•ŒM>„ðû(á³(X¬ˆ†2Ð3+¡àË¿8ø,=û_ziØ0ylD`ãKÀ6æýÞQc$}ØNàôû©´'!GàƒmgÊ FÀ˜œžÔ7@u÷¾a8N¶fÉ@¼ˆ{¯2"¶ÁãЮÎ'Ž,z~ye'#lÑWFCC½V¿¦Ã§^® ÌÔ±þÉFøSå.Ôñž §ª{á>]PÓË1)8MF)ŸÀ©‚›À+"Ïø hÔÆPKSÛü Ì+æ'äÃ/»I?,-"ÂÓcò¡ó`vm(pÍvsXÙ»ÝZ|8€ÝH¾KDŽ©âÈÆòh.z‰„ˆÏÑbJŠæm[2ÍrË…sÀ¢oˆ£Æë1¥_ä>õhyuÊX**HN?gæt |›bl[îý­þ|j¼"ãE©ò¤Iò¡:º¦ƒ:ÙœðH‹]™Nj1wmø˜\»Yí¬ƒ5…˜dïÜz¿–•WŠô?¡,] ´ªëµãE<ázIòèÚ ;½ÂyØåKR‰g¥˜œ—–_WF2Ó/tä‚u'Eˆ¹±$r"›°,\ó{°Ö!•¼U°½6â&ÀŽßÿòƒ¤䜼Òç“’Y˜ôsÌRÙœ)ƒE²$î(ª¼\?lLD6oBظ^»_ýí`¬ÍÁ+jÀx©êö|[¨ûf@ôÓÁ«®›ó·r0ul'ßÀÀÞ`p#‡µ}Ô“x!mfùR{~¸!w"þϬlˆÄ—|ÀÑ{¼€ ñ­øV+_ß9àK±9 Ç/2é¾K–g5«ë&í튊XêU¨ì°·zŽ]‰LÌÑŒªÅÝIB`´„nþwŒºÞN†M¸ãÖŠèûÀ~ñ ÏVÈÒ½#4°DÀìb‡ƒýˆâMºB¹ŒiÌÆ”“%5éØÔZe™‚,ê43Þù ƒý7]Nt ö®œZy)Ì)õGEYÆÊjÚ‚eŽæ=Õý!7½%ÉÀaµjZNœÈà-ê#aáãÒ#;'ãSŽ/h—k¼&uyâðµºÝÚ-ÂíÑ”•Ôù`wøË`9 ‚f‰þ –‘ý×&ƒoqã§ZMÝ‹º¬š%uH.ø7Xð½ó®Œ‹רzTÀ—QÞeH ;]COÖÒš 'ŠàºdfV)ÄÝÎ fö„†˜C5¤¸šÍ¶èu¥"ä ezvVb<, ØPcƒJà<×#Ɔ’Y»µ¿v(YåœùZ2Ñç¹è3¬òÙ…ýüùrY·•}ÐúþŽÞº~!û4¡ðñªQˆ±ñ3à¸rTã|á-wnÙÍ d¸¡Eçd¶ô8 ce‡¢êN[Fɉ¢aÚíÔá7Y!ð¶P@AZÈ_1õþ[ܦ£¿g3uº˜#[Pö #XÎóXKÒ‘áÄ,ÉšŽ§Hp­ïWº-Ûâ.çr.Œ$o† {Îßk¸¥#Ž1Ÿ~*>œ‰ÄÌ'‡ÝÁ+(QU'ŽX«"л­Ë'EcâëjÁ,t H¹-A+&²£?”†ðEÆ"U£³QqQlÉÈ1g‹CeI| ô½Km{›ò>˺×+Zwñ}?uçCV­àãpÇòVrÌÜï¥0¨|Mä1ÿ/f+è·+º^ÂË8™et k»xj¢Uiõ¡¿;Ò¼ÁŠ`¿õäî Rê"5&\Á§Ur襌h¨uàŠ¡Ã‹¤”Ü¢&9üãWzK³V=ìu1Z8X'w‡º§ªÓN ÙlËr…&À(žV}S~}ôg¨ ÙHQ2Ôx«¦ùo{6G£¯›ζ+UàXÝРNâÖ&*-„Qµ‹Ôm2¬ù‹‰¡©ës‡Aë„Ox€ƒ3¶¥çóÕC…™wðîyÆ/ <°™ªHgYÐáfE¢±œ·ɸp½¯Š'Öž‚CYΙž=8•Z•^I˜MÛëøÓKXEëˆÚØUÕ;g)"“…4¤B¯åéqê1Úñ;dTk«ïKSÄá4‘œøàÇ!kÈD;D¤Z$L`¦åù<0tÍhzˆòm Âr&nÄKœµñy³0îÐ"…—aYˆí!¡Ô-®¼¢=2ïtH9‰|ÊÇÅ?¤½Šî7`L ä‹*:Èù°ÇÊ|œé°e¾ÙÛh"K=–ÃÑ÷³™µlœBÿ½˜`SòØ£-hzt¡Œ2r#¾´‰xïÍu¸6’/#Š{™ÐÆ d úÃ+ÄÔn3Î(Dªê%$àx“®÷NO ÜýgÓçš&©,zô! wIwå8Ôë+_Þ«ôôdïѳNxdGó"ì`•lCéYYoxXXúnê§o»…³Í[íXئŒT'¸ˆ Ä„ ëÍröœôx’òdÕO‹\¸›ëòaÑúP±‚õ^»Šžh稺ŸÙ ÖFPAêIâîHN,øYØœ.w-ôÇð±3+ɸiK»’‚7\j(“}×ú’ –±^˽»R§.ÑãÓ­G>»ìɯñíRÆû£1W“ÿ«p4Í ¨93J¡B²7Ü£Î÷¹YñáKÈ·èp™ñB:? ”do Õ£Ö .Þ£,lo [Ý^ôˆyBP‹ Vd0ÞMÝH-Èù‚vØ#7V©Éew «Æm¹òÍ †ÈìÕêÛ¥Ÿ£S Ýž¬Õ Ê)¨PÙ¤ÍSÌTgôdãûËçºoŒo*%ÐÇêò¤ÖŽÿz'ðü»íÇÌÑHއ—㵡ÝÙsÃͦ]_¿“kcãkeP¡s¢ã]Ž™ƒˆ[d-#ƒÛ@êÃU_í° ƒ„Íjc¹ÌéÜWšÁ²ÃæŒR2›„BLLå?ÃîÕ8 Q#LÈ€¼éÀ5?ä»ë9nxÇáàÀYÿ¦H>ÚŠ^œÚƒp¸ïÐõ¦Þ.néUóKETM;ŽÍ¶¨PêŸßÐB¹h{ȸ¿>~Ïy¸â^t,;„9kÔeÎÈr®G› ÌÓüû˜.`( BB¬FÂà‰eû}Ì…äø„»=xáÔÊ7ƒ»h¨òƈ̞v–’ðÁg‘ØÜ-Nmv›¬Ý”Ó/é‚ÅÁ¥Ã«Ùü¥ŠP5u0©…óïãý(·qxõ––Ûn"i$¸ŒVˆ¬Ós^ßà[_Ímm¼×^°L”ý™)à ý8=‘ýâ‘.cC(Ò+:B:d$Œ œ‘·«ª›Àä™ ø78ø7[©9ÞH=‹àzà¢s˜ ø5Êi‹kL¢ l*n¹€æe—Tè†å=<ß1˜û;À]Çê?ÞØýCÞéçiþ‹:™­a)8&=½=k3]¨Ñúä|t1Ç.n@l­ßpJÐ>e†gƒAÝâvËdåÖá–i™I9Ä^×§ß#ÙL)Ì›8ÜÑ2ÝÃëÍrüYŪ¸„§¥ëS®ré÷ Wî¡àÞ•ÐõÌX,­mR–’…]¸Ún“¦Íit4,üÉæI9Ô÷'l—¯³°JF„£|€qL¯­ybåáJSÊUÄ¢Æ6ŒÛœ×~F¨X=2X~vûû]’è´pCÍ ô—óáÕî•ÕŠ7äÚ-9%4ü,¦Þ*YÎàæ»ë Å¡ÄÀNª|¯°WY^¯nM­¬2ÕÕ“É;žFžV(¤¾ožb"ÐùÀ\„ܯ ¬Ê±nÉ-Re½áÁؤ,îxwi‘Ÿïûâ©ÊrSõpó%;ÈoåòæEŠ/ ¼`PSèÔ„]„‹x˧^|5¶™\Õ…ž<C|; »qyÁ †ö8‚\ST‘9ÍãÌUù>[trÚ,@QfY¼¡yy Οµ U¥¶¾?ýØŸÍuoíߨ!bœ9rc£j*Gýz%Æ­@é÷ÅA¼¦wìZQø¿ù'9†î†À™ô¯‹bR©UŽòVLWØù…Åæë$%Ñ{šÖ€r/-Â-T³<ù)ok„ÒFO¥Õ‚ÄUøÿûô?Lû¸izüîfj¡à*[os<ª‹¾*ŽYIdÒœ2ËNó©Š•>ˆ6ŽØ/Pi9<Ãõmæ N¸¶jœ¡NõbÙCÀOÁF3õ*¿±¾¨R,*ˆ'ú2BVnM®ó"_áü$_†0µÛûQ¯&×3Ž‘põçÖ¡K/àLÇ<Æ*i9ŽrD织`arÐ^cã ôT¯K´Üè¯.U|ï˹¦ )ÈÂg.wôl…8Åt£~\•`go´ÉŠÛèN;{¢Ú3²ã‚–$ŠgÅ—Ý."°.äÆ9 uÁ°×AÓˆíÄÕ™7/…cg÷^pm*ÛM‘˜;aÊ SÚ×I·ìÊx‚ÔjÇóZcs=à¹s ™ùw…£8Û”0|Ôy=?ŠƒÞå¦ð@•’Æl„Ã; ᣃ1˜y·~Ö‰1ñ'UŽZù´ƒ¢ãü1¯À1d„uΩmÞ\çD”éàÞùFµ«°¤Ü·jõðÙ%¨+•Gð>A.b„7œ˜Úö» ã¬0''”¹öó;Z:%´-h_ÉÄnS‹1Øè}Z,g[„CêCwÀ™dN·†¢Ã´L6V?H 82éÿ±j¼ ަÌ~ÃþïR:ò9OßθZ ñ«™I¦‰0A{Ÿ™êü¢jèr,Èkúq~C|´âÉ4+´ñ¥Ì†vf ³˜ž\¶$O)€¯÷C“ò5_m@7g¢˜áaTÛ®†ö:!jbgÉ{e9ìÚsàr„ jC8Þ„ÓHÜ$I¥é.Y:ªÍàâí3Ñn)"óпªg#(8ý@”¸„ÿ@_ößÄp„ ¨ÂýJŽUP-jÒRÿ}€àÏt±,âô·A£):CMWÿáÒwL-WИu³9'ú ch%â‚*{a *óÄÏ»š ;¦M&„Jzšø;›$>{ñG|˜›¾d´ˆ_ŸZ,”RdíÔ‹&„î­.¯9ÔA¨‡¿ñ’bà€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €t1lib-5.1.2/Fonts/type1/bchbi.pfb0000644000175000001440000010463510733501627015171 0ustar rmzusers€ê%!PS-AdobeFont-1.0 %%CreationDate: Sat Nov 3 22:38:14 1990 % Bitstream Type 1 Font Program % Copyright 1990 as an unpublished work by Bitstream Inc., Cambridge, MA. % All rights reserved. % Confidential and proprietary to Bitstream Inc. % U.S. GOVERNMENT RESTRICTED RIGHTS % This software typeface product is provided with RESTRICTED RIGHTS. Use, % duplication or disclosure by the Government is subject to restrictions % as set forth in the license agreement and in FAR 52.227-19 (c) (2) (May, 1987), % when applicable, or the applicable provisions of the DOD FAR supplement % 252.227-7013 subdivision (a) (15) (April, 1988) or subdivision (a) (17) % (April, 1988). Contractor/manufacturer is Bitstream Inc., % 215 First Street, Cambridge, MA 02142. % Bitstream is a registered trademark of Bitstream Inc. 11 dict begin /FontInfo 9 dict dup begin /version (2.0-1.0) readonly def /Notice (Copyright 1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.) readonly def /FullName (Bitstream Charter Bold Italic) readonly def /FamilyName (Bitstream Charter) readonly def /Weight (Bold) readonly def /ItalicAngle 11.0000 def /isFixedPitch false def /UnderlinePosition -109 def /UnderlineThickness 90 def end readonly def /FontName /CharterBT-BoldItalic def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding StandardEncoding def /FontBBox {-190 -236 1243 971} readonly def /UniqueID 15530633 def currentdict end currentfile eexec €‹¢•@ƒŠA3ƒœ©Ò.+™ò¶v|Öu ¬ü²NÍ6s›¶I”Åg7 Lì’É”_ðt^÷ÿư©£¸Içé‡@ål Z÷‡UœÆ•j³3Ï…SÕ\ ŽõìkôbêÄ.s€Ê’®‚³Ö¼ò»]Vp”Ïâ}N¬–“èƒrÒX´~ 8vUŽ¿uz¼\Ýö+ÏÍ‚qòYƒ;¬yprìš0c¿s…à-ŒX¬ß³;Œ‡h²x±KÖš¤C#%Ý——ä½a¹ãÚÄBóI„MzN¯îý˜ éÅ&Íà“ÃÝåqh2ÔAþCb‹Q¬¤¨ð˜»û\ïȱúô”€RØí@C“ÿØ7Í4ûE†¿ÔúwÙXK¶­BpÃLDœ•Õ¬»MãyZ·€²<"faŠ1upÃJ;·ƒr•šý?cºjº*rô ûsÑdtwA–Åà&gøÃw’üä² :·ã+¹ê›­Ú^l4v{œnyèÙWâP†rÂ{JE±a1 ÎÎÇ6M°•>w@©•îtBñ•-׊¹Rºâœ8w—\ÚåøI­ÖxgHJÒØŸ{]ö7‰—ЬE¡R« ¶Õ ‡#Í"Ì%%”®À¶ÿ!<—êåäíC®Ž(k `Ÿe(ä×±Ýòô¬ÃQƒMÜ]›ƒžØ‚!¤s…/j…ñ0}@V3´à.[’(0½Ö¬Üv\-¹v®ŒFæ Ķ^ØÏ"Ó¯L5çOÀ]Ø¢ ­¦–⻇=4iaÄÖù7ú·ši^‰¶o³…¢""HùÅÁE¢ÑÖàYóàq¡âéID5Œ/¥T9E›Ø×íÓ_êzᎎ Ó4;5b—I¦‚yÌ¢O„L™¤O'cä#¸ÎЙC9Ç¢lsŽ×ù Pº¡ ŒÑÔKÙô»Z,ÜxD¯n óóÏŽ‘Öi HŒ¿¡)³šUˆß* ½þLÍ&ÓÇë¶òm'·/8&c(>ë^%WÏ¥à Ÿ>ß>ùZ1#c†+XEö¡\{ŽYÌ´[¨›O&Ǻ‚{œŒÃ*pYèßÙ2c.ÞL×E¢a› Ug›ÒQ ŠY§ÆH>Cß:b{|YLS" ê‚²ÃL ¢<Ãr0$â1ym¥Ïëž3—P—I‹»3 Uc)ï ±?­ûZ…+k€—t*d(KIºº"JðŠ%¶Ê²[àGÉ=aánsøýˆ@æFKŠHI¯© ÁÄSœ ÜRâ&‰¢Q2âˆfâÞ©Ä`—éì)/ê“òˆÝ[Ý.!X"8ý½mzËŠÙµ?hâçùÈ/å+&®·æ»rT²JÁ2Ìâ,Ò®h’æÃ¤— ­Û€¢%·Ä©Ô³m[ò˜ÁfozÞH3`%a•O‚IûQÏ@£! ¬à'KiâM¯Xçžà,#‚Ý´rƶ ozu7¸•ûÊÝ&GŸŽƒŽ<%Ë®ëy£S[`Ïx>å%Ø÷»DÃbþ€¿.T…¸‡¦sœÜ¼‹ê^vQrÕÈ7U1ÞÈ|Þ([¦Dïy­y2ȰNƒXàéz’œØgæ(#î«ß‹tmM΢c(RJŸ³¡ç5t>)_c‡þðÿ­qªCâ7ZrÉä!˜a;5×Î&OB}VÊ«™C »#\ ?¡ƒšÛO³Øät7Ì^Ñôÿ_-Ê›Á\9jÂÔð‘Ë ô#lAS8«»)¿ÖmH16­z²† Ýd‹‡ß%£>Á(þl·íöW®iŠøý>;BinÅàžR%;Ýçª"ÞÂkö¢—*9…S²ÔBŠ^‹nì!ëºV Ù+Â9!¾Ð~Ÿf4õÒ±„Ù&´w+=©xƒJ½5J|ãFÉÆíºz‡¥^À9·S°!rŒ¡âÓ f ØPHG‘";sä÷–§ÕÝ9‡®Äàä^ &£NÛd]4Ù´Š#¨9žéõwPÞMVj˜=IP”t‰OÁZÊ]ítIÿ™‰b]¹äBT‘zuãCÊÇÉ ùf0ËúÌå5*ï—à‰ìÈzxx}þú·hàÐnË Õ€ýWp°€Ö–I¦¯eBYVº —$¼pÓ§m` ?.ŸRûÍͱ¸J¾BÑ.Šº¦oÅž`ÊZM(Æ'09KøSIQC¶;Í8+¢)Y†Ü>p´ v»¹¥·ôŒKt1“Ö| =K‘*Ì®¬Àr˜1=üóÙsçωW¾+X«ÈJ7jòê×IòœÖ¦še¤ß;ÇÐÑ#{?Óž êTî¥.ÔLM뎔bRÿĘF¸«¹`÷b 3ZtNü®âÚ3ç™wV'­>P“…¬­ø«h5ßñ"õÍR9Š*YÆZÊZHÙ;€žàü'÷Ô,£a =#9ð7åR2¶tßÁ hP¯Ka®¢tOò¾¦åz¡èµ sƒqmÃ!Wû ¯/1Š bA¨1ÜŒìIŸ›ÏN÷Hå&êU®÷U'úp‹Š?Ëý‚=ÓÀOVnˆ€ÕÙ/ ¨âvµÿo Ž ÿ’\Br»h,P KÁ°ùÊÛÕoa"5>2€Æ_²¤Z?[Ùî—s€ðÆÃeè~L1vˆø£Xš—ƒk3Ï2Ð$iUpSöeÎJ÷÷#&¶Ô”/TS¢€ÜH!ð± l<×Ô“°’[æ²QÆBhÜxCzxLUá$cÄ63ŒÛÔàåL™Œü·Z AP×ä„~EÑä!”¤‘aÎ’Œàµû“Ó5©ø ø=‹lÅSxõލÕ$9AÙY4Iãb˜cx„¬©üºƒjsPQ@!í£+(€zߦ0)hÞíæü©J/>+€¸0çÖ÷æ,Ö´“‚à´Š".½µ–§JíÒGSµÅD÷ÇO¤¦íMÜüσ¹ ¤Õ! ´Ð0(×`v*Ñ*ˆÅ ;–×ZûÖd3Kð´Í†4ˆdÉoR–·å‰o²œêbY5F&‘¨} •™’«øæýßßSz¢£Óª6…ËT*¯*u¡œÿ½%ÌÆÆtøÃ?ì!;B[Ø*BÞgþâ•Qˆ_bÈÖŠÌ%¦ÿ|¦çj«¼‰Õ.aÕ½ò&¶0T±Pº7B2BËKÙÕTñèŒþŒxý®ö˃¼oxN½?½àÉV!Ϙa‡È# ¢˜Ú´áô $ù/· ® ’oÃk=(CG‡ÌÔƒÏhMVÕØ¬¢çÓJ}sî(|äÖ÷YÖ¢  °¤æ@Aq˜VB*Ébúýóy–`½ˆt!îȾË(²Ÿí's5iâø Ô³ÜÇŒ¥÷ñ©×R¦h óC……|vØì=òREÉ¥Gó{+G´éH“к ˆ¬‘ø­ 9H¤ßUílÖBÆÛÀO'©ú’BöËÄYxe®œŸ¦ZÈ ˆÎè= W¹$¢™Eýòª/G»µ»–Õbñçcaªœ‰•£vªä¤u;ÌwØHæÐ”øwÿÊ=Gý#Ê™éðN¸•L?Qw ÑHh)²#’ 1íuøþ06y¢!}}¤Ùt1`Bªš8bÇ7R)NÌÔ³ÂUÁ)¹nå^ew =¡³¦TÇÄ9a+è€&Äʬû'¸9z@êâÚ£kwߣ‘gàÎ@ùvR’lîw…xaô&¿rì𚩬/“ªJ$ ›+ ­îÌ`ÿèj·loùÒä lWkû•'³Á¡°^þKæUÖÝMü=sQ‹'‡3ÃzéáIZ }ŽåË‘zál·°^Ú¦9 =m>ø­ 3ô‰ð ÄúAÓ²$ùv#7n6H6¼û¶>í=yæXƒ2Ô¼,!Í?TÝA[ÞʾX~®Å¢‚sÕ¨$ªÉœzØdzÓ®ïÀ§ø!–:âco$ªÊ•΋ؔ}΄'ïÚj">‘ÁÄå ÇNC´ôp¬e´Ÿ¯þå_YÞi.üÑ™bÛ8µ.Î'ƒÔŸp$lMñ¤£€@ùÑ–ï‘Z‚ÂÄβÒïO§!ý¸U¹A“÷ä;ƒ£‹"Ú ׽Ƈµí×Qõ+èŸ}ÄK$‹#['È€ŒXz»^‹D8“ààEwe;TÊ'@þçXú6ÝLFÏ&¨Šï- ilt’ÆNÁ‹€·âže3ö»X]œsi l¯åõLW‚e,i¿sülRÑ8x{!Î;-Ð,‡Û›‘/ëâÈ$©Ø|e¾ªÒjÛ¥Âõi\ªLÆ'¿I"šõEi“ ^~wdíc¹3>oúg•’; Έ'˜ ë•±:{™wÕ]¸£Ò‚Y?šçb¨¹³™v »)»Ò¬4äu›L³oÚ’…¬‘€]Mج ®M)ìß”m]eÿuNØö‚»JüŠàØDìÃm[½/t1Ãa—:²ÝÂdàl¨$Hjï¬ÙyœŽÓ‹v;ÞV•Lbq‰ùMNÞí+C[÷¤YŠÆ7ºJÌ aWü€ÿ+¤ÈüìÇá¡o6öu9ß~pÈ;Ú½z«™J`üKŸ¸bؾq^ÎH2&1Dn6éh¤â–ÓGz[†¿àJÙ®ëòRñS©/çÙz¤ÛEKÉ á×ÚÕg‚£~ýä ™wÝJØËèýN )ˆ%ŒD× ¼ƒÌ=FŒAæ=hÎÉ2û pÜ¥àÁ)>€ºaŸñ*e’ç¬ÒDÜ«¾;„VNSiÛ³ŽBiÉ[r«>f™j¡ÒÄSÿ‘÷lö¨²Ï +ÒsÓSÔÎŽ5¹šÔnÁ®¤I%1å¾4ÐŠŠ¤eŸ/|í$âVw!àê\mdK¸èbÂ^¶‰-¨?TürÍûlQOðsìà¯39ðC°ü¶3ó þ-­Çf?ó{6÷ŸZ=MLÎl”–‹3w £JÍTbë%LÊ…ËûÂy[#¯V©µs{Ör0ìóž*¦“»…çC§ó–cKP½¹U¾ûmáâ¾,™šV_ªÞ&à7yh6(ÑÜíõrÊsø{ZnšS½yb›(nÁ,‚;Èp Bñ&ßM©è¢Ñ' T Òæ·¼s¼!@Z¨›‹O•lSÌÓr½Ž0ãë$Ž*víϘ»N˜Ÿ¡Ê‰zÅJ0ú•«=òxÄ!õSGØ¥¾cÇ/°í(l)ЄÛãïe(s•ž¾ãÉ©ƒ»¿Üj° x=Vä<¥ÅT…V¦nF¦Ÿn‘+èJä%Ei¡êŸ\V q;WÁ÷!¡ÝziU³°5YÎ…œË} Þ£!²ø[1Î \ì"g D¬‘%Ø’éhälÁåNlDffÓ?Äë£Ï.ðÒÕ§×ÉÆožn¤Ú®®Â¢Ù ÷;k¤ÍÖ¢¹èäEݽûÒ:§6V<¦"‚}Y …í¡­À¼N•îΛ& ®êµÀ0§ÒüñS÷RÞäšqÑŸRZ2€!!"ûë¸AO¬é šž"Å‚›õ MD¬™yë½LóŒ4P- ½Vbý$E úÔÙ·£ËÊëÖ¸Á]ÆøQ\ÙÜÀws²´ˆ€•ç-1óÍ•”4K¹ÜþMÃÖRtAïOÀÖš¯œ&°Ø&Lü¯ `©‚Òý{/HfPL(É‹f¨Ç«õ[‹ ÿßûßÞ¾:n‰ŽRáë®cÔ¤¬©w¸30n8.É*l[–N>ŸE€Û…\MþQAÙ¢)ÒuáY¤Åɉæ²É«˜[sÕêÚ‚e`ÏžÝUPaíùå@µ^ìykjŸ;d·G¢aëÜ8@Ÿž['ú8ØG)Ë,ŸyçIM±ã¼ŸX‘·aŽÀe +œó/,‘y«B±p­F’K}):{`­@¶€eñHY@ÊškXRÈ8‡Öìß)±h4RË>A£€ÔŒ .ºC hóÂóGâoG êXn'’LÔø`§´(´¨7¹ÿgO $§áiƒ¤êà#hZ,ÞÅ ¡ß΢‚ßb(r`àµf”Q%‹†ûa¼j¶rÑÌ…q7.ÁÔý8ÛzíÂ5b¥ADÃIêXtûœ #7ú:øQש'±Q¢¹Òôl/æ5Ǩ–¡',|—¸¢õr*U¡\‚˜YÜCJH°=vÍÞÈO2Ôab’¿ïñ ¢æDÍΨÔaÎÂ/>ì}4£w´ær=(Hº4†ÁmþŽDqÂÕn0g¨ ÄLTð|ý,•ÃësŒÅcÃwRÙ+ý¼0ȧC‡*cv‰S >:­—xš›_ÌÚJÐ`ô[µ©f ‘\É×¾"ö7ŽWe¥‰k”اGÙ+Á?³ì_TÕ¼U–BI =". ![ÙFIWC¦Ü/úÏÎ/ÿH/C¼ ‰½&Ó‹ÿ\¹”­ÀÔ̯*ù àãØš±sѤld̯{R6M6ò¯²î€C!&ëÐòSª‰+àAôòß1¤šŠü"{êd91î¸ùÚ‘LBþÊÿÙçÔg Çå"F]¼—T{9‡ƒ7Š8­™Ë@!ÆÀðý}ã=œ 6º(€ÀÅZã‡J¯·úýoèD §?3p±b#:†™¹Ýâ1—ê³ý*¡_[Õ 4Aš×ÔAe,îw^–0?=AR#&d±Êý…ÿu°¦Ò;‚Í.`7ªÎËŸ™ÍAîÜnm1qò£—‚©Ìj#óÊϹµBC¯ Z›å†68ù]Ç´¹f”ÁûÌ6Ë8ñD¶Œý°ØÏÛ‚~L½ª|ÃÈQ¥[S;™•ìðÆÁ/o@ýØ þUu4åxã呃GÉ¡s £•7[ŒªŸ>ñHâW"§¯‡ÔÐ˘ü 0_oQ(7¦&ü†P1¶}j…‹ÎmY¯äÂ4v]9#ƒ5*’Ö g”‡ÌƒÔrÊ·ÃZ¦¨ :5@„)å6Vë}‡WÞ/ìØŽè%ýçt¸¨x¢oƒJ–c‹bI¡%·qÝ« Oy MlÃçÍœ|uH25Ë{„Æùpªƒv ­¯³Ø[Ór ¯|+#aAÀ/Ñôñ³/²Ñ†fªðE,¼i)êQÓì}‡" .lï¤Ñ‰¯GCT1ÝÿÇvÝN*ÐÄ+R $VÕÓL9±kÇ#ý7°Ť$i€2Üw·ï Ìæ`ó°ÓÉy4Dh¶7<ƒ™L‡¿t]¡þ$ZÁÁaä+WMÖ˜î·g±]*ÿ fF~±Š‹êKT9l_žvT<$h4[ üZï=Ö‹ø [H+û³Á8Ù±gaAÞaù©uø¹Ñì@úG9ì¬Ömñ&ô*ß­à°óÅÙ·¬À¶ú6)3”BnT·á¬gÿÔÖž%rµÀaÅE(*“î,$NùÌê/˜ÝÒMgÞÈfψ„«Ð‰÷Ըϱw¾ð9óV|1±£˜†4_­ò)×crKÉ©üöÊHŽË^W´–Ó2_‡XÿŠÂ ‡ºç´Ï —+êÏÇîúësî ­O«MmØD™êl>øp â2¥êÀº*ìÅŠ¡ÁóI!U‚¯Ó¡2f‡ä¢õOÆìüè+¶-®;®Ÿè¶ay3ƒúãƒìeX£¥¥Çy-ŒIú ¬ .M¥+2ÜçpάrÖÆóá k*PeÃóþSUÒ½²§‘’ì Êè3­‡‚RªE¬© "foóx‘ ŸÒäÚâÆš&‚·öBQGé`¤„Hô„ÓH7, %0é¡'ÉÝXˆIctëFsW[ wÖ¹+ЕŒµÀUÜ¿Cqä+÷¤Øõò'T»ŸýÚ6J³à‡[g³Wñ%žóó—Ö"¢Ÿ~2ÌÜ™%¤R‰íR9úì—ç pâýJ1"ŒeSóŒFDÄáf“1eâ'S°–Íxü°Ãpd2ŠDñ«ë™è"¶‰«–b˜ap£T¡ñ¿ïóÚÌÙY7»„æñ³#Zêcx|Ì4AvgB£%Þ1–r:p3-¯–­–±Õñ1Q>º4ë!Ô1{µüÑrè& (}S‡Ìvý«Ü…%w¿oßCEêºëûÒð »C{6_Ë:†‹ŠÑCXr‰…béØÔ›P0×È¡pÞNÞg´jžæwoÓsàè5†TvzŠʩۤ6aLíâå`WØÁAkˆ÷~?¨5æHŒÙ ¢: örÉéÅ+Âæ•ÝpÒˆ@ÌÓ¾àÒÜ©0qá°ÄæüLûx²‰ÂúbĮȄ¸I»äOÊCÀÍ þ¾Ö85¤ñæïà¹ZmàåUí ´Ta‰0G XGéQ.õw¹Þ@µb¬óR·3õ‡S.=lîó:Ó ü~#Rªc†ˆ´ž§zÿд>ïpe´= ‘^µìðM‘ݨŒ›CµÙ:ÿùÛ¨ÖЦɕNŒ¯Å+ºœPŠWþDXH;È( ¹eñŽ~þC—ê3ÙnØš[:S:e1¢—±úùaóæ >Hp‘Üéy’vYoéO¸»³·Tlº(ã$N÷2T”c÷…JL g3Sôb Ìg“©0(ÐÜa?7ŠQ±N«Ÿ¦?›`˜Ôáñ{FÏÍ£{¡-=E ´±æíã¼Âèé:?u_Ûà§MiÑúÇx¬šˆ)FŒ^U·eáé{ý“E5åQÎÞ ÀµÒª.nccÜï¿ñˆµ|ƒD¤³4Ìà ¤å±Xç™Ä(Ì Æy—¯“ký?¯ÔLÔõÇä/ȦBʹ¶"u â&Es ë‡gxÝÖ–oÆ7¬`å3Ì,øƒ ”ì•&Ê€ˆ_fe˜B§âЗáSGæºEx9VæïóN„&>o¿Jêžœ%`0y É-(†5ÕP ‹X“?˜ñj€g°õ5óÈD‹£ ˆ×-? üZ—Ä—z«¼GrŒ³'¤'¹¸á-%킆´¯®§d¿Ž$ÜLIÛºRn7·è*ø¼êc%(ilŒûÑÐW4óy¯ÖîÎOã+âWæü‹‘Û$ÂflÜl ’çT`y^oæMi/ìöa¹òys<1Nkqf²tš¼ð¢7°FÕ´‘©•ß[s2EþÏžôˆŸjý¢õ†£´.%²ŠÙuýÐâƒáê:MÝb…Kµ ܇OUnÐC¼fÖ3¬ÌõQ‡ÀpXºÏ¼îBíÚ~3ѳ½\2œ5#–JDÿ3¢%|cõª7IEµHwÝr¬¹ ” OzË2ÊnOJÛ h.Ú•çL»g P¶>óÝ0sôD»w¿U}~>;îA抱ÅðÐÇ#„þÂÏ~ͺï[ƒ p€Í†ÞF¯JÒñ`íŒs Î>BÃ,é¹Îfuö¯_áéâxøCfß !˾7`˜R›æž•Â÷pQÛ¯77 õuÓöÜ>æXJýP§®Ý€Y¡“G *Ú'Ÿ`5z@ᓚ&n\ƒ ç‰…[è'™øË‹3ØÖ_ÓĨí0,I…U{:Çi¸{GO#­¸ÓlÛQ&/* NÑ ;ФñŠn喝ÎãšÃŽm¦ðb41Õ‘Áø‚”ûÅŒšQÒzÌêɴȵIz’)å2Sd:cG\(ÏÌø‹–2 ¼ÁX 7ÜZ–4š¥ú©ið/unG†šdæ:açvRäaÑ[¹zjî%膎Û4m²1þm²·¼—ðrp(;ˆË$Öu¢³@õ»kýçà`Í'Ÿ¯‡ÿG¥ÃÚ•£ç ]žœNÝ~fb†^ ¥–ŠàbÙ¬Ð;CÔT$;-*>ÙìA®{ukÍj¢3ÿ¢sòfØìÉãÝôžßÓŸ~æ·l‚µÿ¢v”¯!¯Xç5µî¸Q˜ {õU‰iý, †ÏøP’UyYÍ=Œày‹Ã\Z/M}c«»’njzò¿ªÚî Rˈª KÓ¤ð·ÑGÕþ[Ìé Oßâä!ÌÌ‚iÊy:QÌ">ý\˜|)¶6ÂÝkV¹OIá^ *Ÿ.-;‘p„“,™J›1½ëÿ¥›,Ýw‹DEmc@rÓMAÐ DîyUr¨‰ª>F^èl){ÙD5'éhè–?MÑÊÆu®~êy)k¿šnÚñ¬ng™^m[!Ÿ‡ž…+®Vnòi“P„užÛÍ"uÍ+ê&îŽÁÒÚÌ”ù! °b<•É]9 ΀üœOfô°Uù‡ïÊ©u—vgx´(Ø7ë1 Áx@ë×pm5„ˆ‘ä3½¬ùk¼’߯„{ip‚R–41tZòáFñN¼_ž—Å™y*Öié)jÕF^¨3L—OÃ|·hÔ}@èÂ:ü€ÃðØÿ2îi‡GO{¯©&áfªÕßî³ZÐUù_-¼H/Zš8¡Äu°#yrbŽ5*ùY «‚†(¥BÉ&&_™–Ê™Ý?‰r©a¨ïJþ ½M«©¼Þij{°{\ ‰nO™Þ`இ“ ¦BN8´G¹)œZ¿H^—;®ƒ›açÂ4’w[r ¤^ÍÃã\!ÅžšÕ ;Å®RóR¶Õ\ç2f¿¼êgY¡@¡ÒeªvF¾|•4 noF»å醋ò¡•EÇäSÁdóûJÖñƹ\Ï_Ì*²I·¸‹ŸÚš‹ÅHV1¬-^­œð•ÒÔ‚Ìÿû_ÊOñK¿·ûiS!8+t9w6Gv‹{˜ÿ°Ã˜+C¿¢ZÖ\^2ÿ†§#f1¥SÚ2Å(ö‹Ö@;ú£ó˜ÆUln‘gå{¹âö´]ÒWðQ<ý¿ „¥÷á-û=ùqÝ­ÁS rf8 –>äŸÙ›úïÝáÝ®arž&¥‰#¸’b"6~x¹¦ñ‘ źqw~:ÿŠ·VO.¦ÝÅ•ïìuä­¶Úx¬l=ïþ€,Õ È¾Š¹ ÓîâƒTÛþ91§^Z>:®æ; ` láÐðpw¨Æâ*«Â#ç¸`݇D̯J]úØžæ43~vIaœP‚÷ÌÎã)è4ÍÞöÈQ¶G áX@v³‚ÞR׬üjôÏ—ã‘^uá™àؘ®8Î_ ¬Îc6Ñ&7{6{"bTùô!Ðâ8Þ´¬ö›v‚-n‚R0T„ú½ýŽ-¡ÙåÝSšV† ¡9YÛVëÔ˜]á<ëja:ÞùÿÂ'MÑV‰˜S-p ‚–$8S0-µ€Ü$#¦äGåêå`­˜9Áþe‡dy¿¡C’i”©²ê-[¯0ã· 2eá‡C@{ƒQHÜ€Ãûƒï–c©9íqqóâˆþ‹6´Eû¸» £¿[*Öf‘.Zpk‰·ÛdéÂZß5ì\?³Úv/Ô^|)âs ùs…ƒF‹3Ó·RŽf„…½Óg?yÌœëŽQ2TŽP3­çœ×¬µ~®lbbôAæñ»³Ú#2Žbâ5=)ª œÉ<¿HÒ&¿(zD–r~¬Ü …òXƒÕq!¦ƒ¥äëLt^àˆ…ú³¶Cèoˆæ1uì$sÚà¼hXW–Á[×nUg#ÁÙQ–ü–”J߈ú—)«ÅÝ þG–`ÕOþz\êµ­ ßÎh@’ó}O•¹\ž]'¦Usä¢Äš„Ý\rôŸQ,çó'Rä”}™™æëò¥$×OÂ}Œj‡&w.®åæÅt5RDtÁ‹2+Ëÿî'¼šY‘“‚…4P-y÷®»ŒÒ)¯ç!t™™¦´íoÄÙ`ïz‡õ­= ;Ii¨x,lÊ*R÷ Uyþw¨ åc3ûæ§>þ4åb)å¢>ª³AÎ:®P™ áI?²XnpgAÔ|ëC™¬Ø¼-,U}‘TÔ‹ñfKèø“#Óµ ©TZÏ.ç)¢¶ŽJjE5vr\º¡Í3ÉcŽŠ©½ÎxqÚõF6,דšÌ0„ûÕ|ÕžkÔ4Žl‹%y׬”,1Í.ÉÁö4›)¬JÚÐ1@ÿà$RáÕ—£Pç–”‡°€XzÚè#~G¿L0ֱǀ4?}Õ¬” ˜¼ï£ >”®»ù7ù“¾uÿ£šŸœ$á#Óu$슶gRÎZGrÜŒ7O!p}údö'Pƺô–»ÇÚ_Z EE‡ð)Ø¥)"+² (cµÿÙ$o¥»‚Õ¤W á,+1—sðopJ¨¾5ÿ[lHÿN+¬òåÞËÆ:ý“F¨Fl¥"™£.ÙˆpJ?î `¿>™qôJ*™¥iºÂ•ƒ/—&áHËJ¬c, àÉø—¸›Ð¯<0D@ºuø8WùX@ÿøbrwü¨‚ký,†c87E?íž) ,Õb ¿xßTöàCà3òM·%í8j•çh™UÓa<§4ŠQN\ˆˆ=O¯Sr%DÏÄðFHèH­ôÀ„ôÇ´"9©Ì²·!Cû_dGbŒ np¿Z6™m¨Þ”YdÐp—Ѩd7}nÃo[p°~Ìa®sÒÄrï¬õ“6{¦ÂT$ël^ÖyMXËi'9¾ƒµ)„Þ¹c?QêÔ RÎÌ×<Ç(Ö¦+”•Š*Å®]4ýêÔ?Lß¾S¹1žÃÔ,Ø ‘“6NúTEÉ ^¤>(ÆoX{ñ€"÷ð5Š zX§Sú¦A™op"ìÒMíŠÃ ~6àñ‰Ïy—–gÕ3ü60PùŽÉ烵‰>+·WãÆÏ__úK[ÀE¡½Êòi™‹‹Tºu0î|rOWÚ®4›bî,ªÄTÙ `dÃLëY)öSÊMèà¤xý¡ZáG¨½É—ŒY¹ÎyÓ¬€£¬´‡„­î1bšÄÓb„TO8¿ÔCd®ÜÐϤ¯Ækf7’qfû#DÖÔâ+没ÿУ0æÀ ½ÊâVizg ç…Éég·úESVô!¶ÎS€l˜b”!•+uujŠ&Zeoö«C®PxZc“‘$vOjéG•Âäܨ™Ó/ñ×A‡y™;ŸÖtÝŽ´«OØ0Ôkß ýîÖQ£ÆÊæåõ×<1ÓhsÕÎ âÚ„¼Ú€²¾&`{ 5»y{jº¿ —!Ëjg%)ääëÞè|4å}ùDœæÖ¡pZv«l©ƒ©VæôÓ¿eÞºÆÂ–e·¯ò<Úâ8!ù²(å}µ˜IVômÿuqüÏT¥µšb«'täÇù˜¿äwüW°KD£// Hi!qÕ#žÚ6)¹«Z[p¹kTpû™ÁË%ßð‹¤é$„Äñã<ö Šüf8/+$’9ü§‘ŠìeœR»K“U\‹&þøLËwg­ß1 PiÙL—7V/’—pÞïØÿ6BTF$°²Í›)gd@ëüí,‹íxh¤w Ȩ‡£)Q çÜAnÙÊ`ûHÊ_ @8ĬšX†…¯"cß”, åâ•?YÕ) Ûì9ù9XÔÞŸîiØÚw‘8Šï|?†I„à°XÃŽF' =+æh¯¬¢¬¨Gvš;ôŽq=Üeä åˆGñ›³µœ÷•lÛûÒ6ã¡Åºê—ÃÛðú'¹ÞqÊctM‚*ËZyI¸Áf* OÛ(ÿÂ.oºî¥¯-×à'‚_O†×ƒý\l‚ <:bÑÒ”ZeòÌ™À†R0áAAÌnG¦+¬øj+P”ô)‰–h+Ãyê3¡À°qÉ€wˆm÷ÖíìkÎzé„X’Ð#ïK`›DÌ@ýMñÜõ{“nš2!ÚŠ]\ÝÐÔ0ÕšÈ˶\¼¶Íê×hÀÔ•£Ûä@w1¨®e.Šñº.÷(([b<Š/ÒŽ\väíÄ9ä! ÞÃ|SÀÄžé,M(¥gäñêùVÒbÍн×â¬5Å;søQ‡Ž­žlû€ÐpÎAŠÛ©ù7DN‘S j´^¦õ=æå*LJ‡ìgjN[JÃûo¹µ”G·Lyƒ°nuKùqÄÍÍi A4&zîCªxË “žÒ´“åŠ41Hö¦/étl‰ÔWŒW%µg›yM°éð$U‹©@£þ?·ôIS…,z SI8¢ù\3?L<ܾ¥"å7ލåRm¤L ¯tønU)Kç3Ÿv ‹Ø ƒéf—#ïšU_êØbh^wžšJ+? Å¿Z{¸bÄP†$ BAÔúŸ‘˜Ùnò²úOb¿—*j¾s/—üħÅÕƒ,úŸð±èø];êxk(s;9xLä/sŒ5&<@õAày³T²¯&¢Œ-!žË­æ7aékÀn¬C¦-çþÌ 4ƒGkÿµ¾Øc¼ÅO–:þCJlî¾*áâÚ …º!-›ÌKTÙB=ßí’Åd{•×wA©*æÞËnX’ú+K4dYºôŒq»–À‘!$â“ô)œü‡Vw|¾éƒ%bkO‰N€×V€¯W@Æ<1;ZÆ@æÓàôÚn䞎ù‹'×0Y5g;ÞÉÂ?Vƒ^‚ð·Ï®J1ú¡|"Þ®ššsTÿýÜÿ§ý ¿BÁe³únÿô[÷ bƒªlûÏšÿØÇ½E·äôDsÕ7ÀßêkyzçÈ?Pq˜| Ñ3šýÓà¥ÌןäwöK98Þ‰í²«åöuóå>4‚ä6°¼gäÙ‚ ê³znc®T¡…øæJnL tîI[Áš·X{/”WR`vƆèòæq(ßïò–/µ–;hcüD8Lü3ÇmÔ…˜Þ(pɘLþÈ(e)u —Nd-9L3ÜÞƒhXóbuÿ§_‰A=¯Ûü'²€ç»°ï-žä윬…ÎÏÖµNʾøiÔ.¿ í<øTª¾3kÍ=ÞI³¥PΟñúæ$1xR«Ð°FAïÔ…œnÁírE¼õE`íòÆ(S[à~ Ä@5R¾¬jXX¹Ø[¸ý óz(b&<0?8¨¹²(¶Ÿ¢mk§U*äè°OáôFãF`ýY´èþeªË–…‰GCáÉÔcß/9ý­üî›Å\[hc1©{.F4ŸðFÚŽ=xb±R|«¢|iz»í1„³Óì-NιÏSüµ“ R H«ú쮸n9dP^ÒJÀ·ûwÌ_õ3½1Å86Œ\\+|?"·¯¶øm7q¢§Á-±”‚LÖ/L×1lǶ•>ÐbŒM¦ý»~)/K:~zøšª¨±¸ÂèÂ[÷ÂM]?Ïó`ìk£jVz…qÚvöä>’'núNH•¹óÔ ÝŠ;C½ß8)Ή-4]Ñûä„´Ëkëðà–Ðææžp çIR”6P!4£±´z” ¤Ñí:F"zòóó+Òþ­÷g‰ˆvJ2DÝU×[C†LWWã¸D_¦?õawΧ´KÇl¤žõ9¿öˆY(“µíš[çS‚…Åaã…sݰPBŽóæ;>]>›±­)åñüYi2K¨„Ê öâ´ˆË3FåSð£}}>Ò8TŒŠ!q"Úy msùCin0:ppDÞ €¸Ùz0•›¥-:@sÈåÁ¡¹¤bHŠÂapB?0mïmI|»Êjr2gÃ3ŒFȆa1`‡ƒÉ6yh 7oæ­šþ8z¤ê¦;šJý—<[KÜ›^£Åéq3.¿ABÂß}°ÊÆ`ýí˜ÁÕ蹕ÚÊrüØÚ•’D‡¶I@✓ü·€ßhJ¼*ÒRQmôŸ$Wxz1¿ìùïEY¨»òaËñµðŸ'_ß”kÒ ø€Ë­î¬L¿e´šûù°iqn±Ý{Ѐýg÷×FÉÁmsgÞ¦¸ðA”¼ùEOû]› ßZQîͱK?pô…¬{mL\³­ds„F‘•ô/Ý^“Àç3Â4{SŽàhòôb‘S6Ù-‹ú‚?ñØu½F ·©6ml}Þ"!|dßù†Ö‹…ö)øË&23ÒÚÖÑ{"·¨w¬G,õ¿#r%`ÜŠ… ”€fNEœ!ƒ>3½‹ùꓺt OÇ"9j—7fF¦ÛæìÂ2 Z­'s ­R ƒÌ#U"üÎ%g¬~7>Ñ"ÖPž=á®è ç¬ËáN+á”ûcÐŒ¡ß 6nNç¯ÏŸŒ~`EÖ@+/~ànŸMIñ„„’¬!ýâšiƒ†qÄ k·Aì÷Þ½¬±Œ¼µ”þ>ÁœYÂñ¡CA8x=†£äæšG¥=:¡=­ü–•%¯ ˜ä}Ÿ–é‹5 €;¿#b4žÉ« ÷´ôæctÎ–Ë ]Ø5ÑCƒ(ÍKyžh}Á˜ôôÌNõ|rPÄáÄ›êe—¤xŒ>üòþoYãëŒmªØD BS<|Ç[4“–ˆÏƒÄ2bE×ÿ‹H˜(…¡œ5šäÙ©uJ`<‚N ë&ÃÕ%m[¥/èÇLy{å)Õ½€7Àí³÷ô-­â¡«ZÕ‰ƒ1¢ÐòÊ[N|ghÿž½ we«¾éºÅ#IZª÷£iP4#¹1øœi•œ¬S£4„¹â7é¨ „ÿ™-½p\eêÿôãžZ©Üáß8ÙîÛR±¯â4å«l®O=è±5iKÛ8,±HÔ»Idá÷£ ’S™€W/ó°ëC,Ã\Eö˜~÷³'âòº4ñ5dq†FyhûJá†ïz+{Žt—‹—¦Ž{èßöOÉ@Á©¼ÿ­©šq#K3¯Å}Õ)⎷úωîUt0!Y7ƒü®ùÃŒþ eç1sn ”¼CŸ¤#]ªIï?}X',†èØÀ¢Ô'^ iêôµñÐI#;xÐÚÀùÕ#c'±âEɶW¬Ë”ª.œoOÛ‹$›u\¡¾q/ ãf°:N3lE£¿±Œü½Ü@§ªÜmÙFŒ^]«RžÐ|…0lJ¡~ŒùÉW}‚È‚.å¤Z‘ óäÝžn\ž¨¦p¬]lõ¬ïºR±ð3ß,o9úwøJ“ŠRâ^ñµ ƒ/OËdZŸ1Vk÷H_‚[´Ä_™È¾ÌÒ£<ùE•š²1¥qÛçÖª¢FB.xÅÁ×#;=¥ƒIz1Ç#+‘sÅÿå«íÂÈÏ£OÁõ¾äRðaùÞeºYd$YšË¯C¤°pz|ŒbA¹4´ªòk-›É¶ÛR7Þâ•:Å;¹ªÇÚšHߥ¹gHRëÒV.ñ`nÁøàœ|}á¹ØÆD0‚E àgòžz×·’."Ry¨–a’®ØÐð Ù8Kv~.ÙMÄú™è2w¥Ì'ô¡”H'fvoù¿-Þ›c—4ë9‰yzUŸ@ã"R‡æBYhCZqB [™‰ H‘);^- H…q> ¶0 ãQð{a˜5ìGޤ¾JÝØ\ÃÉÊÝ2=êîÁì@”p[ä$N\È’ÔÂ÷áhqõL¡g{°Té»ï}žöàÁŠm >!ò+z"‚•³;Ú85¯Òú-NXJÜž¸ð¢YÄ?ß15üêÝO‡—ƒßXEeÓ€9~›ÔÝo65¤æ/­éÊàÅx5î1á¯#Pà9Ó Í]lšîˆ—žT0º /%¢£?T¼q¤åÔÌêÇ‚7œWS²ÝvJç¢13]ìqlo7%Õ %MìE÷+ƦŒ¾võYwþØE“‡ML T꜈R32n‡>ÿ˜ä müZTš¬ýŸ/1„´W ‹unÐ:T·& ç!=š"ë«;Hjáñ$“tXM²¹2`¥¼mì…qãðcg{ð>Pë!o˜¾=²Nì ˆ’¹"Ú’wéDí¦Ó÷4F)íC©E#¢=ÀNM8¶4³„>Õ?™‰Š·‹}’h·¦6VA(¯¼ IñºœmÆ/íCë_.´FélU44œºà/úTxì­ûøÑï.uÏLSüP´Åä õÏF ãÖzf¿­ø$Üâ+t:lÜD}³0q>›‡‘êbDdðITé¸×¹ìu˜Š4í¥7yØdô9Y0ïÄ8yï[T7§ŸÛg†]‡UiÖng¾8‹ ¸ ´N†3O”½»)JëÅZ;¦c÷œTN ÒF‰é¼–:ÎvÃû<¨§ƒÞ\Õ~…»‰1]aýýÜbÐ9Bv5¬;« `¼Œž\ÚÕ×EãØ/{½<½+ªÜ¼s‘’¸phš;_ýãÔ»ÍÛ%’Í; ÁtÛÑMØñ^¦'ÙÉç}µ³ïg•z¸þjï¨æ¹¸ìÀ•x‚qœ¤Ö©⇦¸»j)ÍaÀ¡Õ>å»Ç½2úÁ¢­ͺê¤Ó«HwR<@š›;¥mKÕ3#P(SÅV|WáÚÞ{´¼%;=©^b–zpX‰äñz.sô[A€u‘n@ößušh„t[ý®_Äu Ýë£P«v$8ÓÂÀè‡(i)‡§£Óæ*”)бðºVÄ„¯‰mŸ°ÔuÎÚ˯ÏÓÆÕŸ¶î^7}ÚN˜ÚƒoßIPi›¥ W% . Hù '{„k^™86‰/;Ð( Ü€…ŽÁÈx½ <‹áºNÆ?f‹SÑ|Ìí¼7Îyã/‡JY`‹ND±?›y”^nçúoÞ³åEË-Ú©p…‘ëÖ7³’‚ÌQ*bp¯À²H˜sº`ËËS”"<Â\"L‘èæz1pð\Ûè\ÔÒ4´‹E8n¦j.Ö©˜<¹íÌ ®Ú­I;_™–i_° ª7³Žmýf\_Á°®à©=þ2\ÊXŠW¹¤[¤FíÅâPÞ­•9lÝ¥c}K¸ÅÉåµä¯…yäß×k«6:Øùµk*‘‘¥{^æjÛfÅYïAèo Ž*²,hè§0d©šÛ¿,ÒÈ /.ˆwlÄÜótA•,¤ÌéV‘ò…ÎQ—x$žBGÏÒXœ_g¶îÖ— „Ý볇‰¦]6w¸.‚7ò%»™«•$Ôˆ´@ΪVÙÏÄŒ™…lJgLµä¯€¼†ùCö]™8B20 ÆX{™M‡FFOž2Ó)²•O‡Â+¥<9œ2 Þd ’ÃÄJ©uû”ªÉÏ…’" 6õŒ_cšsºã µ ©z*"ƒj1ó£.e#-ÖcÏhm"< —±ˆôK(Éáóz]oÍ: DE'yÖ¨9xú·8TæÊ£î^i‚·w¼“ŠÆiGF®JCÚIÿ‰ýC:äSï ±¶öÃR'8¸ó>NG^œ#4FKq<¾]úíÝÂJL*Y‘0Ò‹9yæDkãùExZÚÿiê •“‰1ˆ:—|¥N ë"( "5·Ú:Ÿ$îÆ™°ÓÎlî=&Ùc$,TÊβ·þ²6Øe×¶Ò=¡ Ô¨…ÙèÔÓ:èÍjëO{ùÔš³ÊëÌoPV ýØà+ £–ñ+ñvTÂÀfATŠ7A}ýè·û²ì¹`Hör¥:¸0”穼ˆ9ÁüË­[Ž oÆŸÒs:[ÔAš)ñŒ³ë„î51K²þú[j¦„wÐóX™ç“"ByÑxA©†Qæs ’n¾ë»Éf`Cc'­挰kT_¬Iêèw7zܵð÷¾çûqœ¦RàâÚuè…v€ØæåRÙp7€À¯™Û½Fz@TfÜdrQœ°ÔÖPWïäуçFÖƒç͸.Ûm¶:Æ0Úµô ¦@BÏ¢Ž <‰Ñ5&}¡y‚±˜ÑŸ‡øàÖ©§ÐLyî$³+_KbKý[ÙþÔ9ƒšT _ns`ðX¥\­ÍÕyf3Kjª|þM;5Sö0í÷<ìê×Sm’;è‡û‘ÄPÔÙôŸÖ>)`èÐ*¾³o•5L ðT”v³4tˆrCË%À®dÔj߆fJ`Ÿ^Þ%ÑDø¶^/%O%W·ž@¡Ÿà¡ŸwOœt‰Â }Óä6=0ÇOÌ]kC•%M*¹m²)× ´†LÆ×ôih!¯®Ü-JGæ”Àït›â”ÆbèúÃ*¥¿ l!gVÆæ _éÅ!A+ø‡ÌÃá¿Qgû}Ë[ (à?Œ¹`Sà ÐoÚuºÈ°þç¿%¤¬†Úá)”ƒŒScg.¥ÅM.bBu&˜=Þ?G¯áÁŸ1ï5Æ™+Ë•ú(ò±ÛcèRÝafo×wäJ+ó Rïg½åà¨Ë‹:Ùø‡flȈƒã*u@¶xýU%> ô‰QGÍd ².Ê„’rË"îîêlAvÁ9qûŽ:ÝÜ ˆSS¿I"¹#Ànk%ãÎJþá/È£#ezñ²IÜ— Tó¬˜Ù¥BîP}ð×Cv‹õõŽ¡Ùª7*ÎB|Iœÿâ;’³ƒ,ùG´F¾+ÈÚ‚LK@‰4#(hQׯBLõ>XšÀ‰½ßA3û/wÕsa„¦¨õï@šöªgf&ª”O1-yzQxÄ •=Q&zyÎF?#fí-=ƒÍ'`Òfä9õ—š#a¤Ž?µ&€ÍöI™Tb?} 3_‚ ²Ëåï;ä‚p.hæ²z{þ- ¯ªHðhæÂ µa–ÕQv@î²Âð½=SŸ±ºWmZË*ýN^—ËvÝœTs¼§›îÛ2‹’~é€Lk27+ [ºC¾eo*Ó=U¯LަêüøyJêdçïolMÓAy¬À`•çiRÜÃ÷ÐÚ_(-y^'éÀ¾ÅÑóŠcæ2äÄÝm…Ô´LÓf¿å¨Œƒ€ÛÒÒ«\µlt¡¹47ËWðkÛõyÎò½3&hÓ»,í8 j€ÜB€sÉ%Va°Cå\ ÙþaÇÃ;è™z­vè²»R•ëÞÈÚ ¬Lå«`ÅÏ)Я’¤?»:>)îmC—JC¤˜ÿ ÌDê·Æöî"Ùë­|'eXRÿÎÓ³ˆ|d6ˆæÏç_°$Wh‹Õ×8µÎ,Áùž»\4·4èé´ ­.(UÑÍ;VõÝå÷,FßeZd‡øü¨ 2óÏHQg ÉTùHϾ8dùæn°’mí&jx¾cÕÛ4 1ƒ-HŒ{ú ¢S–ÔAY¼0^N(¿9¡øÆpçš“”Ãi-'ºà诶ɂ"½†}@#yÔé´±wäüíjã5ï”´b‡wÿVs_س䥼Ӥ˜ÑùEuo¦D÷Û§ÝÆ.ö¹î8k¢¨[ê4TLz\Ž4¬{ï8~nƒƒgœŠ‹LeÂcèKœ˜:‘÷àcýrJ½Ÿ/D>¬[ET ÝsP·Ç¨C´í°UŽògè3ôY)Ê—›â—Îþq°F>K¥oîÏÛ‹ £L™úÛ²ñƒì¬©ÈƸ¬îv¦þÖ‡cÀJÄŠ4ÄÒ@æ‘@³L4¤ü¡#ZÑwQ>…C%J·GÝì6š¨òî ]Y†DU;Y@ Úm‚™6{£ÒB›b…ºìo?¥‚yY½“ßÕý˜Mª É!³Zäšê;?mûAŸje%½ÈÑ2 Äò@v@i.€Å õìã›øtlx%-[dB®ÀR¤ìø_ŽÎP‚ <º§Ú ›;ÏásÑ6¸dJuå#Ê^°p¤Êl—Œo®*ßx[)&°ŒÙï6\²$çÊfbÞß{Î:µ7½‹œ©Zy;Î| é2à(š¼µ{HQòšì;IHW8ÒÖY´ïg3§Z¤Ti\²VË ³.n†‰’„ÎpÄõ³„ã!$Fçc§5æ!(³¸ÉAT{û e*Îmvœ§Áp i÷V¸&ÄÖ8žÞ]g­HT|ºÏs×ÞŠ#‡¾…ò¾Ãø Æÿ|…:Èò´ö÷_€·@éOž(ˆö–ÅSZÖ^2‹òÉù€+å Š… Pµ¼èe«g`ôJuR›6QQcÔÝÑÅ .«žFÀ¬*[}E•R Uȃ¨ø™BÿÄó73ÍÔókc`z“S…†ëö]û•sÙϤ -Ú<.LYEE¨ròH#³HiNÂÑB«ü¶µG.[Cf)ûˆê즎T²¯º×ïð¿¶Ÿ]bO‡©K ÄÊ4édŽÔ éÊûjó¿D~Núñ¬TÌhȸi<ˆÐÊ%û* ×hƒ0…¯£oh¥+ÏÈ.Í€],ÉÕoïóm|öY~Ô`1us¿jÓ!+2»48ü)Šmõo€œÃ×$k\ ?âs¦€êyF¨n!%}FÞåUAAÏç€ë×£<Θ ø~ÿ–Œó-¤©Æv2p’­oÖckc ”³OœN4ù(ŠfÍ•˜šÀ«LžË–²€Fþ ¥1jÆ8çqÁ÷z" ~¼"ôGmÏ« #TvåÐÜ«é Øß*©Óµ†Ö6*}>-±¶–ûg{agk«uyÔÎa_=S ˆúwVp4%©g/½ªúûƒØå\U&=X¥P« vwÊ¿ÿH^ûxdÁnX-¨7•U¯Ïo¶ÎÈè 3µB (sßF¦«ïBá.)O H\ê}4Ø¿ŠÖÆ ´•>cdþ’£{Y˜¿Ûãd»ªË”@HÚýžu–­Ã>11d£}µ ¨‰®bø[þ 2ˆRo9,¥£4×Vsù¶Ö¯Â·Wi”’¦â»‚£>#OGX©ÉjÇEB¡òýÈã½n†Ò{€–(¸$'©•¸¡)è:[¤¬…±s–Æ¥Ó*åÌ9¦Î÷º­Éã„@Ù2Wv¸.~|’Ú—.sFVŒÙLaBñþæ,hmÖ»•‘Wˆ¾ ŠRØ'÷µ·Ó›q^4t³Æòp¨¿'|BLŒºE÷ˆÏ¬¯À]¾ ÑÐP5'ºE® Ú0¡IŸ—J›Û|G6`åXºä ¹–g~ ­«Ú—âQnd˸6#瀒y¿çé ·Õæ•%Cœ„EÀ;h®âŸnl.yÞþƒe%¬ª7ò/ø,-A×J`¹xQç­Ou^£çùêuO‰¹Ê\÷œ$Â8ݼÖà+~äör˜R>íÖÿ<ó†ýCGž(Os :a»ÅRxü~ C¨3Î0"qlÏ&”Û·¨¥ÅÜZGç ©@Õ#$[v•¦‹ÉŸ!‰ñj[´¼£MV<¦„}z‹ÒÝk:Ô/É%Ì_¦®}ÊHaX¾ÝØ3s¼¹úôe¥\¢î'£?殎ñ»ŠðÏúø*0—ùÑ+qö$w‚n£ÑÿC‰#±ÞÕŸÌ’`~`ã³6QëpsVch¾îòßµ‹€ÁÌ30Ú€M²õŒúýýÃXc@£^ÛÔ;7AËKÝO5R*µ ”äTòªÐjÂl)¥üH@þ-¡4Ù¹R8'ÜþurÝïuú‘ÿh@i?–/m$ííŠáÈqCh/ôäѪ¬j®Û-j.·—'€dýÎ#ì:ÜÕxlœ«9öNk ¼›KYUCgo¿ÛoÎò¤¥ZûuÓü)Í” éí?~™õ½|“:$Ã#YІ-®3Ó¶¶5¤ _~ŸŸü±•Bîå²ÑGÆeû =¸ô—–žd«Yø@íqdÄÜq‡8Shð§20²m!ØáŠ)×Qí*í.{t*M¬j£¡ xxç*6ר’>â‹%ý[ä€c[¼¬­½XJy×”‚À!q¸{™²$j@1á)„h”Ò«]ªÐ8ßAGý<û$Ê!\Êñåk„idŒÍ9> ±ùWŸª¹g~rEN p­–•±d»“ éLÂ[Ï26a* °NFr”mjõ²káO²Â'!ËÂ0ðåóêêd:FÀÆ,Ð}<Ȳ ½]1½CVÊ­æï+~—|) 6žKaÚD-¬D›ìªÚ6¿eóÆ»kĨÉ3zôi ¶®Ôðc+ Ì\ϰt@Nñ@ê+ O´êy‹³O‚#šBÿYCJó«QY\Æ‹ uñˆà­bËó4yGIæ‹^ÉŠV±Ädj¾sÍ@ý«ú8ê™¶žƒç1G‚:0ûc›£:é• ¦RN½ÆþïˆÊl©ba×Ôèæï"‘y–E*‚, £Þ¼Þ¯ˆ`¨Ja#Vúé/ ÐÞ|„Âñ.ZCl°ŒÆ16c€à<Öx’ÔõmŽí¸wi ÀïÛUN2æk?ãàƒ>"®‹ÑÇs½Š%š„ä,&@ š¥p¾¼0ç4²IG¥'ëDÉa ž²„Xüê¶²:,†:¿–­ìõýrs"ÏT\kôÈäb–ʹù‹^ÀŠóŒ,é!$ãÖ3c<¿Ï²„ #IbÛ‡fáPë9]棿Uùûþúg)£u§ëŸ<¥{ŽÀçb–Wôf/Z€.jÔcŸ:m ¬VJ^èf¡$sˆ&!"Hƒïaõ¡¬\â¹Gȱq'x«00ˆ EËQè,Í>YÝ©¼ãZûžJ5ÃÆ… óp,”ËãÉRŠùÒÌ? ¨N9Aò'Z“hy>ã·mFÍ(JÆX3ÜÙ(Z‡Mا¬—*ki6ƘásÌa@ûºQ·ó¨éD _ à\à‚Ãì°°ŸL1jÅ©¶|òÆŠï˜Qï ÿxM”;àn}j®‡€Ú&O5´x7>€g0æ3úC¢‡!_'…Ó½ä²öˆ^SI®ñ©y*€‹1Qy’kUlŠ£ãœÍ0²×ez¬`œ¡är¼N”î‘8ÉYê™/!´DÁasó- Ž þÉ \tØ|æã‚Ä›¯ãüó.K š­U¼äªAä{TTs³ Z•µBWvÖYP–Žù™ÖîS80f:úK½¢¤fKQ%>ÞýëyºðüW#Q^`Âi-÷ÏÂ÷"C=´M°QJ§z2¶htˆ“ÄI‡æ¬ßäÄ´4ɇÇìv0‚‚Þ‚,x:úôçD¥qú×|Jo Q.NÒ¼!&Å3£”&ó-ß/lÛ5 ¯.Ï®yåñG*~dú+kwû®1ÔïÊ#t˵zçœ 6ÚåÐð·T…þ—F:8³~á²Ï˜3WפÁIí§Ö¨ .M¥&ª ’û„[à@ÄJA—÷gáý3{þÕúÓ>¼0v¬|²ˆÚü(Fæ˜o =Jí‹é  dBS=š’WyÖd]k°@Ð,Ú¾šû(½…q˱Ë愞å íªÚ`©çgfV}ªX+\¸»­Âg¶mð 5¼ÅÈàÝŒ0õŸå8çéXùÚNI Pƒ§42ë—óŒÒ›ß^ã 4 ß‹ˆYvq÷«îã8ûQ¬ KÀ +˜ðr7ÑhŸ+1›9ô˜¥Q¹¾à²3jÈÒP9÷ Z‹DVËxYé‡]±†àާÜÁ5ÆårZ “|åùÞ³®ýD¶Ëî2]&gÈSùrãµÜ8¯Fá”æõ²Ù~½Ú$Öƒ±¡í»¥Ä9pz7oñ!%Ýí/&;Ä3ýhÂijæh†®ß\á H>ŽÅÌ s:UŸK‹€.„‘^Š&€(¸%DðTŒ»¾ñtgzP\8{1ßðRÜ?@Ï_ Ð#”EéôÃM¥º­T 7fVÇ*–ÀS0 ñö/Ó#AØ‹ 2NK33ó˜êŸ‚tZQ ».i‰M‰äÒT¬_â¢Ý &Ús*FãÚ@Ž`!…ŸÁ ùó! rƒºf]]ûÔn°ˆ¸§ŠÈLÚÕB¢œý³==íirŠçdkG§V4 ô¹*ÌûŒW‰ÿävÞ¬ùQ9˜‰‚Òž¿VÍeÊÐìÌEœÄv¼ýFªbd‡Õæ'@Ó£.°ó~û|=0°îÛæA»œ¤( „.Êd¾67-p×Ùpã?A@L×BTVóñA êæÔ–°e7½Se@¯%,"S@¸~L 2#'¤Å0_´ÂÈB¿¢ÆH…_È ?/ºw½¥5á'JOÒ°4² hhËxG°9‰ÀÍ ”Zתe[ƒ˜JÐfWq™t+îD-dÕÈdyŒL™º8¹FX›O@-màgú…eµÓ«Z3΀äɨ¯Ž‚b³3ewi¦¾¾Ò"C«å4eò]I]“Ü&õ,¬•Êõæý´ C©µ3ÛÄÁfPvÅw è…}GìÖéúêÓŠQ 5<ú±\r¹t6ŸIŽCM˜¸sn§¡ iˆ4¾4ƒuäÀD(:÷9{j7¯œ¼±ñž¡6ŒgjjíÒm1¨o¿©)u´þLŸ¼?ë(µ½ßS»CH‰g¤Wž¦ˆä2RkØó#pÃî-48x9‰8#6N~G~²Ìg†™3nƼ»K?£›ýWyÛG ‚—Y[‡)€¾Vñq„X{ó[­:ˆF ¿Ýðy‡ú…‰R•ø‘å¦J° fq&Zk&Ðn]z¦¡-ç`»2 7µàé”w~#Õq…ãø&:æ$–éÞR›êeÕëÆé,‘Â\Uýq`õέç›s×RJü¹vØÅÆoR™m{ª~4¤þfåÔ§âŽX-‹¢õPØØ#ÅÛ%qþÆòÐŽ5Tv|Ò¦åЄ§9'fn±l›–lêLi§}ùãЬy‡"¬¢'\¶íØ&Áâ5zé.ÁæTuQä6Lâü‚øw€HE€üì·|C'1fœuKG‹ð!SÀÆ]|ct³1pèÄ ëR’ž7p»C(Eëzó¹·Óg~nqè³¹&eš#?ï¡"·.¨ç6´Q™yå¼$UƒÑrøû¯¼d»“ {I Ìž!uÃ-}Œ$ûÔ3``ô§#³ÍO@½ÁøžÂ4#¬lpeæ=oxÕ…0ÞÐÁNÅꘗ‘,Y¶F K¦X¬àÄ‘žyn×ÉHI2ÑÐ¥¢¼¬sºhú;6W%WŸÆÉ:,H*@NmT°aqÏ&Ý»ßÙQã+×·¿&Fu‰gü²\ÐÆýK|–š´š¸Àyƒ¯ªL ^E4þº‘ü9f| ®Ä<Í«'VÜãˆcŽK\º}/Ö*¿ovŸàQŽPoC–ÜIým¨Dò¾VÍà3ñÍͶê9ðw<‹Š?é!¯WßšÐaÚ8»›ûF¤ÂÌY»Ì«1¨þ¨!ÌúD8Ó)‹ÒI4x8¤±„õFæt"}¢ýŽæÄÛ\ë«–CBm\_H2`ä‹eÙ§%MKx—˜! ¹•€³\ g"\Ž,–Øîöâ=Χ„'¢BýZ•0^€•ñQo™S+°i/]ï}ö±È#ÏMÎvTáWáw±×ù/=ïS¦ Ë£ú0è­xÄà2 Ú/›óÄéZ>S|:‚œ¶üÜëöõûW=¼¨¡y—(†î®-{Y79âêšdKÏà&CÎÿ`E0)­àûkˆUé¬'‡7/·0iðÄBoöiÐɾTLÀÑ'¨¹Ý±ÂZ^SEÛ(çýÕhKîêâm1&“K "O½y`^DÉÑð¶¹ ÐÞ_E€Õ_L²r·í6Ìh”1fæ7]‚ÿz TJŸ2º™÷¾-2bºà_ß_T9è úr¾¥Ö_×áA˜ŠêÖ(´‡¹/½ÇƒŠ‹~{¡¢†G& …lªº2ʨ_ÔAÂ/”WSfÖApÕþãi:ë+E€-×U‚*OYxOD0ñƒ”ß僘ž†X; R_øvº—¨èÓå®s(÷¼ Þþjàh–bìw w‹Ë8¿Ü’ü%+±»žïyù>Í AÔdSò2B2‹…Û¦A‘óaƒàŽÀc˜G3Wö˜^Œ¬t}M o#½ñ¤[רŸt)ýýÊrv,µtbM|”=2aG-÷è2º]¿×ƒ>—~%ˬm—-\›TñƉÖÅåŒÃ£ë“uXNiÀÀú•c'(‹–2>Âk>øe!kˆ®\¯B7DŽ÷£8;nºœ‡þÑ‹ïy’O•çJ¦Œ„ŸªgíeS†³eo¬:î“&À:Dân¡R(Q‹®a»wOÙâî9T‰L/̹®0”UË  æv*ÖštX…tsM*ö³8íÝ‚=¯øùYÞÙjAÕË€ª®Ü{Œ%—ä9n9Ì”¥50cö§é7ÖÆ—qn\ Р‚ÕªO ÍM«2À³ðmšó*Dé ºÍ{„<¹ª‡Ÿð~3L$MΘ^YpîË¥éˆâ#næê‘‚5böƒ„0B Ú/HuÐV)‹ŽJNÑpŽf±[ëk¬¤·uÊ~º1 Öp¸p†@µ0“¯ì}ƒL:QåäɈ1†xW¸DT}÷þþ€ÍtVyӵ“2¡Ôò'AÀáRpL ÛÈ{ti%à Ì#-¦„Ä…Ìà¦F…ìµ·"“QÏ…âÌÁ ßnÔäið_}B±Ù+‹,³¶± x#8Béuîçð”°Wïmóp˜¬üm/þ£úÉÒÊ.*R&•@V|Ê™êLÏ›7½LXƒ¶æ{η A¯´ø Û*Àâ`•éÕÿ‘I$õn¯ÕÌF/‡×V³‡“ûšQeàZIS¦äüØS‘wñ²nû‡æÒÄùæ¢-òÝìpÒfLéV}xw=HÇR@‹?£zJhã‡&F3è;ý€.2±žöKàËÌ’PZ\~¿õY(q±Ië/ÎAD’òÒ R”Ïò`'¸B…01È¢]œx–’ˆu×Ê{§5¶Ç‚¿àÿ“!štˆL¶f¸¼Ìo’È Ù¶á wS{@õW!lµ­-7 öí=r,ŸÙ‡Ê³!JGi)f ±Ó¡™© /"Ë^­ÀJÅÿ›»½–Ï[’c±Í’ÀÁÒ®²BÌ ´ó0–ëÅýk—ór¤7 Kýô'Ó’§BD¿ýuVßÍÔa¯m+¨’D:¿ÎW3BkKUÏÞ:ȳ(­Pv#æ1&ÁqU=›¯L&^ù…™¬æœ8þõÍAÑWä{R ÖÃAæbÂFkóÜRýØã®…òž—À)9`áD1™ÃõSÒq”ÿV¨Ì3È9Ï,[kÆMñŒGAe&óJ?F‡à«FTù¨øŠjøµfy榇Û¸Ö‹µ„›Œ©Œ}ó‹Þ\ÞªGá,¢¨g„p† O£Õc5*üó¢® =æ>T5¹²”Ý`#ov¢Ì*8Þ(aØ«®G*["¥”÷5ʦR±mõÃEz…±²ÕÚÉø$j`—¬Z˜^¿í]æ°l@*vweh+ê´!WÝ0Ièý/Ù¶~{ÜjZWÍLO¸F{@ÕêÜWb‘Ô‘ÛŸGÏ%¤ªqÕR04b·°_uÔƒbî¹|•$D5+†«è¶±#fšcH#/S´GrU <.*ª•šk Lk7þŽbÃÿTÌ1'™¤ñiu*ôÜÏe;°¸¨Kõ^ÏXŠìŠ VrÁãÞ^§Ç 6ñäÆ;ÞÍÕ’½\ŽN8ÔϦ=Æ@´¦c¶Š@å×Þ‘ŽÌ¡ñŒ?‡x»€e‹sÐÀ2È`݈ «Üõ<½ôùšéHiµ¥±GÝ[~Z±r3 JrmŒmÂ2âq< é*ŠØÁÿ„Û–Iëİjä¶[$Sžš“æT´3³© #Ó‡¸Ð\¡Ù4w'¨ƒw¯²¨ÿˆ^ƺj#«rj‚Î/)æÊç–ã¼6ßMÍ.’V©hPTìðn‹÷vCXw:d8óùáûGR€:·Y4@ hš•iÎJúTä&†9FÉ+ñ–½ÿ2ãóá»Ì_ì­1-¿"¡g"¾›¿Ä¡¯¨1 l|ï1úIBE„‡ Doˆôœ³È×N̉»Ê@,J§ÿâšü]Ù.¿Ü ZVJ-÷o9ýRKLô´T ˜66¡ˆÄÒ¿Y¢.«:‚x§Á+Z+÷™yT*ë¾dé>6Þmena[ó‚ÌCÜòÕ½Ô«Qšû Ê2¸+¥ÛE®Ú߉”º´*åÄhpX —AbE`%Íìåwç$Å?£wŒc•áU@FW3òodË(º¥+(b†àJo|yYCçD¯ª }zŽVåüÝÖ&ðøþ'!¤–Ы:oYÖöWóÐ} i"&K•߃rj‚Î/%*Îþ© Óm&‹LVu© ¶áðÖ²ÆyW„U+~¨“â:.P3<®äºÐí'ÁX¹ƒ÷{?óä2†×MõGæl/ÊÚÇ}¥ûµzïgßRmÏ\ ó^ºÊ׎µ¯€|áÈ\š<ñ£Bº…õ•æN9Éd$Í7P]·ßGT ÐåWÒËKfÓIÁ=կȴ$ fE²VÎtdƒK š«9éTb¼ç£r™Éþ VkÙw‰å®mK7”~"<áâ[´aQ‘¶5À2›M„5†þÿ^€¥Å8³š±¨Ýh&ZúØkäç°­¬@w˜ò;«"å™Þ¿(¦= ¡f©Ÿº°þíÌP· ûÀ$îŠ\™ðúÜYÒJÂÞ¸;ú$UÒ¤rHü5zBÈšók†'`myS¿èlvcf4àcúsV&ÒDYüºAR®xxC7 ¥bG6Ž)A¾UxU¬™n.û…1¾™S}Q~Õƒä•ÄtÅàé©âøKœåR—`%ACáOßÈœ0Š!Ê“‹ve,+Bl+‡JDˆÒÈÝå×è}ª¨"5á¤ÊÈë_êýÞúð\·WÚmSD0ÅÓTšz-ÉÓ_H뤶Ãê›Mèqý؆Œ?PšP±S}xïûö šFß¶¹‰æÊݯ2MhʳU¥è¹=£\œÛ]ñŽÁCû«,JG«ªÃ"€Wð€Ö°Ý\PPÔêâ*þÜÓèàÜ—¡ ¹¯\êtbFmïΚòêÇAÂk]õxÍó-Hqè?ë}Šz¤¼¾’;ZÑ#{)ý‰*Xéï\Œ}ü÷j?”×±œxF¿äf0!ú¹t̆8³óR”Ù¡/Naš é’‰ÐtÔ:ób1ꡌv©€ š"3š6úüOßz>œ¤Eq.²|Šerá‰5Ä#e!QLÁÅåoXÂD¦]Dc § !Ѭ¾”C ÁLNõ„áD0ÛÅ¥ºóqjªÒ_‰U1ç$BÈÝu)콂ѕýg¯i¡flœêI<3™J]ÿ§?z#$µÂ 0¦REA‰Æ¶6i,!Œ·üÌ„––Y1ÍŽ][þ[¸´WØ*†Þ+„¨•{ñÿ'Z m°ÚØáÕg½¯c4üøzÚâÛn½A³^_‘^g<39Ù 0=ŸCS ›Ë‘èµ’$~¡ßų=m¼RTÈ$ :KtB,þq¢/b5Q‡»NØg}¯ðüÛš2p)ãÔvR]{‘‰®Øè"ì';.}0`¨Ì¸Ø{üŽ 9Œj+Kk­¾=ž<œ¾H¤XíÏW÷JæhnÑ¡ü°G ò@xÑœ¡¸Mä]a;秥ǹ¤”@H:û¨® ÉNíW÷@\Çßó®x¬»¿­'µ‚J?u2´Ù‹¬V3‚i[¯øiåà½c~P¦%&ê¶Œ§Ýõà){ÔÝ•˜ì˜ƒÃ-UeL–¶baߨ³ »38÷u³¾WÎk¹×vK'£ȉ™MOLÉ“ý/ßÜšáúê{õù€R(3u¨Ó Ž„šæ¬Ú8®c“Z­#“Å,_*hÁ¹ª)yÌN %ÝÓ`W¯,*ý^„$ç&³™PÔI"EZÛ·øT쀭éÉ0ƒb,S#uYî%]b·"ívK4ÊPY²g¾×GX¯&{OÏÉ,=’ÇI‰/+s¬{Â7ökK°En¦h]e jtkî-PR¦  `Àûq¨?ÿiûôÍ8!·?Ö6=#¦QkZiW@È ‡ pä-<Å÷K]¹•íóW˜t=†ØL/ÅçY-8`?üÖ|U-élJ %ë—_ŒùûáÕ¢¾Í·“³†ÃKÿ#Zg´¶ƒ¯E_= §QO/ðÁV±{ð6æ'Âo AUâ8{c°étÁr(:yµÞî¸ÞñÞ…U[ÀÂK‡ÄrN×aWí@ø%¡G¼œîÌ‹~â#ø ËJ<·gmíŸÄšÔd-HÄÛ±Ž­Q ` c1’e-¬B„ÎHHáñìzêrYkÀ¡Æ¡º‹;¨Oêk¥ÇšnS,È*".£‹Ï¶1äÙOsZê0ÖaºÔß?XÎAˆt îü N9ÍV«lvbyߺкÒ[²otÀ¦n¿kÀ îì7YB¸7¬ÕäE šQXÁ­q]ß;6yü8ÁºÂžKz3²[·þí_îõiþL\ìlqÚÈ·k¹•ßk…Ú-U(ã¡’rÅtºÌèOW±íý¿¥å8ßh艨å÷@}N~†}ó凬ò{}ÑH(]𨠠ekk}[ɟξLN[Z®žÞ±½LEç .mË3«œøä›ÛC7¡ãxS:ŸøR|$ý”Nyg•Á§M¥VÆÆSJï¿Üf›42ÀBúPGy’äƒ+qz£^PCͱ¤¯¬X¿77m`º ³=œî–à reü‰ôíL[AÌÊ|1 ø› ²Zµ¥ü~æCEàGN\TÝla:0‘-ØêcSÞŒtÆš‡A™â³/#7æÂ ËY6üÊ48­ZÇW%[ UÎ&ûÚ7MÌgÈÃå®ë¢šº5§Ú×T‰ŒliâóÍdzýª ›‹›šw—©#Ö8”æßõ™‚$Az¼î¡{ŸêõL…òŠ€t¨¸zs¶Ý(ó3bÜ{þFE¡} uW!k„òÄ3­…®× Ú2,oƒ73Lª_ ´î_µ‹êì}Pè|&*_*ј‡_¦ctºÞ¥<äñ )²÷ˆáô£ú%’¥gè“2ü4)Fr¿z¢7£¦1í2¡ Ý“‘+Q˜,ÂX1Ó€®zROTwÄ*‚ß]?—h«Î_,>ô7®ô0Úø\ÃìærL¢A¸»ºsÂô#Ô câˆ{]ïoúÐgîÔUÓV9””÷m[°'ÃÑ( áŸòÝõ5åpG2²mÇèoУAíFóuŽùiEPíð€ÝÅ™ðÀu!¦D[£–~VØP Íu‚­Ñœ>×aõ;ü³d‚áµZj"”0_âðÝŽžõSTƒUÎ6y¼CëI."ÿ¼$_ž¶Y—ë†0K, dÂZÍQl1·ÙAz4ŽÜþ5Äd­zÎÃȆLôÝÑê‡üRr˜Lï?]8 –ø¯œÛR¥í䬊G$Ž™?F>‚¹¨§ÒCÒ# $Î ¥CA /µPŸ#À|{r"I†Ëš ÌÊQ¨”´—j¡Œ¼“îjY1bMŠžv·DŸ~Ð*ÐåÔ@,]e[³éz‚âKÍϹ’:uÄ7Ž;V‰.W.z;3zÿW²pßkxÜöœà8y¾1€=<íQ³O†Kre¦õæ!=ðtf‘7¡¶Õ"Û½4ó±pm¿æÛ]çešTŸÏV‰Ãî‹»\[u03 æþ`JmÃ]+Òegc5¾.¿3X U½eÞb°¿öøZ”EÞŠ4¤õün¡N"£sKÿ‰ CClÚöyËá6j1«}™Úè>KÔtÔ0‡{úz‡!SÅ\5&y’_¤Üã¼öMš‹|??®UUYø-l²àSΉy4îÖPÎ%ÒaŠÄÚ=gà÷[ì ®|9híúvk¯3ÛíÈ…•òÁ³ªryqýü¼<—Gè3 °QvÒ9 ¡Ëvˆ†Ïèwþ‰r¾ŽãÞG,Ÿ‘“åôÉS\Âþ:9Uî?ôì̉ÕùU¥§­n ´DC(ôô}o ü*ŒõÏaø¯SS2«ÙŽŽØk¬¨eÙk}2ÞÏþ…žÞ¿ãÊé[(TƒJ©ÛPG¤X—mC’=|ÞHÏj>|7ÁìÒ]=$„’òMLè콉„F(Èé|«ij9%B­ú™ —ªr60©—ÐGmí7>Mrn{pÁDFÜdÀ=fÜ å¢çD¤ ®÷ùeð°{›YTÜj\²/i–ã5ž¡(#œ XØ|E\o·ñJÓž íüë±²¬ò |K¬TÅg•eí˜ìB’G/åyý’ÆOÙ<¡¦Ýôñ›çyV˜:úÙ}$Ã"g?CÍ”W¸ù,YÓÌbu ö’’Ÿêd"¡±ÝlåŒé©\£‘mqNƒ•¼›f« ½}âù&wKeŒößë“«5¥QjGZúHt¥sëõ¶úO¥6 ;÷>ù˜éÿØî NU1Ë»q¤'ìœÂÜ«8}¸¬§x>°£±—x\È·QsáEñŠâ^ê®Ï.:÷˜à Ä$KïÅ¿º8µE™93¶ËñZ‰.ý¾î4Ä«ÒÜÐL·,6f*ÄÝÆ*ixå§$…5f•ü†ÌM¦Bμ&n·ò ÆyŽ™¿Š@1ÙMr¡ ¹øå¨^€Ê‡’ùÚu[¹ó±ò.«q«ç<>—T%öŒÉp¼`óãyb'öQç;àFºëñò µÂàæ4.êJDެ$‹FÁ¢Õ’êbõ“&îJÈ¿"à€è%x¿ïÛW?ð™ˆåXMŠò< ×µN§Má_~1`¡Ó ¯uç+FèWÙVìY&‚øMy»ÝÈÅì â¥ØÔÚÇàˆPcÏØP>Rå!)4:b§SýÓ.7h3ÝaQù½7†ENãÇÓÕd¦\Ôfd‘í•€"O<å‡'8—ÃT3R‘ŒW÷Hå}FÿÃ>´PV¦kßáJEi`$tÄ"%«ˆî|t-3¤´‚Ã5‰úÏÊk’˜åÓ¥œ2a ?Ú¸û³lòJòÉ}7sô 5êªÁ‰ÉoǪëË ç¬k@ä8>æ÷ %ï`tEOßDÔ`ð JŸì‡%s¹ø !7(GàÛQÎù¢œeÌξ»„;ª’]8]û©ÒéQ·iøgy-üsQ6©ƒ€XïÆÂô’‡RP:¥d~›,+€üéwûX_Ççj™Å‰»¦S£®×£¦Ü·æ÷$V¸kóàÙ­“zQaã£;”©ÊÈ ¨Ø Ã0òM5بié›l·Lê†Þ‡Ô‘"ðz´Èð÷ÿ‡±zñ›u5ͧ†b/ü(ÀXĤu¬UjÀoj;dNØU [^è&¢e.³²«ÛžåLvÎq Ôæ8@ïI‘ýÒm>3Ó³ÔFéÕnšÔÌÓv¬þ¸ÁzM©þ½ŸÏY‘¾\D(ü’ºB®°Àãï€Øí©¹Tj­{‰¸ Ï:l²Á]83ÏF,€0TBrSüÕX‹l¶˜Z¨´’C˜tZ±¸,cè‘>ø)6ÓÁH`Ȇˆ'V%ñ—ï±èö1*r¬¥ôeª#…|Ïu‘*'–K‰q=IIÈg¿½À*¡Ì»ø ú'¬OsqΆË"µ—ºÕpªßÖÍδÁžÅùH Bäam ̧ú9½D …òlcÙý Cy‡àOøÞ=PA/WƒQØuÈS²±s"´³ny!Ç'{4h‹mSÁ1Ƚâö²±ïUËÉP¬jÃÞÿÝŸžÜq~Ý÷¸P*€¥nHÖŸBNä)*Œ³Â ÍÁ S%óYI|åi–|¨tåᔽœëEñîŒ ÒŠë>Þ]"±+“ù˜sPʆVÉ×ömäÙê/5³ŽÃåO÷ ‡¸ï—E¢Y¬Óɬƒa\At À4¥û½G¤EÅÉCæßýn™(yz["i°÷Ö jÔ„iç=Ä?˜è¹A7ŒÃkâÍ® ñ¼ÆØÏ\yJ÷÷€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €t1lib-5.1.2/Fonts/type1/bchri.pfb0000644000175000001440000010445610733501627015212 0ustar rmzusers€ã%!PS-AdobeFont-1.0 %%CreationDate: Fri Nov 2 19:03:54 1990 % Bitstream Type 1 Font Program % Copyright 1990 as an unpublished work by Bitstream Inc., Cambridge, MA. % All rights reserved. % Confidential and proprietary to Bitstream Inc. % U.S. GOVERNMENT RESTRICTED RIGHTS % This software typeface product is provided with RESTRICTED RIGHTS. Use, % duplication or disclosure by the Government is subject to restrictions % as set forth in the license agreement and in FAR 52.227-19 (c) (2) (May, 1987), % when applicable, or the applicable provisions of the DOD FAR supplement % 252.227-7013 subdivision (a) (15) (April, 1988) or subdivision (a) (17) % (April, 1988). Contractor/manufacturer is Bitstream Inc., % 215 First Street, Cambridge, MA 02142. % Bitstream is a registered trademark of Bitstream Inc. 11 dict begin /FontInfo 9 dict dup begin /version (2.0-1.0) readonly def /Notice (Copyright 1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.) readonly def /FullName (Bitstream Charter Italic) readonly def /FamilyName (Bitstream Charter) readonly def /Weight (Normal) readonly def /ItalicAngle 11.0000 def /isFixedPitch false def /UnderlinePosition -109 def /UnderlineThickness 61 def end readonly def /FontName /CharterBT-Italic def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding StandardEncoding def /FontBBox {-226 -236 1174 980} readonly def /UniqueID 15530649 def currentdict end currentfile eexec €#¢•@ƒŠA3ƒœ©Ò.+™ò¶v|Öu ¬ü²NÍ6s›¶I”Åg7 Lì’É”_ðt^÷ÿư©£¸Içé‡@ål Z÷‡UœÆ•j³3Ï…SÕ\ ŽõìkôbêÄ.s€Ê’®‚³Ö¼ò»]Vp”Ïâ}N¬–“èƒrÒX´~ 8vUŽ¿uz¼\Ýö+ÏÍ‚qòYƒ;¬yprìš0c¿s…à-ŒX¬ß³;Œ‡h²x±LŠ-åõ4bAáTWOÅÔÞ¿j¸¹—¾;$®&ÿI¯âeÂ"¢ó„5è’¶ö æ¬Ñblä°¤‘ '½³Ó!‹)ÈFtÒÍÔs36‡ÔN³AáÝt8o,ï+JØLœá=Í^©2q¹Hž­ÁvþqTñ ?ˆ´;c›—ŸxY¹`El/Çecoȼò2ô ç´gàæ¢Ãd¹£cnãdû]¢ÇÉÒ™™èQPÿ +ù–¼»ƒHÀ™Måâ Eè…/]Œ{YX2Û5ø}_,Ò2SS(h¬s»· CrJ’‡±µ0ž'Pªcz‚˜eØî¾lŽG·S±ÚîÛÇ2pñØÐ°³º·:xX%S¹À,g«žE‰Å¹!‹óçWš•Wi.·9Ì*ÜUõþï¤oÇFúše&¶4Kšyks%üï´°óqM¹Ë‹¯ʨ)y6rŠÄÏ2Ô/!½7J@n˜“`/’ƸtáPÍÏ1–D(«<šc‰áyÄ °ä`1·bVU­?žÞXoÌx­„6š_f]ÀR –×ê#·ÖÎÊñ*ê.=?n2•fÇ6½È¦Xóxÿòwó1gxèÖwÓo…;X…>á#ºYø“ëqˆ€Û…Îf7ÊhúVY<3ÕUnüVˆ‰]¶þ®í×OÇsã°‹J]{Uì|è6IùoJƶ¤uÑ»:T°‚®r0ã«ÝÍ}C>ЧGw'!ün!1<"½@*¾Ô0 ìžD¿auN\€DàX”Ñm쑃ùã©2ôñù#—.¾¿Nïg+iøáPS½Ð¤Mf½ árw‘úÛœÞHÕnøây„Œ—©€Þ¬D²Á‘óv z!ÿZÀ ãv}qTÒ¨Ž6îqqÄ[ª§‚v‰ ø¡Osò‚#Hy²HNh ‡«¼ùüCr*ït¬û–¾;ù¢²PIÝP0Ï:þ3^ÛIôÓ24‹YdæëÏÁzëHLOü1A¼HÇÒ#|÷27ëm§BECó(r¶?˜µ?n¹u¶@tA€mXØ„âsV#PCõû+rT,ÝæÿåÊ‘*±©PòبŽîWY.Ëœõg ü)Ç'Šu—µtBÝD 'Kúxóʧ YÉ­÷ÐÍùÇaÉâ'Iª¶èô£\©ê¤Yné”3µÂX\P]Cv+ø@ým°Z ;5Lä"# 㿆)¢›É©ìñÝœÀ¸þóev>Ķ9d§áA||RsÕŽ0ì»0vá3ê$Cí,â‰{¾ä4ßçéˆ ðîˆd);,Ç·Ð7Üþ#Þ[|Šû`SêW‚•ÿ@Édb·6w—–©ÙŽÀ¢ÇÀBèyCÍÊØX£!Ýôr…\KcºOéòG‡Á«Ÿ­WvËøXŸHµõ £êýP!É KœÜób¾&Ø$Ðį,‹\4^—ñkûÏkc–Û~ üPçµ°paNËn] ¹Ð.Š9ºB¶Ùð˜¤rëKÛ£AœcEgತ½„£áøˆ‰A¼=¶îÑb/pÐs9|–“ŒrJ>oG)$úgaÿ› ’vÍ…Ç®}1’^çÓA4ÝiR{ª+zõÞY¤ÿ|ø~8*¬ @®~æ&®Þo&¤ HšXíJRÕX™“Ô”¸ µß8ûñî9UùúÚ"ñšp)CŸÍ@kÅùÜ<û0Ê>®ñrd'‹‹.²(® =P(÷×aäã§x‚rÜ£¬åòœ´©3­ÏQØqk…¶š¹–Å€R™ør +ç}?6eQ¦ƒJe`*)9_pZ;û¡þV{Y'ñ$WôÍ'*ójs‰÷#4„¡–œª…lö'°ã¢÷Î#ãݰ~ûÊD 4Í%—Ý ŠkÁ†qÄ+wã(,Ì¿êA—ßþ8±.9mr™ìó(Ϥ+ùŠï0CV¨–À׺gHê£GsMä‚o«Yþ0Þm22͈¿ E:œž8&¦‚}7üÙ¹çÆWø¸‚i>ÌÍ¢´ßŠdCQ'³õŒSÈò¥+êÄþ aÒäIÙÚnHu· q„N/T{|6;×ú¼‚ÊŸ[~„r]üÊθÚççÏ# רn»¾¨yvœEŸlagp`AÚ\£oJÆ eE^výO²îÓŸ—ák¾t¡ ªoýÐK³Þ¸0ìRmDXú¸…Ó—ÈA¿ÎÁK> gêºI™áê/9€C0QI Z  “† ÍÑ“ß$ÊôâÓT-}Þv›©>’/bPÎÞ‡ ®/HÈŸàÈözÈ©ÐmÞÒºÈLª‚Õoùë©”µ &£{]ú~5ݹÊb¾U‡@®U´31KÐ~;84þ¦Á«ï9TÝ­®ÒÇØé¼ZÉMý.ç”)4ë/ãšìÃJ4 k䤓ɾx²Uåô¿QM«# Ø É $ßìºÃHÑâne˜XuêŒÞ©û¤ê*Š{²)˯¡,h¢ùù#:xè`)\ÃÈ"„{é‘Ï !Pfº¢•Cõ&¾*ÏeVŸàOô±²w…VJžó¼¶'•î˜ì’­=¿‘ù%¯ýâ Àµ•ïÞ¢žwùU\5›ÄaTøqNBh)Ÿ;ê¦pϦV´ókò‰ÊüQ@£VÕ{4‹šýIFû‰pù,æp?¸&ñ•jºÞ'Š ¥ä „¸(¢¬¬ö[) ®÷ã _ºß)‡È%Éã¿ÙjN‹³¾û*®DX0M–$¦%‰Û¸ó’ôôt ól5©†E—©­ŒAÌ•Á-@z#w3ÆTƒ„0/|?âE–Ç´rÏ/ž {3E3AÛG§Ic„Y£Sf±×p ½õEL~Ohºpõ¢&/NÍĆ>ˆ•üì°ê¯7p¦VÂGÿÅY˜ôýc#/nËíM-"øO„ Ô‹å€³¾ÊEU‘Á8órµ“$¼ª%gmG˜†Q¤_Sf¡óë´àÂñj­Ø«û©Š)u7Ì\ys×Í»nóû±γ%àÈ0}²\+€"ósèG¼¥ºkKvÆkÞ´È'Ùæ|«êùžÿ’-Ù: Å£K;ÌÕiÿs÷ÏS2ížÝQ½éèSãôg®>€¾ó)»â ˜Ø½ä+8»–*^»<=n Šçjð+I©¨z¬õ ¶ž&q¢&©*ëÑ¤Ž Ó†?ã/ºÆýø|A‰£ä%L¦-ÒÈ•™”¥ÃJû÷S9xë2ŽÎ%¥x­;b÷òªXÚ2/¶¸M:„MfêÍÌlåä+üÕä4Ç?õLF/t¢ý® ; ÉÖrݦ ÒT’¨íã©ê^톈Žî]””?&«Ñ†Q€jN0©}Î.oX³05ÄVPnÏ"¨.èo†ãØwìZd ,b…D»³äËýúö%·Õú$5ÖãÜ#1zÚäïåLª½ØÉú’€„–êÃteÖ¢&–,„`¢7²ýM\4â€Nº4†Õž¶úâ–,-»}Ò ÁL‘]´÷U€95`•ÃÊê³%=²ëmšÍEÉ…ùÒÿbšëÈîü»ÙusúÈ¢7Ï¡ðŽÛ™ÐM„E)R^4TC0©©¼^0(0:¿esKöaK–¦¯™¼Éöž95UQšn©ÊŸVóÅÛ‰z%ÀÞîP …>ý–ÏmKKÁ.,†Áþ´èî&s)Æõ-_ÄÀð*3gCWa¡dŒ »Ì¿êÂP>ܱ¸›M °ÖÂßKö6ï«ÆL0‚Àµñù&ÛV+¥TS‘÷Ä4æÜA·üw®÷ï¿ÆˆôÍ£Dc¹ûYÁwš¶"µ@ãÑfP<ÍàxïC£µÔ1h\>z¬0Êkíh±½UCVÛŒ9†â'%ö 30Ãì–­Q‡y† x4ROÁUs>º-Jˆ¼GutüÉhðÏHûñŸÖ™rë›»¦¼âçÿc% L×êÓ:ǰMë`®í ·[×îvëžò±âŒ–o;Ä8Óßµ¸úûðWŠr¸&r¥úïMzVKÌUÅ©}m}UºýÖ§â©Ï“ïBÊy3]¼ÑW@Ô¥”èÂÔ²“b½¡¡è;Í1ÜZ2ÑÛsåÛì£+×hB¹4 >¯²”|ÿ:ÿO¦Ô+9FÔή`ñ´·T.j·‚*…)ØNnƒµmÚUÒÜÂbI•§œ¤íûÿƒòQ’• 43ЛÆÊÖœ=w“I?k i†ŒvÚk5x±L-SZ%ýW[$…݆r›¢½þŠh–>ßýI{ñÿaˆÛI¢Ú¬Ïx¯-e^]Ò§œë&aëÚÓ͕Π"‚ï“֘߈Ÿý¢%pÏ÷¡&¦ág »ºhv¶dêÓ¹1DÜ>“2lœò*‹|ÎÅ!¤6¡ç°1.ýõODIM”Ý8ˆ9ˆþv¬zÿ}[ÊO ™PÍxYŸ»[m*PµxhÉ_†ST£CRÌv1Nž‡û$û•æÃÕ/d³ö*Bj‹YEM…|ì#;6óšŒÿ?Ð&F­î·ÏkC’ò!ûýM…¯Aéïf!]9,;ÖWYÜŸÚ„÷Ã`RڜҾl';×ÎÓlȬç}o™Ø…½ixÚuÎFø–4Dåp°LtGNë?î <)‰)¦Ë’;nG¦#îšÚ”"s¢­=ÏËÜ5z~õc…¶­šw<@ \5m½Px&¡6Öì™­pÝ6©¤ÁôAŽ«‘櫸exÑYhµ¨Ç#¹J;Åw^LJBµ€jNÇ-©UG®.CÃï¸ÂC2§!Ç ƒó÷ªª1i·{_HÅZ“%]xå2ðD)W}…k äI ÿò}|(äÞ¾vUÊc¸) ¡IÁd‚KZ®j ²„"ÈÝc)P]Ó~û¡lŸêj}Þ‚nv_æ·õ\Yö•jK¤W€•U M“ÅÈ↖¹YÐ5 ·î nW§>òzÕÚT¡{U5)‡7on<µFeí ó³ýr0o÷¬é˜z…MÁüÖÇáURñ!S¡wœ–.oq§~è¾Ê]Z‚M{¨Å Âì.¢FvÌdbÃËKí‰F J¢ä£’¯&çðd«áUƒBùøÔ CÀvQŸW˹:eKª‹ï”· †°,¡Ôm:8ùï¶ýì±T’;ÖI/y¼÷ @Š7å `Éâ°œƒÂ<ĀâÎÃN³¬o A7Z_Âd¾Ü˜xP¶EˬۃûÓšG‰–le+½< ßA¿æ¿ê§tÝ]såöWÂIøÞÌ‘èv/3PAWñb6¾Ìóx\]™KJ®˜¯JB\ÔüåX´xPáÛàã·õ Wç X£X +ÞzoP­’àmQÆÐ«à`ø“Ç3_Øõ±¤dESƒÈ>Sß¹ÇÏ_]§,Öª %¬+SñQð§:úÅnÙ™“ƒïýÙ §dÌ.IBIð)6Ñ~žTÌ2±ö*ã4@œ/¼¤èRIÁ¤w›äzSm6Â1½Ø)’}‰¢ýLhÕõûpO†w¢‹·SýM1÷ü‡Ånô#5|Þ†îo#®0íË UNÑà&ø¾?£#»ßù %ýu¸%Ø„‹-¬™#<®,¦"àâ¹4ÀPÅ©'¢Óùb”·ôÚj%Ý·çuï8BÍìí(q"YZð-áªÖdó÷3-ì9Ð䮓†£$+Ím¡ä8ÇØª¾¶’ M&?çˆv³¶ÂSÇJ;L(úzïa\–™–‰OÃè ¢wb¡²žå]QÙömxØÎÖh‚›Ê0#™-5&xG]ÓŠ!¾+™sY)ÕÚÛZ‘<NšHD _ÆÆÙ0¿v‡§`¸‡ógpRWÀ¦²»öÌR$B©pTÌ$Þgô&¯9@àe§^'ÑŠo!h¶ï£Å†L_ç-Q>|Ï?[ê:ñ+w€¶È»„0?Á¢«…¨™ªÛL3ß Óœ¨É„÷ª™ÇÚ{%ò¥«ó‚O½;ž¾¡”|zàötåvýÕ»ÐÚ^y·!X–?§ü%ô(Gº6§ 8˜gä †Î|Öx¾Ëù§Z`_BÎ\D*GV^C¤h•u’Ÿ×q÷ {ß(ºöÚ$ÈVÝWGTy<`ˆnÐk7†»pý/-Bés]øgùŽ&…8ð;½@z –<¬å¼þ‚Ó)Ó®EÖN|.æÄRÕu®µ ‘½ñ€i¾7Å‹oSü¯L§„úä|qæ‰n—–Ó1ò/Á0?Á÷á@%²ÌÃn?.b^9`4†"AiZËô‰‹¶ÝÔ“]lÓ"Äû_o€KèÁßn4ÙÆ¹Ajƒ·Ûãcæ]JÈ^ƒÙOn«D&–\ª¬.7ž‘"ûryúXÊE÷ß½kWcüPÓE‚Îh¡˜"˜fß¿ªíSŠ/‰WEx»õjŒ¹•°?È6’ÊÁM<,ÌáþŸÚs´_wƒNm}ÿmŠ×¤™î_ÝÖìÝ!&•w ¶¸ú¶T箩&¾ì|0xûÌÇ›Ìi'°ê¿r™P 8þŽÖHv´Ä¾˜ü‹޲ÕÚ\&ìk¶iÅ ™brZ¹ôÈ ¹èn¯Â"gt`~3;ƒ¶Š5!ŽÎ‚± ¥Å›Æ¯Äå}°bV8DCõlM%b-FæGÂÊÐÚúд¥ˆnmÍ6ïdB6È— pql´70í·"‘h#­dœðäÎäû€0Ê ¸÷ï>âÝOÁÆÌsVI|Ô¾ÓGÓ•:ñƒ|qK®ÿϾzŒ£“ñdÀG~É õH%ɬçDÂ…ˆsõÄgăjÔÐ~^‡gkã’>q´gÑŒµOŠe¿DW!ñ€Í b1DWÜì3iȯºå8¤+–p‘¸ÔÈT…ÆTgç17‹ø›û˜õ5ÏîÔûù{ùÜ0+X ,ES ×j4ø: ¬C·¶(FRtsmÅ“æ‚Íy4íì¨h$}õã 8D¸ÞpŸdÉ¥9ý¢¿\èlúx+G¹~É&E(Œ`[GîgJ\üG°›LÖ4Æ—Ÿ÷¤}ܽýèòu~Ô$Š(d|@C#šHn«³ÊEñþ5{нk© Él›i³“­(±Ìð°ê±H¶s‚±#ç…SüÔàêÔð“cP6'v±­³JòÀÂ…æÖ3ºÍ-IR³îí&G|K˜¶ˆÖYä`dò44åÍ'Ú<¹ ¸zbH§‡ìlÝ¢Ô d7ž?Oüî~ñmøíáƒÈ@ÚYÐv]À'R‡ÉWÙ @§* Ÿd-™û!öo²+`mäbVh2.Üc…Ùoƒz¾7J4z:õ=ƒzØ{€Ÿ©=nÉ‘•–LÕìü@0'†Ö^ †Bn4ï,äú)pã)ãƒÙ̺Ì*Í®k%÷ä:pÞBÔÆ:µ}—Áµ·S3í¤Dê îøMààÞö ç% É0ˆôM.fÙãRÝbÌ$+G¯ì£QõüN³q,ªû "ŸûÏçú³”¤"ß•ÕÄÆ¢ºíœnXÎ6Êÿ€¢Qçì€ÿ‘ßU쇨¼`M»NÔdÖ ³ëß&FËû.ÔzZÚbpmNÊIŠˆÚÒF¯˜ûAºñËNošõ×^/4ãϲ¿GhF[a;>vžÿE¾àußï‹GàÚzöC1Y¢°÷ôñÀ®Ʋø–Öùœ¼ùãÞÓ2é‘&»H¶Šz—ÛȺç[³¾cú ¢ôE€Ïk¾?‰ò’ê"ŒŽOŽÑîu"ë[>FªËV¸µ•s¯ª”á Ô –¬_/LÝå˪Ã,³ðêôÒaÃo¥ïNÒÕÿaȉî\Ä"8Ž23þ"ï/ljp<’]Ç-ßã$fîò2ÓYaxö—(Þþ_7¤ú=O\¡[¿ ç'Wº}ºgïž…ºßçÇà™>RoV€ö¥¶¶uKàüÁ)ôæ(q Á”zàÇÉð¸Ø¯¬AôxךsDV|V¬\ÕÔ•@Á©·;T¬L 7,(±5UÜwKbB),]·zp£ˆ[øc~o±ÝgÝú”#Œ Yn›aœËA¬i£6U¥Àλ…i’,½®Óÿû:ÈiE²¥*Ýöê™GUTî$GL¸w NQöó%qcƒI»ldõOÚñóu®È‘ð–ÁŒ‰tîrÿÜö·€9 C½s¾ ¾N7¹û›$þÎu6º×Ú¶6D;*çÄ?]óœ%ްw¸£-Ëb}¨Ðf~ºa) $pT£þ&\K“@`ŒÃÓŹR†ï1Wít娃ØPô÷›gî¸d±ï¼¯)rÌÛ¬~ Í!`Âç4ÅŸôÂMʉ‹ªL ͼ‚¤Tƒ†N¾ÂÆKvìFE BxÈèv±#¡´Rp·k\ȧKö'=vm!i z‘ýàÚ®Xðxta· UgOäw|Ãnâ“BÙ{ȱOÆ Ý»HåÔ×uÈŒg±&5ÑiV] —Ǿ™-³ËàwܳßÐàÓê{Ѹ0 nD’Nv#êëõX]}!t¼;Ùw$XÒÁø’ÝæWÉ}®‚ðÊÀ’ÙÇ!’ÞÕ›­çòý  ž·,L‚6àçŸì|˜¹è•è«h\Þ ƒõº`ô&ËÁ¡ET^'ÞEÅï÷}ÄTô¹aù[éIyƧbhÀ2"SG‘Ú£ãÎ^Ds’>^ ¸oûL;/Ã/Ów"=5À0!›.IoC&@@!$ú©–ø·ÊË[Înj#¯Ä|&ê¹& R ‚·ì:¯§0„çÎXUUÉJíä"NãZ«Èz†@µØ*¼ cÜCˆ küÚ³Ä3Í0“àr¬¸õ„ž­ÒTÈøY¿­¬ðO]?›Èô·î nW§>òzÕÚT¡{U5)ºüÛÌî‰&„Qqvv0Çüͳéß·c@CöÞˆoÀ¤\:ÚÉn ï»Ó—ó‚Pa]v­XO­ §~Áû˜ùó8ò…aßw"芎€vº¦=bWœD_fÖ°iß6»¤f½”QÓ `°J† Ž´9ô‘Qã÷DNšªÃ±²Á§¾@ †öÕ=uP3pFx”ì­âpêék] ®AtÅÑßqÇl‰3u†üH°Ùeú½c÷¼™tkÂ+Ý^Ñ0jWò6Á8Ûã2ÆÞ°0æez黨°_ÿÕXm¸v{&å¶fj•¨µ*µ C"…‰LL_"°ø‰ö©\’Û)ᘂµ£3?Ú &«¬Y“ȃڙ­¼•=c宇Ϊ#8ìñª;ÉAx@ìl®„~¬¤8hã™1ómNûÀ<"GÇ7ûô]¶ -ïqd{«>ð)JýñœäcWn¾@eØÇ킌ˆj‡à ŠhÞ-Ów)ÍAîÅLxðk3åoÍRÑ ÝÃwô&C‚^rd–Œ¯ŸŸÏG¶fü–‚DAã¯kÝxM‡½¡ Î]1.ŽFÒ®gu…~ç3It¹õ]z—äsD³í/1º·cÆH³(aÚsDD×|çäŠ=apée;ã4ìÀU†w§òÊ;›„œ@qkÀÕ78M bBœÍºO.Åî¸Ë±‡DÔØ”0–n6™ó°[LjZç¤ë^Ê{‘RžÊí5“XcŽ:SÌåÕ[ÂxÌø•îÿúŸ›l]a"w2ñ3as·C7áp$¥ð<ùíè^ÿ°!@Ïé]Ö„_-š3Kà *8¯¹Öû 6K›º‹”ž«Ì6QhuÈr8_6¢EšiV÷ûßÀ•ÅNu’vÒ[ØŒØ4d0ËjS³”,%f/zt§uŽê-È(¿ù£Ø¼Ä* †{Zvrãõãy䴲쟗ùŸÎk0¿üz¤\™™Uô7¸à&k,iZ·¿QàÛ'!Cý'[eÍK›#cºXvïzèZsÈÎj¿ç„ú¶_¸.Šòl¨õ±uËU-‚¶›o^¼>„XãŸQ6'“ŸÃ_Q¶?èN¶Åjøb³ ï_Y™áÒ¨8‘ùÎ9Y°ñÃé„î±t0k¥¨w?sÞ¬P±Óž*a—!³“ *v´ÎÐ1<(2+´'¶B›pɧ!#Œã1Hš¯¥˜wv7Só]‰j‰'­ ¦Ü9gÙ¤ 1c“€î—ôù¦šŸ-úÓgc‚9Pª[š…眃z§JJ'È?—•À°Vè“qÓþÙÎüYHÝuÏ}ñ£Òú6ªu£@¿á:ÿ4r/ñYÌbµ¹;Ô»}8ªß¢š Ó;Q8‰N•¢w 3£8éð+[XgÂŽ”µ28ß/(Í®ëY[º¤ÉOG~º'žÑU”ö,\)Ï€âã#Ù'Ñd[h4 %<#½ÃX…sÁËMõ¬ÄyÁF,Ç5LÁüª|6‡²dËV×зÎ#ªƒ;fÍŸ êåÐÊMœ{ޕРð±RExöÙ<߆:Š?†v¨W{Ë.KÀ¶†„dáÑ“AR7ú?ˆv[+X`lÕ’‘ÒâÊ·ñ²˜@â605Ÿ×'I@egçsÈE)U¶%••õäS³04½`aÅOÞ!l<ºöí7*3)´±s”W™Ilù5JS‚R&K«‚­‘øœ9›—I¶Ro×ÙdnMåì¤`ŸHøWOÅ·V$Î[_€g<†·<5…Ú¡k¢µº,Ä8ZA)l6<~Ûʱ±ÓáºfPlZ† ë%G> ¹„CÕòy*]ŸIÒ1,4 ›ewözs_gûð_…;$÷vìÁÿ4œ:­òsÏn„>¯Û·Mô2—1NÒ¹62ë ©v‰å«A ’DSÏ{¡î ¥(~åíÀw8¿“¹þXƒ7’@ëÜØsá´†…Òª¤±bíTèýzŸ;Ê£L¾Q|Jˆ fÌÜAÂa©H‡Á6qÀÑÈ®Bd»Ó|“«¼»¹*zm”©'ìÉõß»Ì(®ÜçvŽ`¥ G4yl„tÖ r€'æ'øJÀÎ÷ýã.)ú‡`?›Ø w=ÀZõZæNøN_ÇŪµù"J=%JûÚ†ýgûX—ÿâÉì5 „h#˜'âç/ÇŒ¡YáàY]&ò¡w+Iç–¿8ëpÜ#ïœ7âpÌ>*ð†Bm#8¢¶´céX<Ì æÄ0ª E ÕëιÅOˆŽ¤r0dÞê±w$€“D#Ú'Y&,†]&U³u>8Ù©AäíóG?o”ËDØöÕצ]å!uã+°ÚÉL7Ta¤ dNxÃ!VkÁ%ÖÒŸÒ3¡ÙGZ’æ26Y4A&2¾Ÿç½3€mq¥PÓSt½ªÍ™Ø),Jb…Gøç&yîe,QÃXt±@y˜è ‰üCǪ?ûáôáˆÓé}%¹ëa>õêä¦ó€ÅC5‰n¾qÝyIá~)’û#X7äØ0»Ð9ãšòPœï± ™%vsØsøzé ñÁ¦ÃºêsŒIpO—Œrtï‰ê¬Bvܾâ¿7áO_UJ4Ÿj9@“á¥k¹sƒ9›’4ð&\pºcð°ß?~tè…Ýšÿ’ñø¸¶“e%­ù¹,×ANÚmGÙqÍöÒÉuÈÙ»8I>¸a—æÃ¨»_{ bZd+´áZ+ÚôÎÀ»ý Ÿ±0ò­óLܺ°5íØ´aÈ$zØèáç”Ðz¹×š`éÌw”,Ro”å¿E{gÒžVH›f©¸U|úŸšÃ‡‘/9$£oÀÝ…‹é/¹ ™„µý('KIpƒf&Ίá<·#˜"Á[¨´Óyî “¼ZµRìÌC˜žI1ཤ´Ã’‰Ä«¤>:ø•K a—K'.W¶ªkòÅ ©J¡ÑÔÔÏÊ­_ïœ5×Ü<`i¢~ö:ÆVñK\ޤµŠ©ÈiüΉ5ÔÈ0Ÿ"!©ïѱïŽ+^ιKt¹ƒd'JHþ9ÜñÖK¦~Ïúá½ï¯/¸“UU#U«Ç[qÃo5ðæ¢c!2ºkœ5«+N°¿CkßS5AêZæÿ®¢(TG·‹÷KßÁyÛžOnÓå-ïŸhƦ2]…&W:æ÷´~dm Þ2NŠâ*õÏï¼™*C"Ç…(gZa¼û,«ã¡ÝÑ1´‘\Á•"10Áƒ8&kŽø#%sœpO,„€V‡³[¼¸T¹æò7°À­ù[ìhžîì&S¬Zi£ÍM÷ÈQÊð¹ž5…²|”}¢WP\ìÀÖôé¿Pj 0}jÐÔ ü-·×LK··^ŽAC?î^s{<÷²7%¹L€¬ž½ ËÇ©cP‘ ,#[gŸm訩힛ƒúû#—ŸCïAãŸú])ʰF’«ˆ¹¾‘;ijí•ÙÙ{‘fcJ*¤^[5¨¾¦p•vÒL¼÷z0m4íÕ|Ö¢¯F"ã²Å¤ù-%çÙ;Hêµ8U£‚)›Ó¿¹!A9M<Ý^õ ŸM…Ì_ÃZúÛà¦rBX"?h~ÑJ‡êN.ëà‡-d9<™?²îv?Ò‰v%š“÷ï© ûYÃw1ò M$ˆ“›°œ`é^L•Z$ù\7*µ÷ÌŸ¯G’4kv ºš«k`+7ôTŽÉA˜‹¥¥µÚD^›S­:Á@ý‚!bÔ~!åf©ZâTlqä1]¬Á›X 0¾t›‰ ÙÓi”¾±°Ò‰ìÊ~]$o{NlÂ<†Í<Üz—êBxeÐá`5 [:¤¥ŒÃ€œÌ>¾–|· ¢-14!‹ÊP¦1Y‘½ÿl½•K „oíñן)áþÌ›oz"ÃM9•ŒÚhþX ¸êwvaÙiÅdÆ]ûmðŽXA":hXú&C,`Tv°Ä8¬¾xq+ü²Ê|Ov}ò 'ÎR]ÉœÕßÞZæF»þû'ʃë ò¥Fíѧÿ³õ1–„ ÉWZKÁßê(ãí›{t $Þ6ë×só¯R_õë %¥÷ÓÖô¡…Z.åÖC%ǶtœŽ)b6ËðzžþT¾‡!P¹à§Ò¾î€‡|D™÷EzEº9qWì³>,¿ãpX,#%© å¯ú'KP\>A*¼!‡ŒA³¢ÓZFå'U¨R`eo€|E^LÏ>ÉÞëÍçºÛ á‡úwG×tU¬^w¨VÁÜeºó.iÊ/jÁkº`SÑßQ_ÈîÆßòBþR8âøAˆ`÷pçÛÉ—Âóìj.ü±Ì)m L§ éT·èDZÿ…D¬Ö+¯wÖöCµA´ú÷ ¯²JÀ Þ†ÔóuQÂ0 è>U#rˆÄCsö¶+@¥ý´NföÐŒHñÑÂNåÊ¥ûãJŽ›²ÅP{¢æÆ¯Óuº=ŠÎ¶PÈŠ/ìˆíDªQ¨czOåÞ^.Тn$Ç÷ }m]xQ‰ÔÃw(vœÐ4FÕÑ^#æLøñ2ÕÌõæq&Íè¯"'½ßôç¾þÝ8Î52W´¬ÌÆ”Â?êá'ɲáä$(Ä3U­–ˆãì@|8M \]fíø¾rîZ«èð“‡Ãû>ÒÔ‡¤6ôT¹HÞ^'O„}ºc­`C”»Ç‘;o¤üxÐúhòãª$/Ûyfƒ¸¾[¿qôŠÀJ7V`xã.O’@=ÓÇ8Ÿ뜔ú1ÙH¢ù@¤°….t‡‡ eu®ÂØ´£«ŠÞ³»Ëü€¤h¦£Žc^W}¨HÇY©øó˜Œº° eΈ1ûGì|.épÐþPÁ‘‚XäW’e¥ëߨžŠ]) »5UÙal}ÿü'ywS\~Æä`ã¤]9ñ.dÎ!º+ ì•niÿ-I’+¾Yq~ë°¬b§ôuDd³UϤDðÝ%nÑà"Ö\á;¨eåŽ4¶—CÞp‹óž1ê‡ÝÜf9=BFiD†›î H¹±ÜÝðÜ*XâKʉH‚;Ze†Dšþ¹±,AG­þ¼d©ÕhÛØ Ž€ÁÃØÖ“d *ËFœ‘¼'§øäO%(H^ýxCÿX4HÒ_²›Ëå–;éÀyšƒý†?$ߦ¿` '§»¸¬ø3\Df´ï4ú7üÎ7‘JeRÿUÜ ŒT´[“5+1“úcçŠé4gš5Ç¢Xm\¿Â“Ð Í5Xäo•LOÕ-€n@NöEME€9@â“ÌBn臉hÍ Ñ Z­±e‰Í_·èù}Á>ÙuºÖöùmO h4w‡Šä9í@±=[ÿÒýúß¹Y~ é_ ó¾ ýÌâ?ˆàpÀÜסbEz!Ð}swûßë°€K½7›¡V~nÞ@«›‚ñ”™FJ Õ‰I Þp¸ÙÉÁÉ ‡×w§Êe7>`ƒjÅC’íQ¨èZS¥0ê\%"¹ØLKÍnC3Ye¯L¹®ªjªüë èWÚgßúÀô3X4½vŸµÕ@¬¨æ±`áËD0著uÇ2G·8sÝöÿ4¡ñîí¦ñ—Y|ÈI¾×]¨g±Mæm±Êã4µ6)Ñ%/¼Â_»¬ÿ kì 1y9ƒeúÎä|®+]äZÔ¥–8–U¦ÎOYÅÒ\7`iÄß²ÆñÿM¥ô‹2Ë“×èØZJ<[øŸLæ‚[¨ˆS,"<ÒתÅc’khsC¹*fîð¶ø²dœJ?oºb²U«I‘qTøkî‚%º .·¬¹bý:‚xÑãK:ºa1%ãá’C(ï ó'Ó¡\XCs‘JáÕ‹ufb½‰d.ÞÑ9ÀíGÄXë? 9W8BM_ÀrsyÞvÏlÖYv÷-ç®ß¯ÒúJ—´>Œþ“Zs‘ÌD—Æ¢Ù‘(ˆæøö8å‚ñûŒ¾Ñ—Ü)58¥XäÒjXªŸÉG¼n¼pÂïyСî×JTü¦6æBp†%`·S߬԰“¨s¢«¾½YZ±&&Ç"•† ÕG»ŒX̉€Ç˜Ã3Œ'XžÕ8T¢do£'szU’Vâ&_~6ðÄWÿUlÀÓèÆÎ"©cTTtcɦËíó$uÓƒ½¤(eI‹_êËRHƒÿ%hR>Ú‰[~³_ˆ,m³ÝdUô¹_& p»T:ÚÍæq©EIãec‹qWÌu ì., ‰¹‡­š±’Õ t—VtÇÄ/Ì—{Ê0’ôŽ+硪s&Î){¥¾4To:€P5¼–٠צÖVJ’­¢¹!NJ¦8áå ÛK^ó0hT7 ¡…äày Îsô’°BŒÈà‰O?þÍH—ÖÊê©ïnð¶,ïy7+•L’)°.6#1FÑœ˜xVª–ób&˜©Šú½°>ik¥("êQyãÄê=ü[ œOø™þáb1¯‘BY¥Ž-}?úi^ù‚¯õ}ƒãí`çõ‚­E˜/"FéÚØGrfÝ}ÇþXx…z_÷[Ë¿æ\åNáòÚþ¶å[Ï;ºÑÃYÔaÔM¥‚B&º:&™ŸJÝüQgaR€ÿzÍÊøYüÖ|,"©NoWçZ<ÓÆÍZC~HN²î5Y3Ç&ÃMÚÕR:ÇËçµðWMH€úÍF¼pÑÄÖà¤g_¸ wÆWk–”‹uPLF [w>ƒAžiô‹¶ïX þÕ-—mwKFìr ˜¼«c }O<ØîáKøHÒµµRZ€æÓkþ6AFÙ ­óP¡Öÿ~=ǨrC!½qPsË€Àm¤¤Š¯&—ÙSÉìõ/9VÖÚxíÁœqj!îL¡…o>bÎY¯=ëɉÍ//<ìt¸М%H×ldBdÔΘ]9û–Àpˆsйš·&–, ç¹ÌõÊ¡v0£Ï+6Š>ýî*ïà©5›PCé&˜‘Q¦y§à§¯¶Dà 䆧ÒÑ_|NÜØa_ ¤²AòÞŠ¸ÞtÖ5‚åc¦/2댾ï]LÉ(‡Aàòì&¿o¿®úðÎ ˆ3 ø˜ÉK\½}œe‚¶Jâ/\ <.ï8«†iŽã áÄÅ*ϵ¤0H^.˜;Ƀ^þáEȳý%°TØZZ™ì†ì…B“V¶êk'JØâÙÒE_ÿ 9Ç>•B Kƒ ’±œ­8í± ̬Ðë¼ ë“6ÿ¬ð©HÀº»ß5M¤ÅoHdŽÌKQR¬úV/òß-×gÇ3Õš~ôYÚ—¡ˆY™L‰±±Ï«†áµ¶ßÖôcÇÎ]zÊÙ0c7*_êÛMgš‰0_ríÈ•kiøhí›§2`dýJ«G{_'©à n?²ádÍI½ßî-Ðs’éæL³¹`1VÐȮŚõõá‘/S¥ /í P á¡àiK/ÀÚËf¸g‡¨÷»¬¯?­ÍøÌGö2æ}^;]ëôŠJÛç–Æ7Jø3¾lÊ#ýµ7"_ÉçVÇ벡b¨7!Ž„J´U„«K1}ÖV$§ãú¶•—{.Ò¬ÖÉ57£®°t˜Ÿ{tíR¢Ñ«õU¸¦kÒ»/ªðM`Ío݇ýñž4¨øïšsówç«ÚÁÃäk›ÞÛ`]#ɱžÿ˧_Ù@Ó™vEé°1 WÞÖ\# ^.LûÒ®îFÖco$ª”•Æ#Œ³Üö¨Tê³úC†kYÁqÛ7*'‹Ø!Íå[I¹ÙÞiÐÍãÅ=[ ߣsò¹ÞÔpX9¶B‹/éÇÓùÇ¡(‚¡½ó:·l—-Y[ЀŠl¨vOÜ’ÚþP8wñì\½ ‡º*2ÍÏÅŒ 8&58…gÃÕÃRòÔ‘b>šÕM”qÜ·Ö垆¬š™ã}„¢ƒÊº¯åÚœ5(}¡`ƒPHÅGA¯ û·ì¯™`ΨÍ`“užÑs×T;¬’£V!E·ÕÚH¼éþDI Î]{:þ¼a¿$Qm³žG„êঔ¬£*¾†Ôáú© ÙBôÖwíßG ÝEÇgXw«‡˜-¤ç?ž®¾C+`4# To\µWé×Àn"à+3ÒyNÖžÏ(CYAîÊbaüþŃZ%{ãt¬kÝŒ£Í……“ P“Õ'}~Ý`7íHÖÒã[_:>mÿæÃI”ë➪-oÅ«ˆ›mU*ÞÛ…YÞè}œA…vˆñ‰^y ;²t2“׉—q€zñÍÝBÒ[„6óNÓ]½vžÕ«ë-伟­ÙÅ´—1Oà7y]j›–b0É;"¡›GΔXÖÁIõš•Qµ…® ZÐØÃ¹K€€7Üå–b+Ûº"XŸ-½9½Èˆ²˜ÞV¾vØhT_¥Ï¾ ¦0‚®dq‡a¨:Q”­EàÜ“n& A·4*¢ …° 4·Ï&G„–ÝTÀ@ F)Kö,Óω Ål ßÍý| ®*ú¼¸+áÏ\—yàÉ[—¾÷ ë™FÂð¡Ó€;«#„ïùË" $$™×¯GZ)d,È2Kí-–Í)·³ÀuèÉ*¡sÅâµæÄ/ìX·4Iò‰xCôbj¥6‹ùÝCêÁÅ'†?F~|ŠÄ“7•HŠø·l³jlŽD°m„|o{Y—-àˆ…Y•ÎT¿N]&.\®÷ñvÇù*·CxÙâÄœññM§ Zµöä›)@Ÿ!X¦-ÊóÅN?lñ„GJPëDÚÀGTÈ- ½B½Åçqãz«1'©?dÍ8ìJoŽP¦Fs_¹õ™MXV½×Ev[F|ü‹2xM¤3…œÎgBÙ‚ß8°×݉áè½LY€;^Œ¯|ÐÆoѧ“óR§#¶ÒDø³ØÈ²JIõ ‰³-ä:Óîc 46?YA [[Yñ=žXæÏšÇê¡4Î-±±åÜØ@ÀÛùE}c%ÑEÐ8Íþõ‰›F‡u»ƒ8«í{TÌ$ [Vš¤èòõ÷7l»¢X_žø§ºøü⺵¥uWÉu¬fÆfî¯_ܯg.ï€-kç\ý<6B ¿Î`iœõÓsY} l;ÏýïŽD ‚„ù{•l%ún£uR{Žw øîõXµHÛ€s?øo¦þ½ ¿—jÛoÖ l½‹éíV¿O–¼(§ 'Òm¾ZËM–q_WUð©êñš²8µªÅÂ0¦Ç»ýÖµdΗó4V¸kÙM4@‚˜au¼«¼*\Šê.פWÑŸ{Ì¡“kD3C”„›–z¼l¼I1ü®^Ìä9sßo2}ó.g0AÙ'($GG_&)²áuÁKÂß±{†ê¨Øâ¹Ÿ‘µ”ù©c½ÄÈu¢7qí †zНõü¯Ï zŸC:øt9!)5½ŸºËÆÝÍ z)éMÅüD±0qb:bµ›çê`=Ù?±ïó…xr·‚ÊU{I`óx<˜B¼Æ¹‘RÅ%ögolx k¡ºË$ÛÎ0wY¶¿7÷Üž¦sª‘ˆ<<Öân“³"÷LMÆŠþŽ1áQqè1}uÀ'´m{lÚe–‚˜pMæÄ¶>ELT4I‰t{ hlóM',h¬eÞ¢:þ–À¹™¶¶-IÌAUi$̽â¨Î…zã=)­…}\h:Rœ„’rD÷޹÷ÁûuQû-«ux’ºL!„<†zE8öÃ[ |ïägâlº]{œ.TÚ§µ ‘º'd±†íøñ},(–;°ætõa1|è°âmxW-sŠªŒ:´R36{m § œ0†Ñ6+x¨Ún­Öû·A!øÛäIñl‚.\øFzà…ohŸÙ>£Ü[±NT3¶3T¤¿Lƒ1Û9Á¼Tß±ÁƒÔp½cÅ7’«PF#ñC×þ·ÞÃÿúþ~…æ>~§¬ÐŒÈ{!M ¯‰ti–B›Êðƒ;)YÄJÚá¼Zùž¹ø÷eÝÁ*MЋ>HîiŽ›˜ÿvð®áîÏjŽIÞú éœ$ºÝ?9^¢™«€­‘ÖìG2§{ÜÁ3s‡Z¥bYuÃeÔééØZÕ‹½½fäý9µ– ÔŸ‹0ù˜hD=bßMDLJÔùI‡42¯¯½Û:¿urz!èÛ{vº¨fZõ±è¼‚ˆ ¤päx(&»kƒ—Òw-ÊWMïšý”’¯Ö.B—Ê!Æ@·òâ¶\0ƒ7á#óÂFG IŸwLÞ ^àB6ÕJþ/Úÿ„×ïrã„Éð•f=• ˜ã8Í Šª¢¬²¸U0ÜDRWjgcÎþ–ιh®éý<ÙOþÓ°%–õVâ‹®|ÍŠ›“˜¯ë•1Ò«» UÉšÓòm‚dx®WWPPaWÆg ñûHOItî§ò!g\SËìÝ^‚ð©=Í~…Œ–3iC¹Ÿ‚ü²IC‹ð,{ÅÒž:Üøé V1•J Ë“à»/•Z–ô¢nµjZó4…‹"ä\Eû0æ±yz#1"¤Ö?Ïâ³bíÖÌö¿^’WÙVt¤qî÷‚ ‹ÜÈ^M¡‰Þ‡ã$ªg‚ÇÌ3*ãÌvIó_CùèåOÑá`4®¬CÏÔ¶æùð—R%6¶ÑrŸ‰a¾__¶±E- „l0ºSs"|èÖ-ø¡–ÎM]µý/!Â)OŽÃwòs±,Û{†õ@aŠ-‚$Zм^þ+Û¢+E:J  °œQ¬é3d’=êßá]›ökk8Çè{a¸Á%Å@ÄXäu G‘©-Ê´x;D zqQßì®4L2®‰ºmÁÄr>§T]®žŠÈ¢Á8°$'$6i!fSž™@rwão’ê@x¶³Œl+\m©5çpK†Ë5(*UÕ$hÅç·ûhIû•ÁAÆŠ™ú2Qª‚˜isñ£}@o§U;þÆ>„h XpE‰ÅÒÈæœ’$A×B =í£˜®é Ø§˜‰Ä ,dvõìñy]kñ`}5þÒ0¼ÍBãb£9=‡îÔ”Mßo@:éÛ÷ä‰óÖ`$X5-ñT~MŽ@•F~¼˜èXAÓah•\ÐR|^üm¨’)EeˆJúóÈ„RbL×p¹jÁ «¦`aýß8΀0qîs ;ž,ZïxsVAä7µS£ Ò>¹›ý஡eS; l’¥û?N´…y“l.ýàÌ.ø¯“ÈÞØš¸‰a¢HÍ|܇ý½W}G‚hˆeø]%RÓ3¹£Ûe¾Ö3Ë7ü*=eJ×Îîä î&›h·†¥šú4í£ Ž[é9–3[R´n:9qÆI¼)]aßPäyÛõ@о¦k×Y¡N“TîD5/«ÌÏܶeÞ]wÁÞÝÒÉ3âä—±®rñä“iz³T˜W“s,úõùêÛ×5qo—Ÿt=î¤k°4oþ5Ï„!:Zv…Ž23 &ÇEÄ­2;ù§hwwV6ÆõH²%×Õ%ð§e\£¶7dеL:E”œk™Y°%b§Á oÁª"+§<¢¼D”Hˆ!P=áÒ¶XŸÂŸO1’KÚè/²ì ’¦Ó€Õž«C0Suû´=6Õ`ÏyBá( b€G–º™`½‡äh\J#‡ Ly9"©¸aì5<+YÊ*³q€¨>…ìNÃ/×0¡ªŽGùcB™âZžz¢ipÊïu-Oeu•ß ˆœ•¿W¸6§1 Â1Ò,¾[[ʦDÍ\§.e.Ã϶3.ùÜŒf‰ÖïOLûCÛhÔÄÕ!¹Ø2ã§Ö‡¸º‘‹À{³®sïÛ†ãÉmq\Ð:¶iŽö "Ç3a„¿ÁÄê4LàОa5“„ÓÙEd>ggÀÙ¬%—¹‘4T]ðWâ_™wj#)E‹ à·¢;Í#Û¥jG“fmïÜÁôuFêa©õ41:õoÈW ±NŠæQÌ’º µ$Ž@ìÒò®v/„îð׉U¦»éòA…´ÅAMî”ï/yíƒNâ R 5ýçÄýÄ+/H&ÂF ã#jæµå‹×iQ  B6ÕÈ!`ë!‹2ŠýZà%ØØ¢M˜¤ÁDhüHžŽþŠ‹HÁqì>Œíݧkôe3Jö2—å»i_B<ÁÝLsN“6be&7Û­jŽ´iô¨D ~c®¿;!»ï±–fé¶õ˜ àv’:3™^…äT\o—·’3Û¤ÔÑ‹‚F4ã ,Y›ŒLBbûs|ï'æÆR„Fóyêî|5öwMi{7ÖX€-‘“F‚ή”.šÆqî·ë)'™4^îQ—¡P)D ÉŒ‹G±šb)‹!ŠƒôN´&)]W(BrÕ;¯0äÙUŠ6+¢–‡ðƒ@»¾7?gíá§DAFÉv›Aw}h~bÃqЏ’H/VÝòNôÛ|²§¡VÂÂŽùâ]Jϲ>‹Ö-’éô7)¶°q›Âsƒà`a'IÕd¢Bw0‰  ¯ÈG!Vm>Ø5=hõ¸Ðvgã˜&˜ìL׊ÑZÍT]®äU6Ç¢3ÕC€ÄV˜OýÙ’¢…²îëÐV9,J"4tsÈ…a"PU’µ"¹œ‰5lÕ3ノ1"Ú¼@@ &„`ƒAÙZ¨mÍ|+æã$ïñõy »î&Š¡—+Mº ä®GKGáÁãdŸí ~‰‡ëÃkÄÑhNsÔ"1èí¯@u·Û({@ ùs]ªþ±êúC˜•t;CI’}v´:.Q9}ö>ì-ÕÖb »k›¸ûg¾íø$ÄèÊÄ´Ç\|à-e)Ýåµ_«äZ¶Á ½^ÏÜÐ d3 ˻ΠJÉ#ä ¨ïÚ2 àŠëýåö ëMöägˆ¬P s`é3Z>¸¼ÂíY‡‡Gä¼U3Nçü±?ÓÇ-Ûz„õ$\‹qU!ž´¯?á_³:¬üÏè—F‘o§Nމú’nÉΗwôZ’¾Š±“К} ôÆCP´'Ú1Û>Éø‡V‹ôb7ÅÐxÃ&¹fmÉre‚²Z¼Y%:ºæ5QÑ»àB}Lz*¸Yw3 ]*íŒ"w€þ[:›åá!þm¾› Ì¡?\”Å8½,ÀàËÖ×!·j¯²}š[€Ll‡ÌGNª›@Ž›K RêKþpŠ£þo PÊÓ¤ÀþS$Nc¸Ó0fN *m|Æû¿'kt»$yž^¹Ñ=øýë¹ÑÌÑf¬B.,ŠöMÆÅ%’tÞÊn6ù?š«ŠVW¨·*FÿõaSCdÔ²/Ç ¾ú±kÕ¼$*£ë~§ ‹Ÿµtiú¥<˘Bñä©$0hÀ"s;%²¿Ó)Êý¥±wž&•`€Y~Ä õI“~ç i¥=¤õîTò#<Â-ó.8õëKA¡ô9ÚI Äu@µ5È;¢‰Fë4 DN…Ãb>&>ä®Ðy®j›œ{­îÅ—E>'TgâÍþi徑2ë¤Ä«ßÿ µdS †‘WÖ,:]Ó>TëžU¢4h¢¢Ž¯Ög:.PŠÔ…í2r%X¢è³µÂíSŘ³‡ Ò5Â'âÏ–nh¨™ôPßǪ<Ÿ$U¨8ˆïÑç”úÛØÛGÆÛ´[B¶g“Ybp:ËA –,a݆üN<×_ð ¢HbÛ äGmÍÂ0дÀÒ:¢Vé•K›3¨P‰ʘµ"·Äª*©ÿ;Òi¾Œ£”b$ü¶cÈ о“´NŽ÷±¶Ñj[ÚÕP¹¦eΠë«ó¬©ÕY½§ªj4Ì“3Dú¼ÌÙÊ]ÞåôC¨P5¯ºÜÏøùX™‹qk:L¹[Ï6¯˜B85º‡êœÇÚÁyS2´G9àÊiEÏÙ¨ç ÷@‘¯ÆÎc'“"e£ÿ^Ì­ß„oïêÅ>Î’Zl&öüÛ7ƒÖ¤kç¡ôSG[§PC{ÂåÔÊ‹¦›~ö®ké?%9¥†Ê1G·æƒ°¤è(«>¬^"™‰$ºG]øBTŒ¯±Ýd r9[TôKh#™Ä8ÒüÙ»Û:ÊkÿEr6Ú Ë9ìàéât6r’‚ww²4ëí±Q 4Gë‹ô“ŽÿÈÏSôû§«¥0¬ûÚ{Í}ß7ª¤ZURŠZ>Ьªœøìq"äÍ_I’Èfnp›_~ùæáZÙ‡*ž„^e£#Ùû‚Ǩ|¥ãBŽôq(jAÜù~§ãàêll†³ý!âð@f…¾²Ò}êxK…—ª³É{£³f§?7æF/ü½(IDðià Ø‡ïÅÏ o^ÍL>·í‚5©ér4!úw1ìÉ¡þÇæ’ÛI@^°9¢å;MÇrT@ÿ1v]A¼ó|ïÄàÕt©ßôC‰³NGˆÿ%-Ã×e€œfhI‰=e%D+™”øxÕðZ!«/΂[H™]öoœpKˆ´gë•ÅlUN»¦é”š'Âhƒì Œ¤2WÌÎžŽ Fça‚®U˜)•3’sí[׬ýÈ®öauö™+žUHzzÛT’#ˆMJ@‹Ÿ÷¡fV\Ç;¡ýÊ>/Ñ3­À¥ž8ä~{Ä+÷…˜q€Ë.wì–"*šŠaTäu{à_;z½Ë–/ Ö̓€?Ÿ@šõs1¹ê@ ¹#â3î:ºÑ¿ fÆv:Ѫ5:.b®þ-në·¸×xB…–¯SYéͲâ@3Ô²ºìÅ×ñ}–=Ç^]Ðñj¡æ-|rjH Dø§N&o©¼øOqìu¼xì¨ñˆé3<­”IÆæ8h¿æ†½¯|2½®_×=[±Ãb1T“UT09`œÔ jmÈÈ×.Œþêâ¾d^ ?r+\µê¢‚ªké«ýÝ,ÅOo©~„ÃÀ‹Õ1›Õü@‚’c·®2eéÃGƒ=Œ¯á¶QïÂ7[…Gó+з/„£ÃêY,“äzàÄÖQ J²ŽJ; ¸ 行¾sˆ7º®Ö˜hó+MU‡pßpÒ±Gc‚Px/~ƒÿGŸ{Jå\›€°^Ÿr%óW€`T°ªyž31×èTØb$Â!õ~–[ ©ƒýÙ–^%œ`DbÔõv| ×Ë~ «LA[E¹ê&ci—g~™öR¶XŸ_ „•Ø?jâ°(®*â|WyædŽ¥f" D75eyŽ&£oâfßÑÍ)úó?ö«Íh=µA:ñþpú7[œgî¦G{ÌøÉÁj²BÒ¨áÓÒvRW£k)hþrÂ_qmèÀ ü/f-^€ú°€w69ˆ½^-G¦¾(KõBR£ZV@ÿ‰¤ñçË$`Ø•Nm1¬8)K; ðKŽG—Y[F¡=qæ%a ãÊvÁÕèl[}®œú ò¨]ƒkhŠí ©¨šrá¬ìQ¾´$kŒ $¼ïx¼Ì $ c^I¨{Úï «W‰w®"‡RÖ®¶‚Bm×ê…2.Î^UBó*½rMÈè᫈k0øOþ5õ‰AX Ž_»¯–ÓM[5N’o[Ås¿½»XËf@ 4ϱRïÿ)´6köž;7„9hCóJ7ñÁ÷¡ÔVÒ¡°¿VG±¸éƆÄ"<½p•Nd4 x“O4^ÞRì»éH°*ùio‰5ýH{sÄŽÕIüº8švÒ–AЃ&h"|Í£«eí†HÕíOû>¸« °Éiúl6'O¹þ& Œó”„­`Øä8…É‚l¿$f1} ¡¥Øã× v_«$“ÔòÅÞ›€±Õ‡ÕO–ÙÔ(ëAÀIVÇ"ÏI‰(é?0_Üme'Ïóãy‘‹Htµ$"š)zþïÌuf 7†«•Žlƒ{2xŒ+/y¨>Ñ3zí£l>Miâ/ñF®[¿í‡,¥Å÷­ûEŸW¯ÙN­µ÷ýËhÈe¤rU$—JKNþ›`?T”ŒM4Ð{7ifH]Û±áN„åóšs¿“óÅêu\lsñ±þ”½Þ¿|uè±gó³Áp÷.Cšîÿ+\nKÏ7ãJ$)6×W¶²ú±ÈeZ¿q25šåFúØ,«~åUJ®MÍ8'ß…á(6ÀäÁÊ™·Ö? '?šö˜•‹˜¼|í~k~ ±5Òo£]á`r1K#Ÿ,>Ì j§jå¼-í_ªJ›šâþ³Á=P{ÌÌŠÁ÷×®DÀ·ðM¿VlÓ8‹y‡Iߨ7Ç´QäÍšËp]¸\|íoL¿Ó¸c=óýXi••™Øv<(;5J›ÇzèdïÅ×T½Î±u§oV†OÀ¼8³f­MQ8?*"H•=”4%àDf!Þl"%¯ ¼¿c«µæê.ûŽkîE,PoûXöMÞZ¨•Ú,(ÒoÈÍÇËd€·ˆéG eP1Ž,Ð!'°”cÑü3¢¡ iÌ9íCÿñg¦U‹(Æ$¿•¿èýw;Ü4^å,zãwúW^K‹G6zj¥0YcfÙ=iÉ;(ðc¨d%~(ÿã{®w»â¼®P5àþ¾M—0d×ðÒ·š(ü²S ½B% ÐËœ$+!éBþ­sÁ,o8Š¡CsLhüÆyn?“=…™z4}nek«l7zȾIr¸ _¼LŽ›»l¹é<ï‡'Ùvu8©úϺ`(?fS¹¢öA“ˆœ¿ðio“úÛì2qwu¯WÑ¡i…± R«[yF\ ¤ðløoa&ÞŠ žm•T8:¹Po…IA©Â ‹°‘·jôöuk”Hc%X3þ¸ú »Èý×ô®m_ØŽF)†ã?´ÌAß½»‘¬Ñãê_ëÝø…ñð {ÙÜgäœ]ºý‰²å®Ú&r2æþÓWÑ«&¿ÉÙîŒÆQ êà(¸œ àÚè-t:fÁ”dSø«}‰0C±ásQI’±Ug!‰Bh;,cDû<…TR(òYÜ÷‰r•íïŲÉeçö˜_Øì ÕÔ¤KJßô‹køéSê˜b¸8ñOj~q$$ Iõa6Sÿ E—Ý—fp‡{ ^Jï×qÌaxÖ À!ÿ›ª³[Æ!1ÇèË"éå¿"R_âù$ó¹ (•BþìYØÃµ¤îF€_²Ñ%VÏ}ÍÎTRõ Ú¹ŸäN2®ˆ¬B¦+pK®à"E ¦¨ê4 ;aˆËõŽËsù¦![ÚHä(p1fk-&|sñ®-0h}nE"|HzNª&ÈÙWB›M©%]ïÊâ:Y@Xi°å³„¶ØR-;ƒZ¼QIåæ›Îó‡c²¼³K¯ ©ã ØúØô[˜ëyeý,ø(Ä’•¢ž7oð$xD-&úÜ ›HòYñÒ\ÿ3´žsGø*jk.€Ym &gVn,›3P’HFFx×x¼&fÝfd bi²®üQàž‚µAQ6Ü¢þJø¥Ýe'b¬rkràɅ§îÒôX¥‘íé#£m©› ðíŒØ~¿Rro,`©Ÿ(a—Q¶1« } ˆÃ6"9ÿ–zëËÉ“BÉzõäTà¢õC ~¾3¸GÀi•Z‚.ø&òV}Ã+ÿ#ùýo@ûžb\ΚÙ=¼ãã/8F³ÂH¿€Ó¨L¨ct‰F=nƒ5r]óñ¸û÷jw~ýÛ‚‡ KÃ*¸Q…XP­4A5ª›¬ KG­®÷`bÊŸ2*vªJ° ÊTj‹O^Í5vÅkÞàCÛ‹ûÍT‘¿Ê²£$>_s¸š)÷$"‚Ç±É ·—@;\)üFI;ãIŸ¼atÿs½ä}>rj3‘H•qÇyp”8(¥údlÑ5‘ #‘ýv–âÉÚÅ_tœ·M!ÓɪÐp1¼*r€úˆ¾­?gj»gÿ«g {wy£|xÉž —º¸×N<Y£»ý©g[ð±os#¾K"_Š–Z秊ֲ²er¯(ëC$¹!eáÈñ%È#› ab’2£›!ûnÔ‡ :F p¨ûô7!›XÒ«28oøù‰ƒ»CX^ÂÜ®3®Á€“l0x¥€šnáÇú8)L-LÁþ3¤Ý__¢Æ¾=?C¾¿‘ÅÎmg§<Ÿú]Á«p›²Â΂I¢¦ëòW1‡´A'®—˜Þ¦êÞ»vúë"‹3qQ#2*Üñ5;IìGEú©Tˆåî|ímŽ_¯±ëËÉ„£ Yy†=ßÞ°))›Ñ~ºêI˜Zoë2ŒMÒãš÷­÷æ¯Ç ‡´±Ço9|W[zÈéY˜Â;êy«.Jùï`‘ªø{ª~4¤>´§¤åùrÎÜ’¢VãïV¶Ì:œq%ñùÈw¬* àâŒtÐñyø»y§—<6·ªpÃYoC]s KÅX+yZ—v˵\L.Þƒìæµb˔½}Iù¹ÜhïIñÎ’£´œ'ØÂY5†c ÛN\À©Fì/¡ô‘Ì¡¹Zƒƒ1i^…‹PVc/;bãÄ®ÊéH·¾dz:a(íË€+¥Ðó %˜Yêt¦çÔ@÷ÔR±ú5 ¨ùËœ­Àâa·¿N… ÔfĨBšÄ5\dû#8Î<Û©©‰X#«¿ÃŸ^l/=404—` ™¡!á+á¹¶GsÿbÉŸ®þ@sWÝ.QÔ7ÕHM²Œ@w.nËu¬z·¡éñÝÕxp¶ÝCÙÄR?­r”¶ 9vvˆqg ÷S€JžŒÛc?„tžðZÙuž`Xén„îkH ÿÀ·©PÄ ‰^y#¶åíêAï Œu´_[Pðk¤ž"Fñðbk_*V,ý‰åDŽQ5d @<«wú¾g,¢a§ˆàŽÐðA~‡Q/1—÷BìSŽI¹`+txp ex•¯}Íû]3àÔQºl¦PŠ8˜¸ÀÍôà–à»¶ºšÄ¹„44¸2dñè×ðÿ~…A½v ‘÷¦ ±wÃ^õ"›YþAéñˆ¸Ûyœù:`\d*2Îd2w±ÿ1YZFÚ¾3œ'Æ Ävs†›c’L[j½F ,š[g Så™Ö¥×¬ûo(x’_£ÀûW¼æÑw‡©­<uæ@\~Pyi¡TÚl…¤MQò±j¸@ó™`žÑ¯ÂaÌ@ i•¹†Ìã„ôòm‚µ¹öß xÑz>à«^j7œ„âAzíÀM…ûîO­¤p«&–tjIšF>F;ðÁ¸ÌdåÁêÂ?™–Hø ¹6 þÔ9ƒšzE"ÀäÁ icÊâÅdš‘[Þ3´ÌróØÔÎv ØÁ¾„TFY!2‚ذ씕 Œ@ø”ÜO DìQB"Úá©DS¯uÀ¡ÈíÔØ`=°7ÒNÖ<î¼ÙOÙ+-·ý.¶t©RýêEâýÇ8ÜÃÿò…Þ•¹ôçð«+rWáž{õ³ŒŽÕN=”©d.rÊS¿O¬ýº2ÛDFP¸­-÷DÎfç‚%)¬øt;Üñ•%#;Üncñ¯2äo–`Ý]e´<Ï/þZ‘áŸÆhZPSÎ8Ì{O+–ÝœTUBfŠÀ¸Û³`Ê#žÑÔÐ.sØì®˜jÏW°+m—Þc™óø®ZîS2d£UžÍ <ÈQV^øÛ­Ž`µ l„åZuDå*ë¢óÕÑ’ÉúPï ô@9²ç >ÆLvœnSӚƄfkbr÷n&ãGÊãû‡aò”H¤»âuM3õ£ä9ºÌÚ_ߟ½›ß_}ÊYíB]¯žø·D^ݾaèSŸ kn{×´Q…ª•JŠ?P-Tо˜ ù¸þ½÷Ë=á„æÎXs2H¦Á…PL=Ÿ}gºà•Þ´0Ö{Ê®Óbƒ)j­á¨õ>­R¡«w¹3ß}te¾¡èeåÓpF"÷Øëí“ã·ÇƒÇœöâ¶¥Ùœ(”¤Œ£$$9<ærE¾u?ç-Ù¤†Zçd”zñ8èÝ/BÍ»0Šõì|D²‰‚²€°£Áb€_ÌÓd¿È±ŸcŒ¦~BÿÑ©o}0dÆx%"0½ ·¡Ž;úd úá]²¹eìõjˆ¾ ƒ®H̯\Pm?~R„x™VUz˜L˜iig×eõ3MTôŠ ü^àl~•k ›·)•¨ºþP÷Çœ“Rn³T Wµƒó?9”0Ö{ª©£ìYKû)cL®`Àl¨Ñ»þOŠ­‚ö:+g!T0§ãûf×5«Þøf;GßøÍT¤FÖè‹„V`“RпÀ]>0(sCêä¦ÕÆ}Ê@¡aGX†Ã0I"gÓTá´úû_\ ,„›ÅUÂó4>ˆ'yç=ËB‡8lÍè’î *ǨáPäÐÁL„_L³t™tÝ,ý8?åጳ¡a½Ñ¿BY^¿öYWV¼C5&iµñ¡†}Ü„Åñ€+ãAŸ£g©SéÌW+ÑǶҭ"-ݪEYê¶W(8×Ï¢¯æÃktó%©Zëéå°ŠŒw&!³™BøÒ1¤²Ò ³ãDzáhî.!(Zé6L@x¹Ëj5Ê¥æé–&¡•…)vÑm_  øªdM®@7Ãtîv¡É¿ž7i‹Ñ¼ó ?Ie©‚É£¬P¬¸âkð+ÑºËÆh¦‡Ä’ûB܇úl ¼¶°‡ùûãoXʧ›<`´ ÁK*†j%î_óÖS±¨tÖ™/àD 'Η۫¸,¹žø—•ÚjýH“æ Š‘_ŸÞ‘·K+ -ùŠøF6Úšêõ¢ÐÓ£ÊÐníP)¸zQ–@_’€Ê†Éb˜¾gª<œ®žî |*îA“ó#úÜ(ÞÆé†2›9.MëTÚ¬¦é‹sÆŠ5ç]z¼âé4\À>â%§hý+‹Hvß+ #>…úÀy“ùI·žŠÕÖ™ÔpÇBm ñhBÖyÚ{`¨05ŒÉßêt~XÕ^¾VSh NH œÌlâUŠŸ]Øæ¶ýF×ùã.ãPQÍ©hfCê¿óJ¡­ZÑ…Ýw-¬áÃ@—f»ü޽zæ‘J6²‹L]gÞ¢… ÷Ycð(¥›Á šÊÒð ³úô‹ ¡îq×2¤øõ|·ZJ0ŽÎζíó…Ý…­û†G ˜«ðмqQ;Ja¨P5~ @̼ª‹ÔçÛªKVRvi³•¦\7úhÞ”U_ò÷%"eìés^©þ¥aJËæ¬;âp'Ÿ¶È2ÏD±cqSòž'*KT?²GÛŽJšƒ ÔX›ß=‚DÓÅ4\Á¼ÉmHm# P—úÝO³œÜŸc¬„Š®³s­‚|Jú[Ö€P†ë.íþ"ƒµÑÈ’mR`o;ïÔ‚>mC´Uùsæ«ØÖ:KkPèS–ÇÒ‰Ò…dÉÌw‡ø´¶¿ÅJ•sIÆL#¸¬Î[©• "ðw°=ºô˜L:Š?Æõîõgte)5®Ëù#^e‰)›>f=V²d_/æ*6Z-…óÊ¥ü_Vîk@‚Z»½»$3(Æ$Âs(–íG/[íVÛ”Ðw¨…[³[]GA”]N nmàÔ°÷F÷])»žó·jY¡-eDº¤™R? Ö)aQDŸ¥·—IP“C72ëC‡;Vº´l¶Ë­þ+åúG®6leg;N'Â9o{‘Ç1ÏaËT¸N þ'‡gh¬$…–•QÖìY’–oQ:ø¡œƒÐ>’µD›Ë6§¨|Ø$…Ñ tnƒ1?é›}œë<âáóZOõwHŠç_båšd/Ì•¦Å S©áÈñËjÜWíj`̉ßj3//kú :†½és5ŸgîCtiwUí O%c´Nž'êñÀ6rŸ9ÐÜéÐÛ’> ÕB½e;J\…W5Ûä„‹«ÍÙ!pT¾&u㞌)×w˜m{ ×`ýîl«eéabÝo4®¦Œ= ö‰¨z¶W,ÅJ/oZY}bsb1’ù¿²^ðÓƒ¶ÐŠB´”v†b,L¾W31_^Ýíçì¼ÙÇÐîáT¹1ŽÍ¯Á?ù1‹¾‚²Î¥’·”îlÝ6·]nNãÄuŠbÔüøbüÆ ¯ï%«ùÐÊØñxЉa£Îú²î˲‘ñMûAŽ:ù~Túj>^«XøB4áîðþo_‹D’ ™¿²¸à< ùðZéjµ'hô߿רéÉ}wÚ¬A¨‰Øb%Lš‹:Ë:Ç6Ë£¹Ýl%‚œmü`•†ä=pr•…aQìÀ@¹í;@2¨} ß´å\Ð7tÕþí°êJCÒÜgµåÐ÷å‡Q¹ :ƒÏlËŸ8ž=lêEm…œ‡zÖ…ëÉï|aãQrž/ª,ö¢Uá;9 zxH“¿§\”,Ÿ!]>üÙè òXƒAã®ûz>~¥j ,nÀéIoÖ¢žƒš~…ral„Ù–¬.Õ6Ϙÿ¤<Óö¦}„l_êkd0ˆ=m’}b¦ø0ÝÿÚ$Ön<ÀÙ,»›úx/cŒ«ÄŠ\}3CRµ®s>gm:“ƒ’íù½@c'å(F =g{v@hŸí*Áؽeâ´Æ¿ÛãzT,ÏÖ–ñó`ˆ‹‹æ{‚jB„ýÿúÒ¯ëÿûÆ%^² 15ìf©C Ü¢¶ § ñË÷:B™›†i¥sî¢Ûºhä-ä]"[rÓÕ¡®ÝÖx²»³7^òÙvü¬$¤´Øk„¹>ÇGÙ! µ*íWF%•W{úeTÈT¬’åê¡j Ñ„ù@1ÒgvKìƒsÙfͲ ¤±ç§MPº––Ëù¾~h¿fòKÓ‰Øqªlk?¶4‚3Ýí< boÞi{½e&kjXãå"7™ zéNæFÃÎÿ^$®A K ™Ëº8ÝBž&£¹eòÀŒˆG‰“9 d‡s“õéa(rθÇ1*š²¥˜—ÔÞhƒ7ÃÿˆŸ™É\úǪ÷¶F©c±ÏZ›ýzXDŽgÒ Í”i¤°}À¼@ž8ò´5Xþ@üªVÆÚH†CÕY­üê!u…cmÁ,.P ‘£î´éÄ?Žø8[y’a ¡…½!¦ß^¨þÚ AßAV—Às«‰*½ÍÀ_—î’ïèªdàÓ¦7H8­¨d˜“cQî1댳ë±iJñPzU@ 0ˆÙ f‰ùš ³Gꉋñô³ØÊ®qÖ êõrÊsïÍùZ€ µÞG’OdB¡p#•sЄwй¤ÓCË^ïB÷c»/v³N §ü ÙìúÕ?{ÑšƒsÌ‹Í2¶œB­RܤçHܤ›êû¾ <ê–Evy$†o·ÅñĬ2IÈRó˜I¶€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €t1lib-5.1.2/Fonts/type1/eufm10.pfb0000644000175000001440000005556010733501627015221 0ustar rmzusers€ %!FontType1-1.0: eufm10 1.2/19-Jan-95 %%VMusage: 24418 24670 % T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved. 12 dict begin /FontInfo 9 dict dup begin /version (1.2/19-Jan-95) readonly def /Notice (Copyright \(C\) 1994, 1995, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-C.) readonly def /FullName (eufm10) readonly def /FamilyName (eufm10) readonly def /Weight (Regular) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -133 def /UnderlineThickness 20 def end readonly def /FontName /eufm10 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 32 /space put dup 33 /exclam put dup 38 /ampersand put dup 39 /quotesingle put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /minus put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 93 /bracketright put dup 94 /asciicircum put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 125 /quotedbl put dup 160 /hardspace put dup 161 /dadv put dup 162 /dalt put dup 163 /fnos put dup 164 /falt put dup 165 /galt put dup 166 /kalt put dup 167 /talt put dup 168 /ualt put dup 181 /quoteleft put dup 182 /quoteright put dup 196 /onealt put dup dup 161 10 getinterval 0 exch putinterval dup dup 173 23 getinterval 10 exch putinterval dup dup 127 exch 196 get put readonly def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [-26 -224 1054 740] readonly def /UniqueID 4702319 def /StrokeWidth 0 def currentdict end currentfile eexec €EO›œ‡Ûƒû̓5°»9Îð¯dð€³z¼¡4nëÐÔ^ÖÿG(ûËàSïxUõ!€ˆˆª1¨MK΃—¹ 8£"C¬ ²ÑÛ”· hK“Gð&(c§^mÃoøGIÂç`iN€¸ŒÒËËzÖÕK ÉFÄi*õdÚ~XçºÙST¹Iü.ŸÒüP‹Ä y©¢ÿipPK,Kz®ò¯†j]ª~´Õ`IP?6–2¶lzœ3qPHàßYoŒØB6†•Å*/·$~ŽËí홆€ )ìÆÎÙu‚m¡#›°<,ku>-µKˆ˜‘E×dÄu“ú®¯Ù>¶QFï)ëΞ›úÚ~CÅGî‡ôhsÏE=”VaKzýªº×oíÊ@iô„‚R¯ô]¢5Ui¤tï–Úˆœñª›|¹ÞÉHDk/Ñëêª?*Uqè±×¤M…K&)Fy<>B0-\:‡qôŽÉ‹I¤ØÁh•î¶œf¼-’Á{Kó }f%žrª=dÇZÏ t×b9yÀq ÀûÁ_IO»]0~§Ö7µT~Ç}¬’`‰:[gùÃá>)lÉaG½‚aó†ÛAãzó€Ò*«3ý#>½Ç~^¹Z%jžYøî'« ‚IÞˆõ7£-7yÒH€j?ާ:­Þ°V%ÎQ;][ƒQ_y®îÝ!ØÚ©Å2‰(‘¥·ÔÎvWºþÆs1'’‚±d3û8 Ø‚hV¾(^‡Ì@ª9@0z¾ãÀ _º`”˜Ïî1)(5ŸauSDlí'Z2¶¬Y ©€8n„윦üBJ± 4ŒUH¨õkfJߨísÜÒNI®›6‹àô<ÍõÊFÀ0ȨEÍâÛÈ5Qca@£òknØÆ’lðR¿(à3¤‚sÌ“¼µÅCWx&ŸÐi³Öuý•í+=¡töù?Xf:ÃR£¯ÆîÙžhñ•ƒíÊ…#[ a1Ø}ÖÕ\­5Rh¾I ˆ\.j O*{§úpX_ÝNɘ]ZÑ)6îé^Œ¡vª5—b&ëX˜Œ1"ä©HÝÔ“]}¤_â!‡~§ð õåà•oÖǪI–’PÿlƒÄAµT¤AZ†*Cþ/EŒÈ8õ‚èØÒBW~Í{!Å,›à‘"a—Â"·þO.‚ªõÅè­ãiÚ{ZGë¯à\s19xòÀÝ/à÷~†Ãf_½'¤)Ý­PMÙñìkSaÊš¿œte{ÆUÁ®%Ôåˆ0*â­Òd ‘ÆgQu%.M*Íšúb¬WTÔëà´mþŽG°—„,Ý¿t +ß¶oí§p~Ç]MÈbn&ï‡|bÇ%è·FFÿp6ƒ _·\ˆCv~È*×”­ŠW˜„;~©YOœ¼?Ñj›TKiuGµ‹‚_és7¾LmÍFã=ÿãÝzåxÀ´ ­<¾ hÜ–„-§5ñôJk×éïˆu ›±q]Œ¼8zzÈÅ©D|¬†ÎbVò”>†Ävº¾Rææêçq}Hv ²A:æà¿&Sp%,oqÕ+R9¬ÙRMç=‚›KËÎYμê [»ùf§¾’šN)oÙë4mÔgä {Øå=zBM+¤è¾‚õ~£u~?v²®m1CèfT?·G/Ú‰Ó6o àÃ]Ô1*f(°@Á¨´}îÒŸj{ûÌîZr(–i5½MÜõ»ÏèÁÌŽho!ÿ¯bÙß!éîÃ=LžÒ7Ù Ù*–•„Eë¦Q1$ .ª.wä¼é´5VCï:’ mip~¼çcW‹;Ýwü°í#Ìq¿°³ãna§'ÇÈøI6E‹Ó[E<ÝÀy`SkJÁ6–{G³|z–0žÁæ-JëQ/›[•íjŠ_üƒ},æ^þm>|ó¹SÔ{—P íÈÎR—4Fªeæ­ ‚¹ë<„\œz‰m¿zR³ÑT¦"F[˶‹Å~ ?³?ÆhgL´wæãaá+òƒt~QmMˆáUîÓ Û¨Mp@’^P&†ƒ¼CFzû:ST²o¯/q_«o/k¥·¤žjDí>>Õ¥AáÜé¯#iIµÑ-HßË­Å]b\^˜"èÞzÔ̹6üôÂF°æØ©3v¯Có©Ör¼”)VÒ‰ þµzV™*F'Û_w`gQ`ÂÁ_º:·uHɪ÷ܬzÈ'^ª‹þŸ•;áׂLl 6‡[³ô(¢ŽÊ1r£ž‹ž{mp ‰jï¤Ü!ÙÅûÓÁ#Üt‰riÇ%¹ý›ÌýÄsä Žµå…Ýp øÆ4-;ˆž;n\ÊA)“´½³[%—¿8±ˆYDªÂ>x#áŸ:9ùÃÓˆdIt/úl¹ÝØQÌa[  »¼Ì‘ ÃõzmÞŽß²9§5X$z'§%ÞÕzv85ãÀNãúá^yFa6”*»$p¼ŽŠ+ŒOÞ[ü\óWjcº\jT÷&×y„©¦S* ~·>­ Û•”®œ>¬Õ! ´ÐÜ¥,`ËËå/2íòš”V ¶DóYŒÜ"ù ª–¾Ø,ÇÀõ"`neöûœæ>NñHƒé|€z7Ù©á»Wq@È(äL¿¨l åûØ#œ\êåÊ­b”+Ž"»ö`5%(›E¸_@ZÛáíð îpäϹð·ó^pá¾ ¨~Ü#¸•ð„…ï_=`ØÅDí1ÙWfˆ\X=³BOß%°€­ðÚ¹ N¯ÊÍZÜØÛ†øª‘`ªÌz„jÙ|R»ÁqP¼¶¼/#êXêÉ—Iÿp†?tpv±¼ÝA ò/°po0åsòúŽ ðÄp‡ñä*§wc#š†¤£°€Fn74Wº¼‘Š¿¦(eŒ Ç0¨.çò–ÀçÁN {[úNsP˜ŸÞѹ>÷ô0Å´s¿”ÍÔ0g-•G¸º¾:é^ïÓº­ô- ¡¥“¥4>ƒÞ$E$¡´¹$ý•j LêF-»ŸËyö{eE)Dµv,\^Ú‚|Íkç«.Ö€c%!bf̵3G v잌+K VÎAI€¯çÓ×dÞLªŽÆ‡ )±s‰vq=Æhö¬·{+w¶Fó7‚}ñ9”ß+~ðX{¥Q#4z¥j€SµVÚ8ޏ¢_æ£K t%Ëp_Ý”_«iôõÛ¦ÔÃ=HëÅ(í Ù^‘5ã%Þr·ž¾ÆdãZ­–´ Ùe¢›ù`Y0û6ˆUÒ;{)ØoRÁú“Ô¬{ä4ÂÎçÙ½H‹ÓfèQ¡R_i¡tȱØo~ õAE‘Ò7`»SÌL]‰Ä¹ÕwÑlÜ?·¡Ñ¸Á/¥²@|Òºø%_|l¥ÎLŽÎ{°ØÑ¢‡èõuæ+ 'Iˆ,É`È&˨³C~NIy.ãæãpˆ~߸÷ÞÛ}d¹‚©ÉmNáw½eø¡‰ÙŽü®céµ(\£ñÎ ø?ë ©ÇÝ×Òút¤ø“¹*³æL'»†w:i{÷s!â”ltÌ5Å­ãØ{žòH¿saœ v9¤­{Ÿ8LÇÆA›]MùúÅ–¤7-NÍY *"³Â€Ó ˆm¿Ð8(Ƴä+‡¶à‹yÜÈ»œ!Ò¦~׋ÙLƒ’ynŽ4Žã;ËGG\>¦5¤b¢:œû Š ‹ W)\äÜËœäR«‘̃µ)!†´>ÆÒÉ~8LãX:cIéåÀ6Ò¿@•nŸ¶÷437Löó½áÑçfUs*ƒ )¤©šæœîA;îµ"ëGÓµ»äkÐR!bƒêG|E¯îÖeuåÀb«†çád¾ú+>/óRØ»»,-m)ÆëE&ÉÕÜ1dA$SÀó(¯6µ—KÊk·,^•Òv~)>$ííLa1ÈbøƒË1^›ü Ž’Ö°³è´5t¿óL=Ä£“øšÞº„\%^ýs,×zí²ºäMÅ µI”™¡¿vç,ºö›[-\è0 ·ÆÐ4žSï·²ì:_ݦ®~ƒVT£µ­2àXª]ÄY/7ÇxË"ÄQ²ÿ@"MA=æfæ…-M*_‰R¨ ûj\dÌ,×UþXÂŧìú°5Þfñ›ÔÙ÷µç ,5ÍÞ *-û_Ùo«ùŒ¼•¼[©*ÖÖÞ<…ö¦Y¾ÿDzU“'A½á_w̯{û?9sà ±C#Døk\ºìlõ„!8T¼ç$½Þ¬ª¸ÑŠåžõ­!ñ©9ŸDQNkžˆ’8˜)Ž` ¯feëyÙúÕ„ö$€Zýææ†pGÆÂЖ¥,ê·e#ò •è«ÌEÓ;ÖŒÓß(D<›¸3a{3ïuŠ@d×iDgÄÿ:i8ÇJC(Í Û)×%¢ž7yKØy¬\6h^Âð½¯ÍGÞ‘±Ù#?ƒ7  ‹ªXTEËÃÿ,†Kka•­ˆê´³°’‚ëzÔr>ûaw”[‘76V² ­6)ïÍ2zÇ¢àÔn"`rOz9عâ-mˆSŒ1òw«JÊ€H°yÞVù²mð?Nðâ,ß#{ƒ¹cu¦™4 ¿â ìßÔUvâ è øŠpëd ¿äc[iê=-Z—Ü0;ËÙ[ " ]òc/\8ÒIaÏTvö"P›ÊÔM6U>ÙO}}аÞ^œu#ªã.¨Çj¶®Ìüé+l²AÆbÈß‹äÖùfýÎßdÓòw nˆ­Ú¯º N¾!¯úÇ2I‘î`ÓGþ §jù)èýÍ%èŽVhÿÁ™så5VGa‰ŒoŒÅûÑRøÅÐjÓ¨Ž4«£{¶áäGT\ऒ€íŠK0ÊÝÍò¢þýÄbn¢`À]¬Ø_DÒŒ.$[ÑŽtÏóiéÑü¨AIS±*1ÉIFE”͇jtR½Cˆ/;Ûœ Ž>z¯Ã'ß_.`W¬nNd+n)`¸sЮÇ=ñ¦áÊö»ª5M¨Ó#äòU™ÁH»JCÀB˜WuöúïBÇ\3áã1 ¾P<\å'†fŸ¶Zš‰0ñT«ãoMP3ÅøøTå¿Þ£ê ‘íÖuuhzóßEë§—Œ•bf$Ó©©M&/¬£¿} ÕšþmB&ç1ÛÊ;*ÒsÀ~ÏÄ ñ-¼i­ôë‡jÕ(Yà|R$@GÀ$°O´]Âç<)§6…Ǻÿõ D(݉iŒUr´Ú-'ÿr“üadD‰þC*ÝÊMîá1›9i¦„8àŒ·ñ¡7k0Ë%Hϼú’ºôýѰìDcJÀ~¢f;¯ýŠÀZIb&-Œ%pP²Kã•õhgF‡Öü³ž}‰còØÂQR«ßTæ-É‹"ÚúòþØ‘ºn߬X…dªiú/& TÍ=':ôÔ췵ʆûE§[^0±{«¸›†¶»¢1S»Ì÷jS<'bVåpÈük`>‰: ÿÖ-žæq#ÝÖCX×ýl+šWë£w“bA Ú€xÄS OÖ)­…½¿¾(Dã ÒÖVMœgÕ%0¾¹†P†tDI¹ÉÜÃ'M#nœ$-‰“¡0u¸œ;K,Þ4eéõÍaå®âÉ”p®>—d!JÆT¾µ¹.'|Ž5¿Ê×1Xk Ï!-1`·³õ ™mwEP?CWB®6ó_¼Úˆ´Êå`6,êµl“Þh}^˜f±ß"©Žr3 ïá¦HLTþŠ8{Õp` «ÖSz=©¸Î–ÂaQ±!Ëÿv³))¼ç"¬‚½úÎhÞJC1Ã]ŸX W8låïr·®â¢¶(¯5 }ad?~¸K_õ§“ü­ú§Ï °ƒËyRëšQ,Ááh|å“\÷—Æ­ëÊptÊÓú WÍ×Ð*%Ìʺ2u\>k†_¬%Á8¡ýÙ|öàùölÇmù¢H¢eùð¶…c,3o£fˈ¿T±_¬x¹Jݵ»í§À…úiÙÛ• !ů£m'¼´‚A+t‰<å¼n„âµê…øàXK™dÃIÜ ÑÄÑNmƒôŽ‹þŒ±R2üÄõùJRÁ!6Ãs%̽>¬é€†ÌDž8 H¾$ð™÷ë·n 4’(’C¹†>Î›Ú € ùìû€óÀÁ« ¹n ²:FÝA>€’s’Fù*pGZ›!‹"#ºÙL…sfÄ¥e%ŠÈý&ðKÿ›áͺ¾¦~ˆ¿Ù6‡öɹ¤Hdíô—%3 üÌÏOs zöþaè BÜó@PÑi_ðÃj?°ÙÝ‚}þÛÂÖü¸üÈù»@É)ãtR¬Ì$虽‘døOýaš;™åüRí‚âkï¬T#x8.˜OvmMôSß ›£$“ g0‘ikP$ÓÀ HÉHÖÀ/j^AÐßT‚Pa…›œ+U°ù€ÃVf^Ð7ü+è9L+¦ ×E‰Ðò Ú®cö™¿»uK+gÂöϹÕré‹Cè„n¯'2§äÑÄõê‰\}‚߈|¤HíÆ„Ã|„îCªÎ?ï§"…û™°†CuQú+ÿ¾1õôÇ-S[ü« :•4–1§Ï¡M ÚMF~cœuxÝ2¶¾Þå’Z,¹¾BG×b.äü6®p§Ÿè†½jãž3<°ŠA´OÏX½š@°É¥(Å —Þoÿ©U4 l)bìköMY«RÄü½›ýI;nYz¿§›Æ¢Ÿ U‘B¨â(p†—¹ +.…¯fÈONÇÞØãÌ.IÎQÉ[=°úæzEÂ<äò¼‡Ì7ó¼¡2t5\Íù4Mz•ô[ ½ñöZb°*ÎMS1“ú²Œà¥ëܳ3)¥xzã,f¡ÏÆÿX‚L|£ãÅÿfÂ[¨W)|2¬èC:‰áÉо蛚`X5­ŒÉ¸KýfJ2Y¡Ù8Æ”Ü&®â€oaøÉjD3Ct'Z7ÂÑi×øºTà>®ÀdŽx®¨KX¿3HÿbncwªªV¯^´OÃÆ)5ÞÚwŒqÓAºì_RMöÃnU3×ýE¿cÏc_óÛVköÓj*œùŒ€‹ÿ@J/sF'Rà|=ö‰J­&®ˆw9nØ<èã„øvÜ6ÕçòÅ“¦¦:ˆ6•Bé‰RtŸ'óë#ÊÙàà¦]-=^iÅŒ`»ªT:±†«,ò=\î³O^¶±Ù¿ÎÖ7‹žÛîÝÌÄÚdàq"¥Ka6Í<^òœ¨/4˜Fi#%„«YåT‰öË‘©2d±cS“Lü­¸h³gôYV1 í Áy ˜ë×U¾à ‘Þt #®ˆÌ²°ç2û•\Á‡j¾\ tE˜i+ˆK׈;ö=ÏNõ¹gú&¦ás[Éqò—#Ñ®è^“&Eh®fÓþ«¥.eZÒX8&ç¼À©Íp[ŠB4oWZWáÃ\ä8•CÀ‚à-»´Ó4äxwÃé$È•ÿÂ]BòÒ'#ôQöD|•Üü^e “{'I|ü!íîpÇjo‘U1Ø cðËB€Z |ÃwTœAšèùÌ_ÚÅDp Ý›÷ÏÅÝKø£cDãz‘hd¡ù|šU EI?JñúÕŽoÖyÓÃ}ì¬XyÜLºŠçÉA…æ¿4j:&˧¾Þ?«üžI¿é‹¾·7÷Q·÷ì÷iJ”b&ÓadB7‡&0í÷H=.-%Cu¹xþ°rý‡/a97|wFä»Í1’möÖÓ娣€E½ä<)ûÙ>I’ šZ§z„£xL¨wb?Ð-JGmw¥Àe8SÞ\D?æï||nð»DXD¥ëƒ¨Ï<€A9n·|;V#ÝÙfïB ©ˆî€£¢zW§ÆôÅd@— ¢¸¸8v"ößô'õ…¸T¯dŸÌ˜Õ’¸|”‡ yK¹ÖÌ& dÀí0¯°ƒ•[—óÌ©MŸp>ðJ !~À‚>,³jh+Š™»}÷ÍávØ{eÐÎ*Æ–bR÷IÄ:‰‹UŽGmLæ`ãeÅáó¦z=fHPÙoÝíaj“Þb¢¦qúȆÜýó „SàÝ~ǵžÓô6$wù)¨9þ#\ë]·kâñý1݃@Eš^.~‡¥ÆîJÖDÄÒ‰vÁ‚ÕYFÉgռ܎ÛζOâM @8 {û˜É>fÐIÅH>¿#ÄcX‡;“MfÏ‹rð*6³ÂTà'$=fK”|—bUL¹ºô¿Ût rv‘S€§ÕG(jÿ#Q¿$ÃÀ‹hl¾Vê» í²°Ôgè1ÔÜ^ŤæÇeñ.²‰ñéF‘¦V_J•ʦ”Ãg“ÈX­WܧJÅÕÔ‚×wú¿©€üÂå‚Ó£b/ÇTßý#y-gÃv½Ïn éÕó÷ äb§¥Ñé>Ús®îèˆI¥PˆÂaŒÀsð«Ì®äÏI,i^Aè¹Ns” ˜¹0†”É…<–ÚÔVqìjÛ»ê6‘jŠÍYÄ|“ÏbàRâ¶&š5%ÍÕnŒˆ]š?¯焺Ëôþe {Ä$e(k·‡œ,Ùµ^—qq§À¤ˆ÷ªÂÓµµåþŽ}ï9µïà`æ}BÐÝdJ× Q€¹_Ù½ºžMã€¬Ü I“Ò™¹lKuḴY…ÐW³BÀäžBKáŠqE¶‹QfÚu…ÙºIØñžcý_)Œw®—Õö®“ÕՋݳ»Uòœ‹ë`²Zðïû‘âÿ=qh=\ºÇ/)¥¸´¼"mê½*äj*1ûÖ\-+‡¹€çRf|cgƒ…è*yGÖÜùῊŒeoFR'v4ú~l&¥¼ZÄŒƒYZꪘ¨al*$Ù2úmžÛ.Ò0ólÁ´§R°ÌÒIýëõWq‡ë2v„–"¯’ñ\Fuwèÿ8bö’„)”— }BuCgñáÂä¿ÑpfÄe:.S¨Ü× þ.*SâÜi#|‚¢ÓüEà#ú¥˜g›ìP~)žd÷óY¨SP`ÁŠ¥ð}¹eì[§½Úx1´io«Õ3Èø6aK#Ñ3t2çÑ·*¢,Зó¯¹Ï)@lb•ÖJéÏð¹§ïn¦mS¨¨æ*æ63•Ó–šÏɰ=ÀŽ©×m»FbÝ 6o„ êÕL ªÆƒ‰AS+ºÝN úy$äÂ>‡%Eü)‹:pÕ *ç Ñ?Ú ÂL‰Ïof6@×~Þ°™Ñ\ТÈWVù=§ûs âë0cµùga‚fîÜ™š([äìƒ5®‚|–Ù*¨ò,S­è$ dÂÀµö©ÊÓ]Þ}—Ëx:©õÞ:n:ƨBšÍËýÍ â¸_£‹ÌE SC z°L{§µðw>ÿ¿Ï[\ƒø´ãiÿijÀÓ8Ýq&&õþÂ]ÞŠØï*ƒ˜N}–B>/øŽøM[˜¾úù. ±PåÔ¦ Õ^VŸÂê3£8&ŒzõH s˜"ÎX'ñ²6+u… “ë‚-Z1º| Ä“qéÊ¡“ë1ÃYG쵤ûiBÚA0e¯# V¼—·¹–ÝŸ“/´®æõø öOK?Ø5r4Œ˜ß §v„Ýs±E˜Øï£€U_–ëScÚ (HY'=á )Q¢¿üº«Ý:¢¯#hòãôsYH7MRtÇR8“HAi™™O08í½*¨õÊÆ‘Ôÿ蜦šÖü¼ Ul§,/¡3G0Ôý eÙˆ›èàÏ‘vÎBøþ4î¡ù³µ·Z¬Ó[5Pù‡×í^,Fˆµ&ße¨I„ñ‹Åt¸ÌPÄOT•×V"È›ÓÉ—HµÓ”ͦ žþç5Ó¦±r,©Ä!­pâÆ´·ïXUm°q‚ï|ôD×sgÏÏ)¡ÅÜžb€ã„‡â ϸ?~ÒŒÇ ëh,jí&ŒGºEX¨ìÕëÅÝ­òv®»ÅvÕ­B ‰#W,ÍC•(¹O¸lßâ©i x-gØ#ü(Ä'±s0Oyá!âá¼tÁQ_#Y*ŒVÂ%à_Q M†·§o1›ó¥&Lx ª}*mS'O t×Ökc¡ù@³ÆVø #,ç••iÞ æ~L³O­è;ÆŽÐkúxp2‚­ EWЭ5l.…]8}mûbÌ[«ë™sUT"ÀáÎkØçÃ3Ãfú&.ÌJäLL 8«RP‹æª8ÏÀ~"ÁO rÛï–;ðVè°ÊÓãÉû¶ˆfšCxæŸäeѺ}Þé³Þv‘Z&ô—ÙÔˆ×_Ìn~nöz¥¢3¥’Ewuª”§m¼˜ù :/e ³õÚDUܲÕÓ4ÞBl?å,…wS¼Æû-º+ïÉœ+s¡IçiûâæáöþÆRz£$ (å˜%–ÜÓ'«- ?‹jßÓ˜$‡/…¼F]‚^FðÅÔæÖÂЇ-ùˆå÷"3=ßÜž; ]\˜L¹>lÇ4n¸~±ó -uõ§‹ViŽ­rmV¶‹Ë>@W"qæ÷O¸Ž4ãɬ?ݺѷ5£y®œ°äˆ/â…\‹ºœÔ±×,%9¹Ü½ë¶ËÁýAU *à‹eï péi]¤­Â";{cGµœKPýZ£„ utOÒé:Z < T•¨— õ¢Ñ ¼“®XììûQ‘ó'Íic‚–)‰ñÝØfmÓ+ÿy³âÑÅëê&éEnòu·~š&ŸÄ?¥mB>R‡ ŒÁÇSFQà\•QÊð Eo6G?ÎõÞ‘ÔÌÿYΜ¯Ó¨D “+Úér*:ó!ðþùÌÇ{¼²I_ú£»á†uæÚØ]M/ÄE¼& ¥švm -g„Ø€OPµ§£b1$”VÍÚ5à¤ÅR¹BÙÅÓ$öP1@²+n ¡CÅæàOåHù¨-¹¼1ó)mNÓRëNkASEB£Â-Àâ“”Xè\«š#Êj¦}ˆ¡ÇV{~3.·1«|Ó2/éq_!4ô«“ ë\ ²>¶d÷VyøŒ5Ø›¾w15} 2¦»EáòˆJìm¯ Ÿä÷d]Û‰¡_¾nЫJÈÑWÀÛ¬Vö g°p€Öy%šùh6ñ™l%ñTj(ëàÕÞßH‚º±KžS›Œº˜£¡˜ðÜS:SÛó‹ÇHSyˆ (¬{“³Ã_8n¹šæd m× µ0¿Ê´òŸùœ#-oJ;i«ÉS©Þ|­Ðþ®Ý²ü6êÙqòž;/î¢ÆÌñ1éX^Ûe€õìíA0AœµÝ:Õ¦UvDÇx—”ÿ˜Îdòs·À7§ú[²ŽÐ¯±â"£òÝ×a󨜒íÆ|C¸"(or Ãh¢_ç‰7xI -&H§e•]„•—·O ì-§É5Ç"m©Þù}Æ@4>×üؾ ÂfX•ÁÔ”p5y+áäš}YÄø Ð''žŸU#¹=…Äð´Åþ£û '"š±Y-Ñ( _½Aåñëe}Véc<Mwnà 5UrËà"eªÍÑ™æ"xNŸ'@‚¿S†@†™ap*’pö]é¸\ƒPŠ, PÓØ­Lë'q;–`ÿm=®{ÐuÜ$YôúcÆï‰SÙL¾£Œ6*z<ŸÕ2ØìùØ>À‘Îaþ&¥ªÝ‹±é=« DŸHj½Î7™]þPQËU?Ù×Bš'@î`uþî¨@æ‹5³9ï+-Pÿd¯ëîÝÙ¼Êu…˼XŠbÆÊ´ý@C,²[mG½‹%íÒsERú0Ðí>„bwÿµOË×µLæ›KÖç¿ÔÕ£#b›6g‡j©ün¸?­u³'­e›ž2M´^CƒµA‘!ÄãêåfÎ'ýwðÃûº>sÈ òË)x,phYVÁýB±ËÙMùct¦«lç-³µÞ×Kà_îMJ¸ÇØ„Œ p~ûÿg’”ÍÆµã ÆßÿÚO‰u*ˆ4üÙ/uÓÏIöKþÇûu¢”:å U]¿*q~®ŒÓj=£šÄV%BUû“¨k¯lmì´¬ü‘æ1Œ°œÓ8É2ŠÏNn±¢Ðr--ù-o°?¢¶)[*ÖÒý ˜[àmå 1ø~xòè4«b‘·Þ™)»³qüΠ‚ºqÃè؉3¬Þ€Þ)rRë y|³'ŠY!¹„£-žPòi8Û3&JHÒït4yÀ1ÿu—lÃ/†ãbùS rÏb±Åãþ.ea£èdeÆh-Ê(Òêø*`Ø1got5¶ÌûR°þ¶ášq5N&œk“Eûtmî2VâI 0Ù‚ñ¨‹Xæ™ê9°òª³Sá{+@´µÈ¬¯Î l*QªU³uÿ~ÄÊWWÉÅEß(©£m¨4¥@O8Û„Q²Ñ{z0”fèM `G?A›òÉ»¬}Ý·=ƒ«¸'çoÆ´µÎÙ¾& ê'tûÖëv¼—×x–í°ôàJÐÑœ3*àixDb_ÇH|–ªŠ¯s6,%KY´¶öGaú¢=MHb):Pu;‡Ã|µc¹ýµn×+§ïSE/åRÂ>W×cl'hì,ÿ Ÿ +MU’ú8àáxÌ…Ék©&I©½5¤H¦Ð ìN%˜¹§MÐv¾>ëm!`å.04®tN¥‰¤ûéÀgÑ@ƒÒ£m»Ù++ãZœñs†ÿ¹¢¹ŠÅ¥Cß4Þ¿mjÍÀºìMCžA¼}Ÿ /Á е)~ú¹‰­]­êËk÷ð?À…¼¢ÿöèÈÙðF91A-I§ƒñ߭Ǩ½I…¹1ðúGv£¦µBeý$÷­óI±Æç5çg–|àóIU[8uv®ÉëÊxø Õ0¿”ßí™.²ðèºÚ|aKëÓÿt¹Ä½ÕfiG…³6˜_½†ÿçþ–‰…p®ƒn •¦ aäo°ßž^Žýs«DŽŒ­Á8“jBër6ûÖ¢T`?c½ÆßjPÄ@ùIý(34¦îg‡c8W5éì„Õe¢íÏ<ªN„fi¾É¬+–îI½v}A¿=ó!ÅZ§O¥ú*’!,Z‘¹3c³‚›ö2Æ—ÐSÑÒ.®Å)~'1Ý‘<6ÝÃ8àV륞³þÕ‹^æ— ¬±i3CЀ¸;É‹ÁÙ …9ÌÐkå® ÂÝKtˆ(ÛNä~å°çÓtºÒj<$é”æÌ„ƒŽ3÷<mÒ`dØ÷"°¥×à Ô;ü…ÿ*óM"¼vV fµÈ ¯¹–À *4Óì2½_9µQÆ“Nãõ .Š “Ù/1 ¦7µ$úÃY$¤Ö%~Ž1ˆßÐ÷ƒ‹,'Ø~x)t„c1?j$X†FÕg•qˆqMwH4u]4'ôY ¨„F*íÁÛEt`’Œ‚™·¥lª“ŽQ8ùú´Âï¹&,ÌÈj›óØXõ5Ã{jQ~Ÿ¬žo™WpéÊGšEêPฬVQé¹|øøˆ+ÐUbMÝ£ÍXƒ ã¬EÔŒ‘¤šÇ6Ë2î¸G•vKÚw:ìršÅq‰F Ч×/C|^yæT›JöBøîÇÄÁAïïT¿0Ú“ÓlŠ3¢Få ´¸­PÀG`2c:æò/º·)z8ìÏ êq€ÿ„?$Lå=Fd^ZvsKÌ5¬¹Åp:Y„Xø4ïl/s~£D8Ô<»Œåж5x¾™¼QR“¸H3l(î«lCph!Ó hpë”BŽËGaøßL:Ø“¤ÇF'cZÂûéÀÜêOÀœfá‰ÌêJ­ZÈŽÀ #$ÿÖk'OÖŠ$sSBÜ®ßu O„Â=ò/Ì`&†ÖŒl,ªýÔ›°ø_®ÊûQî Ûž,/-3®¸æ|x¬$ƒŠ"­½ðñàæ×êì—5½™çŠÆf® Î+IdœHø ØèbŸ¡cjý©¡¥[ ¼Ñ­[’/FÙÅ0©¼Ê6ÚHÐÕN÷ð"†ÿô£Iÿ¿šB‘ÏljI½|l|+ŸŽ»ŠÅ±Õ+]¬KöótQÖ8?̲<>ÒªtTµñwÖZsC™8ûÆqcSrdÌSÌV`˜Ú5 %Ó3ˆ8z ûÊ…ù„Tý þr]x˜ÊÃ’Aùˆ’üš)Î(Qw—@›4­kµOf¨ÃÜì– !eS‡~„·ã‡^÷.³Ââ×ÿHô:Š\<û\pTjŸÛ"÷|ó®ƒXåIvò»»ªj+4q{·VTh/ŸÝ=&s™ŠÛéä‚fõŒâMÖ5H\á òÈ.µ¯Z½tJ¡ÉÕÒ".ýs­ í3JÀ”¾ÐÌ+pŠYdçé¹?¢£<¶ÕçU΂ÏõÁð‡<æMÛâjµèIjÁбYgXwô°O·#…k‘ßí`È»lß–2µ™79ÍÏÁs€òKè4ÚãÀ ieÊ®,/!‚OPðIÑÎ*H—4 :Êb²í4?x"ãé%‰êÄ#Ñ3ž‡a“÷%ÏëXâ.Ï.背NA‰?ÝZî°¤w…¿k¬ù¾ÙÊuòsÜœ#ãªVϘžé@š-9 ¢Á˜ zTÖ"¹Ý¢Oç÷ŸE<€‘½üåBÏsI çPÜ/#¬cÅx¬›”O¸¾³eȶcC¿*ìúÏï2^inpÇjFÐß¶jé%BÒ8Ô ×Eg¤â~5›×_¼¸Òù]M·,ºÑŽ™ðâ|³£§x0u ´®I‡—é„7ÚÌÒÄÊúÐ^ÄN$½jåÕKÐÜO\áé#mc1IïôzG\Wá4F¸£ÕŠÂiÒ1³¹ÎgÔsöjh˜æµ—B?8ž æßJdYè²”…sw±]-¥ÔÐü¾kfZyáÐÉh0Pö2"T?µ-艤àl§©LuÉrg‘›®Õu¬`.âì¼6QÄûË%ƒ;âze{:ci± 17ˆ}0Ã.ͺ·J–KD¥¿¶ü·McƒÝ{Kê“xŸLÞB*Ñ”¼#™3«±¿³;ÔË«Ûdˆ&•ËíÓ¤BGÖ®A|ød¦Ë!Ç— /°Šdœ @õõ´œ¾fY“™V¡CR"¿—õ¨ê²_ÍûC²=·œää––O¸U-äß( kv„$åÉH\ÀÁ·B(`¼'Œž€jgó?¤KXo.¶rp‘©+–w=®ñ›V x5û‘‹f;J=8;'7¸½ùÒ{UµgR#ïƒmä¬Ãá$ûÚPŒ@@& Ä´ëhܼ±Ö«öîYq1ûË’I¿ò¤ŽÆçC“!¡P`)/ìš¶EÚÁ`#þC4 â0FŸGMGÓ@¼H­ébß>XÅMŠÛåέ!òLÊJ!,IJ.%·øŸt\Ÿ/ý™;™|¤ú•ÜÿP „¹Û7™"0ÉX<~¼°Qª$ðÍO*ºn›ô);X Á ìöé’qW~6çÚrÿì<’Ÿ¬ÛÒ¹NÚíâÈømâ®ûjŽa¾5Ö"Ü-CµÃÄÞdcÇŒ‹¸ø2–l‚1\›®½AªÞq|ÒÜ?±?°q‘»0¯X+›Ý–¸Žj¬QÉ¡ñlJÀr$…n†WÜT‡Þ¢gç³ Ó?ãŽê¹ùÚJdä¹?ŸÏ †l#_T¤ŽþÒ!¡¨yŸo}?ù.ø|?v̼”(MúkK½t‡-Ñ3C}ËîG_õSè@Þi±ÏRW¹4 t{VNë­‡~… À ÁrÉƂ/FÓгs“Kíóa­R;äƒ7Çšs5±\vˆþÍá4÷eÅÀ·J©¥*Y" E¥Úa=¯Ñèì¯L§‡H.ò¨‹a« Ûx¡=‡]ÆaTlêŒ`ˆ—h÷–ŒîTÒ/%Oš}>Xô¨›©{À¨ ˆzuxt±ãîžâ:¦ë·zéèô¿q’ÛB $ò¥,ê ,ðUe4×iÞ6ÕàªjwMŒÁ7‚*€bCUàVé§½£ÄÁžQg¡Q‰ÕørˆfSmy&ÛŽóÚê¿»y°×B6ER7û|) `1Ñ–•U˜8YòÂÓ¨gÉ£^}Á ÷­ ÄG ç9³„&³Ñ%ˆ– ÿúý5åÿ¢%·]É6cGÊ+2ÒJùWêô¥ÌØ—úˆÁ GÛ&$4:+¾)o.~/Z$[#|Úø« ºö\¡÷þ©~ôÚñ ß?Vhж¦Ì±Þµ?"{êXŒ£îà£LQ!ÎQ¬I=¼Ó…Uµ2ŠÏì_mÒº¿[»‰Ô5[| 8Fœ9ÙìøÌ¢_:ýtü ZŽu‘¬îÚ3¡†ÈãÑ$•1ö ·š™bÝûZìDˆTO-• +,õ­MPž†¦nvÔ²Áþ5¨ê_IÁÑìÇýQZÙ°ï;= ÊyNÊHõ2›\«Šžw^Ô¸úcù¯mŒ_ï ž5nÀ™¿ý ÂE(—[X–¯Jg1"¼5ŸÊòø!LâàîÀ€öy{®WB € ƒ·ÿ튑v®â¶™³à»éáȹ¥½™nÉ„}ûp~Ã1_Œºr ò N˜äp/¬ëOŒL1Ö¾{"Àý¿°ˆAòµ¹µmŽçBµÛ*jê-Àó"ãò5Àú_‘W(1ë¨[æ bÖó™Ó|Õ¶n°,ÍËjt@¼×ɺà€‰&ÃŽ¥ƒTF1†¯†C€†yà“¾áüÖ˜V«‰æõÜ=¯¡>àAq“Òd-3Ò¤9¹ì[&Ó“#r§s0`B¡jÊ~ŽíÜfÉ|/BÃÀª'V^$>]Ú­2×QÇn€7J“Èô1ÒÕýg¡*'\26ósaAÅOØ`ÉtNÆ€¦j™çʶ#áÁ<ïãž´7®Bz\ÊéÍCìÚ™¼2eŠUºYo=ðùðµÉ5Ú]£&ÌRrƒj­a[eLô¡ã¡e2(ðË ÖÛMP—ù(mÔƒ~~ÎçïÀÉ;} F 28 "ôÖ²©‹Êp]+‘F›½}a"lºž·=±r™ØJŠ7l,-œ¹JäÎ×ÓŒ’oI0èWp¥†Â@^`̘çŠNæ²vÕ-=Ísadˬ<\¿©JMw¨JX;˹êP”]ñ{9÷K0 ¼ºÑ¹€?§Ÿ«GUÓÝX \º!Ì yûH©KJ­l`ñ¼†BÊì;ݺbö'S`Ðmg(#àÜR¹ý°8™”<ù´Ø/}ŠØ ée’îä{`‹ݺ>é¶¥¾eÛáù°Ÿm6J±ß¢é¡k‹¾6ø€)—$ø# /@»‹^ñÑÓ" „Â÷àšÍhí¸9óöî•qÉľ?‡+[¯-FQ©“Œ^Ⱦâë¶Zß6SM@ÚLŽ`óýÅʤòsùšq'C$M`‚žÖYø¼O„#2aTmYÉ™„6S³àA¸¬»æ6¹ú„³J“˜ªÌñ½¤ÿê 3[,ð¦6eTR5}ô¶"…½¹Á"¡ÓÃÊÃð‹´U!PþîG–YL‹IŸysÜVšDP*_é0õªþ¥WÑ{Þë6€Tô–ÄÍ™ä½E!ÿ•K0©óŠ&Í9ñí47y­+Ù[3\ ZW攣ˆÁ`l,£½ï8P‹Gug$ùÔô(J 0 ïÃüóRÂ6!dUùmÌâ"#Çã ²Â=¯9§Á×ÓPà#æ×qåx³à³tmÈ‚EÇA/èWð1Ÿ®B5Gbæ¬rÂ%-¼Ü edŠŽÌÐeFS«·´LÖðÚ2À ̸kÙÚ@Ìbé»ñTÚÄÈe¼H_Ї¤ñ8{Jÿ¿ÍP=µ ‡óÆ‹6ƒ 1='tv $|—˜ÇTÃ0£ñ;?™A*… Æý93Zð¶Ô¬<¹¨ ¯mYn|²v¦_BäÁÉÑ&Ϧá˜JA‚Ý»¯›ú„ãŸëÈJíNëeÁ>žñjÅÔ³N2¾>Cvá3kBâ/f,{\µª‘Bèïƒñåbв#ßZq-^±©õwþ_µi êKÄD.2ÕÁ÷lsrDKúÚ!Yµ ‹Rzˆçú‘ç•ÝOá]ìðØù†–lÙ®U®Yþ¢4‘\à g>kyê…ÓÛ-¢™ÎS•ƒa¸Ÿ“H—PßrœFÊhsT/ý\á¯üß!O'  OÕ¬Mö±ýnZ¤ºÔ >¥QTµtL‚ßjÒ³Uêû£‹ #ô‡IbÕåuP˜Ó*¾ƒ(eøopèÎ#4\}çþÒ¢žRµï¦ ëkÊÃÕ€u·%Ÿ ¾/@sÚ JænmMIÞ×pω¯ÂD@×gf£«fI–4Œ|&{ÿ\+¤M ÿä=·‚Í£kÀ×`QOܳ«e³ºÞ³äßaÌjÆP#0¬†DL­È•7‡ú´®lˆ³QùÙ׆#7ý®öë3Å{HãçRhI+7ŒÏÕ.,Å×h7N]¬’ë©¡,!Çc…ˆ>ù jǬéÆªZ¬³$pØ©¼€-äÝ{ŸÁeL_C?hÿµ6ûïq_ žjLýaF舅¿*ºû¡¶Æ“º*·mÔ1ƒ¨ÏWùÝ%hµÉ¼ù N{–“¨jÃq…RsŠBÚˆýiñ‡I¼VÎyKÉrÖe°§±r…]q#°ºÁhÙi¼r¢_㑬ÛWis‰uÀ)·'…Èr´&µÊÆ!5ëŽD,Õü6þ`æ,‚´#ñ¾e'™>a’Põ$¯Ô)ªˆˆÿö ÿ`Øc@þ¿ÔcµN ý/ÂðŒ«'A:\KWfô—=üŸt¼cVA¶í ЯÅDãó⤊ŠÞoÛå$Þasg¯Â?n¡ˆšk¹É@-ªØdx+µ¡£x¥ú°ëA]>FªÍ:ñö‹–mþ|% µ?aèð™’‹›I¶ ¯ÉMD)kJ* H&æ·÷2wl"Gv õ5ò¤D1`ýgúom·ý«òPcb»$’ñw)¾¬ü=-¶—‹|I rŸ†ï×P:&ühöI•‘žÌ_aiØ=–s+cÞRÒJ°ozf³K×¢SVÛÕæ°ÁY×ju‘*´”Ñ`¹FѶ-ü0~Ïôr¼´úV™[.×ÃYÓÜ1áŸÊäGrU ÑÅDä%ÿ¥gN…)ÛÚ«ÂÞ0ú±rÊb’C°FÍ•Án¶gÿm†ÏVjÔ¶œ·]@?=.Á> ËS¸šÝ)Ćíò9MRv=° ¿ÌQ.Ÿ¨†É;¤ÖþWJ~L„]ëÖqyÉ åVpØ?#LšF æ>©Óa²© £ ïÿâËõù=Øx‹Žm”ZA h÷ùbù&¦Ñ‘O)ÛÏQÓÖ@mŽ•T§–釞X5´¦Àºó–_ä¡€BB°éâZÍ_)Ä[Ò¢â‘G@L®†ròõ™eú ×»;B¦–‹…=Ó´õêÒ›4V®° ýÜy~EÑÉÖm_£Œîøq?z~[j¼zb_¥á=×/ð49¦T¢ÝüNúŒR,qyP*Kfr9ò5ïßÚÛº-rhàCŸ3uÛêƒöÄÃ$'Ï"³¹M3·}•Ò"- ´|ÕN27bª½’ÛŠõï ~÷ms[æ¸6ó Ьg‰2è)Jvj®ŸB4IËIɰNˆ t.<0^µmúo…°/ÑèeT¡·ÚV.ªìvNѲ@"¾OrRN“·z:Á‚aŽ“%ÏÓu¡Ïq¿€@ŠO iìª 5X£øWsù¤® Äí;:sF'sè䬗ôˆ¸¸×kçüNë:uÔÑX5%ÔQxr¿LGQ|á¡Ùz{„5ùÂkZ°ìÐ !~}wî:÷ñˆÏ¿µ!ôKê…ƒöèa¬†YC5>7V¹ßÍÄЬ—ÖRF­>üisdº„ÓŸé ñÍ·ö[î^Äw ¬A&_‘)—ƒü«N›ow´¨Â‚W){üT×`&œ™l3ÅBÑÅ]–«õú<^q¬9? }8\Ãó½ò}›4Dk&ŠUÛš§¹kg7ÒxbÏ B¨ÁtæÛõ™êŽè€Y†Ù³MTŠº /I/,ÞžÃÙ™¶JJÞJp)5Šý³cx+e®Ç¤ ’³SYƒÌí ñ&+!»%ÈC^óþÆÔ ?ݦÝÆ ´Ô°c%†tIº’Æ»r²7"NÑù‰fß±¨ ‘ GY î“fæL…#øÓÉus?^N-œè[² îû—èR€>U¶7ACÂËWƺ‘ºå†÷R;AÔ£ê<ú½ëoEW”%n¤h|.6W/|júßRT5ìjëžÆŽ)N=æ«Ìh ©‚.‰³csBñj/ !(tÍ3ˆ23}á`è²'1OB?n¶*£Ö­^ñÊ·ˆ>šˆ`C3Ä… Ò[šÖÍ•W6àÏ8Q—†˜æ›%iHæÎ#I_<3ûkâäžÙ„Ù·!{ñØèF¼Ô ö^ÀÒýŸ8ÊÂbG© ;Cö€;qfgvuËî¸Ýw.—× šƒ ²öKQDh ¦§¶ÏXM±Œt+sW19J6 GQ%ðÌb!úE« žÊÎ,²óuGŠŽ¹A[È +Û=”1_Ût« ?–ŠÎ½P!¢†¬Ü¨>2Õy‚™ëYä1âÉrÝí䨼¬tš0MÄgÿ@„oÂ,J‹mîÚ,*Þ#]ËQA66æÊìkJ…en?÷å¥å‚¡lõ˜¢^¥j b“|˜¾!Ã,sGÅ:én(xtdÇJøïK4¥ÄšÙnÃ~µáÆÁ“3M Ví—«œŸÐN„J\KŠÖÊév`õb)¾:YŒ~Š /ûôûp@Wæ5ëðüøŒý­ú¿Ø³¿$O3uÄ’ £#Ùc J ʯM3ÑÞ˜3‡±RZä‹û‰ñ‰JU‘Pû9Zï5¹ ’ï;eÅi¬ ù Ÿ…5ã5 ‘{Ä¡Ïj¬3PjëGù+kš(7Œ »‹×Ö«§H¼eAüüÕ–ÅdápÃÛ4>÷öñC3WÍ ¸,1*ƒlYâ::·É$СØßcÕÆ\üø¦æXÎ%ý“âÿê»h ¬3~˜…@fc e](°iJ³ƒ†^pØJ4…3q“Qª¨DA0¦{¿Þ1˜À„íg«ÃøEq«ˆäóáøc ÁÒF&,²§-Fx6 W_5Rx<Ÿ+³LþQBE|pôÂ5N‰2ÁñàÆ¤ZW´þ‚—Ñ×Äf&OçZþ+È ×hÙ7_ìß$¿tıÍþ{£ùÇŸÈ•$ž@‘32A…zÎL0€?éF¸mÎß9 „€Í‚Ü£aô÷/KŸñ€L)ÎI Aè3—¾œu”.`:Ñ/ÈcÇ·¹ãt­¯†_2µ¬4Èm+ N]Lì'rîðs#~ûNõ"%ˆ È‚ÿ>Šnay@‡±‡.˜OÜ#æ\šDñ•mó•äÙ«dRÚÒvn¯—R™ug(¢[ä@‚¸yûwŒßňõ!CY¯qRêÕ›ÆÝ+•Œá;Ù|¸D¼ å­ Z¢”?yN;#AãßšûKÆÝõç7ï(jó#£Ë¡ê\™òpOG©:žò‘Ao.™P«®°éTùs.`Œ="éú*—cãJÚ¶­|ÊÔí›M%ßÍŽ;TÎ%)N_¤»À’R®¤ }¼bØ–®}™[qÈ œŽ0YFôÇAD'2vS/ I4ݦ+™•´ª–4è€ûϋާR¾£5Aàð¸†Â)ý#º[–0öí!†þÓýýK.`æ&˜£’bÓ¨dK@¥9ရ2D~|¾Ü“ŽÆwkÑRtvº« 'Á1Êû¢yTÄÚ+Ÿkš±ôqÿc;¥X_HVº;-zº¹Öçå—‘×í÷±¥V_0ÜëûQ;×mŽ>õ0kd²<ÁÒâõUHÚÄåB)<[m³$òÊAOxl&yÿ8Z‹l¯ÿªc÷€æÕ¡;p„Í “¿+CbGÄ·V–n¬¡z#Ï.ÁLÿà{?y¢•msSI^õßç¨x5¤ *nÿ™ÖΑÊÊ7¶,·E ãñõ,‚”ŸîAå»=Ò&3—¡"4#S™øª* Øøú’Ĥ|ÞÄ3åîg^^&,0=d²b\R å‰;[?WH¾% ‘rR¼£ÌþjÅ•žÏ0×êÚ°S÷ÿ?.Óß碄Z:¶a=#‰ý Òȹ¶AQÀZJkì®BK`[ê²]…µ×u„hÃüäºV™Õeuà°(¿ìÅ„H½‰üŸÛ¢¤å/ÐüyõYu(÷¥Ñ„Ê·27ÎtÆ¥Žâ82âQЈb¶VÌo0¿ÃIÚ³a¶møÖÏP¿6’{™ê]µÚW¿W,bÜhœ^©ÿåÆg¥›Ÿú q(ë!0dÂ>î”’²-ó™šmhÉtÀëù´vÁ:ÂÆE­áæÓm´Lfá´û­Í~Q}â ´»¶[Óvq’Ñä"Ù£«º…‹G>(Ÿy’û|ƽ*}2:Rf› ‡åOVKôô=~éêa™‚¸ó¸ß\Ò:$,¬.ÑxsFéw–nÉâ¾¶€§X´‡í« j¿à¹ï9’]Òú `Å]Eçc {×øàÛ£çñë˜!gN›Ä§²2ªç§V1çò»Ò³|K ¦é ­£„w|¢ÂNƒÊ¦Ù³‘i½ÉÚjxẹkäI0Ó@Ï6â Ÿ&í#ª nE6_{Qþ©mzCÂ\¡E¬`飰 ‡ 1ñÅk‡­ TȈþ8d>¸BËi”Õí3cv騲ýô¤*ÃìHŠyK|s‚ý i: Á [ãóµw9pt’ÖXx•£~Ë×óªµNg-H‘tj5g¯©éE©gÔÈû»[f'Ã4-5¡ë?*Ü”Ëùégº*mÉ,8Mªe@jÉ€»+¤œ}Í<y>ûŽù•ØÝpÄögsU:k…B-!Å¿48-rméYódzDúp=1ößDÃ(M ¸‚ÕòªÅÂéàƒ“·Š¨q0^h³Ä0QÊc¯²§kÛ8Äݗ8xŠžÆ…~– ýÎ궆Jßs(ÓÒ10Û\êQîg”ÖkÇUM"›G:,-P¼:ª‹þ3ðO6gŒÆ1åüý—½$‰Ö/¹8á;ÐùeÈÂYŒE,Wñ"nIÀ"!wÖy`Ö6舅+m$U™9x.â“ìAo«2Jв*­ •†­*X´Z” Þ»?À;ð‘Ø!i÷ *sÿ¤å=QâcŸ§‹³¿‹Ù¢è/ÚHq´bh€@w€i‚¦iG ‘mWŽª¥wR²²³þ:]EœFq´ÐÀÇÚÆ¨oUB¦¢.Wb ·aV"eûhv;½0C|Pön˜5›C„ù ©3,‡!”M~0e¦„1˜ôÂbGg§¦õåZ2x€ÕŠí‹jN†¶C+įéxb9hJ#nñkw;âKë¦$?§bu×Ë ˆµu®uB³ˆæRKº63_Þe)e^á^D¤lùÜPÜR‹ À(S,Ý;°E+öÅ)k“oÅ)82Ñ7ÂGi®Eí®ì­âž”ròrÜ¿pè ã™Ô74Æëð*zô>#üSgøÂ~Ó*Læ’Õ¡ ‰ËT‚‘\ÒÂ7è+C7æËyÔ›mL¤òÉÅë}4wƒ²YTÑ8Ö3˜ÏqP7=½d“¸%Û6,£“ª åÕêZtZWo—ö ÏJ45ÑÕÄ!¤”ÉŠÃx&r5}åѤ€+ ´ßËräº`Ѻږãä•ZÚÁÍñÑ;ÛJ.ú˜CX¨EZÕ I'gœ‹†_å;tÅ Œà÷1ì©÷wåpP D¿Ñ/FªäøáPì8¹ãôáê¥XüØû·ñ…ÒEÌ~t?°,JN-me¡”º¶h&J˜z¢Yà«ÆA‹“éàŽ’uðb¯µà¾é~¬V¨17RIbFVhfªßÇ-z:Úòyàâ®7ý’ÒIŽCôÝôm=™ï€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €t1lib-5.1.2/Fonts/type1/dcbxti10.pfb0000644000175000001440000014071510733501627015537 0ustar rmzusers€%!FontType1-1.0: dcbxti10 1.0(Level-B) % T1FMT, Copyright (c) 1993 Basil K. Malyshev. All rights reserved. 12 dict begin /FontInfo 13 dict dup begin /version (1.0\(Level-B\)) readonly def /Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def /FullName (dcbxti10) readonly def /FamilyName (dcbxti10) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -133 def /UnderlineThickness 20 def /CapHeight 686 def /XHeight 444 def /Ascender 694 def /Descender -194 def end readonly def /FontName /dcbxti10 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /grave put dup 1 /acute put dup 2 /circumflex put dup 3 /tilde put dup 4 /dieresis put dup 5 /hungarumlaut put dup 6 /ring put dup 7 /caron put dup 8 /breve put dup 9 /macron put dup 10 /dotaccent put dup 11 /cedilla put dup 12 /ogonek put dup 13 /quotesinglbase put dup 14 /guilsinglleft put dup 15 /guilsinglright put dup 16 /quotedblleft put dup 17 /quotedblright put dup 18 /quotedblbase put dup 19 /guillemotleft put dup 20 /guillemotright put dup 21 /endash put dup 22 /emdash put dup 23 /compoundwordmark put dup 24 /perthousand put dup 25 /dotlessi put dup 26 /dotlessj put dup 27 /ff put dup 28 /fi put dup 29 /fl put dup 30 /ffi put dup 31 /ffl put dup 32 /visiblespace put dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put dup 127 /hyphen put dup 128 /Abreve put dup 129 /Aogonek put dup 130 /Cacute put dup 131 /Ccaron put dup 132 /Dcaron put dup 133 /Ecaron put dup 134 /Eogonek put dup 135 /Gbreve put dup 136 /Lacute put dup 137 /Lquoteright put dup 138 /Lslash put dup 139 /Nacute put dup 140 /Ncaron put dup 141 /Eng put dup 142 /Ohungarumlaut put dup 143 /Racute put dup 144 /Rcaron put dup 145 /Sacute put dup 146 /Scaron put dup 147 /Scedilla put dup 148 /Tcaron put dup 149 /Tcedilla put dup 150 /Uhungarumlaut put dup 151 /Uring put dup 152 /Ydieresis put dup 153 /Zacute put dup 154 /Zcaron put dup 155 /Zdotaccent put dup 156 /IJ put dup 157 /Idotaccent put dup 158 /dbar put dup 159 /section put dup 160 /abreve put dup 161 /aogonek put dup 162 /cacute put dup 163 /ccaron put dup 164 /dquoteright put dup 165 /ecaron put dup 166 /eogonek put dup 167 /gbreve put dup 168 /lacute put dup 169 /lquoteright put dup 170 /lslash put dup 171 /nacute put dup 172 /ncaron put dup 173 /eng put dup 174 /ohungarumlaut put dup 175 /racute put dup 176 /rcaron put dup 177 /sacute put dup 178 /scaron put dup 179 /scedilla put dup 180 /tquoteright put dup 181 /tcedilla put dup 182 /uhungarumlaut put dup 183 /uring put dup 184 /ydieresis put dup 185 /zacute put dup 186 /zcaron put dup 187 /zdotaccent put dup 188 /ij put dup 189 /exclamdown put dup 190 /questiondown put dup 191 /sterling put dup 192 /Agrave put dup 193 /Aacute put dup 194 /Acircumflex put dup 195 /Atilde put dup 196 /Adieresis put dup 197 /Aring put dup 198 /AE put dup 199 /Ccedilla put dup 200 /Egrave put dup 201 /Eacute put dup 202 /Ecircumflex put dup 203 /Edieresis put dup 204 /Igrave put dup 205 /Iacute put dup 206 /Icircumflex put dup 207 /Idieresis put dup 208 /Eth put dup 209 /Ntilde put dup 210 /Ograve put dup 211 /Oacute put dup 212 /Ocircumflex put dup 213 /Otilde put dup 214 /Odieresis put dup 215 /OE put dup 216 /Oslash put dup 217 /Ugrave put dup 218 /Uacute put dup 219 /Ucircumflex put dup 220 /Udieresis put dup 221 /Yacute put dup 222 /Thorn put dup 223 /Germandbls put dup 224 /agrave put dup 225 /aacute put dup 226 /acircumflex put dup 227 /atilde put dup 228 /adieresis put dup 229 /aring put dup 230 /ae put dup 231 /ccedilla put dup 232 /egrave put dup 233 /eacute put dup 234 /ecircumflex put dup 235 /edieresis put dup 236 /igrave put dup 237 /iacute put dup 238 /icircumflex put dup 239 /idieresis put dup 240 /eth put dup 241 /ntilde put dup 242 /ograve put dup 243 /oacute put dup 244 /ocircumflex put dup 245 /otilde put dup 246 /odieresis put dup 247 /oe put dup 248 /oslash put dup 249 /ugrave put dup 250 /uacute put dup 251 /ucircumflex put dup 252 /udieresis put dup 253 /yacute put dup 254 /thorn put dup 255 /germandbls put readonly def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [-29 -308 1292 911] readonly def /UniqueID 4700726 def /StrokeWidth 0 def currentdict end currentfile eexec €‹¨±Ôc, öøÔâþ³×Âû-iìœ ï÷Ju¤¤öï§S©°E²!¶Æ¹'hŒÉúõ¹Û`+#),ËÈÖ«JÈ&ãÌÏ•—mYÕ¯ ÿÈþkÂôÒ·¿'\›Ö)I²´^Í  4"L±°«~D`”¨X_˜O>IÀtcÿî#4¡FpOµA Z®ÅJ\.±{—T˜/NÊÀ ëû’ÑìmËYHƒŠ,ó͸;£Áo0 ¾àWõb,K,MA¼‘FàWÉŽ«ez£‹«Ðˆºl¯íoàjÕpýs˜lW¹ÔÎä3ÿÉï'X»3縔ºSm´8"Ѐ+Ê©Ö`°›ºF¶LN…Î¿Žª^P–`L¡´Bz‘n­ÑHËöÖ0w†Š¡Ü]Àr»ŒI!ò|±#„š#D ómQxy,ÚË5áâêCÏA‰HïFØáKhusëK²5^ãÜ[¡\©Õ¼9Wl”st‡€èèC§HéãbEÂ#Γ––&ÁpÖ•Ií? CbÆ1Eobç[%Uñ»qšáÐ}:7º} F+(='ŠŠF­æÄ‡jÅxÈð¥<#=Ø)í#y‰:±bž¡‡eËØÙ 5ï%Ý}ƒ_óžÐ7+;Õ—¶ž³åt´»ËPÔq‰oÛj"êGM)ëcÿɼ:2YtjÉü+Íõ¥´º«¬MÓÚò‘ÖR(¶Wàxý©ÊF2ô×ùÞ¤ÒÕ$·A±ž‚ ó›_%KÊÌ¢¤n—éçˆÓñ¶äÓQÚÑFÇ~nÕªø f{¼ ;L¯¦µV\-/·Ÿ¶T Õ{=U$öÆd½¿àÄ °'WÍgî+²ÇÃ4ýûimcÝ0"j·ˆö;ÏÁ¿-Ùl>ÔÙx\38±ÛG9˜zóºë3¸¼¤æH:G\c‘Mjј§Ö “óuØ$Dw5!×S»¸‚²ÃÇiDÙŠ­0¿àŽŒÚßD!h£Ý—\²ëöº] ûU>îH¿•+ÏÿòZ®¶œD !*1–„3hE%odýÓ‘"ê{§&¿8e›:šE³|²ºè‡ï1þwMš§§Äƒá ŽSÂ{ÆòÊRáÌìÝ­«»¦ÉÏý~BF|°t0¡Bgy”`cGWçõ×,§­.TøZcä­‚“^¤û³Ó „ю啉þö¾âÙÂcêã9DëåÝ@å3€}Ú¶¢ƒtcöžÅ™/%ÈeÏÖ([åI,ròÖgŸYò—­ $ËX¿3B™iZZŽ©Nåë IÒKÚ´)ç­Zr@F•yÐNâQ¹ÖûH” dí ¸Þ‡KZ\t¸MŠÑ"£ºÎæK:÷0qãC6‹Nsy«ä ŒµÌOÁEñ#w8• |öÑGFÞïYelØ[-•ð+·(˜P"GñFYЬ:scÜ`+YÊ,ÃÀ~È`J¤ž~ HÓ]`¹‘·fŠ®Ù;Ü‘S×ÄE©:-Å(Ôîùn*iÞ1óXVøƒùþ@3Ï‹6\÷?âd~e„ÃïugÉ–ùp¥ŸUK»itJ»É®£™šƒ‰«M‡Ù þ†wß1Vî9ÝùµÀ>%ÖçÈgÄCÎÛÅ¡ ü¬Áað„÷õ”G[õ¶ßùÕ&„ßY™ÈHAU PVÌh f»BèRÑ.´/N``ÿ{™"å‘Ld›=S™4Uò\ôZ9ñHÖ)qI$ iÒ¦Q:¡‘Y¡Øf8©ÎÁ=†h|U—- £˜ ·æ½š §²©zÁ:òe¨y]‰ñ~…<ÂNÚ¨óQu{[‡+‚m¥–^!Ü•µ ëƺº}Ù”Ó—†ÛÔ:ÕVZãP9Z*ÏHî¤4Ø¥ÿÖÙÙÅßì/˜xG+ŸƒóæÃ·E.5K|\ µÆK”a×K\¤p?j+âS"õ€äôË,ÄäMÑ£†»˜$Œ(>,‰à@*äé7†ÚÄAYÄ'%¥Ù}[Äm¬ÌîÖB–;ƒt—ÖZý‡ NcTÑSUV o/ çÀˆ’3(Ê ?âåjåoÅÜš³ŠöèN¦Ô·’ÝlHÜríª ,ÿ ÓaĤx(PUC߯b%§ÕLòã¸Æ€p?|3F:ÿо²Ý ÛÓiøµQÿ83= ñí¬ :‰¥ ­p£…îÆ ñÏÓ™CRÓtÓØãJŒ!w¤A ®³æaœ HÙüS4ø™ç:,Y_l"a×gµÕŸõK*’³¬ ÊåMë8k•ãüødÒ®€ÍùÉÇeè:Ûô”ל™e&žÕÙ5/6¢œ%:†T3ý)WocŸ­MÅò;ýš;„qâ)­’À®“ð·‰×˜ÿ;¬Ž_qý>5ÈŽ ÇyAõ”åÑ“‘æeµîjëee¿4ˆ¦§®’paÖ“´0H“™öAàüÖ8ô®'Âûõú€Ò‡‡",0>CÂ]}uŒòP¡®às4J¹ç“GÛàŸ«âš^6Üä„jŒî¦Wñ؆Èi~èO+0Ï„>è…ZºB¨´î•®÷Ü)NWUweEàÉ"y™) q½ Ÿ[îí"€8œhÔêêDÈø.©‰¯¤–*Æ6Úù„˜fk bzçŠæ¨~Œ^ÆüqM=õñk}ïõµKN2óxiΕí0ãFŒ`x5ǧjÙršp Ë«T©ô¤Z*!ôa+«¥Õ“|®€ø® ÊC[Qvø»Žãmq,ÎoE`·‹d]U7—é:˜5’P ¼;±fÙ³›.Ž ¡3öv[í£Vt¢ÞZàÿÁ2ɾË}«+A‡kI,SÆ%÷8Vs†Á)cÎg‘ŽªusÌ÷Ü\B»ºÞ—õÁמNj"›¾o’ãùDütJYóâ·kÂ\ØZa f¹ËÙ’ßrÉe·='{ˆ5•”‡JóY*–r wkºN³Zk:›¨ìU3ÒA›N]ü? ’ eSð7˜£HœÁï“›;Ø]bÝA‰…öT•÷àiñ’¢ˆØ”å' Å’1[mÂÄ®P?IÆLAmŒ³U‰ ͈ÐÏ]²o$Æ:ÅCééfóÑ>^IR^Võz‘°mrÊ‚ÕO™½)Il¾ïœ0Ry†ÇÝp“Z ƒQö%ì J©‡ï¾|ÜÓk:Pù¢h™,Žû™: õì87zóÝx>äKSÎ7’–ð¹Ø²qQ<:#ìiìýÀÝ×üLó¨T™ÒwmM÷rà|Оe~ùÊ]˜¯sQl%U^§½ ð5´¼SŒm7iS£Xxå“[å=«L`€‰±Hç¸iÙˆ¶(J昂z0ÆÆv£W¨!º¸ /x{9hÂa#*Mƒ¡jÝT Û"T„mâÕ„¯óEÓ¶cà0QlÊ"Ÿ`ïOæRÛcs½ |«†›nR¯ŽkM‹³èc‰î6•¯þ(D2ÓKØ`­ñEàÊÃ^'ÝíN¯hï¨Ý«ïÓß×»’¨`N„«äsîUe¤ k¥P¡Í¤m³‚#»¦‚•ý#¿þâàé™×ׇ¿ÛÆÂEýÇG}Љ#€bƒ¹ÌÜÛÚDJ%¹9å¨AF¼êS3rû„Ùqc  ¯Š®Å‹ ¼·ú4ôGUﲫ'„Ñ&ª?„Ýßéü§RmÓàxŸ“Â Ô #å{úDk°%ã¾@!öŽ7k¢¬ÜPQã`O·VSÝÎ?nÒeÎ µt @.Ú@ñ(o}¡ä‰ Ú‡lhÖN&à6 .Fl/†Á╤RìÒß_)ï{ÍÌà,ÐC€XIWÁ­E álxpl!ûêŸrs'J²T$µê‚wÇ.øï¢)ÿAp);M~yfðé;K=!¾ª ÃÚ3mÈà¶pšR»ü[:ÉwŠŠCJÜ ŸúÐBÜ ]•lþWÄ9ÛwˆVçÖYE»ˆê’¸Â†“ý£Ï7É·n–Ñ•­ë•|OÉ+¬ÁŽöCƨÍôÀ¡è ½ð”æÕ?0Th¡m¹hÝhdY d"¢:ûÈÜLËûSिTòhÞ žÿǨ ݇ìe{ÿ£ïJ„#óu výQC¸³¿¬Æ¥ÜO72lT{Ôð  Î¨ÛdBTÀq»ØU#÷ãfoqJ§ÛGÒ—æú‹ï6§IU$a{¥aøê_7Ýçñ²¸‡*{q²†ßnÕQ ÍzÙv.9ÿuÒÒ6—CÄi’úŒ4~Gã:øø¥èÀO÷ÐIEH¯}W¤±Ú+`\´"ìZ@’üZÕÿ)“ï+M’¼èŸDºœ˜T’Áqðøµ_!Œlh`.å‘+!KV<ö¢‹;Ô¤µ©fÑ7Px·…og1Ý\.iO-—åÉ»›A×w+àãÇGP‚¬°8^aÄõä@‰¼¤äCÎ8ßã­†LVÝNtgÿ6l›?È)ïêsx.иÅöÎaMh|‰ò÷ {"c¹¡ˆ@§VuØ¡||ÀÕ1ž8ÿΓœ·l¤Ñë¬*§¾ß~çX5áÚõÒ ÛÄb.MPГä`5$úeÖÑJ$àNmšì¤„JÞ\6(ÄŠ)}øÄf…ÛOyY[;·ª5Äã*óª9¥PÁˆ{æqhõö fråaqÆ;ä-…-žõ1l™¾ 94±ŠË½5ía÷°Y—b¡é™úSÊêh&ôÞå·/RËfýêóÙ!†BéJ.ž'h``s\°‚I4ô¥6+·õ$·S_'hx†UöÛ¶¿ø¼ =rqu•\žª4ÝÀ ·„ÖŠ"oBªàþ?]Ùg†hìk[-Í“®bQ ݽ‚0Gîgã†Ý.kAY®ü|YMëéKkÙF®k×ɧ”ÎB…²{Üp=Œ„x?Ö=ïGö±qêD¼„ú¿¦èp|aTÈyø¶¦yóFjn»¢v!¦¡-þ³SNÌDžñ֦\0mÄ“\M¿Gn`x}Öì¾+ ºìA9Ѷ甓ø2¬ÚLÄØ’¤‘Ž„Dl$c;ùVð@ƒ.3IŠGK—UŠ×WÏN~‹Ç4¿YWnÎ{/¹K/`Ĭ'ib¯ë™Ù [éfUBöw“’¤h%í¨ôŠˆZÇn(–Ð)•O´goŒ‰Ógø‘J ª³³•æÁˆØL·W.ÊoǽÛ.dÛ){Ï­$8ÏÚ6lÓ.Ù’™ù‹ ƒÞHI&AŒÑÿªu„“ /ý"Rg.ŸÚÌã¾’¤yg< Œï³%¼Ü_ö–(•á™Ü”q@kAöëÂ&)Qöü×~›:ÅÁ?L©ÛO€âŠ/ßTvúƒ¸s"~€¶Ï„›ÒsjŽt¾»,¨prT¯I¦ÅÂø:}ò ¸*fϺfb#µ~ä1j~Ѻœ¤éÔÆ®‚CÐä¡»˜ðuu²x±£ e7ÄN›Z‘¶o;ÿ檜tš-½ÚŽ‹Õ ô›“ù.&¨k¯Ó' EfÞÙ$lË[w™¯A uMhÉ5¶ï%ËŒŸÊLŽØo›AãѧNµ’õœdž1‰ -©²P¥•ði+Œ£¥Y~ßß2®V3•€ 4Â4oÐ\Ç’QZ.ìe7Ök_•héÛ+V©X(®Ñ69·7õŠòû¬…AÈÛï€çuqÄKmì³%º2ÏÔ6È Æš#ù´ì@Ójáò.tëYU- ,(©Oß6*CõÈÞº‡&L°!¤Í'¸ú°£¢Zj\ª²Xî£jÅÏÑ›<æ .òƒcÖÖ´D¹?~¿@+ VDS§ç˜ÀJÎtÒ•™=§&avGªÚM]Ýæ|Ôëù\/¸i;pŒ}Û0ì–(7+c’8NÑù.“½uº\5>ËÀÛLõ°\¬l¢ôºN¯X1r|qž÷½ÿL®Z”ˆú%æñÌn˜{B/îÖknæLc¹Õdç°™ !òçÐcIÓC;Áæ©k¿¾6ÂVÞïDúËf‹?Þfðež ²v–`ß׸JÎôo¤Ô§ÿlÎ{ý¬7 WÂB„ï‹&tP‘Àå·h:Ÿ/Q\\°‚Ü‹„Y¹NµõDYê]©Z¶À숵s»L¨¨»@½ïÓU5è·žígDZfG©c£˜½,;PkÜ}À~Âé‡ù“høø¯Ë# Ã0íζ}çÎu[¹Þr¾Íyº\Œ[Qv•­u'~Òúè_¬î¿pê­ ò~_xöê•¡…»°YMgï‡û9d·ž’Èöàô¦ïÙ³yäÐ_;5LŸû8½%Ø¿.~ï¹~hŠy†+ó?õU€åmSŽ[y=¬Åâ<ïŒÒlî‚üºJ؉g ¹­ˆ=ôÕ™`C]ó)$ßÒ‹pÆÍdÆEŲê5öüŒ³nÅ 2„² sFQ‡Høg‹AÃîN1£Õ*é wZ âÍ9.ç?sz z+È«Ã5iðhè;Æ–tú¨ý[†&\ÄG¶üÔE©}9“U†i!0Œ–+“—ôÐ>E.“p+O %L¬ž%dLa•mzÐO0'#9"²õo”äÃ7¦Ãb‚ýT¤óc8rƒÚiæÚcˆ ÷oõåGÜQñ@{\Á3¡Ì#”§à±HvB±N'¥ñßZŠØr"×˵ÀÛ%£¦{VS· Ë= ÞÛ?å¹ÀÝis>z_Ö³öùh¡ô^t(jñÉ?Ž1ˆ ŽÂÙÀ£–¹˜´©¨Ò¤«ƒë_i:Œ(ì~#;£n÷•7Á±œ$äúxÁžÅÄU*–¸ƒ,ÊA1•uš7ÜÔs4+…K$ÖPõåÂEü9Dè×ýWHjÞ¥ž0,8}Ô¨=&è[¾´t‘Q[ ³Oq††p©%ȼú`Ÿ¯íøA@ð@-¬ÙiLYº”³U×\‡ÁªéKcìü1P[¹´ad‚tš)(­CéAoÍÁàÂxÖ/DÀ†œh/7ó”ÕÐä–T\ ¯ª8[.fôÖÚ‡@•±<7FBS‚jê:£ê?/²aš¨åIRsùuU' 5×:<Þ®Ð2žü§Å—´Ó$[ ~Sl„âŸo{ÊÌÑ>bLâAwÏf™™ø› 5š[uÿ/’}“`…Þ6)°+ç»Ï,‘™êÅ~ ¼âTg0³í[ÅÙÚ¾amËsÔnÎÍb¬¸÷¿¦*„µ–ÁÁ[’µE¾ô%!pJö³rw÷ 4m<ë£'”à&$a ¦Öo¯í¬¦~'ÀG˜'ÄngîEU>¨Ã±1AVÚr\:à!õñTìÉê ÓŽ'÷§bª*4‘ñe7HqLÌÔ›½²‹Û½’(2"3Œ+#àU„Šæ kV.V{vÀXH‡ 8ëlèR˜Kä,‡£Èï÷Êg<(H™w™OËhŠÊÛ#Qg_ðGΑ?²~5ߟ-¬ñˆ½q*V*ñ¿¥7Éw²À‘«r K•ahMq’&#¾¥÷?[pZmÓiþu-ýw5À[CÁwè±®ôˆ·xßNÝèô­Œv<ÖÒU4€¥`;c“ÔÒ‘>!áa!ᘈÀªÚ=k­O—1§’zÈ êt(sxZço3YÑùeÚÚHÔ‘E8}RÃËgκiBd0¯Ä9Ü­ à: )3¶wÎ,Cœ2|bÓOgV‰C!wüïr·¬ —IéN³žnîÄë¸8£tàëaZãÌéúò NíƒH!˜Àû8WÁ«ç·œ4<à·ñ{»DAz{§@\~‚ %GKx½ÅDÈÚi8û±×°™ˆ•GÄLØ8¼ì⇙ù¬FJ8B?`©¼ ‘··êèË®XÉvŸS~åƒY®»²Û)Ÿñãú2hëA(sBóÙUú›Ãˆçcl|\ø5ã Û7WЗü“Š)øµôï˜Lñ Ùì|ÊÁ™ ß`zœÁZ©GУ%•øk™ ¼÷C»‡ò¥HýÒûÝ,‹¬½. }óvôFDf·ɪ쌄Øex-ïʇ‡×4²WösiLq‚ÖI-&2åÈO#îkŸxM"În63nËíÇôÔAí0Û²$Š0ˆ—–MŒ@½óz«ÖÑü±4ð³‚PCÌ¡|^Å8Ï%9ÍÅÆò ÖáøÄ\BŠÂ-CšL\¹,.HèCÿ£šé›Å$F¹ÿ×;æ¤Å}Š5¿Ç¾Fçè]Ní×”:-lOçN§[‰ì¬ì•äHj—rØ+õJØ'bÅu=Í-íLá2¡ÜôŽ%ëôjÿöÑg·|¨ÉfËcAC—“`'€—lЍóÝ8µ¦òÑ@ÉÜ› ~/£¨Å§Í ÀeôpØ`c!P^‚µ[&ݱgp*È&9uu%‹¼«¸/‘5ӧ赜;½Q·Mšn`fÄŠ²Jb}œçÄgô›HìŠy@¢ñ‰@ ñ/JÛR Ѐ‚þ™ºwâO±ÉЬHOƒ¬­Ð¯MV…¤¡·|űѺQ“ñEü”‘ìÌY¨]tÚJ?ÒÃ’ý•اâV1…>HäŽé5£o["©rû׬ éeª eR•@œ C=ƒÇ€ï»fjD°÷u;ýs‰‘Ðî×µ=À¿DòŽÓùï—|K¡Ú_ÿÓ'¬¬ÇYâ²Ýi±—‘V KŠï[= w_8wÕ‰OQÂ/m®–ïÍ%ààÌ&„÷·À’-Ë_ÛÛl§N¬J>lÍ]‚*ä©Ú9À¯uUbïÚá¼í3zˆ™Nˆ¸ÞÆ•è«Ø3Žè¦&{¯UäïàïÑjPü1‘NöîÕüî:jȪLÛY³†”› hŸ3d)ïW?+í×s;؈ö#«²¾³‡I{(Â}3YZN1 …(ŽùVñúIºnâeNõ§þ2Fü:7'Ä×(<Ÿ  Á•w? º×içtW.ËTXië$‰‡ÓÑ`ëÐÉj*ä„WP~œâ÷Šf¡Uª‰xQ’´ ËR™Š™øyÝå­>b0§$ ¡o"Žb sL_í÷ µB 9²Bt©âõŽ’(Y„žáœ¹wìC«2…ºâþþf|r$³ôâW#'5~9ǽæ†tˆž„ÏêpÕw2–ó‡Þ>56Œäðà–Ȥ]oèBÜgF•V¬„ìD5 ]è˜;@¥I?GÝáN´V§¼{ Ï{Ÿú…US¤èÎYr®lëY™¬ Ùbs²•ÉIš©/2}:ÌŠµØøÉ(§Ô«°`.TÛ»”Ù&#dL#­ôÆ|Ì’Î}UµéÁÒI¨g@'EB²råÄêÇÜg(P2·”íC)ƒ0N®kÊÀθE=b³œ_+SÏOê:©9ºÛ‰cÖs5 3Ýs_¢A£ ƒ™æMcËÇã÷ˆv;>÷îœÉY)ý ~íöO2Òºè'ӌᙠî³%DÖÞÓ™6ufkÈu¹G\ žáÈ$ɹÃä[¥¼eÜ_#ot~ÿâþ ~ª·í—ÎhnÁiñàeÖ¨vø•ÚÈ(žDO„§æe,µà‰È½÷ÛÙËæAõ÷vÇÛ¯ ½rGE|W»±ÐéçRT®õ«ï2È#Xqe¥®ä2¿Ê ÜCmbŸ_!6á›CñÀIt Š;g± C -àY•º‡Õ—‘÷Þ_¦8ƒ:õýè ñå< ŠõµÔ˜ý9èQŠ´€>V*nbÏfü³ÉÜ^ô1ÁŸ?`a¾œ¨VGÛòÖf‘c­¤Ã€}¿ò®ø3e½g€D•]I¥»CiS*[{ƨ7Õ„9c´R \<‡LðÖ}«,ÿp–rk~*@¤ã }ËrA¸$ ©äÚ\pµèŸWf@^eeÔÄv9˜•“@ïŸms”#–g›DEh]žß.<-GTŒ§ëÁ„S´%>Ѹn(Å–ÆômÂ\Œ;ÃãfÀŒïû’k4Ë«Ài}ͬÐA¨³û²®ô¹Ò›HüÚ+GÃæ¸D­¬ ý¦uNÑ"½­žý9‹5“­: ËáéJ;ÉlÂ%q³5\©Ø–Ó;rϼÁ*jôlè  Ôë?ôV²ª%íK!}²a¥cŠðIä…õŠÌ¬wlIýŒM‚4«pI`·å…Ä$yAG,3MrãÔnñwJXÉ0Š2¿¿-ª„êmGˆ0à”R‘wú¡÷eʸœú­Ê(%ÎmÏôoòâ‘ šK+¹¨› °sÍß…ÃM[ÏÿLÜ¢ñêkGɉpAÚ¢ÆU8;[ÆõEšhWéTA&­\ZÊãð9û^OÙðÉL Úoò—©A=mò[Ô-™ ¸–ñ]¢#×âfyrâûÿzÙ7S8d¬™xçx̨œRÕ@Ï U% œK zô#RónôeäÏóð-ø´ŒÓžäîíxbô?ŒU6‘g?¼<¾”†–#Î4xØÖé=jÕþd8¡J¹RlæO‹ êzßY˜ñ} аnÆr®±ý÷üüŽ’Î“’¿“-™H{‚Y"é{D0P›gs ©×hã;§ÖAp¥°[ÊR2 ÖâI×ôMó@·çqÜL¼ŠvŸºyTye•­L½ÁºrrJž=ÖÁËB/ÀŒ¡íX©ÑeÈx_űh@^®$q _¢T“ÑÔ(.&ÎÎã3»˜7+¤”€T»©úôÚ›\‚ßνvý§?ër‰-ºÖõêÍ»£¶NªM¨¼¿4Ô‹'*E2n¶Wn ê‡V¬›Fåÿí"ô'AcÙRˆÛÔùm2° ûV©gÛÅP’Áɯ—•ÁÎjñ§ÜG7nåŠ2AJéÞÄ+ûAZM\É§Ýæ!ÌÔ×µ8U^IŒ’M÷®?q²ˆ Š•Ïè6™b3ù¢såo¤LŽÁ…A*ðøñåu_(VÃIj‹mzz·~%ÌS¶ò ŽÉOìŠØh­¯43±ìm/[î’ˆpˆ±„cH™ÉÏÂåô˜_çþb$‚MÉ"ÜÈL0ÁRzɵ‘=FyQ¹Ã;fîcûÙÆk~Œ´KMÑî6¿}zÕʾ:x4\îÆKûmN²² ž{®Ç³O©æcE¿“µP¡š1âœx]5˜Q$é·:¬0aLgw ®Ñ QR‘kRö^1poúF”²ï]´ØÉ—Ô÷ý ìªå÷S¡m™§»jS’ÌÁ'ˆJxžxÐÔNNRQ:öŽ£òFàøIG|ýí÷ÇÀû{?èþ¼$2œITY–pà…ØYÛEÉUæEÔ7LÐmïÔÉ÷z©qÙêËê!ç‹ð4À W„Ç[O_¨Ryx ðÀð=Š¿A(‚ÿOn×7|8¬¤oús‘‚Á ØÔA 1aŽ9H®Ë…·.@R¯Ö]ˆÀ#³ÏÛÝHRS*ˆV0z!eød)5>g§Œ£¢EMŽ«©"ãWR0 )è!o¹âaùkòùAíQiZíç$Š¡78KÑêÞ| tæþ+h éªAùmbF°ÜÀ7xpj[L¨ó1ºµ’ñ&MòLq'š¼<ôlTÊŽ1à`ÿ4Q!<ÑÅ]1äŒû—ñ~ÎÆ#Ñφ@Ø‚™Ï ºœF'ñXlUžp=ÄÉí³°|´‘Á $[Ì %z¯Ô,Ä—õ)Äú—aSÌà|ÐoÆóºÞ¯P>Ú¤JìlHñ^‡5)õF„™õµ$hàÆB¬õÍ>ƘþÔ,ëuèKœd[ÒêËðfOòߨó¯ð_-–1á9`¯šJÙþÌÚ„QM:¬–DB7Úž¥|48É¡þ}¤6¶$¹C©v™|Ó&°­Úï éN^z…ò[ï9ÒÂÍÊØŒPë’ˆ5†Ys:1À)ßE‘“»V;†%÷æ{«°#Pð€9@˜Ç¯’®i©6¦¶(²R÷C˜“ïV›Á{ÌGbo´èqŠ@Ó€†,Õ< ®ðþjm²õ·OÇœñˆP¿`® õRoì„8âìi8NbèI%ÜoI“éOçD$J0f7úê‰Ú-ã;µC¨ý›|Æ= ¢öi¹Eá¬CîÊVW¦ú¸Øð)1Pã¥íZ VAÈ=ƒ3iaéŒ9E@“RÃR• LÌô´÷ÚÔWå);zZ€ÆêÝ›t(H¶ŒËÔ¢…w8ÊœÆ7üÐ \zX Æïc~[ú¥§oÞ¸äñŽï¨Þgjר‡×oxÒ4*c ©<¡•†# ,^.dí}‘ ÁåùòXæcâVM–GÇ𠘲Ô@8¤QDLŸ¿z2±]Í1(\mt)H”üèu‚Ëö=ÅÕìÚÑ2\¯Â2%ògr¶k1$_]JB-økeÎ!`v”ë(-ÂH"ÄSÚ}ц¤ê±S½9S8)“N¸+Í–Èm¶Ûp¥© I*â¼rTH8µË°c] ÜÄ ö³«ªØ9BS8/T[«K5Ñî•LCöGSÝײÃJ…NwÆg’…G,ëÈ“Á ý ó[,æ8ÙŸU|Os¨\Nž6Ý÷b×Ü4©Õǹ҄È[>r#Õ£|ù06À8³ñÇøjŽÿè61È1{ÅðÒóßÅé=§ú¯9J9c$ÏÇ¢·¼¡- ‰MT]îCb=naí»Èñd´’þ}àÈD#k¥E~‹øè*ÚÅJ<¬£ƒñ%ÿÏ´49Cüm³n¢¯˜†lG o¿Ëo—ÂÛ‡5“2=ösI \ÿçÂYèï°ñ²Ÿƒùö1 Ú—ë}ZÖ ’À8nXàË…Á¨u”(Ö2é@A´£gSâV›Å“3rÓ‡â3ù§¢bWI^ÉÒèI¹Û”j¥ â²(Úp­àwmËâá®ÿÜ—ˆ$v2þ«¯å:0—Í7hë¼”v£rªïÎcŒJ¥Þ¨sÃøÊf&B3!Ø7ÐzÜ%¹^³iUmÜiöÄÜ­Ê—ï7ÿ…’.Ÿ˜Ó¶A*d%¹KÊMwÃ3 y.a×”Æ5ñrºÊÕ¥aóÆË$Ù="­ü6v§É(Ûd¦˜¡|´lG‡¶¤”1+TœÓtbÞXQG¬óñÑï]Ü÷W™èæíÇ*ÔÚËo¡Sç…(Ûvs©õô/i£µÄ |x…Eø]73_öÓU"ªuÂzZâÄC?cOSpüß6Ÿç'¬(z$Ûu#º®+Óšo .ÛA)%èlÀ;½¼U$¿L'y´æŽ-ÏþõÑ}9§¿3y<¾$«_»Ölôz ?ÏŽ¡5À^àºõçNïÌ~iÅ<­:iRhG0WËxûM‘æNŒ=ó"=ÓJ›[jMÀÇt×Çk£’°!’oP¯å#‡më%qOr ÿ#–S¸ ^~@螉I {uÃ×’rÆ ]² ÏC±^£:Ÿañ#~Ë‹Æhû`{>-zP‹ X8‘M¿X×^m—…ðˈøø+Ç.;¬€³--øŽx ‚3­äb[óâ _V‘Ošf´k/G fÃ/ƬB©—áøEu=$²°ÆtÞg4f»—B–‘û.¦¿ü2läÎ8/PwYõâi)­iØ:¤)l1ùwm¹K`ž§ê/ú‡¾‡{ϯ©qíF'6_¸X¹3¿ÛÌʾ;œ|]j]ºy¼)œÛeC»—c"RسP[}¨¹Úv Ho„S±Êи0Á¢ã&Ê#-n–YóÉ*â¼ k´¥ Œ¾˜$ÏÝl¹—ê#i)zÛ†§»ßÖÂèsÇ4aT‰»¢õ¿üxgõn?]EÚnÍòaà5–ž¸&$Åx­9Ý ÷nМIT–á+Ûãµ~ÙòâÅ‘­¼ VÛѽ«ÌyŠÑýèòð[2tåù|qv¬©{[i<àù}(?3Ep Vãu³NÒîæùLá'aä7Ÿ\Ú/óŽM ǧÕXŽ@áŠÜn%TÅ~[ ‡£ü—;ÀQà +šˆ¢P…ar¿µ}©ëw)×:I€8MäÈT4ï.#ü \k7^“t?Å\/ù:‰P{+˜§ýÆu*¡IT¬ƒJ:™ªF—{ŒíBÄûN¼3dMÅãw|„šzÛC4Üý}­¶ÇÜë‘,¥Í¥Ú5ˆî!ýtKëªì'žjÈEî+ÀܳK 8¼·#Œ…µ^S[#–Ùç¶;mW†oQÍWŠ9õ¹Nýßëx[lÊ5TÅzðí8²WM (ĺy âéÇòüùʹóKž8ûáâ[ë´û+[ò^1øÄŠ)™± W6pÍt¡¦f¾Ì«Ù@B„øðâ€ã9žùnÐüŸX»¶,;f9Ð’;Ì»ZÖÁ$Üßfáútku}†.WwL49;ã¥@({ð:mXkÅߎž<lÁ)“tY4+DèDKmEX|/ïƒîÔó\\àD§&nb‘èÐÚ;dÁ<´ù×X”ã4ðçC³ƒ®õx‹pβB`NJý ¹ÄTK“•Bb'oRØàpM¡[Ù¤?Î…‚>jºç‚Ów»:fv|]ù°|Rb@.[Ë[4‚芫°YšVŒØë]˜`nhe ñ f¿eG’›¦„D˜í7‘ (±a²áþµl,ô [Qfß"°e4Ú~\,’‚ˆÎˆ§RÊÀòõJu«.{ c«ªv( NA`noÚ8ô4t ô¤­W¿ì&é‰![õŒw%bËÝ:lþQv;x!¼ýqr’œ•6†¶È¥c(7[„ ‰|„Ã= È\ÒË8¦ñ|¯¹I`U÷©´ô»÷•ÔßèïTtßãÎÊù͆Þþ±Ø%梷à‹ÚŸ¤=äõ Šhúþ7êžîÚœ¡Ç ¡ ä"›µÑE;]-…÷µ\±ýu>ư=Ãís‰Ô¾d˜ô™jb ƧžŸÈÂË ƒ‘œ è÷¨z|Ôƒ½Ü¶Q=N\1cíʉäuMŠ¢9 |‡ ­¸èëœN©rdà13êû, Õ‰~•*?èOz„ÄAP­ – B 7hãÌå—h¡òÍîtk~]8œá_ßcã¶ë[uçÎ ¥><[99ëÊ>‰±40h¨ ä”ZM³%yǶ‰|3¸w¯%(e:¢_@%A Z²½G™F0äÁ‹ÈŸðùÜa/LèLv(nfÒ ‹sï¾Ê†¸‡WÊÔRnÔV= ¹È3›<ÄÖ.…j+cÊãu»±nÁ4ä;GEÔBI&4ÐZæ•T•S©CÒ[„þb*`h NHáñ*r1î«”Ó¼|ÍÜ‚²I!kK5$Q CÉ96Š^=•02ÕäB¼¤¿aÿ‰ÆâQBm3ÖN)²ÿ`+Ë6anˆf™;Q.î'‘œmÔD~Å™&æ(ü`lF"ÃÓ –FU"î 9 »®}%ºýÕû£y3„²ô¬Š Œa²KöÃF‡±eßOˆœ“ ®xµ¢SP˜ú&‹Æ}øçPRV=» n^ÔžMÚ>\CµŽH! ͪ(èVUV”ñ£`i¡§z$5 >å^¯[}dÿˆ)(°ªtõáÓd#Åv¬±A§‘dòyOɈŸÚG° x5f÷Ÿ¼ÑtŸU qìˆj*—ZÝ 40×Õxù äÐiíLTÄéQí·žÃ¯³aeç&r@þ^Oq¶Oª¦ôÁãŽý’¥ë©·ì‚M¸…²MBø apZI¥Ž¤fÒ<· úÝuîÚç¸XáŒ-çj+´kÈœ½h£i¿˜Ÿæ~þ%\ä„,ôÏnÊX[¾‚’˜¸£€G¹îÎß&w‹ ¿æIçRÖΊg?oÀ¼v ÇéufJŒÂ|·ŸÖ^Œ`Ûˆü†žGȦpw¬œÏ”C ?tP–”‹]\v)õéÔT°9a+»äÒY}eÚW_vÕä€ðØÀJÃŽëwr%½¤I OÁuØì¦9éi3 Ê†ï*@¥©ø\fžÖƒC&ñÄ•UP¢3q߉,É=r;T›YùNâL#@;âeYk`\¥—7ƒÊ› ·2®ñ>„èÙœbìäÖ§ÔˆK e•ÉǃrÆsšÐäL² ú±Æ§€küÙãsºUs5¡ÿŒô“˜%BuËT}é¢6Ks¨éXE’Cdz¬òް‰œC¯Rö0È7“5XUó‘’rÄÉÏÕÆ§ÓÐ%Á€d%Kž~û¯Ôm°Áù–•.%…Iìñœ;Òöç‰Ò·Ü9À”=¥;è.bN”BÉ”¥?¼û“/à’€ÊðU¸ª x†Êܵ®Þ Ë(¬}Ï)xWdÀd„&:{A¨t9™ðñÒ7‹i–ÿ¸§þ¦ˆ)ŸØ x¤E›mMÙ+¿„Æxb7_]š<§PÜ2žl7‡(Þ(ÎÂUÀ;,sÈu]² VJ÷X ÿêDF\µ8x¬æÛL(××Qlxh½Ž3ÝO2x§ŒŒi³o‹i_ £Ä›JH?{3ŽÏÞ½è/ÝKø\YžEï[Ö¿Õ0Œ]ô&ë,2øm¨ÞÉ8›÷)¿'ÛWÁ¥š´:ËKÿ¤‡üÿ­5¿Ðf“]ŠÕø^1'‡¹ô13îà0ŵ<#Àê’þ£p=ÝG3Ð ÙJ µV•O¤á ‘K¤©Eª^w!É¿®Á)ì?s´nYd«ç=š˜³¡ó4|?QVÞßÉÕ M³žÀþ8Á+.ˆêCŒÇ΋±)Ї$~hS’€*>P@€Û¸yçš69¹2‡ÿ†tjÚdcúîÄ¥cÈЄˆí2—\-‚Í™ƒ4çwÞ0Ü5ì}ô.á ­l¸!“·Åúh ½šdIšw:Is`¢5ó:ptMa»7¢¦?¼+4ɺ *‡·2°4'PoºES½&ƒ¶÷ 2*#ÒI`Ç÷ô¬IÚ˜÷«À‰w’ˆÀ4›µÿ\S†<2N{öÅAŠn­ªz+{\ïÌÏœå< '‚ðáVjqø$\ÕÈzìDøó,£Œ'S+èî§z“£t]¹Ÿx…™™Â=þkb¿R€€Â{dï ÐZ¹wÉ\(§ yżQ1­õ·#0nÜO³ÎÞ¥+2µÚR…'E'D» Uè½ëæœ5̘&¡ì•$õjI\¢;Rðëß‚FÖ34b›Dì¹®>¤?ÈM€b"aJŹÇx&‹Öf¾qBN ÷ýø†D;³£ïUNØNèö;”ôÔE“]ÄQ"mñµ­æq›vÀ «vs"èNæaz=}‹ÕŸ]×bæ¡@âÙAÞM§(¼ó¸´Ö€¤–˜kYŸ¨*èð­=Òb«Fm¢yû`GÈÖéCÂñfÏŒy€ŽFð ªËÜ%¶ŒÇWgÏò _˜´1#bÞãúó.D.ÒÿÀñ+ªö?n&ÊAI®ÍZ½Ú56¶(Ó«¿ž¸ó¹µŠ­cHN/ ŽS‘Ñ HJ˜¥¤vîX ƒ£-Ï‘«»€g#à' ×Û®;…ÛÈW]óô_At†-;H®ˆ5YVÓÑØn¾Ò Y"ûe?x°¡³³íõBzÀq o´³Ø?] ƒr)A€êsv€ÍŽ‚ gãN&#t[Ø"Ž"Š5€ëÞ-HZãôžëDEíøÇz½Šó:c½3ß…L7KREQ2èEKÇ ÕÝådwW¤;‹HÂ4Û)Œ¾ñ¶tzQ¼è–úÄ÷Ÿ †uM 6×׿8vŠ?_| ¼—òÊÀÔƒï‘ð4ÐZöSa¨µð×1îëîV ¨þCæ6 ¢Ü-¥»ÙÎF”œ³x$”æ¥ÿúé8Aÿ±D-ÆÞÞ+¿Aõq¿>|h@¬Â–dÔsÔ,¥1£Uaz0 +v榥ä~vÎõõ¤Œ›×–¹Ñqù«´‚ª8&¨\Ï3 ÌîÚjcñ’ÓÉ”éó{ ;ìk¸OÙð‚"ÅŠ÷T«~;±sãT2èe¹ü—#z£Öƒ§dq8ö„Pn˜hŽÐÐ6êÿˆÅ¾G–¢ÅëÊ%G€Y3«™I<œ"/‰Š4×üú–H‘ °>9&7b´ˆå†q`DØi:2zjeFÕe@.äþÊàÆQqZ¤ù¶jø€aÇ¢ý#¥™Ñë"°h˜½‘Œ 炽‡¸O…jC}|׉±fß ýüQÆð}G ,ÇÄi×B/5¤°Lô€5×ç»å<¿`ü=¢ ÝÒÌ®¬0”Úò„¤'¥ËDæÒIE˜V ÎÜÃà-ˆz·µWù½!—ºÕ¬êœÉ­âÎׯ`-<‚¾](m;ÅÖtèÔÍ 6Û›ûDùì¿îÓÞùøâžq{°öx×åý}D'*§ ó î k¬ÞW¾hT~aZùæ$ÛèCH/S=OwçzIÉ_‡A÷8ë9%„ó-Åûy£Ä;«\΃Vé¢Ó0¿g@æ„¿-’äÀ«Öÿ}\²…òÔ_$醅ékl3Õ—•6›ÒZ´ÿy³Ã¢N„~âkwG Á•Gá“æúwöËfáÓŽ²èHJÛb6’ðe úæŒM<Ù0„¼þ—ß} C%€>ÿ1:‘‘féJ"ˆX¢l:ÜHÍlï“ûÙʾõ•VS%`$d»¿¹#«…¢Yi­Ô•É|×+?]‰J÷ÉEëL8‚ÒDëË3 °Wgè¤Äò&g„‹»Á`Goà‚9¶J1p±&3ÍqဉSoJimúbwkÕL [èn/­†ŽSGHP˜Ã[o‘Fêõce4éÕðøí›HS7çFžˆ×'&¦S»0×â6È*ƒ”:ê!Çé°bôr…êµv1ãm’Ò4—/L:9Ãì¦Ñ b_rêf¿Y ;~¤³+D'™L·e¾RLYަ`+ìñ-€Â޹‰I€4Øá„(wõR0N<ã†Ç,l5 ‘’ènôZE'H/õJ"$0l“ÇE yÃä:€œŽÉ}î#f˜£Q¿j)Im!½æŽî¥*:Y 5n7MÓdo{°´ìzÏI¸'÷Rœp)l1ÓÔN”Åo­AåäÓl"þÝæfÇ ¿Éª3™¢ZÕš ã}JwS"þ°…oý[ß4Á6ÒÎù›ìI^9ý–4õ˜ÔGi˜HäøìÞF0K»|ƒ;LµDº¦’Gim¹öcv›4³ëó-Chù9up–Yä†Âm¥ßÅüp%ˆV/“®Á-õ£'0¹u ‡rÉL¥Eø4øÞ‰n*¸øÏ#½·ø×‚Ã~•6½ó¶Q&„|ªQÏÍ œ½0û‚k æZSè_'J,þ½Ç(ÀTHù”t‚íÃ=k&9룬Žb€M`Jóc…'HUòß=hÞ#»g'?IÙ—Ám), Êj9»‡o¹÷Ò7§ ¸´k›…çyKYÙp™è¯;¦šÑçEh“#Ü׊=ærVï°Žn袋•3à‰‚ášÔü?ôàô#F),‡ûÖÀ¿¾%v„y”cIXÔ—{_„²a½öÎᑳï½PÊ/uÅTnp¾=Îáa<”—AŒçÚM˜¹X/_D ºTø©V¤ó«Oí¿ðC¹)m<-5…×rq»ƒÔäí·\k=k¨:Ôø/t˜ŽrvN^-F…Jï$"‡‚`«.ÐØ ¬ñMØ*Õ¯›L';¾™±Èº^“¢ˆî&ͧA8…ó ·Ç«T{Õ­KV{ç ׫Qö©µø£´—sÖåïnð_ÉåžìÕ‘l•Ëô)A@ÝlD²ªd §œ “NTò¹.O—ÎD%ù‹KÐâ/Ù¸”)ÒèMÝê]Êá z«KH­K6=káœoØØ¿ñ%îî ´8 – ž;÷yøóoÇmáF’À¤ƒ>xÙ3Z!qh÷€5Û,ÑÅk’]²½‘c«~´Wº³Ÿ|ëT-¤àM£zŸ¨ªf)êÈj°÷Zq¥ªÀ}PÄhFOã!71æÞ)¬s ˈx«Âl³ËHBÏÂBìƒå xÞ9Ì<Fµ[)·{H†z®™£ÉîÕĉƒÿ¥ë;–y1A5ݰ¡Ž´±œ®×ÛÜÐv(xËÉáÉl•Ö+”d¿Vp,!Íh­¯^¯ÜΡڴ´mï`«”¦;Þ\¢ |aRyü îø4¬±l¾œ QÍŒÍ$•îWTVmU{¥¡µÈ豼 ïFw­ªâ  å(Á0`h)Ù}°OïRI¦ùWËŸñCØîP˰ç{°¨ ÿsUd1?#&˜¥‡RÙY`qÍñkþ:݇.$0&JBŠÎNéºþ1J ¦¾à‘ã9M´^¸ê­¤æuϲÑÀ !`(ô´1Ûä?"'«|%a[»¶…Çj(>7—kÃx 1½¶ÝàÐkEóe޾ƒÞOA@̰#Ð"Ô\ ˜¿ÞDË$Ȉ[ׯ«çäsP¡ ìí‰à0,¢ÝœççŒÌÄXy@¹ÒÓ¡4²×¶cfÿ‰ƒ7z%dqØ7Ì]¹oî‘É󆆇µx¨ºžY^ÜïN˜US'4ICIu³mÅ­6¥¨Àž“ïÀVm¶M™n§WQO[Íse}ZQHà9«Ë?!`~FF¢™t $³Û³ûî²ËDޏ¯†–P^\ÛÐ×øäFgh’?ÞNwa‹ž‹>__èÔ‘;j‘§âJòg µ’K èwã7Ÿù­ŒriâͲ}+ë„ÛïäïP2¶ÀÄ™°Qr=°ˆïmÙWãùLˆrø¨-pnFãm’ ¯ÌŸïæy™›Ô¿Ð%ú|í"÷ƒT_@äÞ "€íåx ©pY´:ÌÀôoߎepR9³‰U:µ6É™™MÖª·ålÞV± ±“nJsp¤jtœýqóþïqLíÞè¨xÍ–‰½ ãQ™fFÏââ¾ùŽI§·ó@ ÖJÚ¾bçAµ¸Ut°†S²`·È¹Ž7Zfææ-§ÀöžW]^ù qÐ*WéÂös7»p|Í™Öç}Xôú¡Ú\G"ÒéŠáY[‘Ó;C!Ž}Š–ã¿D”‰ß0/¦Ã€ïÂ&cïØʆ‹/P(ÏÝ/c ÁÕì8Ç#váh[ NXˆ¯¢,r»È®˜™ÎÐxæšó,êÑ@:!¶‡f©“ šu@Ë÷+š€jX^àˆyxר¢v;(¡Q¾i! ñ3×7Óg&}RN]P˜§|«Ü%½rù†‹=C…Ì? ’SèãÍ#ÙG”¶v i×óƒ®ôŽVXqj´¼T,W—TÃ>ÏHÔä{:‰¶RL”n%A…0g8æô;Q”¯¡ÌÁ|­Í÷G¢¤…Ûd¾f"‹ÞÞaa·_ŠÉ°Ÿ;à v} o–äF¿VñõS3H#)¶žý¬AHê[sŒ»²ˆ)жl²{0×Ì…´B<¦7‡ËÆ@Sž½ÏïJ"9寿ÁMÒÊt Î::KP@ –„çÌØ)–gOî²_í íó<[ì%XzÐÑB‹²Qbº}&Ë«xíF÷dPz8:eÔË-v¢Y‡po4ŽŽ¿„0»ŸëL‘LÈV§•íûÍüâÔJ¿%¤ÆÂÏÜü“¾nØ<öe(’?Ù:’¾îâD†vFñÐé+ªº´ÂCl¤­f…OÂBA1$kk³¡ÂÜiUm›Ý»Èn†aàƒž˜c,79H¥_hHešEi´:xQÚ{à ٮEOÃ'`cR>øaFbÝ‘- 0vË«ò“ paÑ–{`B+Û~¡ªdÐàìÎZßM"„ÆêÑ ñ±Ø.Þ]•LÛž‡&¬š5±Uðýd°ÄBÞßv–C f¨,¬ìÏɉE¶³R75˜3ç <´¿ÄŽa–.¢¾›JØööZˆVOÛ«œ¶çJ}í&Á£^çÏ,J‚²c+»ÏŒ8þµlÃéêÒÌ»SþBKè¾+î½Å'ÄOê€8g,•jŒñ[F ¨¨¥JÄ?·®–D|YNUVe]ß¾º¦# ­i‚-´K>­Ã¯·©e_Ÿ6îqÑ«öÍ2¥Ò0s0ÁÀdõF|†ˆ/48#B±:N!±úá€U—¼^0Üëî‹ljœ Ö ûr³]=“”‰EÙ 4][ÚRµf¾CóæÐ“ ìG"_تSà’¡£C¬æIÀï¡mÞÆ[ël,þ٠։ܫ‘0Y¯X˜ž$Ô/O9EQSU–¼¼TDÄ¢§æè¿:´òŽžø‹¾)jVuìçÔ{|LÌŸg$¼Í q2˜ù¶¦äÄòÆn¡êƒyþÓؤv¦øÁpÞ§˜(!F¡Æ‹–k"ö ¬„¸EqöØ¿¹§ÌÕù¤,–Z1éy7 ¯RøHq cAUeîAÒ®”Ò›òcôEÒµL ¾L¶˜±Dc™¶c¿1<žHª»Ô°Ž—â{êðAÉS‰þé ø¸‡ð†¸Û|•4 Šªý¡¸ù$?ôµ¡´¢@¸K„ásYI샜DsôE|ÇnO8x±? mx4Štü!v@`::Û+DOÖ AD—e›½‚í呺ì»8$Úä®ï˜:¢ìŸU¿?“M˜:Ôv;vgêPxœñ²}Ù-ìc±ãæÇô4 7¡«KZ E9Â(Ý‚\qxú>‹BÚ’€&b@g×a _tÔ2ödÏÃn.„® DÚŠùnS2Z±`c )J&£X–´%ÿÂÉfì´wÙž¶ˆl…H3Œ’kzC!ú+kQ®Ÿ½2™¾èÍßß7 拉*f1ŽkaŸ 1^S §Í¶øŠkÿˆOªaÎg•ú‚x¢K ¸ÝÑX}x½ÀOë3½1mÓ6[þ¸¡-d? ëc±?éò÷/“ë‹ðËFæµ”=+ëBæó­üÏ|©9»QêQ²»àEાBü†iض‡¢õŒÊ™žœ¼2DÒV/`›dé$Õ·ƒŠ<,ÙÐ/…Vb3ô4vÐÌ%‚®îè)ª:#>×Ï8̉³1ÿ©‰‘çÖGÀ¶{=½ÌÃ¥A–¹AéðØ‹“%|Á¾öU,8xK€’Y?\5ùdª•¬¸bb‡×ÌçÞ¤YÌWL`®‹åËôàõ2òù!m¢"ÀÑÀγ,­— s¼4Íï¥NpŸQû³ÛMЈf݇òLû­9˜;8Ô¥#?*ÌP/)ï†tø_ÉLI– iêq4’$:¨Q6tÐɤóÛÉëð}ÿÛ4^ ’ÜxÁå²iMŽ‹á“aÑjumêÔÂvž¶ø®ï-m>¹½/q©½v\KÀQ…8oü½»wàiŠ—¾ÑÍèî¡`¹ôF¡›¼£ê§x›Ü%æìF úž+‚óíM'OÉ÷–˜ñ‡@PáQVd›AwÓæ#=yò|¸yŒ04#W6rû/Rb½Àíùö?éϬ‹ðT©¼[ì:V·<2ç/FÖ©¬ÅŠ#ÿj°Z0´‹C‚3ìˆ~ÁJ¹Ó™„ ÚjèIÿ‚ Ãäl¨ñ{ñ¬«È;È€‚#¦@5Ð…EÀùdJSðö~âxK¸¶c¤?EW²ho(B:Ê8Ý!r¾½þÞEçß`¥9&!Æ_ÖÔÝο H i} e.‹ ,CŒKM@îóè{ÝÞ=€ÿR†ãÕªþD›)v´u€Qnà©Ô oÊ”ÀŠõ'Åä»´{ñÌ*XúJô÷6ëÌÁ¡CHeºHO¾}#PIåÐqPdÿÖº[ì¦ Æ´…@³™9.{x¾.txÜ“f“ñ´šì.ž"é‹kdœ0jà;<¦ Ñžþøç×®T=‰dMäSökÇÕîkÛá$ÃÝÁê0o¹N´Öâ‹z×^' I=i–³¬a•š ëϼAmZ/þ¸™I¾©à[¸sd!ä€ f[]IQã ûé±ãŽð ¬ôÀÐÕ ”¬ ÛƒKÓ(VwÄ#ž…åReO_8/iµ» 3lk$ׯâö’–þy3H’hUåšBG©gòÅáqS_jDˆõÄ[äq_„ºú¸¯bÞFCwÐßnz·;Ä›…’µƒÿ¯ì˜Þz“~‚|¶ó3Õ…Eÿ£‘HÙé½.6䆙ØPzÕç¹æ0ÊEä J6i¶µ‰7ð`05ùÅ{œ@$€ã FN¦¿wY}NÊŸÏd-i/, ÇIK¾pžôPVðù¦ƒYp‚Ù£¨$è½—¶¯„Ãub³±ò.Þ³l©ÊA׬Ñ)ººy,Ù*6{9³ú•ë…5âf˜ç°?“ƒ«°PHùþhR——]²_é2¹nd¶×5p0<ý ms÷ã6üå×íü’X™q£ÈF—Ä«±qÌÔ* 0Eù?*°ë­»ÞÞ”g}T=»ÜçÃùÑ¿@“‡ÀÓÓoÒniO v ’¼à†h«û )0¯mŽÑ¹2%€c¢›OðÆ¹ +ѵG‹W2Ôw”…9¤×3`+´ðϰúï ûÕ'ëÁ½Ç<ž™xp°#µ„þ.±çVpÛõä\jZ‡1Ã,C'b¤ýªn­*oÄpn::óy|[µ›PóÊÝAuº™ ¯5­5ûfýƒ ä”_!ÏXaÈâ~€ÜR™—n_OÛ¶Ë¥]ì‡3?¦Æï([¶Ë° €u¹,‚[UhXÖûœÑ`·ú1Fkßü¯#É?ïmzÂÛ£¤€ÈÇÍäò÷’¡æèº´¢G°—Ñ=€9ÚØlmÈÔ)I•¡Qh¯­âfì䮲¡ôžÏa"pøeXk( ®PÚeþ¸™õ›A­øÇMªçF5JhÍ}Q—~™&|\Z¦öž£ó/x§i=Ž~`'ÈÝËUd½Æˆä²•­@ƒkž4¾›pwŽ‚!½žg`ok˜ÁF§wþH&w½8Š ^Ð6UŒ´éËy¿P Iá)Ã8´Ñ*![­J„áÝ=Üe¶ÙéµÎ<°“_Z™/a¬™€¸B)Ê`\õ “ m[÷º¦æšÏÏÅi ²ôIÜBø\ßU· 4–}ƒG®ü• ×NAöØhÀ³Ž9Â,–.sÔ%õ†+{M]XûT7€)iûî-ª«6(êÂø± ±kDf¬ƒŒsćžO(°·ã¨,Ùâ¥`yî b&##ôœ„KÄÛê'T¿N‰÷‰••­~ˆöRá`ÌÑÃjY-’¶¸¾£ÊÓÌ£×u‡5‚bÀ¦8X=cPõµÄAWNvOå{f¼Šnï¡áª3[¥ìò>Ʀ۠S(<åvÜÏñ×ý9ŒÍ•ÜQcÞýÅðê)}Z|Jsgýÿ93h>êù¯°æ•:«ØSÁMao‹ñÉÅüPDõñ# Ñ3™àgzöÏAß È Ôd©bŠ5 \Xô"†1ú¨ÆËq̪ðcÏãûk¼69PZ™¬&wºìäáÎùÀÙâÚ¥$>4¥¥ŒqóŸ: IŸg@µ ºªüôðù««A;4'e]¤–Â~:?dgy t) æË–çg”K66b­ù$Ž>á—îV>ií»÷Ÿh2¿€ô‚øÞ™S° ‘^•>E9®2e8‹(p]¿ü} ’Nw™ÒǤµœòJ{fùžä8|½3åÃþÒ÷Ùbà}œŽ*Ë7Í#[¿OiµM•ìÊU¯ÿRÏÿ? 7·:‰Nfa‘'‘€Ôöו¦S/˜Jü—/z唄MeªãŸn{VæQP$y8¥¬TPâ@TøÐ5ˆ~›Ã’\Džï–ò&#Õ›'¾¯+%l¨Ö!Ž PlÜ2ÝçÎ |ˆül||"¬‡Éƒ«Ø q™þ"@™†²GŸÖ‚ÿèįØë½ñôš^ô†6¸ü…GƉQzøÓ“Óç3éXkYµE-%¶l%¼š£U¿§‹Û¦,±+þþK˜¯¡ëåx%@D‘ íûâ©Íƒp/YY·U2 -QþâÜßLßÁrŒ}ôªtY6vÓ2ÿ _ß©©â^%΢ª)XK S%•n^ ÄE;Ó“Ô·êE¬uÑ`Þ¹ì®íÍf–;Bjd±8+ZÁ!SB†r·š AŠ‘g¿.L¹õÍŸ}ðaMÌïÇÏÁŽS®ÙÓ9ÅãÒú©–¿Iî]÷J§å7œ^6FÐØdŽ,¡¨ãïk±çÅÞvšÖæç†59Tƒ A袨ÄZ–cüåòäâ„ö¢óâ’ÂÆ×¡Œ"%jÁX÷Å^·!äÃ6 øCc‰¯º–Ú,tÛ* •F9hÎßgß_2{ô™Ð´ƒV\{̬L<`Œãl’ —-äðBnÈ?gEÜ3š¶°^š-XfvG¥tòB/¢§[ÁîŠÝòó }7ϨÓjiHȵºN Æ%¯—Õøcׇij‹Å›©»Ç¡•H°¸?CHz”¡äFª–»!‚ççÂÐøÈpü;g7;ë3¦[œäšôÁb^¡±brÑ~c]Õò»o"x*xŒN™.`Bh'œ“IûKM2+†WLºFºéÝ+`hóý#]'vdÕ^ªu8­‰/ E¦ &4úÝ#‰xc"¯f5 b²æš˜\ yJÜ´qìÇ”ÍwÔ‰)†<7±m«åâÓä ´ÛHL.ðz éN)¹EfszAüî³4³ÞF,Ó·¶¡vçtä­1:}A]ðÖöÔ[³9‹H  V±µ•7êÈ,‘0é;â>‡çqï,qB@Ö–gÝó}(Yú̱E)h a>f¡ ¢—N ØÉ6e¯¹ÖÜ_ùCœò«ë/Ô~Ý”ƒâ®Ï®‰“Ïfãå¬ŒŠ¯Ëq“ØÇžFš+@Žõ¢ÊN¬£Ù¼ÑCüÌúÛßQ²¸át€8Ë^£Ìõèþ^ÒŸ]»}†õ®pÁ\Þ®aÈ9’H­Å]… (Ó6ÝCæ·³\ŒZ±Ó Ñçú{ÇHO*-$KÚ›F{œYûòµòRe¡¼Û´ s½ÓŸRp#® Y9˜®eyßOӘܢ¶ýñô{íÁE´ZÑ: , ÑwÏÎôÈëð*³ÈÛ*Q“*þòëw0 p©×XZ!gZü­×&;’Ù‚r¢~=š4M 0ŠIôð]£‡WPAæòläfSNȵkÿFs¾î^âÇvDÞ€—¡wVPì(Zæ†ö¡,«žòÛcz¥ïôŸ\`çˆÔwIË@{(_uwRE2•¥~÷HÙuì²´÷õMŠM¼\ž²ZõÞCýxŠw/ÞËï3E–v²f5°ÕâDXUZ3?I+Øî¿ ¾Ë°”@4o·ÁYÜÏuÊðâUÁÝ<à㮈·¼t;¬>î‡b ȹy=¸–þܸt:FèÃA¾Mÿ?Xr\öÙöa¼þXÐùR„hFul ~]:”µsWQzŠ]1ïÀzXréÔ(FªÀßžá÷t«º´ëLö–‚F’,daÏN츔9zèÔK™ð|¦åºþœ€dlžo]äzº’’6´òP‹2ç‡ÄÎXÍ3\”¯sÞC»cíYP’ÄZ,¢ïǵ_—Ò6 ÀÊ8·/ŒXhôåºÞ=оß©næK·ËnK1=ìœб|lSJùkT>Œ™¬úQÓ×ÒÌW \[Ë<‘hÁ¼žTÝÙi£Y|·Šábª?¹PÙõÀØr†Â¶Vûwµý';i‚zžN&U*Qkƒâë„´Oó¤oDEv+ÖZ +¶[³ˆ{æ^ÁšÔÖÝGùi’½œÙçŠaaIÀ¸¿üê$5dâ¦' ƒÑ •à ™qHÜ«0]Þiî#ÚÐ~ï]%‰âCÛ”§fÅɦ{Ú·ñH@ÍÝ;hüo½xùoÛɼ `SÓëÅQt-.³ÆH¹sb2<ß¼ßúŒ°Ö@¶O~¥¤˱ Õ¬o,…Y\râjv>é°xQtgé~>êJÊeõ‰š™ë}$ S$©‰e“M›1éà3Üæ÷¹‹§v#Ž…¸oΣŒ>"ÂÄÔ™^B;o¢™.ÛyÈô ·æ½ÈùïCB³í`i»meßSÿ1ºãëmmŽì¤p._m÷`K‚oYÃ5eõˆç¯§µB1¬ÃPØê)¸ÞÍâÑã\_S¨b ¶QpE”z½b+¼M\ÚNÁ‹wi÷‚e1žRø;rŒ°=5ïÏ€äWX ÈcÈznÔ€¿;%Fw´}—%êbN”1ý½Í3þÍÓ‘'œ»íoª/Õâܲ9_R…‘S£_åŠfßMWŠ0¶-ˆòj1à7oqž;òò»£ÑÌßšx`ç…ÿþóèŒ[œyÏ:+‚eÆÐRŸ2çÏ!]U÷‘ÊÜsgý¿.&$È|êZCÀ4H¿Ø_Â#W÷ÄécoV¦AÂåv‹€kp¾¨t+ésͦÁn¶ô^9¸ƒ é†9ýž­TÁ©6Q§°óÁCarP  öÀñœbo1z®òò`\´3ÄlbBºZhcÑK@0ÌA¯‚&•Ðÿvñ‹Dàq»¤QÂ"<·ä<’H15F;”LkpµÓ‘D]æ_¦vüï‚…g4w>Ñà%–| ð('¦Øû&¯‚O™d‚áØ@’›CK§Oö]þï{ò„0J{†ìØÚŒÔˆÒ8¼€ò9¿ã4•û'”Ð/°µvPëÿ'iï*jQæ&Ü×ðé°—šÐD3Üœ çö2”BªupÉê÷È,ymë´5Ðön®ÆICƃ²?ày˜ˆkò[W1 Ǫ!>ª¼¹S‚ÝæÊæó7–cSL36l$.0]%ä !å}LÍ,° ÐnS· 3¶)»c÷/r•'e£Ï¢l·ÓјfÚ¦r}ù¸³±0Õ=#nql®m@´qmÑxã  $gžøú`èÖæRÌ=úœ^¼V’K)L°!Ix´xý;í_KÙ@‡Ü±”¹žñRMÎB`º4î]òïEµÝ?M?©ºÕ;ŠOƒ74ügoå5NMP²†H¸¶0¶s/µ&œK4Ý¿MÄÇâTmIÈë~ÄB§!ýx –ñ:µ*\Ážk~PÒ$–•€Òå+œ÷;ù±m¥dñ÷µcñ (¨!²í¸³¹ƒâÁQ8gjñve)íðMÉA$-׈‹^…nA„/'±L³ÏGGàHŒë—d¡õ*“%§Ñ\œÙ‘¥¬W³òk‡Sù¤> ÆS€ *Ö¶‰Z …J/Øž"ru+@]ñ²·Å/>÷èºÚúôN”Ôå®RœÚíþ‡¦Ÿ¾qiíÎ"±*j/i^*,›¸gìDx³ó‰ßy»[A–=ïž/Kv¶œ(ƒÏ³Kà.0ürÞüß“ù<)6ýp”œ^©Y+Ýô½æ …pür™J¤xJßç˜Ñ`ýçp•h—Í%88žÈ#A‚9ļ؇þnŠE}†;±öÔh@[ê–•ÚŽh³Ï%xï–OU¸â,Ë‘ÞocÃæaoq77•qW;:¥[q&ÞÍn×և鲸ið]5d_1(À/u¡8º) ¥‰3ÂãÊpœc,Ü, ·´Ð8g¥ù– |}Âl.oÍCäÛE(TLUW§›Á0Ú–´eKý+ïæKø›†ÚÌ^«)¯‚$™ [Éç‚>õ»1U,ûzqXH—}ЦÁ8Ïáêò«6ÝÝ#­¡ ö"8}V»w¾T´£…ñ`—•Ëízg ‡ƒ¿çpJût9‹Ê×(ðô8³·jÑU–ï··Âg¸u$`Ñe&¼÷_U5Å‹ÖóÄÏÑ|Å,’~ýèh²è¶< ²/QA/+±+Z„£,‚õ¶ÔGý<š²›%Ô;‡Úê.I²4½>Ë%W"ݪcû}— aú°ÌJlô–…NWDO¾rï#ënü—XÊíÌF_oî?…‘Öɱ»E̱|Öù*ÀþD­Dý™¼rø3fêQ3B™¼¯Ä{Žr9^ÈÏtÊš/¡ÏXÂyЬ_\²œw*°Z‹,Mû… p퀜éa+³… W²Ño(êñ>àXÿâ þ²«c/Pa|õrxç¦ïÝ)^›JÔõ Ðâz/O*G5²€ƒRB™íñi)aPX}—Õ«/<0¹Ú‡ëÐw`Ù&‚±lÆLU &.·èÑõßö|‡ž(ÛÒ‰{A¤–‡”µ0–«8ˆëQ¨SÆ‚4ü ¾xÍ™.l£ìDJZ¢éÊWÊŽ€zûçÅWvΔB æu.ÓœLßÓ74;l8îÐ¥j’\4Ïzf ÚbrŠ Ùj‡H¿d®Gú–…Tv<éEÞùÚUQÍ ÚŒ%+f§ŽAl)éAIõ£uâ­¼šž È^¨ÔÉu¦„ÌÑVT†ªF!9Â~ÊC¹Û>¤äz·vï“MkB¶È\KÛjjwëC…ôN6„d„a– {œ^wXVíüÀ{Ã59îCVC¨Ü®R2ä©c¨»«]¨•åxz„¦Igðƒ¦z†-¿ÂBÿË«Æï‚g×6´!)û’=IzsôƒÃñ]Ñ˧GhEjûAÄ)b¥V9ËË£(óŠ´r ;ê×QgE&¡oƒzfämHÿóEÛœØ4Ë cý$›Óo“}š¸EÉðY–t.4ó²©fLjÁ2Î]ôeAhw YŒ¥àÌÖóú«]‹Ù )h¾12(ü_YqEUÃ3åÿpwm® ô3Çäž RICÌwÂn·^D3âE¸O¥j‰Æ¤Z†i©aNîóoÜÝc™×'n¢_7í_Õ;ˆÇ;&Y’¶™"Qˆ_³ïåôÕ¡m— $úlõ(í}žp0qxý5#ÂÞ½÷¦Žr8á@ïL¸D H´wsDƒÖsÈ¢W×jƒÐ¯/‹ƒì ·÷#œÈœƒC=¸Q1^­Ð©ëbõÁc®Å;&ë“êò%,EMŽà(—ª÷ « !è+/±³Ó0ø¿ôØšÝ&ÑýÅÎáô"²Â¾}®Ü4KÔmæ¹ìDžÿj…P½Dµ‹¨´í¼ðxIÿÙF(R[?¨Õ~ •°üû˜¬Š:¡ù«&k5$ò˜¼á‹¿×¶i ¯É„A$FN;‰FŽgÀçúÎèᔉcC½îiøSW\Ì&¥ß ΢þ cÿ½½)…³Àè¤:~{ñ‰nzuNŠø’‘'=2½?k“ÀØýg'KqžðŸÖ!dK{6»5èW}-pôƒÅàQ !=NÝí32uÅx®`eÀÄÚÛÖŒ.ß;Œ‹©°¬+3^ºj.%‡7‚ té,´ò›ûn=A…ÜOoqòïÆ×=ôúèQ’`FÊó:¸¡®øa¨£Ãž›¯0Í7¼¤VlýØ×,2'Ô@ aîSµÝ†¡Ý@¼S­u£Vt Ú(”M2’ƒ<0I;%ÿ$Þ&âîwŸ"l.PKò,Ÿvrw «k:ñS0ñ{õÌ Dìïîi¥Æ–sµ¹*7ò#­ôL<øvëêö†FTö´L'*‡l_S ôçG„Š‹÷0žó~íÇ–á7 š_‡Cy[ױѩéS­u° ^i$‡õ€Ý]'R¹²®"‚0à²D5qÝ@?ÿ.Üõw,õ‹ò™´Û±¼Çi ¥=Ešd{Þ2%¤b® ¿f…š_aE†ÎIu<l8ÀÙ-#¾ 2­_ç…¾¸I3qm‹¤È$gÁ¼ÀëW­Œm*˜õ>ºÖË'à+ú™+AŸ†RS9¸zâFŠ-nË£ Žš¿Ž;ctп]ýzAÎŽ þÌ/ LHL%ˆ€zÎר0ž×õ\YkhÃhëTŸ¢¬ ŽX{BÒû!pDN±WBNmkŸÆû1Ÿ½ãÉvßqë³Q¼ë%(d÷¶£njÀ1©1»k–j%Ôí‡cLÔ©]½Î»Áÿ¨T9xuOéÂ?–êvPªH1Æ8ø®@lGÛwT)êÈûsÑSús£Å™¿ÐˆSØÛË"÷K™ã3÷vÁÙSƒ¦}·Ž%›U]ä}'uUíeUo?aÜk–—²m¸8­ÔnP!¼U©íÙŒ;2¯ÌøSÞô ýgk£òµû Éª}"Þ´ìë?;Ì÷s0 }‘Ü¢â2íZ—šGâ~é­ÆJêTX⤱ގ¾c¹‘ÄP‘|ˆZöê¦§ß ØtÌNôcøf/BY¯2H9×Ñ9-zíßZ#Fßã±a\»K,@í'ZÂø§à´A{¨:ò¶›‡Ýê]Êá1¸S; Nºå8òB’IüÖ`Uì”iªt’Á±A•- è?E¼ ú”eJ´Œs·J£²AÈ „À«Ö™Dñ®¾¡µ€ôƒ_—Ö,d6—ÝàžÑ·KqŽ’OŽ0µŒúˆZ½p<´g›¨ºHºµûB{,b aèÛ®æ¤fO¦dV¾Û/ÐËG4þEöÌgšÕ1Y‘@êah¬=»Ô!ugI`D´3cEŒIúO¨3Û•ÇET!u¹AÀ÷bmþ»0:sέ„:ÀyqZØüRúb”{vu_QàÍî-¢@ào\†7ü8-¹W2½3Ï,à?E6I>[åœ4ȵCë}ê[½!;s”©ºÿ‡†Öaø7]à,°%³b‡_‚∰)HR?áìo\ra;1Ã|e4éÉÜs#mι µ»Ù9ÅYׯÚ/{eŸÈ·UƒÏ±«Hb8ˆd´èÊ÷ÓEȧQ€”¯”Ò áé ›5ÅÄ&ò’Òm3.µ ]k4àQo@”Ù LfYó§è+K—7Ô$’˜òÚ”¨ÙR?åWèy«AÒ iZî-˜Ä¿û÷ðÆFçèÙö¡ïaÎQ…QãÁû2r7ÚÉ?•ž{’™÷ªˆÓïÇ'ú Fî%ëÙdŽâx;Éá[-VOè=xþO&Ôjk‰'ð~êp%rP|&é M,/mìqÉ€#INûï®ÃÇ rÆjÿðšt€ô¦$å¡/´ßz»í3yŸ8˜ÞDß±÷ƒº— ÏjùËNB$xàëb¤¼tˆ5NÜðÑl4Ì k@·~äY@è†0è¥üš§yŠS¥FuFÒÎWyë_;YàÁ²µº3¦ü«ºûש¨F³µê€kË U8tXf£zìÕÙ4/É4ÊM¢uzÐ=lJ`¢q-Ž|夡ÃÈòI í>š«òEyeÛfô\Nù¥kßSÊŠ«B' ÃäÈ41P~Ñ×`8¾TX¢ƒ&o4Iû!–fºÈ¨ò¦ Ì¿—X paLž+•nái`y/ ׿@й}RmCžÏÂ0Zeî/ÌS úÖDü¼Ë Ù 4oÓj³ûÈ™iÈS'>»ßp.!'ƒlŠ,2 Ì&ñ„(ÞÇ º›îÁ{“˜+nt½cy, p\mIS¹rGì¿§4\í>ïØcRJЭ~]q“!Åõ Ç–<)Õ‘þ'…±L¥¶ýŽdÊrþ.hkîz4Ódvu¥l¡û—0xœoäÇTVnïG)±¿¤2ÀõÖlO©õDlUOá×ì´ÔúMYI=ºq™Vf$ŽÚÜbÓ"›u²á}¤µGš‡|lnY†8à=(TÎséz|;ôn*5Kýþ~É>iD–UNÆ¥y>|odK)ÁoÙ¿GiŠ›ÛnÐcZuš¢þ¯Ýh³O¥×!B†ZdËžv$Õi㕜à>ÐÑ*šEŠšVçso§È`é²lj‘äìÖ9ô—±¼-¿ƒþqÅS6ù™£©hfû×þÚkÎ[P!{+a0ÄÞgO}Ò&g‡ú¹;Öµ£$©pÝ`”æµ(U®›"NcÕ*$Fsv4½ÖE1CÝY){ßÇ( Aú.Î¥\Rïˆ÷\ž+³ggÃ,¾KÍR8v¯­‚3Yùo3_ p8ÇçÄVj;¥þ·ßoìX#†s’®¯¶ª Ão'äüRx5¬q„EöÈgšž66$j´÷Sèk3‹4m«þ<ˆó:ÀÅ­Ø`)å 0²d¶è¬¾ yõH4M«fÏhÓ¡ñì-\Ð;[ÏȤ ^÷_®7²îçÞœFcÓ-çAùaßOÍÿ 0?É)+HÄ^SìFŸ¬´*`)ÚC€B‡øFUJ\ r'U?ÕI“Ü^~P_H=9VTêCl瀱§D”Ÿ\ØÂ²BëÌžÞôMÏ)±'gh“rÅ”¡‹ Ñçˆvæh·ª@-%ä)ÀL3_ñŸîÓõRôWB »c'Qȶ"ÿÝ"wçÝcƒ8{Ù©½Ñv÷ƃ½j³ktAÚW %ëHž¡BñRA¨ì©VÒlü¦²¸§¡ˆkyš^Ý*콈ñd‘X¾È$€Ë›Ý) Â7ä¹6&À÷¤mLXíì¤cÍêÙÐÎÜ"ó{eú?É^Û¬-´†?iˆß®ª®ø$ „ÒvD6.Ekli*ì«¡Áwƒ$Є¹üÑàΧޫ£ž{‘Q–v¡Îd íyªÜz¨¿ÓüÇÔ}y<é.[Ðo³ÕŸÄÚÆˆÚçFÙXëÞPÈZ‘Æý{;Cv[kO>ÕyÑr×õc[xñ¨¯ð˜äàe±j’h´G’¬éת¥[M+PWûȶùBÀ®–§€kòœ¶¤ØÏ?ŸÍÏe-QóÞ—‚àZ\°lÊjz6 ËgJïG8£þÈàMC^Ý4¡¤¯?‰ð|h.¡£ì_ß§ó»÷DâÖpsÎNtá -¯%^:{þ]ËÛu-É ÒȦ5’""²'jÚã½4“ð©O¨V2žÁÍ1jEÈ ETfÇÀËøSZÅ QRɼoaL7El–F÷IT‘4…Âòów]‹Ïïí:‰÷swK7­†;ŽÝJs´™Iñî‹Ícœ³Yƒé:]h?üYèÿ£‡Dõ÷pŒ’a/Jï§¹ð¬ùOÛü3w;5FA€çHúÆrdk+æ± ¦Ëe'ÅÉ×2¯ãÊ|C®:¬ƒa€‘0ÇàðïE굓û•MIK‚oª[i7›1õWf’Í­Nþi¤GŒÏ€‡_ÜõuT¼¥Ã@ßð‘qICöI¯dd¡Œ_/­Éb¯2(Çô"Q²²çò„Pùö€…,‡1jjw’bQÎ#7¤ÿiÀg»X´€UYÍT°&½~ÃT¤ìêM*{Ö}Ô >Èà–ŒE ‘ÎêD»µã<ÕÐC¬ô' x€m6’Èhtuo‚~¬Xu;V×:èL<9üGrR ´ÒC,Pðó{~X9~4C”7xðÑ–sßm ÙlqBTám8ïdÖ‡+©émM£#¶ÞðµØè²s¶Ç? ºÒæ¡)=?«}¿3¯m=\fc µJððžÒõ3­¦3!¹s´Ôμ'Û"ÝCб֩n’üÃÅ;t ±¤@Ÿvè>oBèH “øN¡F{ZÉྠ)i²âzÐe©Çæ6çOw ÁY‘èyËBiRø¢ÞϧBج7´.([ê œtóc ÊvÂG‚ò·«W_ÇÜfT-†éhX½ª“»Qo`Ô˸ C¬ÉÉAW«ña»t‚¡ 5¬¬aÿhmÀ¬¯j©<œ«9GX£Ôðuø2ïÍ! a‚æ¤G ÿL>7õYJ8³ôª_0ÊF¤óšðLŸøI&ˆîÚ! Mƒ›©¿IKˆY꺬Âb' éªÔ-Õ{¯ª’Ü#á…¿kuxªÖ'Ïæ0.ǵ|c®—êé*Ãñ« KÇÀ7Š‹«Ãm4W•Íô ´³ªø$3‡ˆ J³Ö»¢ÀáRäˆD.²½½”­81ƒ‰ÄôÖ Ge¡7v)åÁë–ï £çë~CC=5‘Œ„ñÅg+H@†DžŽ®ŽiA¹s%‘F{ó­Ãò¦‰‡¨I”ˆpuóÜÅ9;Sù‚Wá¨8¥v0Ô»‹ ò¸l& ‹gB>,ûÖØ:…Ç×gˆ 7z ×$7kø+Ý$ÚRmL ç¯ìCì~¢ˆ`¥‹±w&ÒýXöd Æ¬æ˜¬ƒ´øH"š¯"ñåÅ]÷¬Æ\ž.àôJÀ®iMá3KR5ÄXdÿôüïÑ*w€ìkVØ«,_¾âeÔ®J×åM¬¼!ø1xˆ@Cl)fýÄÌ= iïL•k,Îΰ؀vªs‡…R*ÿ~ùäþÁ¨T°¹‹›r/÷ÔeœS”ž£Åßla•®”Y­Nf¿ÞÀÍóøªóAﵬ”‘Ä(q² C[¡(‡ uVt:„H ü1Zâf?I8psŽ ¶ã5³w„ˆŠkà_üÂäŸÚçMW”6X÷²&2gïìž`„ÍW(Âm&9Ý©§¨M«œ,í6Ùzå¾r¦Hìã›ýýL?Ö~2Q5›5'°vaPQ¡ƒƒ_t-èSÒâm³ŸåoŒv£ÉŒ–ò>€Ý'í `¡O´Ñ¨ÐÒTTw^jnå÷Ÿd¸}&«É(çä×­MØaùBX9µ)¬º8¿L HÖ„PUHÙÂJ’ÅNCÂÔxb`Ïì(YÓÊ«€HÈ)_àt4¿´£6&k6ø¯G{)®þ\x–Ç’NÝ*‡ì%¾š1§õê`E²1e×…! ŸÅ±†œÎõ õ+öÑêQ29Þ¤Ï]|çd7ìÐâ¦Ë²ŠN©ÙÑœ¡W‰S5‹Þ;ë¸û%âmª°s1}=õ)‰O±g [px` 4šðý¦Íüõ–ž6¹>öú>Zì„èÛœˆE\eZÎæ1ÞcŸ²ôB³©ø‡H¢ ­ä7Ôuª0³­R‹ 9g)ŸTû[1RiqŸ©‰‚”0;p€2¡šø”6Î2³pzaUQj,@/hKÔ†Ë5í÷×2Áƒ¯SCúŠá“‡ª)úª%ïµRu\)“béP0S2 *¤JŒ4ØzYì¿íDØ{`? v1=${wzgŒZË]ÆÉë"7"ÜÞå7zà ó;"…z@¡eÀ5ªBíI \õ|Gȳ%hþCMÈ€EpÆ`5±ÈãM·Lù{‚oÃ+«~;è©=¡mL8›¬ ƒÿø¬~îâ8H½œò^üøDY ñ‘µ˜0°6˜\À9Ú …ñ_«´üž™«N£È&fV‘ñx39^òmñ6ˆN°}š„ŸqÈZgR!ƒ®‰ÝÆ8ˆš&ûƵÜq³ž¼¤:la¸%Šiàs­âi»†ÐËêŠ~±ïŒ^Ý Z³ê S @ÄŒV핎X7§.e¹Òò¢ïŠà#[^@£Op‡)… ùϸ ¸óÞ"ʃ¤aôG¤F‚„,bUozjM‚©ÅþÞï"¸*-mAÖ“ÜÖ²ŸíH@É…ý(—+ó+×qC£g•‰´³øè_¯æÏwÁïvP`u⤘˜Iän–1Ù.B?^Ýc‡ì­%írìîïaeÆ€>î´… mÊ ø¬N’?Æ53Š\ÊçÓU|5ž™ø“Z8èÙv4^¾1dëêÓÐf¶ËÌ‚Þç›HöŠÆ}áŸz°ìŽ'YÛy  Eˆ¼ÉºäZa¸E‹$¸<½ºªÝp/óð j¢ºp>žO•ÀÔæ¦V'ò]£¾úÝd­å 9´S˳9[Ë—6šfÅ¢¨›ì>”=9kêG•wñxé'rQÞªÈú:Üw®é“¯\u¹VLîvÝãìö¼[7½‘"—¼)ðÉSÀϱŒór*F¬ oðf»ç_+rsׅ츫|mõàÝ l°Pý_.2ÕYP¸{«]¯q+ ,š #…ai8kC h#V1ÅêÿÁUŸyîêå2À߯·(¤ö7U‡Ýê ÄëŒ#Á[Èè 03cöð‹)”±}~®ÁãUDïF†[dr>Í‚I×ìHH³”Ë?M!!×î(™Ÿ‰oÐ>_â‰ÄÈÄc·UM=£Exü2îunOîŠЭ:‡Ö›Jvp¯Mþ[Ô7ÂMøUí?‹=õ~£>K=Õ3%|r^÷–¤ª±‰Y5„,]¯äý´…¹XOA6¬ilØ¿h†ªE²jÑ6ã( ƒ×°ßUgðƒ³$?U@gBšü#qZª„7Í‚ªß´¡‡6ÙJ“¬3|罄Ë&UN‹ ³”àv }Â!Œ6nêoë-ï`qää¨u/m¡Ôú|¶–§Y¾Rì©°õR(Ò±NûT¬ÛÇsXqìõð« Ü›·¬rÁî% ks¾ná“÷Ó»T—–-®í¨þ|™Í| ªm f-ê:™¼GðÀꆿ½ªqH«É¿8'DEâÿ[ß!ÈvÐ)eèÛn}›irv|)Añ×ßÇTùÎV¾žÒ&#‰/¥Ïbd][¦'ÐÎל÷S ]ó²·çóÊôi¡„·ìPO…Ümù÷ÚÎÊN­é {U^Œ üêHö’@AÈ$vÒw1óËÆ’$¬/h3"h¯%]H‚IÉ‚v>£D¢ÎÉ’À %Bžm93e«8kÓC‰°ë½÷­°|êv¶—~Ñ`w×)@sˆ¤»ÉrÐÿnj‘B>¸æ¥ÿvºbu×™¥jm®1wƯyx·Ó D‹A[*Jå«^ºæ"Ð;·¿'šmñ †`Ãqì f ÂÖÅ·‘~¸€ô00‰ƒóÊ?VúæÄfÚ©$ÁþžUÑh}G[ÀéR*­dYÉ€B¼Aóæufç Ý'ªžu°E%VãÞÊ(u†áMQz†Ã¥sFö2\š¤nÛ‘jù¸|rñÅqÇ›{iñŠ” ˜Î›Aÿ<„=1VR¶èšUE=ŒdIº,ï:iFÿïÚŠ—ßFV¯Æà,/BìsQËÄ"ňuðme“§ß'ìâ ‚Ÿ¯5ˆ}ÐQ „RA¡6– ä!€ÿ:EÒºþšË& WâuLF·ž6æzméΙù´ž+ˆîGÚ"ê"¾0`ÎúÃÒ¤Jï|jÒ¼j¸µõº?(D d§ÝbÀ8a;ß±¬y<ÆûOÑÁ=zqt ´w®wW=”Ü ÝÇðVºý9I¦£œÎö[ïoÓ_Z>n)±®%±Ð»–|T»7˜8&<ð&¼ùÝ馇|*f<:•ŽP®Á‡1v2& eÿiõ:"ÕDÀ6\•¥Êµög yÎrÂ’$‡'k¯è…Ò ÷Ô\øûêwÁ÷øy`Áˆ"»1ÀOØÑßœšñ4ªDXÇãîN1E…V›¢ÛÓ‹þ—I|&i¸ç‹Ã–ß«ïm‘‰%îÀýÑtöùÍH†Ôµ$/äƒt í-¯ìK÷"€Ñ©­Ù¸ !ÝZP'Œ)tð޼Š<ÿ¦.pG ß?¡ÌeýÅúy—ðâéOµdFæZ˜;ÞBë…` &‚¯¬ éRÖÉŽÕtçØF'Àiáª7˜¤£ ¡3¥3¥8hKh/Ë^o<;tXQ>üìKY|àíÓÔ=TÔâ0¸½¨”JUý“ÃFæYwOépÅ*)>^Â@†`êÁ¯¼R.e#KÇ©•]tÃi(í8ßa2+GEÿgw>Vž±¸­íŒaà‚舨÷ÄUõdÔV=ÈO=hñ.XÛ7z»ÿ  "›“ȾÒXNïÿìðvJÅÙò_kw37FùT+"ëªêí{aœûuÒ·ï$͵Oý¶°´F¾—½Å²y#~øú¿åÈg˜¾ã½îVÐA\4ï[ì ú6ÚËBì›Ë/ÂѾv@êòzI(‰Z™¼ µ#ó})P϶L19%O†;yD, ÌH)a ú;ßV­ûÄÞ"¸ì£ãÄŒ‘c«qö´pœYö¢ºði¦z*Ù•øsr}[IŽÓ¥Ä<@´cJ9 †êáþÕb¯ÉÆ#O_Õ}bv1ü6Äó¯¸Ý3—^àÑ.°¼Ò­iq¯u°ž–DAI¯|ЯcTú{'tÜ"úÿ9 bÞ¢ŽH¨¡ºK3жuš>Œð¯B+ÚP¥*a0sSFÎᨰïé]bè^µÝèEÑDÜOÙ6qðì—Ž¢ ™‘ã?%òY¯v„‚a•ùêšøÂN?Då± 4¢N쀠E‡ìMTþêt:ÀU»:=Ò+”g¨±P˜çk¹làœ~c’4£¥œ@Âä›G–Ü`&—¡GI7•[ò"ë¶šä›ârê&Ìn˜¶ßGñ ¥ƒŠwc;¼F®zâ^{¥®HËþ€›t tq‡µ—/¯?ñlØ­@C‡£]¿Þ_âSN´ «e…öÞüm]/§;p¯|³ê]þø†1 ¸Q†Û1‘%aE2Íô9bÔT¬×xÏœ•YoÏÇw"·÷2¹€Þ{–Ä`n*ÚÜË?Ƴ¸l<áåá'ÒÂµê ¶?~Ë;óù´NÍi¾RN1-ÞyA= Ì´ygÓwºãÔÐ÷GûüÒ„Ö VZ¤ªgèþ›%KïÇ ¼æÒ2röi–ì Yü¤Ìx] À‹û‰g¶G!ˆF"wD†Oˆ±EK®LCpTÝž•Kæàd¢KMýbäžNÚ«fׯ«Î¥ßKÌ'P–Aÿ©bG4­w÷Þ:¹‰à¹`©Žç‚™Ú¥‡ ¹£¦EÉÂý¹Dœg ÞÉc½7®³h[é`ÈIX9mæÄQSìW±Þð>Ö¦ÔMƒ~§–Z¿Mk4 ¥[÷¼%"<§õ§·Ð­Èj€°cO‡@á¸Cup}E¦/R—¨E(¹–3R]¸"$&ì8ßÙ!L’±`ÞÌ=«KºÑÊ×g~jhÀpUØ iüº ^*F9„:©ÄŽªzffnc592Q^$ÏÍ_ïç¿i?®æ³‰y£ˆ ®®çö—£IÉ"„§÷:Ë‚¦rgÅaÎýZp%~+GC>Ui<—÷‹3+U´e(>j• [[ÊM ëj?Þs8Š^\ªæÜ0r¿‘BFÓ7Àh v(ùºÇ­ E`j.ŸnZ¤Uâ½|_MŒå dÁÉ&2sùIYséªyf4—>A°Gpòˆü'«Uj]Æò½¤>ërƒÌíW\M]ˆn_›äºck7JóÞÛÓÛeI ñ¾;åäm#»„jÛŸ³NÚ7á\ÊÚAQàúhÝ¥u@Àžt]( 2›ËÍàLTÑ5¯ËÃ&ùÄ"üHJ3lGÊÙ?7TœýöFDÂ(0‘ä.ãè"åiK­Q<Ïl¡é…‡õà[ ,/’‚‡I|߯0©&*@Ç Ûf8'¥»8бÙÞw‹H}•äüd8ßÞÒ6P³¸¿‰ HUþº§éhÅxy|ˆ ‡g¼ÊF•ÿ$üÑ@c…tn^ÑÈdÓŽÍíão£Ã¹ƒ-Iü¶¤ÿ-ÞÑÈqµ ®' ¦Z…o¾Ux¼VÂO=W á‹kmÜÅØëS$îÆ5Ÿ5ƒJË(8Õ.g¾ÄwŸSJía÷=yz©ãdù‰±JøðÆV–DâFð·ãÖ¤/­Ã5â;ô}žÉ€?AMÑL´ùW:¡§«,ŸŽ‹Ùs´ƒo)Þ®ïÞjå¬_í=ZOžTÀKÏSnìõ—­ö¦%™×‘\^·„­m]îÓBr׳Ë^ÊaÍ/ºè\WῳF^#ÜIéë-lͦ–ñš¥ù8ÍÄ6€ŸÙn—ØÖ½™^eŸ2_غ>ò@Éé|±_öÖÞ%>'ÀÈÚš°M¦,ä(×úÍ›—±— !Éç߯VÒ{Òö>³Dv0‹&ekÿ0®o1ùCDrÏ7´Uu1›n,R0šÃ|HçMaÂÿk•噹J`‚†b£îÖ¿t·´'$kS;à3ä5Éš¤zà bfF­Ÿç)…3Îê{~ùëå`(FiѬƒ¥L°pgJ潆#Þ-+fT`× ƒ²ß.+³¿H ‚â¼½g-œ5Ÿk)©«ƒ!áD BÀ¯j²u*|¿AËŠ÷Ü},§»}8…^¾ªÂbð‡ï’Tõ:_øPˆFúö‰X±u“W|;ŸÁyMAs¼¡\dåãe§‚á—µš"©{:};J“lgb3æ"éKöõ(Ôbb¾|Ëê±íÁríp7«Ÿ ‚,¦0ZÕ]U³÷CÑÙ3ŒÛ5t™ ®s‚’*ºsr9g"É]íÈB´Â0‹Õ7}Í>Õ’øÚ»«'SK„ˆñ˜öTÝŸOýãcE©°ü âÙŽ™!”Ó–D`®ýáÞ ±oø#7lo^FòX« A lX×÷)¿n×ÏκsÙR¸J1!tnПԳû*.pæÆ‘UÿNáÄ~ná¼̧'H«æf»ŠôOȵ²±@nL5@$f†xQEµXpÁ»kÄ{ÿ·±~|û¹JªÉ÷)p‹•ܲƒ´h”rö³šM(Ïw%+ÐBc›\nHrûÿ¬ŸCtDë›ƒŽ’ý­½Ïƒ#‚R/:Vó«õE+æà»U_-OLTÕglÂï­•ÞíÆN3>á¨î”¶—™lýÿ îÉÓ0à¦í†Zô³ˆ»HK[ýû—ªBâšëÕ®m8íõ@«L‚é­Ò9©Ô²“y0¼t9žùß-ÖåUä7Ú¼¶P2åØ1Öå§"’GuXÔma+ZnàŠ+[29oã¶¼ŒÓúcÃüdžGÑËà´T™}ÇßÊîÛš8æl”0Áæ\:MU? YCK%o€pÓðçÀ8G8?èÌÉ£*º'fä:·ÛdòާÐã}4fê˜K²Þ%óÊXë0._-²ÍÿÕò?­’l-ùio;C\¼> §ÈÛçT­¬ØV9ZZfGM#‰eŽc §3¶‡«L*´/¾ëï%ß¡•ÃHgóü ´ÉßÇBVA@@SvD•B‚ÅˤSœõÏ]|L«0,gRWY-Æ'««_µƒiÐýÜv‡þ‡°=ß6GÎö+ñbzñ S|!üFÙx\«ºrÓ?µEðbÿ %ÓËb;ö TúÉþ]$xI©®‰*ƒŠö"‹“–§†U>®Zkvâ\6ºÆ ãC:}A'¤YköËÑþ*åÖŠá }°pcib dÊU5×yÁ·ÿ –é=îB_ÁúªnÄìö¬àBãPïúðù\Eß\¯•ÿŸ­¸¯û1ÅDn,&“[ºêygZ›ŸÌ˜ËZã_ðÅ'¾Ëí¼À ÿ3^J´æé3*»¢Ñ&2¶FøOµGGXÕ`u{ú¹9?HîD¨¼œ·øiœ4Ü*pý1¥mmiD *Dü…„×|¾ qûòäFû ß›R›’˜­:5rB™QÀóΣD( àýg"ï;q‘–2Œè4XçNG*“cC¥îGSy¢È@uO¬?:ÉÆRYš}À1HV£’´j—‘¶Gê ¼VÅ$“QZAS/wàTaÔ#¶Ïpx²É‘Í%§ÂºÂÕùåN¶î°éL 8­‘Ôù¿j{S‰þ (ã¡.Pþ"q-ÞfŒâpt×?"{무Á÷V6õ;U–βA©Þ68 óÕÌâ!¼¸9z~5FâB‡ôN„7ýWÈ=è=`{“(´µÄW ç©§å;À6íìî/ʾ¬S\'Üçé±ü‘ Ó¯¤ÍÚ=ì®ü@,ü¶us6#úr†÷û1Ûµtr¹þˆYLÊAjF,¦ Ã%üŽ;kã›Ñ>$C=2êz)œU¦J¿ÏT¼¬!žùXbøÁÙ;]™bø NØ@&Ÿm™lócgr3•øÄw€ï4˘c=*]7JÏ43-êN_’äï'¿è$¨kÓ8{ØFçOø\̃@7%S.—,½A*¿dþqmêRüÅn WQFÖžEt‹;‘±¼´Ì6Ë›³qb;Ä´ÐæÁ5&Ír.ÐR"‡ÓÄ+¼¥H`9 8¹º¸õ”XéÚÍua£ÊñVèk 2€ˆ$œÓn“ÿ–þ<-*¦‚<Æ5*NõjÛ <Á'«APe×bÒÈ +ÌX‚@fþ=,®ÿ³ç@؇´÷Áâï³ûêìD‘Þ€£C;X|Á:QøF"wšLd3tµ<ºÛ`(‚/ô² èѤ`p=Ÿ´ƒÐthÑQ¹ ž3kª€¿èËŽ¤ß#4ïŠ[¬¸cEló ³å‰ä¹³ÛòyX“ˆ𠪶ë#·ÜÉÚ&óÛ+~9팷­€ïÇk€‡ê!¾W7Ÿ´–²t*½ù¶×zžŠ"úŒP‰æ•d³%~õm5-LLZÎ?ûcÆ2•U‚‹_EŠëY¤y&„ci[“8Ãö©eÛ{X2š8üb«D‘úhBšJ·ðî›Ú¦‰r`wŠŒlS…Åøª³ßž ï_üÛ!oA—Ô¯¹)¤”ÎDš7  stÜ6®ÔòºŸ@+­¸ÂöU®z^˜îž/9Œ’hD==œ8Òä=ƒjŒ±So·é|,a7î‰Ì‹=o5²]žØ) ßÅ»öªO¡7þ²døMKã'%…,§FU—Çk™=ÏÎl>ám•jq 5^žµªqH¯ƒ Ï;ÎgÅÔ„X4÷ôZJ£ÂƒãíÇq3Ü/‘ˆDû4‡¹9—#´5ðt ¢AG5e ãR!C‡–îØ©b’~¤dF;ë–Í‚b˜#Îçt1Fùίa“œÂy¨í…N;¡)yã1ØKˆÊbŠf˜žøÈÃWF$Í ”dÖÝ8bÊ“¢ ¾ M4CÇn„j§÷G2ˆo ÄPÃ?Ýçž­·HäÕÒ—UÝ ÎuuÞ2ÌZ›ñèDŸ^'[eW_¸¬ÿÿTìD)­Xª2yœößnôNM÷Q–7Û:.^&{‚8–Û™;³—Á¬€“ vÙ÷bõ’Ý GEøú>º¾ÃÊÈâ°³(Â0OÍÉ=/lØs’O7"2q…&©íŠ[J{] çû›Ú\ï?™òËÃk88L6`-­nf³´¾,†^IP²’Q¨®*‡£Hya+ê·úF–*3–U!zIžbýîL;r€$]C$v®“žßëô&½„ÌëÊ(êURZµ[È|~…ÈO>#Û$\Á* ¦õ#Wsu«ˆ¦÷ÎËã~”´wx+Ñ „l}Q…e¿3¬Ê‘XÂϧ“úš{òz°ç¦1yàÄÓ¿åzb’×£¹ §¨‘‚Ý™@þhÐCó©w@ÂE ãYÄ^3VËë–ØàkÓf‹B¼ \ FW©óðcrT –ÆH7È—KÝ8ù¢-—{‘±oBAH£ž¢ Ê! 2ñHÏ’,?MšJt˜TçàÇ^Þ¢Œ‰ûaQ†b¤¾úg²ç ×ÉàRЩ‹T½ Ù¬XÀ\Ñs@O[ySÇhÚ¾jOèÍò1¬ya‰>Bk^A±×}ù4¸/¬Xùñ±ð¥Õê3+È16FiL^ËÏš‹: Àò™+nÁ‘¤^OŸ®ÿ!܉8§¸¾\ñë{ñZ÷BkäÀÑ•”ÑVO:jŒ‘«pÐsús›-².HŒ¾:Pî‹ÂeZ㈧ý[NZ?Îî;ŸdÊÁS«¾#»²ÓTŒ%·o@µÁ›°&8äʶ+–÷ÿ-† ÇN˜¢¢v[Ò?•·Oà,d=Ôâígtå18ø;Ž4§h%'5z W’v´ê@¸ úlsÝžZÏÏÖePújî'œ3!Žì§•7¥ÿi8IÜH¯P‘ÈY©ùH¨q´R‚Øœ5:Wqh<8\YÏÊâ½~(Sk|8³PŒ˜h˜UD°,Ä®ÈUN´´özǼñÌ)îWdîšDu§Ÿðãb‚+äÚÇ$L’ó0<ǹ4þvãí#™@ál ƌͶIy×yY!ö¨ÕÒnÅVéóu=VsѤ?òK¥$$Þ"¯Ä‰µù÷}+êá2!{çÎ$C ’‡¾;>Â-%±«Ê0žù ˆéN¨ð<†(ÒQ¦a¹šOOï,íkƒß…o½)ÓïiÜéw5yšó|‡ûõx¦Ç“›h’—<„w‰®Óµx†OPÎUúkVE:õyÚö„þ[2èÿ_U73.Xèf0|¹Â–†§a/ÐB1‰‚FG—À–¬íOØì“í^‘žÌú[š¸ŒˆLáâ&ï¤m—W'µÏþ:àÿÃwüÓw?pbÒÜ>$»@ÛÎw3_ÓüðÉ8ñëz0Ãù+.ñ…‡ÍJû*ŽVühÑ¿ÍïÅKª¤ÃxˆÛ|`’’­„ —Ì™ ›Jêý!£sÄ­ ‘¹Î‹³¨ð‘8Âc‚øÿa–@Ëa{Àwâ§ŒF–7„:1#hëî#NqâËf´XV¶T—žæ •ÏÌ1øÐ)¼ˆhóYÍ+Ý)lµî¥?˜¨ã\ÞÓ›SÄ>‘«¹s¤s[½]G¨Ded`?„(TyÁt<;]t+øëµ³rþ´zÎ~õ'–ý¹—rÃó»5W[~>¥×DÇå:G¾rMCÒ¤8Ú!ý¶R’ûÕgfF¤ÞÝ+D‹Þ‹&yã¡xwo} ·Ÿàí3^ü÷ÓPÖ)lrǘ:¡ý´Xä±céúþ÷2Œ$Ä4IS‘“À¼ý‰“i§Üÿ¡SÞ‡±‚gâTUÞ{S™b‚³}*ÑrNÀ™9£#tÏo|U´õ×8ã6è¬5¼=€I/NMžÏ’ÉŒô|eN‰IQͦ·ñÃJêOEhrÓÈXL 0F/ÖõêöžÐÌyËÖEøSNà°|l“EÛáöæAÛ8­4æÃÙý²§¿Œä#EÆwrñºòóU°«åûÓ*x~¿‚ÚÑÓ±ÂQ†Š§%]©[UàŠXP#w¢IØ|ÎŒ%ØDrºê<ë%Ke?ß–&9_ñ½üºê²ùšÚnÖ:³"iM1™_ò±RÕå}·¹•Tª#ŸXeeÙ|~ò›õw@šŸIú÷L¾•æ+E)ÂÑXáMw€0´If"7©×ð¢s°gŸt—òÂeMaµUomÍæljÚzÀjåB £ý/._'ŸÔñ$#u™@Ÿ{Dž ý´ý0šìM£b6‚3²S*´»â"DDArâ¢w'U}††(‘apdJ¶ÙùÑÇî¤Öú¿üѲvzföo“Ÿ¦PSHoqŠIo*Žž„—¶rMñçø5h#¯ÜeŠ®‡_‡ÿ±}öÕZõ¼«ÁP`¦(®Ûï´¥§ø©éQáãIµÆ4ø¹X=-sÊÞ ˆÛœïVœkGJi(à•Þ¿¸J‰A[Âfo+‘Ðü#s˜ñ[}öúò^‘:,¬¯æ^xãgõIFDyоz±‹Ü5=’²(ÈŸbÕ2·³vŠü{ÒWŽÛûÆì É:Qµ‡Îº%4¾®e'çxbu2¤«7¬YÀd×ym$¿ç$þûtâϧ¿Å¼Ïœ^«áV™Q–tH•šÉŒ½†Cë䨙æUQfðâ€3töJ$ïd¸]³B >¼{•7þVôZhì˜Êk|…vqôÊáYR<ÛYÔ›ë—kÛŸ[Ç úíxd%¢Ç¿[eUôd/ä‚•a̼,B:Ãü¡¾V ŒèùƒZ:GîØ2hWùò w†Åxw»>@O­ð?å¬:ü–ȉÉöüÆù¤àÇgXŸÏ(€"3G/žÜƒ–©D3ñQõ«B âW&DVê!ûÏnäùß:ÀðyÑBƽE·xÞ=l¤²ÁLn Ç[iaPK.„'¹Àζý²¢žq$CÙSŸ!& ð ™‹Êǹdz›ùæ bÌêó¾¹Tæö–v%—DZøó rdåŽ*$¨ïµpZõ‚Õ‘}%Öß߯lu瘾‘ÓO®‹´«¡éJBç÷D¬Ýî*È×Ú˳ Á¦ 9“àuã ÉÊ…"Ó‚ÖÌ4?bd.S%×H@×¹µ Óf–†Œ· ó;6Ó"þ¡q‚jVc®Ý'Ù™ZT¯5Ê7‹¸%Áîò¹[ zù‹EgªìgðušÒ™÷M¯Á"dŠJ¨_~b3iö5„ØDªE¨†7îFdç~n¤ßeõ£†ç~CÃ{Œ(*!@¿ã  h©ÑLuAR¯xðJs™Ó[SŸ3Ü4‚Dã)Vn½(ó¦ðëÁ%í>q3žx2zeùÕ5&«óé(_Yl9@¬=‘–˜«ËMÌšz|MÛ;Xd±mP*ÅWUŠŸI]‡ê¶•‹‚ç„ÖèÚZ²úÒr=«^×j:Ù5µ 7xܤ|‡ªôut.i—Ç]!3R‚'b/w.+Ä”¼—Úqr †ŒÆ§ª»“ùœÁÕµ1«´ÌÅ¢C2FÚq#D mèm5áF©ä×öEšô¡‹…zÊ^xÃ9,)Ñá²ëÑ$ßòôU%Œ,Ë` ÔÚñ5Ïç›ç£*{y_šíÖ³ÛŠ¥%­ƒaˆñA·ó=}¤iæh±^Y£l§®È8èŸnß;­.zÆýŸÁê#¡„%úhSíÿ±@fTiX¨eÆ$䦬‚[tt¢Ù§~ï÷?ÕWÍî§hüÀžåü~UîrÛõ¢4ƒ¨'Ó/]S§é¼Pµ™žù_¹×â³Öv/'Fö þøLüÎk÷n[ÃL€¡Ð» B Ê^ì'RL& ÏØÛä'›ej:¢‚c ‹ÔïASªKéGb‚¾¢.'èêñݨ‚± ÈB•ßJ,ðy¹DV/ÃÜõÎ’åå'êîÝ÷=\¬ä'^Y€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €t1lib-5.1.2/parse_afm/0000755000175000001440000000000010733501627013222 5ustar rmzuserst1lib-5.1.2/parse_afm/parseAFM.shar0000644000175000001440000021650110733501627015544 0ustar rmzusers#!/bin/sh # This is a shell archive (produced by GNU sharutils 4.1.6). # To extract the files from this archive, save it to some FILE, remove # everything before the `!/bin/sh' line above, then type `sh FILE'. # # Made on 1996-10-25 16:19 EDT by . # Source directory was `/usr/home/rainer/src/T1/parse_afm'. # # Existing files will *not* be overwritten unless `-c' is specified. # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 280 -rw-r--r-- makefile # 43280 -rw-r--r-- parseAFM.c # 11502 -rw-r--r-- parseAFM.h # 12210 -rw-r--r-- parseAFMclient.c # save_IFS=${IFS} IFS="${IFS}:" gettext_dir=FAILED locale_dir=FAILED for dir in $PATH do if test "$gettext_dir" = "FAILED" && test -f $dir/gettext \ && ($dir/gettext --version >/dev/null 2>&1) then set `$dir/gettext --version 2>&1` if test "$3" = "GNU" then gettext_dir=$dir fi fi if test "$locale_dir" = "FAILED" && test -f $dir/shar \ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1) then locale_dir=`$dir/shar --print-text-domain-dir` fi done IFS=$save_IFS if test "$locale_dir" = "FAILED" || test "$gettext_dir" = "FAILED" then echo=echo else TEXTDOMAINDIR=$locale_dir export TEXTDOMAINDIR TEXTDOMAIN=sharutils export TEXTDOMAIN echo="$gettext_dir/gettext --shell-script" fi touch -am 1231235999 $$.touch >/dev/null 2>&1 if test ! -f 1231235999 && test -f $$.touch; then shar_touch=touch else shar_touch=: echo $echo 'WARNING: not restoring timestamps. Consider getting and' $echo "installing GNU \`touch', distributed in GNU File Utilities..." echo fi rm -f 1231235999 $$.touch # if mkdir _sh00599; then $echo 'x -' 'creating lock directory' else $echo 'failed to create lock directory' exit 1 fi # ============= makefile ============== if test -f 'makefile' && test X"$1" != X"-c"; then $echo 'x -' SKIPPING 'makefile' '(file already exists)' else $echo 'x -' extracting 'makefile' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'makefile' && X parseAFM: parseAFM.o parseAFMclient.o makefile X cc -g -o parseAFM parseAFM.o parseAFMclient.o -lm;\ X shar makefile parseAFM.c parseAFM.h parseAFMclient.c > parseAFM.shar X parseAFMclient.o: parseAFMclient.c X cc -g -c parseAFMclient.c X parseAFM.o: parseAFM.c X cc -g -c parseAFM.c X SHAR_EOF $shar_touch -am 1018085596 'makefile' && chmod 0644 'makefile' || $echo 'restore of' 'makefile' 'failed' shar_count="`wc -c < 'makefile'`" test 280 -eq "$shar_count" || $echo 'makefile:' 'original size' '280,' 'current size' "$shar_count" fi # ============= parseAFM.c ============== if test -f 'parseAFM.c' && test X"$1" != X"-c"; then $echo 'x -' SKIPPING 'parseAFM.c' '(file already exists)' else $echo 'x -' extracting 'parseAFM.c' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'parseAFM.c' && /* X * (C) 1988, 1989, 1990 by Adobe Systems Incorporated. All rights reserved. X * X * This file may be freely copied and redistributed as long as: X * 1) This entire notice continues to be included in the file, X * 2) If the file has been modified in any way, a notice of such X * modification is conspicuously indicated. X * X * PostScript, Display PostScript, and Adobe are registered trademarks of X * Adobe Systems Incorporated. X * X * ************************************************************************ X * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT X * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS X * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR X * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY X * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION, X * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, X * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. X * ************************************************************************ X */ X /* parseAFM.c X * X * This file is used in conjuction with the parseAFM.h header file. X * This file contains several procedures that are used to parse AFM X * files. It is intended to work with an application program that needs X * font metric information. The program can be used as is by making a X * procedure call to "parseFile" (passing in the expected parameters) X * and having it fill in a data structure with the data from the X * AFM file, or an application developer may wish to customize this X * code. X * X * There is also a file, parseAFMclient.c, that is a sample application X * showing how to call the "parseFile" procedure and how to use the data X * after "parseFile" has returned. X * X * Please read the comments in parseAFM.h and parseAFMclient.c. X * X * History: X * original: DSM Thu Oct 20 17:39:59 PDT 1988 X * modified: DSM Mon Jul 3 14:17:50 PDT 1989 X * - added 'storageProblem' return code X * - fixed bug of not allocating extra byte for string duplication X * - fixed typos X * modified: DSM Tue Apr 3 11:18:34 PDT 1990 X * - added free(ident) at end of parseFile routine X * modified: DSM Tue Jun 19 10:16:29 PDT 1990 X * - changed (width == 250) to (width = 250) in initializeArray X */ X #include #include #include #include #include "parseAFM.h" X #define lineterm EOL /* line terminating character */ #define normalEOF 1 /* return code from parsing routines used only */ X /* in this module */ #define Space "space" /* used in string comparison to look for the width */ X /* of the space character to init the widths array */ #define False "false" /* used in string comparison to check the value of */ X /* boolean keys (e.g. IsFixedPitch) */ X #define MATCH(A,B) (strncmp((A),(B), MAX_NAME) == 0) X X X /*************************** GLOBALS ***********************/ X static char *ident = NULL; /* storage buffer for keywords */ X X /* "shorts" for fast case statement X * The values of each of these enumerated items correspond to an entry in the X * table of strings defined below. Therefore, if you add a new string as X * new keyword into the keyStrings table, you must also add a corresponding X * parseKey AND it MUST be in the same position! X * X * IMPORTANT: since the sorting algorithm is a binary search, the strings of X * keywords must be placed in lexicographical order, below. [Therefore, the X * enumerated items are not necessarily in lexicographical order, depending X * on the name chosen. BUT, they must be placed in the same position as the X * corresponding key string.] The NOPE shall remain in the last position, X * since it does not correspond to any key string, and it is used in the X * "recognize" procedure to calculate how many possible keys there are. X */ X static enum parseKey { X ASCENDER, CHARBBOX, CODE, COMPCHAR, CAPHEIGHT, COMMENT, X DESCENDER, ENCODINGSCHEME, ENDCHARMETRICS, ENDCOMPOSITES, X ENDFONTMETRICS, ENDKERNDATA, ENDKERNPAIRS, ENDTRACKKERN, X FAMILYNAME, FONTBBOX, FONTNAME, FULLNAME, ISFIXEDPITCH, X ITALICANGLE, KERNPAIR, KERNPAIRXAMT, LIGATURE, CHARNAME, X NOTICE, COMPCHARPIECE, STARTCHARMETRICS, STARTCOMPOSITES, X STARTFONTMETRICS, STARTKERNDATA, STARTKERNPAIRS, X STARTTRACKKERN, TRACKKERN, UNDERLINEPOSITION, X UNDERLINETHICKNESS, VERSION, XYWIDTH, XWIDTH, WEIGHT, XHEIGHT, X NOPE }; X /* keywords for the system: X * This a table of all of the current strings that are vaild AFM keys. X * Each entry can be referenced by the appropriate parseKey value (an X * enumerated data type defined above). If you add a new keyword here, X * a corresponding parseKey MUST be added to the enumerated data type X * defined above, AND it MUST be added in the same position as the X * string is in this table. X * X * IMPORTANT: since the sorting algorithm is a binary search, the keywords X * must be placed in lexicographical order. And, NULL should remain at the X * end. X */ X static char *keyStrings[] = { X "Ascender", "B", "C", "CC", "CapHeight", "Comment", X "Descender", "EncodingScheme", "EndCharMetrics", "EndComposites", X "EndFontMetrics", "EndKernData", "EndKernPairs", "EndTrackKern", X "FamilyName", "FontBBox", "FontName", "FullName", "IsFixedPitch", X "ItalicAngle", "KP", "KPX", "L", "N", X "Notice", "PCC", "StartCharMetrics", "StartComposites", X "StartFontMetrics", "StartKernData", "StartKernPairs", X "StartTrackKern", "TrackKern", "UnderlinePosition", X "UnderlineThickness", "Version", "W", "WX", "Weight", "XHeight", X NULL }; X /*************************** PARSING ROUTINES **************/ X /*************************** token *************************/ X /* A "AFM File Conventions" tokenizer. That means that it will X * return the next token delimited by white space. See also X * the `linetoken' routine, which does a similar thing but X * reads all tokens until the next end-of-line. X */ X static char *token(stream) X FILE *stream; { X int ch, idx; X X /* skip over white space */ X while ((ch = fgetc(stream)) == ' ' || ch == lineterm || X ch == ',' || ch == '\t' || ch == ';'); X X idx = 0; X while (ch != EOF && ch != ' ' && ch != lineterm X && ch != '\t' && ch != ':' && ch != ';') X { X ident[idx++] = ch; X ch = fgetc(stream); X } /* while */ X X if (ch == EOF && idx < 1) return ((char *)NULL); X if (idx >= 1 && ch != ':' ) ungetc(ch, stream); X if (idx < 1 ) ident[idx++] = ch; /* single-character token */ X ident[idx] = 0; X X return(ident); /* returns pointer to the token */ X } /* token */ X X /*************************** linetoken *************************/ X /* "linetoken" will get read all tokens until the EOL character from X * the given stream. This is used to get any arguments that can be X * more than one word (like Comment lines and FullName). X */ X static char *linetoken(stream) X FILE *stream; { X int ch, idx; X X while ((ch = fgetc(stream)) == ' ' || ch == '\t' ); X X idx = 0; X while (ch != EOF && ch != lineterm) X { X ident[idx++] = ch; X ch = fgetc(stream); X } /* while */ X X ungetc(ch, stream); X ident[idx] = 0; X X return(ident); /* returns pointer to the token */ X } /* linetoken */ X X /*************************** recognize *************************/ X /* This function tries to match a string to a known list of X * valid AFM entries (check the keyStrings array above). X * "ident" contains everything from white space through the X * next space, tab, or ":" character. X * X * The algorithm is a standard Knuth binary search. X */ X static enum parseKey recognize(ident) X register char *ident; { X int lower = 0, upper = (int) NOPE, midpoint, cmpvalue; X BOOL found = FALSE; X X while ((upper >= lower) && !found) X { X midpoint = (lower + upper)/2; X if (keyStrings[midpoint] == NULL) break; X cmpvalue = strncmp(ident, keyStrings[midpoint], MAX_NAME); X if (cmpvalue == 0) found = TRUE; X else if (cmpvalue < 0) upper = midpoint - 1; X else lower = midpoint + 1; X } /* while */ X X if (found) return (enum parseKey) midpoint; X else return NOPE; X } /* recognize */ X X /************************* parseGlobals *****************************/ X /* This function is called by "parseFile". It will parse the AFM File X * up to the "StartCharMetrics" keyword, which essentially marks the X * end of the Global Font Information and the beginning of the character X * metrics information. X * X * If the caller of "parseFile" specified that it wanted the Global X * Font Information (as defined by the "AFM File Specification" X * document), then that information will be stored in the returned X * data structure. X * X * Any Global Font Information entries that are not found in a X * given file, will have the usual default initialization value X * for its type (i.e. entries of type int will be 0, etc). X * X * This function returns an error code specifying whether there was X * a premature EOF or a parsing error. This return value is used by X * parseFile to determine if there is more file to parse. X */ X static BOOL parseGlobals(fp, gfi) X FILE *fp; X register GlobalFontInfo *gfi; { X BOOL cont = TRUE, save = (gfi != NULL); X int error = ok; X register char *keyword; X X while (cont) X { X keyword = token(fp); X X if (keyword == NULL) X /* Have reached an early and unexpected EOF. */ X /* Set flag and stop parsing */ X { X error = earlyEOF; X break; /* get out of loop */ X } X if (!save) X /* get tokens until the end of the Global Font info section */ X /* without saving any of the data */ X switch (recognize(keyword)) X { X case STARTCHARMETRICS: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X default: X break; X } /* switch */ X else X /* otherwise parse entire global font info section, */ X /* saving the data */ X switch(recognize(keyword)) X { X case STARTFONTMETRICS: X keyword = token(fp); X gfi->afmVersion = (char *) malloc(strlen(keyword) + 1); X strcpy(gfi->afmVersion, keyword); X break; X case COMMENT: X keyword = linetoken(fp); X break; X case FONTNAME: X keyword = token(fp); X gfi->fontName = (char *) malloc(strlen(keyword) + 1); X strcpy(gfi->fontName, keyword); X break; X case ENCODINGSCHEME: X keyword = token(fp); X gfi->encodingScheme = (char *) X malloc(strlen(keyword) + 1); X strcpy(gfi->encodingScheme, keyword); X break; X case FULLNAME: X keyword = linetoken(fp); X gfi->fullName = (char *) malloc(strlen(keyword) + 1); X strcpy(gfi->fullName, keyword); X break; X case FAMILYNAME: X keyword = linetoken(fp); X gfi->familyName = (char *) malloc(strlen(keyword) + 1); X strcpy(gfi->familyName, keyword); X break; X case WEIGHT: X keyword = token(fp); X gfi->weight = (char *) malloc(strlen(keyword) + 1); X strcpy(gfi->weight, keyword); X break; X case ITALICANGLE: X keyword = token(fp); X gfi->italicAngle = atof(keyword); X if (errno == ERANGE) error = parseError; X break; X case ISFIXEDPITCH: X keyword = token(fp); X if (MATCH(keyword, False)) X gfi->isFixedPitch = 0; X else X gfi->isFixedPitch = 1; X break; X case UNDERLINEPOSITION: X keyword = token(fp); X gfi->underlinePosition = atoi(keyword); X break; X case UNDERLINETHICKNESS: X keyword = token(fp); X gfi->underlineThickness = atoi(keyword); X break; X case VERSION: X keyword = token(fp); X gfi->version = (char *) malloc(strlen(keyword) + 1); X strcpy(gfi->version, keyword); X break; X case NOTICE: X keyword = linetoken(fp); X gfi->notice = (char *) malloc(strlen(keyword) + 1); X strcpy(gfi->notice, keyword); X break; X case FONTBBOX: X keyword = token(fp); X gfi->fontBBox.llx = atoi(keyword); X keyword = token(fp); X gfi->fontBBox.lly = atoi(keyword); X keyword = token(fp); X gfi->fontBBox.urx = atoi(keyword); X keyword = token(fp); X gfi->fontBBox.ury = atoi(keyword); X break; X case CAPHEIGHT: X keyword = token(fp); X gfi->capHeight = atoi(keyword); X break; X case XHEIGHT: X keyword = token(fp); X gfi->xHeight = atoi(keyword); X break; X case DESCENDER: X keyword = token(fp); X gfi->descender = atoi(keyword); X break; X case ASCENDER: X keyword = token(fp); X gfi->ascender = atoi(keyword); X break; X case STARTCHARMETRICS: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X case NOPE: X default: X error = parseError; X break; X } /* switch */ X } /* while */ X X return(error); X } /* parseGlobals */ X X X /************************* initializeArray ************************/ X /* Unmapped character codes are (at Adobe Systems) assigned the X * width of the space character (if one exists) else they get the X * value of 250 ems. This function initializes all entries in the X * char widths array to have this value. Then any mapped character X * codes will be replaced with the width of the appropriate character X * when parsing the character metric section. X X * This function parses the Character Metrics Section looking X * for a space character (by comparing character names). If found, X * the width of the space character will be used to initialize the X * values in the array of character widths. X * X * Before returning, the position of the read/write pointer of the X * file is reset to be where it was upon entering this function. X */ X static int initializeArray(fp, cwi) X FILE *fp; X register int *cwi; { X BOOL cont = TRUE, found = FALSE; X long opos = ftell(fp); X int code = 0, width = 0, i = 0, error = 0; X register char *keyword; X X while (cont) X { X keyword = token(fp); X if (keyword == NULL) X { X error = earlyEOF; X break; /* get out of loop */ X } X switch(recognize(keyword)) X { X case COMMENT: X keyword = linetoken(fp); X break; X case CODE: X code = atoi(token(fp)); X break; X case XWIDTH: X width = atoi(token(fp)); X break; X case CHARNAME: X keyword = token(fp); X if (MATCH(keyword, Space)) X { X cont = FALSE; X found = TRUE; X } X break; X case ENDCHARMETRICS: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X case NOPE: X default: X error = parseError; X break; X } /* switch */ X } /* while */ X X if (!found) X width = 250; X X for (i = 0; i < 256; ++i) X cwi[i] = width; X X fseek(fp, opos, 0); X X return(error); X } /* initializeArray */ X X /************************* parseCharWidths **************************/ X /* This function is called by "parseFile". It will parse the AFM File X * up to the "EndCharMetrics" keyword. It will save the character X * width info (as opposed to all of the character metric information) X * if requested by the caller of parseFile. Otherwise, it will just X * parse through the section without saving any information. X * X * If data is to be saved, parseCharWidths is passed in a pointer X * to an array of widths that has already been initialized by the X * standard value for unmapped character codes. This function parses X * the Character Metrics section only storing the width information X * for the encoded characters into the array using the character code X * as the index into that array. X * X * This function returns an error code specifying whether there was X * a premature EOF or a parsing error. This return value is used by X * parseFile to determine if there is more file to parse. X */ X static parseCharWidths(fp, cwi) X FILE *fp; X register int *cwi; { X BOOL cont = TRUE, save = (cwi != NULL); X int pos = 0, error = ok; X register char *keyword; X X while (cont) X { X keyword = token(fp); X /* Have reached an early and unexpected EOF. */ X /* Set flag and stop parsing */ X if (keyword == NULL) X { X error = earlyEOF; X break; /* get out of loop */ X } X if (!save) X /* get tokens until the end of the Char Metrics section without */ X /* saving any of the data*/ X switch (recognize(keyword)) X { X case ENDCHARMETRICS: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X default: X break; X } /* switch */ X else X /* otherwise parse entire char metrics section, saving */ X /* only the char x-width info */ X switch(recognize(keyword)) X { X case COMMENT: X keyword = linetoken(fp); X break; X case CODE: X keyword = token(fp); X pos = atoi(keyword); X break; X case XYWIDTH: X /* PROBLEM: Should be no Y-WIDTH when doing "quick & dirty" */ X keyword = token(fp); keyword = token(fp); /* eat values */ X error = parseError; X break; X case XWIDTH: X keyword = token(fp); X if (pos >= 0) /* ignore unmapped chars */ X cwi[pos] = atoi(keyword); X break; X case ENDCHARMETRICS: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X case CHARNAME: /* eat values (so doesn't cause parseError) */ X keyword = token(fp); X break; X case CHARBBOX: X keyword = token(fp); keyword = token(fp); X keyword = token(fp); keyword = token(fp); X break; X case LIGATURE: X keyword = token(fp); keyword = token(fp); X break; X case NOPE: X default: X error = parseError; X break; X } /* switch */ X } /* while */ X X return(error); X } /* parseCharWidths */ X X /************************* parseCharMetrics ************************/ X /* This function is called by parseFile if the caller of parseFile X * requested that all character metric information be saved X * (as opposed to only the character width information). X * X * parseCharMetrics is passed in a pointer to an array of records X * to hold information on a per character basis. This function X * parses the Character Metrics section storing all character X * metric information for the ALL characters (mapped and unmapped) X * into the array. X * X * This function returns an error code specifying whether there was X * a premature EOF or a parsing error. This return value is used by X * parseFile to determine if there is more file to parse. X */ X static parseCharMetrics(fp, fi) X FILE *fp; X register FontInfo *fi; { X BOOL cont = TRUE, firstTime = TRUE; X int error = ok, count = 0; X register CharMetricInfo *temp = fi->cmi; X register char *keyword; X X while (cont) X { X keyword = token(fp); X if (keyword == NULL) X { X error = earlyEOF; X break; /* get out of loop */ X } X switch(recognize(keyword)) X { X case COMMENT: X keyword = linetoken(fp); X break; X case CODE: X if (count < fi->numOfChars) X { X if (firstTime) firstTime = FALSE; X else temp++; X temp->code = atoi(token(fp)); X count++; X } X else X { X error = parseError; X cont = FALSE; X } X break; X case XYWIDTH: X temp->wx = atoi(token(fp)); X temp->wy = atoi(token(fp)); X break; X case XWIDTH: X temp->wx = atoi(token(fp)); X break; X case CHARNAME: X keyword = token(fp); X temp->name = (char *) malloc(strlen(keyword) + 1); X strcpy(temp->name, keyword); X break; X case CHARBBOX: X temp->charBBox.llx = atoi(token(fp)); X temp->charBBox.lly = atoi(token(fp)); X temp->charBBox.urx = atoi(token(fp)); X temp->charBBox.ury = atoi(token(fp)); X break; X case LIGATURE: { X Ligature **tail = &(temp->ligs); X Ligature *node = *tail; X X if (*tail != NULL) X { X while (node->next != NULL) X node = node->next; X tail = &(node->next); X } X X *tail = (Ligature *) calloc(1, sizeof(Ligature)); X keyword = token(fp); X (*tail)->succ = (char *) malloc(strlen(keyword) + 1); X strcpy((*tail)->succ, keyword); X keyword = token(fp); X (*tail)->lig = (char *) malloc(strlen(keyword) + 1); X strcpy((*tail)->lig, keyword); X break; } X case ENDCHARMETRICS: X cont = FALSE;; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X case NOPE: X default: X error = parseError; X break; X } /* switch */ X } /* while */ X X if ((error == ok) && (count != fi->numOfChars)) X error = parseError; X X return(error); X } /* parseCharMetrics */ X X X /************************* parseTrackKernData ***********************/ X /* This function is called by "parseFile". It will parse the AFM File X * up to the "EndTrackKern" or "EndKernData" keywords. It will save the X * track kerning data if requested by the caller of parseFile. X * X * parseTrackKernData is passed in a pointer to the FontInfo record. X * If data is to be saved, the FontInfo record will already contain X * a valid pointer to storage for the track kerning data. X * X * This function returns an error code specifying whether there was X * a premature EOF or a parsing error. This return value is used by X * parseFile to determine if there is more file to parse. X */ X static parseTrackKernData(fp, fi) X FILE *fp; X register FontInfo *fi; { X BOOL cont = TRUE, save = (fi->tkd != NULL); X int pos = 0, error = ok, tcount = 0; X register char *keyword; X X while (cont) X { X keyword = token(fp); X X if (keyword == NULL) X { X error = earlyEOF; X break; /* get out of loop */ X } X if (!save) X /* get tokens until the end of the Track Kerning Data */ X /* section without saving any of the data */ X switch(recognize(keyword)) X { X case ENDTRACKKERN: X case ENDKERNDATA: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X default: X break; X } /* switch */ X else X /* otherwise parse entire Track Kerning Data section, */ X /* saving the data */ X switch(recognize(keyword)) X { X case COMMENT: X keyword = linetoken(fp); X break; X case TRACKKERN: X if (tcount < fi->numOfTracks) X { X keyword = token(fp); X fi->tkd[pos].degree = atoi(keyword); X keyword = token(fp); X fi->tkd[pos].minPtSize = atof(keyword); X if (errno == ERANGE) error = parseError; X keyword = token(fp); X fi->tkd[pos].minKernAmt = atof(keyword); X if (errno == ERANGE) error = parseError; X keyword = token(fp); X fi->tkd[pos].maxPtSize = atof(keyword); X if (errno == ERANGE) error = parseError; X keyword = token(fp); X fi->tkd[pos++].maxKernAmt = atof(keyword); X if (errno == ERANGE) error = parseError; X tcount++; X } X else X { X error = parseError; X cont = FALSE; X } X break; X case ENDTRACKKERN: X case ENDKERNDATA: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X case NOPE: X default: X error = parseError; X break; X } /* switch */ X } /* while */ X X if (error == ok && tcount != fi->numOfTracks) X error = parseError; X X return(error); X } /* parseTrackKernData */ X X /************************* parsePairKernData ************************/ X /* This function is called by "parseFile". It will parse the AFM File X * up to the "EndKernPairs" or "EndKernData" keywords. It will save X * the pair kerning data if requested by the caller of parseFile. X * X * parsePairKernData is passed in a pointer to the FontInfo record. X * If data is to be saved, the FontInfo record will already contain X * a valid pointer to storage for the pair kerning data. X * X * This function returns an error code specifying whether there was X * a premature EOF or a parsing error. This return value is used by X * parseFile to determine if there is more file to parse. X */ X static parsePairKernData(fp, fi) X FILE *fp; X register FontInfo *fi; { X BOOL cont = TRUE, save = (fi->pkd != NULL); X int pos = 0, error = ok, pcount = 0; X register char *keyword; X X while (cont) X { X keyword = token(fp); X X if (keyword == NULL) X { X error = earlyEOF; X break; /* get out of loop */ X } X if (!save) X /* get tokens until the end of the Pair Kerning Data */ X /* section without saving any of the data */ X switch(recognize(keyword)) X { X case ENDKERNPAIRS: X case ENDKERNDATA: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X default: X break; X } /* switch */ X else X /* otherwise parse entire Pair Kerning Data section, */ X /* saving the data */ X switch(recognize(keyword)) X { X case COMMENT: X keyword = linetoken(fp); X break; X case KERNPAIR: X if (pcount < fi->numOfPairs) X { X keyword = token(fp); X fi->pkd[pos].name1 = (char *) X malloc(strlen(keyword) + 1); X strcpy(fi->pkd[pos].name1, keyword); X keyword = token(fp); X fi->pkd[pos].name2 = (char *) X malloc(strlen(keyword) + 1); X strcpy(fi->pkd[pos].name2, keyword); X keyword = token(fp); X fi->pkd[pos].xamt = atoi(keyword); X keyword = token(fp); X fi->pkd[pos++].yamt = atoi(keyword); X pcount++; X } X else X { X error = parseError; X cont = FALSE; X } X break; X case KERNPAIRXAMT: X if (pcount < fi->numOfPairs) X { X keyword = token(fp); X fi->pkd[pos].name1 = (char *) X malloc(strlen(keyword) + 1); X strcpy(fi->pkd[pos].name1, keyword); X keyword = token(fp); X fi->pkd[pos].name2 = (char *) X malloc(strlen(keyword) + 1); X strcpy(fi->pkd[pos].name2, keyword); X keyword = token(fp); X fi->pkd[pos++].xamt = atoi(keyword); X pcount++; X } X else X { X error = parseError; X cont = FALSE; X } X break; X case ENDKERNPAIRS: X case ENDKERNDATA: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X case NOPE: X default: X error = parseError; X break; X } /* switch */ X } /* while */ X X if (error == ok && pcount != fi->numOfPairs) X error = parseError; X X return(error); X } /* parsePairKernData */ X X /************************* parseCompCharData **************************/ X /* This function is called by "parseFile". It will parse the AFM File X * up to the "EndComposites" keyword. It will save the composite X * character data if requested by the caller of parseFile. X * X * parseCompCharData is passed in a pointer to the FontInfo record, and X * a boolean representing if the data should be saved. X * X * This function will create the appropriate amount of storage for X * the composite character data and store a pointer to the storage X * in the FontInfo record. X * X * This function returns an error code specifying whether there was X * a premature EOF or a parsing error. This return value is used by X * parseFile to determine if there is more file to parse. X */ X static parseCompCharData(fp, fi) X FILE *fp; X register FontInfo *fi; { X BOOL cont = TRUE, firstTime = TRUE, save = (fi->ccd != NULL); X int pos = 0, j = 0, error = ok, ccount = 0, pcount = 0; X register char *keyword; X X while (cont) X { X keyword = token(fp); X if (keyword == NULL) X /* Have reached an early and unexpected EOF. */ X /* Set flag and stop parsing */ X { X error = earlyEOF; X break; /* get out of loop */ X } X if (ccount > fi->numOfComps) X { X error = parseError; X break; /* get out of loop */ X } X if (!save) X /* get tokens until the end of the Composite Character info */ X /* section without saving any of the data */ X switch(recognize(keyword)) X { X case ENDCOMPOSITES: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X default: X break; X } /* switch */ X else X /* otherwise parse entire Composite Character info section, */ X /* saving the data */ X switch(recognize(keyword)) X { X case COMMENT: X keyword = linetoken(fp); X break; X case COMPCHAR: X if (ccount < fi->numOfComps) X { X keyword = token(fp); X if (pcount != fi->ccd[pos].numOfPieces) X error = parseError; X pcount = 0; X if (firstTime) firstTime = FALSE; X else pos++; X fi->ccd[pos].ccName = (char *) X malloc(strlen(keyword) + 1); X strcpy(fi->ccd[pos].ccName, keyword); X keyword = token(fp); X fi->ccd[pos].numOfPieces = atoi(keyword); X fi->ccd[pos].pieces = (Pcc *) X calloc(fi->ccd[pos].numOfPieces, sizeof(Pcc)); X j = 0; X ccount++; X } X else X { X error = parseError; X cont = FALSE; X } X break; X case COMPCHARPIECE: X if (pcount < fi->ccd[pos].numOfPieces) X { X keyword = token(fp); X fi->ccd[pos].pieces[j].pccName = (char *) X malloc(strlen(keyword) + 1); X strcpy(fi->ccd[pos].pieces[j].pccName, keyword); X keyword = token(fp); X fi->ccd[pos].pieces[j].deltax = atoi(keyword); X keyword = token(fp); X fi->ccd[pos].pieces[j++].deltay = atoi(keyword); X pcount++; X } X else X error = parseError; X break; X case ENDCOMPOSITES: X cont = FALSE; X break; X case ENDFONTMETRICS: X cont = FALSE; X error = normalEOF; X break; X case NOPE: X default: X error = parseError; X break; X } /* switch */ X } /* while */ X X if (error == ok && ccount != fi->numOfComps) X error = parseError; X X return(error); X } /* parseCompCharData */ X X X X /*************************** 'PUBLIC' FUNCTION ********************/ X X /*************************** parseFile *****************************/ X /* parseFile is the only 'public' procedure available. It is called X * from an application wishing to get information from an AFM file. X * The caller of this function is responsible for locating and opening X * an AFM file and handling all errors associated with that task. X * X * parseFile expects 3 parameters: a vaild file pointer, a pointer X * to a (FontInfo *) variable (for which storage will be allocated and X * the data requested filled in), and a mask specifying which X * data from the AFM File should be saved in the FontInfo structure. X * X * The file will be parsed and the requested data will be stored in X * a record of type FontInfo (refer to ParseAFM.h). X * X * parseFile returns an error code as defined in parseAFM.h. X * X * The position of the read/write pointer associated with the file X * pointer upon return of this function is undefined. X */ X extern int parseFile (fp, fi, flags) X FILE *fp; X FontInfo **fi; X FLAGS flags; { X X int code = ok; /* return code from each of the parsing routines */ X int error = ok; /* used as the return code from this function */ X X register char *keyword; /* used to store a token */ X X X /* storage data for the global variable ident */ X ident = (char *) calloc(MAX_NAME, sizeof(char)); X if (ident == NULL) {error = storageProblem; return(error);} X X (*fi) = (FontInfo *) calloc(1, sizeof(FontInfo)); X if ((*fi) == NULL) {error = storageProblem; return(error);} X X if (flags & P_G) X { X (*fi)->gfi = (GlobalFontInfo *) calloc(1, sizeof(GlobalFontInfo)); X if ((*fi)->gfi == NULL) {error = storageProblem; return(error);} X } X X /* The AFM File begins with Global Font Information. This section */ X /* will be parsed whether or not information should be saved. */ X code = parseGlobals(fp, (*fi)->gfi); X X if (code < 0) error = code; X X /* The Global Font Information is followed by the Character Metrics */ X /* section. Which procedure is used to parse this section depends on */ X /* how much information should be saved. If all of the metrics info */ X /* is wanted, parseCharMetrics is called. If only the character widths */ X /* is wanted, parseCharWidths is called. parseCharWidths will also */ X /* be called in the case that no character data is to be saved, just */ X /* to parse through the section. */ X X if ((code != normalEOF) && (code != earlyEOF)) X { X (*fi)->numOfChars = atoi(token(fp)); X if (flags & (P_M ^ P_W)) X { X (*fi)->cmi = (CharMetricInfo *) X calloc((*fi)->numOfChars, sizeof(CharMetricInfo)); X if ((*fi)->cmi == NULL) {error = storageProblem; return(error);} X code = parseCharMetrics(fp, *fi); X } X else X { X if (flags & P_W) X { X (*fi)->cwi = (int *) calloc(256, sizeof(int)); X if ((*fi)->cwi == NULL) X { X error = storageProblem; X return(error); X } X } X /* parse section regardless */ X code = parseCharWidths(fp, (*fi)->cwi); X } /* else */ X } /* if */ X X if ((error != earlyEOF) && (code < 0)) error = code; X X /* The remaining sections of the AFM are optional. This code will */ X /* look at the next keyword in the file to determine what section */ X /* is next, and then allocate the appropriate amount of storage */ X /* for the data (if the data is to be saved) and call the */ X /* appropriate parsing routine to parse the section. */ X X while ((code != normalEOF) && (code != earlyEOF)) X { X keyword = token(fp); X if (keyword == NULL) X /* Have reached an early and unexpected EOF. */ X /* Set flag and stop parsing */ X { X code = earlyEOF; X break; /* get out of loop */ X } X switch(recognize(keyword)) X { X case STARTKERNDATA: X break; X case ENDKERNDATA: X break; X case STARTTRACKKERN: X keyword = token(fp); X if (flags & P_T) X { X (*fi)->numOfTracks = atoi(keyword); X (*fi)->tkd = (TrackKernData *) X calloc((*fi)->numOfTracks, sizeof(TrackKernData)); X if ((*fi)->tkd == NULL) X { X error = storageProblem; X return(error); X } X } /* if */ X code = parseTrackKernData(fp, *fi); X break; X case STARTKERNPAIRS: X keyword = token(fp); X if (flags & P_P) X { X (*fi)->numOfPairs = atoi(keyword); X (*fi)->pkd = (PairKernData *) X calloc((*fi)->numOfPairs, sizeof(PairKernData)); X if ((*fi)->pkd == NULL) X { X error = storageProblem; X return(error); X } X } /* if */ X code = parsePairKernData(fp, *fi); X break; X case STARTCOMPOSITES: X keyword = token(fp); X if (flags & P_C) X { X (*fi)->numOfComps = atoi(keyword); X (*fi)->ccd = (CompCharData *) X calloc((*fi)->numOfComps, sizeof(CompCharData)); X if ((*fi)->ccd == NULL) X { X error = storageProblem; X return(error); X } X } /* if */ X code = parseCompCharData(fp, *fi); X break; X case ENDFONTMETRICS: X code = normalEOF; X break; X case NOPE: X default: X code = parseError; X break; X } /* switch */ X X if ((error != earlyEOF) && (code < 0)) error = code; X X } /* while */ X X if ((error != earlyEOF) && (code < 0)) error = code; X X if (ident != NULL) { free(ident); ident = NULL; } X X return(error); X } /* parseFile */ SHAR_EOF $shar_touch -am 1018085596 'parseAFM.c' && chmod 0644 'parseAFM.c' || $echo 'restore of' 'parseAFM.c' 'failed' shar_count="`wc -c < 'parseAFM.c'`" test 43280 -eq "$shar_count" || $echo 'parseAFM.c:' 'original size' '43280,' 'current size' "$shar_count" fi # ============= parseAFM.h ============== if test -f 'parseAFM.h' && test X"$1" != X"-c"; then $echo 'x -' SKIPPING 'parseAFM.h' '(file already exists)' else $echo 'x -' extracting 'parseAFM.h' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'parseAFM.h' && /* X * (C) 1988, 1989 by Adobe Systems Incorporated. All rights reserved. X * X * This file may be freely copied and redistributed as long as: X * 1) This entire notice continues to be included in the file, X * 2) If the file has been modified in any way, a notice of such X * modification is conspicuously indicated. X * X * PostScript, Display PostScript, and Adobe are registered trademarks of X * Adobe Systems Incorporated. X * X * ************************************************************************ X * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT X * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS X * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR X * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY X * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION, X * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, X * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. X * ************************************************************************ X */ X /* ParseAFM.h X * X * This header file is used in conjuction with the parseAFM.c file. X * Together these files provide the functionality to parse Adobe Font X * Metrics files and store the information in predefined data structures. X * It is intended to work with an application program that needs font metric X * information. The program can be used as is by making a procedure call to X * parse an AFM file and have the data stored, or an application developer X * may wish to customize the code. X * X * This header file defines the data structures used as well as the key X * strings that are currently recognized by this version of the AFM parser. X * This program is based on the document "Adobe Font Metrics Files, X * Specification Version 2.0". X * X * AFM files are separated into distinct sections of different data. Because X * of this, the parseAFM program can parse a specified file to only save X * certain sections of information based on the application's needs. A record X * containing the requested information will be returned to the application. X * X * AFM files are divided into five sections of data: X * 1) The Global Font Information X * 2) The Character Metrics Information X * 3) The Track Kerning Data X * 4) The Pair-Wise Kerning Data X * 5) The Composite Character Data X * X * Basically, the application can request any of these sections independent X * of what other sections are requested. In addition, in recognizing that X * many applications will want ONLY the x-width of characters and not all X * of the other character metrics information, there is a way to receive X * only the width information so as not to pay the storage cost for the X * unwanted data. An application should never request both the X * "quick and dirty" char metrics (widths only) and the Character Metrics X * Information since the Character Metrics Information will contain all X * of the character widths as well. X * X * There is a procedure in parseAFM.c, called parseFile, that can be X * called from any application wishing to get information from the AFM File. X * This procedure expects 3 parameters: a vaild file descriptor, a pointer X * to a (FontInfo *) variable (for which space will be allocated and then X * will be filled in with the data requested), and a mask specifying X * which data from the AFM File should be saved in the FontInfo structure. X * X * The flags that can be used to set the appropriate mask are defined below. X * In addition, several commonly used masks have already been defined. X * X * History: X * original: DSM Thu Oct 20 17:39:59 PDT 1988 X * modified: DSM Mon Jul 3 14:17:50 PDT 1989 X * - added 'storageProblem' return code X * - fixed typos X */ X #include X X X /* your basic constants */ #define TRUE 1 #define FALSE 0 #define EOL '\n' /* end-of-line indicator */ #define MAX_NAME 4096 /* max length for identifiers */ #define BOOL int #define FLAGS int X X X /* Flags that can be AND'ed together to specify exactly what X * information from the AFM file should be saved. X */ #define P_G 0x01 /* 0000 0001 */ /* Global Font Info */ #define P_W 0x02 /* 0000 0010 */ /* Character Widths ONLY */ #define P_M 0x06 /* 0000 0110 */ /* All Char Metric Info */ #define P_P 0x08 /* 0000 1000 */ /* Pair Kerning Info */ #define P_T 0x10 /* 0001 0000 */ /* Track Kerning Info */ #define P_C 0x20 /* 0010 0000 */ /* Composite Char Info */ X X /* Commonly used flags X */ #define P_GW (P_G | P_W) #define P_GM (P_G | P_M) #define P_GMP (P_G | P_M | P_P) #define P_GMK (P_G | P_M | P_P | P_T) #define P_ALL (P_G | P_M | P_P | P_T | P_C) X X X /* Possible return codes from the parseFile procedure. X * X * ok means there were no problems parsing the file. X * X * parseError means that there was some kind of parsing error, but the X * parser went on. This could include problems like the count for any given X * section does not add up to how many entries there actually were, or X * there was a key that was not recognized. The return record may contain X * vaild data or it may not. X * X * earlyEOF means that an End of File was encountered before expected. This X * may mean that the AFM file had been truncated, or improperly formed. X * X * storageProblem means that there were problems allocating storage for X * the data structures that would have contained the AFM data. X */ #define ok 0 #define parseError -1 #define earlyEOF -2 #define storageProblem -3 X X X /************************* TYPES *********************************/ /* Below are all of the data structure definitions. These structures X * try to map as closely as possible to grouping and naming of data X * in the AFM Files. X */ X X /* Bounding box definition. Used for the Font BBox as well as the X * Character BBox. X */ typedef struct { X int llx; /* lower left x-position */ X int lly; /* lower left y-position */ X int urx; /* upper right x-position */ X int ury; /* upper right y-position */ } BBox; X X /* Global Font information. X * The key that each field is associated with is in comments. For an X * explanation about each key and its value please refer to the AFM X * documentation (full title & version given above). X */ typedef struct { X char *afmVersion; /* key: StartFontMetrics */ X char *fontName; /* key: FontName */ X char *fullName; /* key: FullName */ X char *familyName; /* key: FamilyName */ X char *weight; /* key: Weight */ X float italicAngle; /* key: ItalicAngle */ X BOOL isFixedPitch; /* key: IsFixedPitch */ X BBox fontBBox; /* key: FontBBox */ X int underlinePosition; /* key: UnderlinePosition */ X int underlineThickness; /* key: UnderlineThickness */ X char *version; /* key: Version */ X char *notice; /* key: Notice */ X char *encodingScheme; /* key: EncodingScheme */ X int capHeight; /* key: CapHeight */ X int xHeight; /* key: XHeight */ X int ascender; /* key: Ascender */ X int descender; /* key: Descender */ } GlobalFontInfo; X X /* Ligature definition is a linked list since any character can have X * any number of ligatures. X */ typedef struct _t_ligature { X char *succ, *lig; X struct _t_ligature *next; } Ligature; X X /* Character Metric Information. This structure is used only if ALL X * character metric information is requested. If only the character X * widths is requested, then only an array of the character x-widths X * is returned. X * X * The key that each field is associated with is in comments. For an X * explanation about each key and its value please refer to the X * Character Metrics section of the AFM documentation (full title X * & version given above). X */ typedef struct { X int code, /* key: C */ X wx, /* key: WX */ X wy; /* together wx and wy are associated with key: W */ X char *name; /* key: N */ X BBox charBBox; /* key: B */ X Ligature *ligs; /* key: L (linked list; not a fixed number of Ls */ } CharMetricInfo; X X /* Track kerning data structure. X * The fields of this record are the five values associated with every X * TrackKern entry. X * X * For an explanation about each value please refer to the X * Track Kerning section of the AFM documentation (full title X * & version given above). X */ typedef struct { X int degree; X float minPtSize, X minKernAmt, X maxPtSize, X maxKernAmt; } TrackKernData; X X /* Pair Kerning data structure. X * The fields of this record are the four values associated with every X * KP entry. For KPX entries, the yamt will be zero. X * X * For an explanation about each value please refer to the X * Pair Kerning section of the AFM documentation (full title X * & version given above). X */ typedef struct { X char *name1; X char *name2; X int xamt, X yamt; } PairKernData; X X /* PCC is a piece of a composite character. This is a sub structure of a X * compCharData described below. X * These fields will be filled in with the values from the key PCC. X * X * For an explanation about each key and its value please refer to the X * Composite Character section of the AFM documentation (full title X * & version given above). X */ typedef struct { X char *pccName; X int deltax, X deltay; } Pcc; X X /* Composite Character Information data structure. X * The fields ccName and numOfPieces are filled with the values associated X * with the key CC. The field pieces points to an array (size = numOfPieces) X * of information about each of the parts of the composite character. That X * array is filled in with the values from the key PCC. X * X * For an explanation about each key and its value please refer to the X * Composite Character section of the AFM documentation (full title X * & version given above). X */ typedef struct { X char *ccName; X int numOfPieces; X Pcc *pieces; } CompCharData; X X /* FontInfo X * Record type containing pointers to all of the other data X * structures containing information about a font. X * A a record of this type is filled with data by the X * parseFile function. X */ typedef struct { X GlobalFontInfo *gfi; /* ptr to a GlobalFontInfo record */ X int *cwi; /* ptr to 256 element array of just char widths */ X int numOfChars; /* number of entries in char metrics array */ X CharMetricInfo *cmi; /* ptr to char metrics array */ X int numOfTracks; /* number to entries in track kerning array */ X TrackKernData *tkd; /* ptr to track kerning array */ X int numOfPairs; /* number to entries in pair kerning array */ X PairKernData *pkd; /* ptr to pair kerning array */ X int numOfComps; /* number to entries in comp char array */ X CompCharData *ccd; /* ptr to comp char array */ } FontInfo; X X X /************************* PROCEDURES ****************************/ X /* Call this procedure to do the grunt work of parsing an AFM file. X * X * "fp" should be a valid file pointer to an AFM file. X * X * "fi" is a pointer to a pointer to a FontInfo record sturcture X * (defined above). Storage for the FontInfo structure will be X * allocated in parseFile and the structure will be filled in X * with the requested data from the AFM File. X * X * "flags" is a mask with bits set representing what data should X * be saved. Defined above are valid flags that can be used to set X * the mask, as well as a few commonly used masks. X * X * The possible return codes from parseFile are defined above. X */ X extern int parseFile ( /* FILE *fp; FontInfo **fi; FLAGS flags; */ ); SHAR_EOF $shar_touch -am 1018085596 'parseAFM.h' && chmod 0644 'parseAFM.h' || $echo 'restore of' 'parseAFM.h' 'failed' shar_count="`wc -c < 'parseAFM.h'`" test 11502 -eq "$shar_count" || $echo 'parseAFM.h:' 'original size' '11502,' 'current size' "$shar_count" fi # ============= parseAFMclient.c ============== if test -f 'parseAFMclient.c' && test X"$1" != X"-c"; then $echo 'x -' SKIPPING 'parseAFMclient.c' '(file already exists)' else $echo 'x -' extracting 'parseAFMclient.c' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'parseAFMclient.c' && /* X * (C) 1988, 1989 by Adobe Systems Incorporated. All rights reserved. X * X * This file may be freely copied and redistributed as long as: X * 1) This entire notice continues to be included in the file, X * 2) If the file has been modified in any way, a notice of such X * modification is conspicuously indicated. X * X * PostScript, Display PostScript, and Adobe are registered trademarks of X * Adobe Systems Incorporated. X * X * ************************************************************************ X * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT X * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS X * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR X * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY X * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION, X * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, X * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. X * ************************************************************************ X */ X /* parseAFMclient.c X * X * This file is an example of how an application might use the provided X * AFM Parser (parseAFM.c). X * X * In a nutshell, the client of the parser (like this file) chooses X * the AFM File that it wishes to have parsed, opens the file for X * reading (and does any/all error handling associated with that task), X * and passes the resulting file pointer to the procedure "parseFile" X * (in parseAFM.c). In addition to the file pointer, the client also X * needs to pass a pointer to a FontInfo record type (for which storage X * will be allocated and data filled in), and a mask representing which X * sections of the AFM should be saved in the FontInfo record. X * X * In the procedure "main", the mask is built from command line switches, X * but your application, of course, can set that mask any way you prefer. X * "main" then calls the "parseFile" procedure (of parseAFM.c) to do the X * grunt work, and checks the error codes upon "parseFile"'s return. X * X * The rest of this sample application is a collection of print routines X * that show how to reference each of the sections of data and a X * "freeStorage" routine (that many unix programmers may feel they X * don't need but is included for portability to other systems that do X * need to manage storage). The print procedures are there just to X * give meaning to this application, and hopefully your application X * will use the data collected from the AFM file in a more useful way. X * X * History: X * original: DSM Thu Oct 20 17:39:59 PDT 1988 X * modified: DSM Mon Jul 3 14:17:50 PDT 1989 X * - added 'storageProblem' check in main X */ X #include #include "parseAFM.h" X X /*************************** GLOBALS ***************************/ FontInfo *fi; FLAGS myflags = 0; X X /*************************** printGlobals **********************/ X printGlobals() { X printf("\nThis AFM is of Version %s\n", fi->gfi->afmVersion); X printf("The font name is %s\n", fi->gfi->fontName); X printf("The full name is %s\n", fi->gfi->fullName); X printf("The family name is %s\n", fi->gfi->familyName); X printf("The weight is %s\n", fi->gfi->weight); X printf("Italic Angle is %3.1f\n", fi->gfi->italicAngle); X if (fi->gfi->isFixedPitch) X printf("This font IS fixed-pitch\n"); X else X printf("This font is NOT fixed-pitch\n"); X printf("Underline position is %d\n", fi->gfi->underlinePosition); X printf("Underline thickness is %d\n", fi->gfi->underlineThickness); X printf("Version is %s\n", fi->gfi->version); X printf("FontBBox is [%d, %d, %d, %d]\n", X fi->gfi->fontBBox.llx, fi->gfi->fontBBox.lly, X fi->gfi->fontBBox.urx, fi->gfi->fontBBox.ury); X printf("%s\n", fi->gfi->notice); X printf("Encoding Scheme is %s\n", fi->gfi->encodingScheme); X printf("CapHeight is %d\n", fi->gfi->capHeight); X printf("XHeight is %d\n", fi->gfi->xHeight); X printf("Descender is %d\n", fi->gfi->descender); X printf("Ascender is %d\n\n", fi->gfi->ascender); X } /* printGlobals */ X X /*************************** printCharWidths *********************/ printCharWidths() { X int i = 0; X printf("Here come some character widths ...\n"); X for (i = 0; i < 256; ++i) X printf(" code: %3d width: %4d\n", i, fi->cwi[i]); X printf("\n"); X } /* printCharWidths */ X X /*************************** printAllCharMetrics *****************/ printAllCharMetrics() { X int i = 0; X CharMetricInfo *temp = fi->cmi; X Ligature *node = temp->ligs; X X printf("Here come some character metrics ...\n"); X for (i = 0; i < fi->numOfChars; ++i) X { X printf( X " code: %3d x-width: %4d y-width: %4d name: %-12s bbox: [%d, %d, %d, %d]\n", X temp->code, temp->wx, temp->wy, temp->name, temp->charBBox.llx, X temp->charBBox.lly, temp->charBBox.urx, temp->charBBox.ury); X for (node = temp->ligs; node != NULL; node = node->next) X { X printf(" Ligatures: successor: %s ligature: %s\n", X node->succ, node->lig); X } X temp++; X } /* for */ X printf("\n"); X } /* printAllCharMetrics */ X X /*************************** printKernPairData ******************/ printKernPairData() { X int i = 0; X PairKernData *pkd = fi->pkd; X X if (fi->numOfPairs != 0) X { X printf("Here comes the pair kerning data ...\n"); X for (i = 0; i < fi->numOfPairs; ++i) X printf( X " char 1: %-12s char 2: %-12s x-amount: %d y-amount: %d\n", X pkd[i].name1, pkd[i].name2, pkd[i].xamt, pkd[i].yamt); X } X else printf("There isn't any pair kerning data.\n"); X printf("\n"); X } /* printKernPairData */ X X /*************************** printKernTrackData *******************/ printKernTrackData() { X int i = 0; X TrackKernData *tkd = fi->tkd; X X if (fi->numOfTracks != 0) X { X printf("Here comes the track kerning data ...\n"); X for (i = 0; i < fi->numOfTracks; ++i) X printf( X " degree: %d min-pt: %5.2f min-kern: %5.2f max-pt: %5.2f max-kern: %5.2f\n", X tkd[i].degree, tkd[i].minPtSize, tkd[i].minKernAmt, X tkd[i].maxPtSize, tkd[i].maxKernAmt); X } X else printf("There isn't any track kerning data.\n"); X printf("\n"); X } /* printKernTrackData */ X X /*************************** printCompCharData ********************/ printCompCharData() { X int i = 0, j = 0; X CompCharData *ccd = fi->ccd; X X if (fi->numOfComps != 0) X { X printf("Here comes the composite character data ...\n"); X for (i = 0; i < fi->numOfComps; ++i) X { X printf(" comp char: %-12s pieces: %d\n", X ccd[i].ccName, ccd[i].numOfPieces); X for (j = 0; j < ccd[i].numOfPieces; ++j) X printf( X " Part # %d Name: %-12s Delta X: %d Delta Y: %d\n", X (j + 1), ccd[i].pieces[j].pccName, X ccd[i].pieces[j].deltax, ccd[i].pieces[j].deltay); X } X } X else printf("There aren't any composites characters. \n"); X printf("\n"); X } /* printCompCharData */ X X X /*************************** freeStorage ***********************/ X freeStorage() { X if (fi != NULL) X { X if (fi->gfi != NULL) X { X free(fi->gfi->afmVersion); fi->gfi->afmVersion = NULL; X free(fi->gfi->fontName); fi->gfi->fontName = NULL; X free(fi->gfi->fullName); fi->gfi->fullName = NULL; X free(fi->gfi->familyName); fi->gfi->familyName = NULL; X free(fi->gfi->weight); fi->gfi->weight = NULL; X free(fi->gfi->version); fi->gfi->version = NULL; X free(fi->gfi->notice); fi->gfi->notice = NULL; X free(fi->gfi->encodingScheme); fi->gfi->encodingScheme = NULL; X free(fi->gfi); fi->gfi = NULL; X } X X if (fi->cwi != NULL) X { free(fi->cwi); fi->cwi = NULL; } X X if (fi->cmi != NULL) X { X int i = 0; X CharMetricInfo *temp = fi->cmi; X Ligature *node = temp->ligs; X X for (i = 0; i < fi->numOfChars; ++i) X { X for (node = temp->ligs; node != NULL; node = node->next) X { X free(node->succ); node->succ = NULL; X free(node->lig); node->lig = NULL; X } X X free(temp->name); temp->name = NULL; X temp++; X } X X free(fi->cmi); fi->cmi = NULL; X } X X if (fi->tkd != NULL) X { free(fi->tkd); fi->tkd = NULL; } X X if (fi->pkd != NULL) X { X free(fi->pkd->name1); fi->pkd->name1 = NULL; X free(fi->pkd->name2); fi->pkd->name2 = NULL; X free(fi->pkd); fi->pkd = NULL; X } X X if (fi->ccd != NULL) X { X int i = 0, j = 0; X CompCharData *ccd = fi->ccd; X X for (i = 0; i < fi->numOfComps; ++i) X { X for (j = 0; j < ccd[i].numOfPieces; ++j) X { X free(ccd[i].pieces[j].pccName); X ccd[i].pieces[j].pccName = NULL; X } X X free(ccd[i].ccName); ccd[i].ccName = NULL; X } X X free(fi->ccd); fi->ccd = NULL; X } X X free(fi); X X } /* if */ X } /* freeStorage */ X X /*************************** printValues **************************/ X printValues() { X if ((myflags & P_G) && (fi->gfi != NULL)) printGlobals(); X if ((myflags & (P_M ^ P_W)) && (fi->cmi != NULL)) printAllCharMetrics(); X else if ((myflags & P_W) && (fi->cwi != NULL)) printCharWidths(); X if ((myflags & P_P) && (fi->pkd != NULL)) printKernPairData(); X if ((myflags & P_T) && (fi->tkd != NULL)) printKernTrackData(); X if ((myflags & P_C) && (fi->ccd != NULL)) printCompCharData(); X } /* printValues */ X X X /*************************** main *********************************/ X main (argc, argv) X int argc; X char **argv; { X char *filename, *prog = *argv; X FILE *fp; X X ++argv; --argc; X while (argc > 0 && **argv == '-') X { X switch ((*argv)[1]) X { X case 'g': /* save Globals */ X myflags |= P_G; X break; X case 'w': /* save Char Widths */ X myflags |= P_W; X break; X case 'm': /* save All Char Metrics */ X myflags |= P_M; X break; X case 'p': /* save Kern Pair Data */ X myflags |= P_P; X break; X case 't': /* save Kern Track Data */ X myflags |= P_T; X break; X case 'c': /* save Comp Char Data */ X myflags |= P_C; X break; X default: X printf(" usage: parseAFM [-g] [-w] [-p] [-t] [-c] [AFM File]\nOR: usage: parseAFM [-g] [-m] [-p] [-t] [-c] [AFM File]\n"); X exit(0); X } X ++argv; --argc; X } X X if (!argc) X { X printf(" usage: parseAFM [-g] [-w] [-p] [-t] [-c] [AFM File]\nOR: usage: parseAFM [-g] [-m] [-p] [-t] [-c] [AFM File]\n"); X exit(0); X } X else X filename = *argv; X X if (!filename[0]) X { X printf ("*** ERROR: can't open. filename is missing.\n", X filename ); X return 0; X } X X fp = fopen(filename, "r" ); X if (fp == NULL) X { X printf ("*** ERROR: can't find: %s\n", filename ); X exit(1); X } X X switch (parseFile(fp, &fi, myflags)) X { X case parseError: X printf("*** ERROR: problem in parsing the AFM File.\n"); X case ok: X fclose(fp); X printValues(); X freeStorage(); X break; X case earlyEOF: X printf("The AFM File ended prematurely.\n"); X break; X case storageProblem: X printf("*** ERROR: problem allocating storage.\n"); X break; X default: X break; X } X } /* main */ SHAR_EOF $shar_touch -am 1018085596 'parseAFMclient.c' && chmod 0644 'parseAFMclient.c' || $echo 'restore of' 'parseAFMclient.c' 'failed' shar_count="`wc -c < 'parseAFMclient.c'`" test 12210 -eq "$shar_count" || $echo 'parseAFMclient.c:' 'original size' '12210,' 'current size' "$shar_count" fi rm -fr _sh00599 exit 0 t1lib-5.1.2/parse_afm/README.RMz0000644000175000001440000000055310733501627014614 0ustar rmzusersDear Folks, this directory contains the shell-archive with the parseAFM-package by Adobe Systems Inc. The shell archive is only located here for completeness. The files used by the t1-library (parseAFM.c, parseAFM.h) have been extracted and copied to the t1lib-subdirectory. Thus, no make is done in this directory. (08/11/1996, RMz) t1lib-5.1.2/LICENSE0000644000175000001440000004307610733501627012304 0ustar rmzusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. t1lib-5.1.2/win32/0000755000175000001440000000000010733501627012227 5ustar rmzuserst1lib-5.1.2/win32/sysconf.h0000644000175000001440000000401510733501627014064 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: sysconf.h.in ----- Author: Rainer Menzner (rmz@neuroinformatik.ruhr-uni-bochum.de) ----- Date: 02/24/1998 ----- Description: This file is part of the t1-library. Some system dependent definitions are stored here. sysconf.h is generated from this file automatically by the configure-script. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-1998. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #undef __CHAR_UNSIGNED__ #define SIZEOF_CHAR 1 #define SIZEOF_SHORT 2 #define SIZEOF_INT 4 #define SIZEOF_LONG 4 #define SIZEOF_LONG_LONG 8 #define SIZEOF_FLOAT 4 #define SIZEOF_DOUBLE 8 #define SIZEOF_LONG_DOUBLE 12 #define SIZEOF_VOID_P 4 #if defined(_MSC_VER) # define T1LIB_IDENT "1.0" # define GLOBAL_CONFIG_DIR "/usr/local/share/t1lib-1.0" # define T1_AA_TYPE16 short # define T1_AA_TYPE32 int #endif #if defined(_MSC_VER) && !defined(_WIN32) # define _WIN32 1 #endif t1lib-5.1.2/win32/T1_Static.dsp0000644000175000001440000002376510733501627014547 0ustar rmzusers# Microsoft Developer Studio Project File - Name="T1_Static" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** $BJT=8$7$J$$$G$/$@$5$$(B ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=T1_Static - Win32 Debug MD !MESSAGE $B$3$l$OM-8z$J%a%$%/%U%!%$%k$G$O$"$j$^$;$s!#(B $B$3$N%W%m%8%'%/%H$r%S%k%I$9$k$?$a$K$O(B NMAKE $B$r;HMQ$7$F$/$@$5$$!#(B !MESSAGE [$B%a%$%/%U%!%$%k$N%(%/%9%]!<%H(B] $B%3%^%s%I$r;HMQ$7$Fe$G%^%/%m$N@_Dj$rDj5A$7$^$9!#Nc(B: !MESSAGE !MESSAGE NMAKE /f "T1_Static.mak" CFG="T1_Static - Win32 Debug MD" !MESSAGE !MESSAGE $BA*Br2DG=$J%S%k%I(B $B%b!<%I(B: !MESSAGE !MESSAGE "T1_Static - Win32 Release" ("Win32 (x86) Static Library" $BMQ(B) !MESSAGE "T1_Static - Win32 Debug" ("Win32 (x86) Static Library" $BMQ(B) !MESSAGE "T1_Static - Win32 Release MD" ("Win32 (x86) Static Library" $BMQ(B) !MESSAGE "T1_Static - Win32 Debug MD" ("Win32 (x86) Static Library" $BMQ(B) !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "T1_Static - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Lib" # PROP Intermediate_Dir "Static_Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /W3 /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /Fd"Lib\T1_Static.pdb" /FD /c # ADD BASE RSC /l 0x411 /d "NDEBUG" # ADD RSC /l 0x411 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ELSEIF "$(CFG)" == "T1_Static - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Lib" # PROP Intermediate_Dir "Static_Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /Fd"Lib/T1_Staticd.pdb" /FD /GZ /c # ADD BASE RSC /l 0x411 /d "_DEBUG" # ADD RSC /l 0x411 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"Lib\T1_Staticd.lib" !ELSEIF "$(CFG)" == "T1_Static - Win32 Release MD" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "T1_Static___Win32_Release_MD" # PROP BASE Intermediate_Dir "T1_Static___Win32_Release_MD" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Lib" # PROP Intermediate_Dir "StaticMD_Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MD /W3 /Zi /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /Fd"Lib\T1_StaticMD.pdb" /FD /c # ADD BASE RSC /l 0x411 /d "NDEBUG" # ADD RSC /l 0x411 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"Lib\T1_StaticMD.lib" !ELSEIF "$(CFG)" == "T1_Static - Win32 Debug MD" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "T1_Static___Win32_Debug_MD" # PROP BASE Intermediate_Dir "T1_Static___Win32_Debug_MD" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Lib" # PROP Intermediate_Dir "StaticMD_Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /Fd"Lib/T1_Staticd.pdb" /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /Fd"Lib/T1_StaticMDd.pdb" /FD /GZ /c # ADD BASE RSC /l 0x411 /d "_DEBUG" # ADD RSC /l 0x411 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo /out:"Lib\T1_Staticd.lib" # ADD LIB32 /nologo /out:"Lib\T1_StaticMDd.lib" !ENDIF # Begin Target # Name "T1_Static - Win32 Release" # Name "T1_Static - Win32 Debug" # Name "T1_Static - Win32 Release MD" # Name "T1_Static - Win32 Debug MD" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=..\lib\type1\arith.c # End Source File # Begin Source File SOURCE=..\lib\type1\curves.c # End Source File # Begin Source File SOURCE=..\lib\type1\fontfcn.c # End Source File # Begin Source File SOURCE=..\lib\type1\hints.c # End Source File # Begin Source File SOURCE=..\lib\type1\lines.c # End Source File # Begin Source File SOURCE=..\lib\type1\objects.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\parseAFM.c # End Source File # Begin Source File SOURCE=..\lib\type1\paths.c # End Source File # Begin Source File SOURCE=..\lib\type1\regions.c # End Source File # Begin Source File SOURCE=..\lib\type1\scanfont.c # End Source File # Begin Source File SOURCE=..\lib\type1\spaces.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1aaset.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1afmtool.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1base.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1delete.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1enc.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1env.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1finfo.c # End Source File # Begin Source File SOURCE=..\lib\type1\t1io.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1load.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1outline.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1set.c # End Source File # Begin Source File SOURCE=..\lib\type1\t1snap.c # End Source File # Begin Source File SOURCE=..\lib\type1\t1stub.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1trans.c # End Source File # Begin Source File SOURCE=..\lib\type1\token.c # End Source File # Begin Source File SOURCE=..\lib\type1\type1.c # End Source File # Begin Source File SOURCE=..\lib\type1\util.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=..\lib\type1\arith.h # End Source File # Begin Source File SOURCE=..\lib\type1\blues.h # End Source File # Begin Source File SOURCE=..\lib\type1\cluts.h # End Source File # Begin Source File SOURCE=..\lib\type1\curves.h # End Source File # Begin Source File SOURCE=..\lib\type1\digit.h # End Source File # Begin Source File SOURCE=..\lib\type1\ffilest.h # End Source File # Begin Source File SOURCE=..\lib\type1\font.h # End Source File # Begin Source File SOURCE=..\lib\type1\fontfcn.h # End Source File # Begin Source File SOURCE=..\lib\type1\fontfile.h # End Source File # Begin Source File SOURCE=..\lib\type1\fontmisc.h # End Source File # Begin Source File SOURCE=..\lib\type1\fonts.h # End Source File # Begin Source File SOURCE=..\lib\type1\fontstruct.h # End Source File # Begin Source File SOURCE=..\lib\type1\fontxlfd.h # End Source File # Begin Source File SOURCE=..\lib\type1\fsmasks.h # End Source File # Begin Source File SOURCE=..\lib\type1\hdigit.h # End Source File # Begin Source File SOURCE=..\lib\type1\hints.h # End Source File # Begin Source File SOURCE=..\lib\type1\lines.h # End Source File # Begin Source File SOURCE=..\lib\type1\objects.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\parseAFM.h # End Source File # Begin Source File SOURCE=..\lib\type1\paths.h # End Source File # Begin Source File SOURCE=..\lib\type1\paths_rmz.h # End Source File # Begin Source File SOURCE=..\lib\type1\pictures.h # End Source File # Begin Source File SOURCE=..\lib\type1\regions.h # End Source File # Begin Source File SOURCE=..\lib\type1\spaces.h # End Source File # Begin Source File SOURCE=..\lib\type1\spaces_rmz.h # End Source File # Begin Source File SOURCE=..\lib\type1\strokes.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\sysconf.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1aaset.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1afmtool.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1base.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1delete.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1enc.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1env.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1extern.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1finfo.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1global.h # End Source File # Begin Source File SOURCE=..\lib\type1\t1hdigit.h # End Source File # Begin Source File SOURCE=..\lib\type1\t1imager.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1load.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1misc.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1outline.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1set.h # End Source File # Begin Source File SOURCE=..\lib\type1\t1stdio.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1trans.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1types.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1x11.h # End Source File # Begin Source File SOURCE=..\lib\type1\token.h # End Source File # Begin Source File SOURCE=..\lib\type1\tokst.h # End Source File # Begin Source File SOURCE=..\lib\type1\trig.h # End Source File # Begin Source File SOURCE=..\lib\type1\util.h # End Source File # Begin Source File SOURCE=..\lib\type1\Xstuff.h # End Source File # End Group # End Target # End Project t1lib-5.1.2/win32/T1_Static.dsw0000644000175000001440000000105210733501627014537 0ustar rmzusersMicrosoft Developer Studio Workspace File, Format Version 6.00 # $B7Y9p(B: $B$3$N%o!<%/%9%Z!<%9(B $B%U%!%$%k(B $B$rJT=8$^$?$O:o=|$7$J$$$G$/$@$5$$(B! ############################################################################### Project: "T1_Static"=".\T1_Static.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### t1lib-5.1.2/win32/t1.def0000644000175000001440000000352310733501627013236 0ustar rmzusersEXPORTS T1_AAFillOutline T1_AAGetLevel T1_AAHSetGrayValues T1_AANSetGrayValues T1_AASetBitsPerPixel T1_AASetChar T1_AASetGrayValues T1_AASetLevel T1_AASetSmartLimits T1_AASetSmartMode T1_AASetString T1_AbsolutePath T1_AddFont T1_AddToFileSearchPath T1_CheckEndian T1_CloseLib T1_ComputeLineParameters T1_ConcatGlyphs T1_ConcatOutlines T1_CopyFont T1_CopyGlyph T1_DeleteAllSizes T1_DeleteEncoding T1_DeleteFont T1_DeleteSize T1_DumpGlyph T1_DumpPath ;T1_DumpPixmap T1_ExtendFont T1_ExtendHMatrix T1_ExtendVMatrix T1_FillOutline T1_FreeGlyph T1_GenerateAFMFallbackInfo T1_Get_no_fonts T1_GetAfmFileName T1_GetAllCharNames T1_GetBitmapPad T1_GetCharBBox T1_GetCharName T1_GetCharOutline T1_GetCharWidth T1_GetEncodingIndex T1_GetEncodingScheme T1_GetFamilyName T1_GetFileSearchPath T1_GetFontBBox T1_GetFontFileName T1_GetFontName T1_GetFullName T1_GetIsFixedPitch T1_GetItalicAngle T1_GetKerning T1_GetLibIdent T1_GetLinePosition T1_GetLineThickness T1_GetMetricsInfo T1_GetMoveOutline T1_GetNotice T1_GetStringBBox T1_GetStringOutline T1_GetStringWidth T1_GetUnderlinePosition T1_GetUnderlineThickness T1_GetVersion T1_GetWeight T1_InitLib T1_LoadEncoding T1_LoadFont T1_ManipulatePath T1_MirrorHMatrix T1_MirrorVMatrix T1_PrintLog T1_QueryLigs T1_QueryX11Support T1_ReencodeFont T1_RelativePath T1_RotateMatrix T1_ScaleOutline T1_SetAfmFileName T1_SetBitmapPad T1_SetChar T1_SetDefaultEncoding T1_SetDeviceResolutions T1_SetFileSearchPath T1_SetFontDataBase T1_SetLinePosition T1_SetLineThickness T1_SetLogLevel T1_SetRasterFlags T1_SetString T1_ShearHMatrix T1_ShearVMatrix T1_SlantFont T1_TransformMatrix T1_WriteAFMFallbackFile ; T1_AADoLine ; T1_AAInit ; T1_DoLine ; T1Close ; T1Decrypt ; T1eexec ; T1Fill ; T1Getc ; T1io_reset ; T1lib_parseFile ; T1Open ; T1Read ; T1Ungetc t1lib-5.1.2/win32/T1_DLL.dsp0000644000175000001440000003052110733501627013717 0ustar rmzusers# Microsoft Developer Studio Project File - Name="T1_DLL" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** $BJT=8$7$J$$$G$/$@$5$$(B ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=T1_DLL - Win32 Debug MD !MESSAGE $B$3$l$OM-8z$J%a%$%/%U%!%$%k$G$O$"$j$^$;$s!#(B $B$3$N%W%m%8%'%/%H$r%S%k%I$9$k$?$a$K$O(B NMAKE $B$r;HMQ$7$F$/$@$5$$!#(B !MESSAGE [$B%a%$%/%U%!%$%k$N%(%/%9%]!<%H(B] $B%3%^%s%I$r;HMQ$7$Fe$G%^%/%m$N@_Dj$rDj5A$7$^$9!#Nc(B: !MESSAGE !MESSAGE NMAKE /f "T1_DLL.mak" CFG="T1_DLL - Win32 Debug MD" !MESSAGE !MESSAGE $BA*Br2DG=$J%S%k%I(B $B%b!<%I(B: !MESSAGE !MESSAGE "T1_DLL - Win32 Release" ("Win32 (x86) Dynamic-Link Library" $BMQ(B) !MESSAGE "T1_DLL - Win32 Debug" ("Win32 (x86) Dynamic-Link Library" $BMQ(B) !MESSAGE "T1_DLL - Win32 Release MD" ("Win32 (x86) Dynamic-Link Library" $BMQ(B) !MESSAGE "T1_DLL - Win32 Debug MD" ("Win32 (x86) Dynamic-Link Library" $BMQ(B) !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "T1_DLL - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Lib" # PROP Intermediate_Dir "DLL_Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1.pdb" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x411 /d "NDEBUG" # ADD RSC /l 0x411 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Lib/T1.dll" !ELSEIF "$(CFG)" == "T1_DLL - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Lib" # PROP Intermediate_Dir "DLL_Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1d.pdb" /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x411 /d "_DEBUG" # ADD RSC /l 0x411 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Lib/T1d.dll" /pdbtype:sept !ELSEIF "$(CFG)" == "T1_DLL - Win32 Release MD" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "T1_DLL___Win32_Release_MD" # PROP BASE Intermediate_Dir "T1_DLL___Win32_Release_MD" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Lib" # PROP Intermediate_Dir "DLLMD_Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1.pdb" /FD /c # ADD CPP /nologo /MD /W3 /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1MD.pdb" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x411 /d "NDEBUG" # ADD RSC /l 0x411 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Lib/T1.dll" # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Lib/T1MD.dll" !ELSEIF "$(CFG)" == "T1_DLL - Win32 Debug MD" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "T1_DLL___Win32_Debug_MD" # PROP BASE Intermediate_Dir "T1_DLL___Win32_Debug_MD" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Lib" # PROP Intermediate_Dir "DLLMD_Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1d.pdb" /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1MDd.pdb" /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x411 /d "_DEBUG" # ADD RSC /l 0x411 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Lib/T1d.dll" /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Lib/T1MDd.dll" /pdbtype:sept !ENDIF # Begin Target # Name "T1_DLL - Win32 Release" # Name "T1_DLL - Win32 Debug" # Name "T1_DLL - Win32 Release MD" # Name "T1_DLL - Win32 Debug MD" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=..\lib\type1\arith.c # End Source File # Begin Source File SOURCE=..\lib\type1\curves.c # End Source File # Begin Source File SOURCE=..\lib\type1\fontfcn.c # End Source File # Begin Source File SOURCE=..\lib\type1\hints.c # End Source File # Begin Source File SOURCE=..\lib\type1\lines.c # End Source File # Begin Source File SOURCE=..\lib\type1\objects.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\parseAFM.c # End Source File # Begin Source File SOURCE=..\lib\type1\paths.c # End Source File # Begin Source File SOURCE=..\lib\type1\regions.c # End Source File # Begin Source File SOURCE=..\lib\type1\scanfont.c # End Source File # Begin Source File SOURCE=..\lib\type1\spaces.c # End Source File # Begin Source File SOURCE=.\t1.def # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1aaset.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1afmtool.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1base.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1delete.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1enc.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1env.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1finfo.c # End Source File # Begin Source File SOURCE=..\lib\type1\t1io.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1load.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1outline.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1set.c # End Source File # Begin Source File SOURCE=..\lib\type1\t1snap.c # End Source File # Begin Source File SOURCE=..\lib\type1\t1stub.c # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1trans.c # End Source File # Begin Source File SOURCE=..\lib\type1\token.c # End Source File # Begin Source File SOURCE=..\lib\type1\type1.c # End Source File # Begin Source File SOURCE=..\lib\type1\util.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=..\lib\type1\arith.h # End Source File # Begin Source File SOURCE=..\lib\type1\blues.h # End Source File # Begin Source File SOURCE=..\lib\type1\cluts.h # End Source File # Begin Source File SOURCE=..\lib\type1\curves.h # End Source File # Begin Source File SOURCE=..\lib\type1\digit.h # End Source File # Begin Source File SOURCE=..\lib\type1\ffilest.h # End Source File # Begin Source File SOURCE=..\lib\type1\font.h # End Source File # Begin Source File SOURCE=..\lib\type1\fontfcn.h # End Source File # Begin Source File SOURCE=..\lib\type1\fontfile.h # End Source File # Begin Source File SOURCE=..\lib\type1\fontmisc.h # End Source File # Begin Source File SOURCE=..\lib\type1\fonts.h # End Source File # Begin Source File SOURCE=..\lib\type1\fontstruct.h # End Source File # Begin Source File SOURCE=..\lib\type1\fontxlfd.h # End Source File # Begin Source File SOURCE=..\lib\type1\fsmasks.h # End Source File # Begin Source File SOURCE=..\lib\type1\hdigit.h # End Source File # Begin Source File SOURCE=..\lib\type1\hints.h # End Source File # Begin Source File SOURCE=..\lib\type1\lines.h # End Source File # Begin Source File SOURCE=..\lib\type1\objects.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\parseAFM.h # End Source File # Begin Source File SOURCE=..\lib\type1\paths.h # End Source File # Begin Source File SOURCE=..\lib\type1\paths_rmz.h # End Source File # Begin Source File SOURCE=..\lib\type1\pictures.h # End Source File # Begin Source File SOURCE=..\lib\type1\regions.h # End Source File # Begin Source File SOURCE=..\lib\type1\spaces.h # End Source File # Begin Source File SOURCE=..\lib\type1\spaces_rmz.h # End Source File # Begin Source File SOURCE=..\lib\type1\strokes.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\sysconf.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1aaset.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1afmtool.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1base.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1delete.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1enc.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1env.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1extern.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1finfo.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1global.h # End Source File # Begin Source File SOURCE=..\lib\type1\t1hdigit.h # End Source File # Begin Source File SOURCE=..\lib\type1\t1imager.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1load.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1misc.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1outline.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1set.h # End Source File # Begin Source File SOURCE=..\lib\type1\t1stdio.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1trans.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1types.h # End Source File # Begin Source File SOURCE=..\lib\t1lib\t1x11.h # End Source File # Begin Source File SOURCE=..\lib\type1\token.h # End Source File # Begin Source File SOURCE=..\lib\type1\tokst.h # End Source File # Begin Source File SOURCE=..\lib\type1\trig.h # End Source File # Begin Source File SOURCE=..\lib\type1\util.h # End Source File # Begin Source File SOURCE=..\lib\type1\Xstuff.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project t1lib-5.1.2/win32/T1_DLL.dsw0000644000175000001440000000104210733501627013722 0ustar rmzusersMicrosoft Developer Studio Workspace File, Format Version 6.00 # $B7Y9p(B: $B$3$N%o!<%/%9%Z!<%9(B $B%U%!%$%k(B $B$rJT=8$^$?$O:o=|$7$J$$$G$/$@$5$$(B! ############################################################################### Project: "T1_DLL"=.\T1_DLL.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### t1lib-5.1.2/type1afm/0000755000175000001440000000000010733501627013013 5ustar rmzuserst1lib-5.1.2/type1afm/Makefile.in0000644000175000001440000000424710733501627015067 0ustar rmzusers# Makefile.in # # This file is part of the t1lib-package! See documentation and Readme files # of the t1lib-package for copyright restrictions. # # Targets provided: # all (default) # install # uninstall # clean # # Author: Rainer Menzner (Rainer.Menzner@web.de) # Date: 02/19/1997 # Last modified: 2006-11-05 # # Modified by H.Kakugawa to use libtool LIBTOOL = ../libtool SHELL = /bin/sh CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ OPTIONS = @OPTIONS@ X_LIBS = @X_LIBS@ TOPSRC = @top_srcdir@ XPM_LIB = -lXpm XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@ LDFLAGS = @LDFLAGS@ LDLIBS = @LDLIBS@ AR = ar rc RANLIB = @RANLIB@ RM = rm -f X_CFLAGS = @X_CFLAGS@ YACC = @YACC@ LEX = @LEX@ LEXLIB = @LEXLIB@ ALLCFLAGS = $(CFLAGS) SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS)' 'OPTIONS=$(OPTIONS)' @SET_MAKE@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ bindir = @bindir@ datadir = @datadir@ libdir = @libdir@ mandir = @mandir@/man1 manext = .1 no_x = @no_x@ # targets to build MAIN_TARGET = @MAIN_TARGET@ OBJS = \ type1afm.lo SRCS = \ type1afm.c T1LIB = ../lib/libt1.la all: type1afm type1afm: $(OBJS) ../lib/t1lib.h $(LIBTOOL) --mode=link \ $(CC) -o type1afm $(LDFLAGS) $(OBJS) $(T1LIB) $(LDLIBS) .SUFFIXES: .lo .c.lo: $(LIBTOOL) --mode=compile \ $(CC) -c $(CPPFLAGS) $(CFLAGS) $< .PHONY: clean dependencies: dummy gcc -MM *.c | sed 's/\.o:/.lo:/g' > .dependencies clean: dummy $(RM) type1afm *.o *.lo .libs/* *~ \#*\# *.log *.bak -rmdir .libs install: dummy $(MKINSTALLDIRS) $(DESTDIR)$(bindir) $(LIBTOOL) --mode=install \ $(INSTALL_PROGRAM) type1afm $(DESTDIR)$(bindir)/type1afm uninstall: dummy $(LIBTOOL) --mode=uninstall \ $(RM) $(DESTDIR)$(bindir)/type1afm dummy: # Dependencies of object files include .dependencies t1lib-5.1.2/type1afm/.dependencies0000644000175000001440000000005510733501627015442 0ustar rmzuserstype1afm.lo: type1afm.c ../lib/t1lib/t1lib.h t1lib-5.1.2/type1afm/type1afm.c0000644000175000001440000000776010733501627014717 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: type1afm.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2002-11-27 ----- Description: This file is part of t1lib. The program type1afm extracts metrics information from Type 1 font files and dumps it to afm files. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #include #include /* Note: We include t1lib.h from lib/t1lib. That way the objectfile does only need to be rebuild when the header itself changes and not each time the library has been recompiled */ #include "../lib/t1lib/t1lib.h" void printusage( void); int main(int argc, char *argv[]) { int i, j, result; int rasterflags=0; if (argc==1){ printusage(); return(0); } /* If we want to log anything, then log all */ T1_SetLogLevel(T1LOG_DEBUG); /* Check whether logfile is requested */ if (strcmp( argv[1], "-l")==0){ if (argc==2){ printusage(); return(0); } j=2; if ((T1_InitLib( LOGFILE | IGNORE_CONFIGFILE | IGNORE_FONTDATABASE)==NULL)){ fprintf(stderr, "Initialization of t1lib failed\n"); return(1); } } else{ j=1; if ((T1_InitLib( NO_LOGFILE | IGNORE_CONFIGFILE | IGNORE_FONTDATABASE)==NULL)){ fprintf(stderr, "Initialization of t1lib failed\n"); return(1); } } /* First, build font data base */ for (i=j; i [ ...]\n"); fprintf(stdout, "\n"); fprintf(stdout, "Generate afm-file from Adobe Type 1 font file (T1lib-%s)!\n", T1_GetLibIdent()); fprintf(stdout, "Options: -l Write a log-file t1lib.log\n"); } t1lib-5.1.2/configure0000755000175000001440000306243110733501627013205 0ustar rmzusers#! /bin/sh # From configure.in configure.in 1.00. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string="`eval $cmd`") 2>/dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="lib/t1lib/t1base.c" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS LDLIBS PROGEXT CFLAGS LDFLAGS T1LIB_LT_CURRENT T1LIB_LT_REVISION T1LIB_LT_AGE T1LIB_DATA_DIR T1LIB_IDENTIFIER MAIN_TARGET MAIN_HEADER OPTIONS no_x CC T1_AA_TYPE16 T1_AA_TYPE32 T1_AA_TYPE64 T1_INT16 T1_INT32 XSUBDIRS T1LIBX_OBJS T1LIBX_SRCS T1LIBX_HEADERS XOBJS T1LIB_VERSION T1LIB_REVISION T1LIB_PATCHLEVEL T1LIB_VERSIONSTRING SET_MAKE CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXX CXXFLAGS ac_ct_CXX CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-x use the X Window System --without-athena do not use Athena widgets --with-athena-includes=DIR Athena include files are in DIR --with-athena-libraries=DIR Athena libraries are in DIR --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers lib/t1lib/sysconf.h:lib/t1lib/sysconf.h.in" ac_aux_dir= for ac_dir in ac-tools $srcdir/ac-tools; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ac-tools $srcdir/ac-tools" >&5 echo "$as_me: error: cannot find install-sh or install.sh in ac-tools $srcdir/ac-tools" >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. T1LIB_LT_CURRENT=6 T1LIB_LT_REVISION=2 T1LIB_LT_AGE=1 T1LIB_IDENTIFIER="5.1.2" T1LIB_VERSION=5 T1LIB_REVISION=1 T1LIB_PATCHLEVEL=2 T1LIB_VERSIONSTRING=\""5.1.2"\" # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- ## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 ## Free Software Foundation, Inc. ## Originally by Gordon Matzigkeit , 1996 ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ## ## As a special exception to the GNU General Public License, if you ## distribute this file as part of a program that contains a ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. # serial 47 AC_PROG_LIBTOOL # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) # ----------------------------------------------------------- # If this macro is not defined by Autoconf, define it here. # AC_PROG_LIBTOOL # --------------- # AC_PROG_LIBTOOL # _AC_PROG_LIBTOOL # ---------------- # _AC_PROG_LIBTOOL # AC_LIBTOOL_SETUP # ---------------- # AC_LIBTOOL_SETUP # _LT_AC_SYS_COMPILER # ------------------- # _LT_AC_SYS_COMPILER # _LT_AC_SYS_LIBPATH_AIX # ---------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # _LT_AC_SYS_LIBPATH_AIX # _LT_AC_SHELL_INIT(ARG) # ---------------------- # _LT_AC_SHELL_INIT # _LT_AC_PROG_ECHO_BACKSLASH # -------------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. # _LT_AC_PROG_ECHO_BACKSLASH # _LT_AC_LOCK # ----------- # _LT_AC_LOCK # AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works # AC_LIBTOOL_COMPILER_OPTION # AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ------------------------------------------------------------ # Check whether the given compiler option works # AC_LIBTOOL_LINKER_OPTION # AC_LIBTOOL_SYS_MAX_CMD_LEN # -------------------------- # AC_LIBTOOL_SYS_MAX_CMD_LEN # _LT_AC_CHECK_DLFCN # -------------------- # _LT_AC_CHECK_DLFCN # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ------------------------------------------------------------------ # _LT_AC_TRY_DLOPEN_SELF # AC_LIBTOOL_DLOPEN_SELF # ------------------- # AC_LIBTOOL_DLOPEN_SELF # AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) # --------------------------------- # Check to see if options -c and -o are simultaneously supported by compiler # AC_LIBTOOL_PROG_CC_C_O # AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) # ----------------------------------------- # Check to see if we can do hard links to lock some files if needed # AC_LIBTOOL_SYS_HARD_LINK_LOCKS # AC_LIBTOOL_OBJDIR # ----------------- # AC_LIBTOOL_OBJDIR # AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) # ---------------------------------------------- # Check hardcoding attributes. # AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH # AC_LIBTOOL_SYS_LIB_STRIP # ------------------------ # AC_LIBTOOL_SYS_LIB_STRIP # AC_LIBTOOL_SYS_DYNAMIC_LINKER # ----------------------------- # PORTME Fill in your ld.so characteristics # AC_LIBTOOL_SYS_DYNAMIC_LINKER # _LT_AC_TAGCONFIG # ---------------- # _LT_AC_TAGCONFIG # AC_LIBTOOL_DLOPEN # ----------------- # enable checks for dlopen support # AC_LIBTOOL_DLOPEN # AC_LIBTOOL_WIN32_DLL # -------------------- # declare package support for building win32 dll's # AC_LIBTOOL_WIN32_DLL # AC_ENABLE_SHARED([DEFAULT]) # --------------------------- # implement the --enable-shared flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. # AC_ENABLE_SHARED # AC_DISABLE_SHARED # ----------------- #- set the default shared flag to --disable-shared # AC_DISABLE_SHARED # AC_ENABLE_STATIC([DEFAULT]) # --------------------------- # implement the --enable-static flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. # AC_ENABLE_STATIC # AC_DISABLE_STATIC # ----------------- # set the default static flag to --disable-static # AC_DISABLE_STATIC # AC_ENABLE_FAST_INSTALL([DEFAULT]) # --------------------------------- # implement the --enable-fast-install flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. # AC_ENABLE_FAST_INSTALL # AC_DISABLE_FAST_INSTALL # ----------------------- # set the default to --disable-fast-install # AC_DISABLE_FAST_INSTALL # AC_LIBTOOL_PICMODE([MODE]) # -------------------------- # implement the --with-pic flag # MODE is either `yes' or `no'. If omitted, it defaults to `both'. # AC_LIBTOOL_PICMODE # AC_PROG_EGREP # ------------- # This is predefined starting with Autoconf 2.54, so this conditional # definition can be removed once we require Autoconf 2.54 or later. # AC_PATH_TOOL_PREFIX # ------------------- # find a file program which can recognise shared library # AC_PATH_TOOL_PREFIX # AC_PATH_MAGIC # ------------- # find a file program which can recognise a shared library # AC_PATH_MAGIC # AC_PROG_LD # ---------- # find the pathname to the GNU or non-GNU linker # AC_PROG_LD # AC_PROG_LD_GNU # -------------- # AC_PROG_LD_GNU # AC_PROG_LD_RELOAD_FLAG # ---------------------- # find reload flag for linker # -- PORTME Some linkers may need a different reload flag. # AC_PROG_LD_RELOAD_FLAG # AC_DEPLIBS_CHECK_METHOD # ----------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics # AC_DEPLIBS_CHECK_METHOD # AC_PROG_NM # ---------- # find the pathname to a BSD-compatible name lister # AC_PROG_NM # AC_CHECK_LIBM # ------------- # check for math library # AC_CHECK_LIBM # AC_LIBLTDL_CONVENIENCE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl convenience library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. # AC_LIBLTDL_CONVENIENCE # AC_LIBLTDL_INSTALLABLE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl installable library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-install to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided and an installed libltdl is not found, it is # assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' # and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single # quotes!). If your package is not flat and you're not using automake, # define top_builddir and top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. # AC_LIBLTDL_INSTALLABLE # AC_LIBTOOL_CXX # -------------- # enable support for C++ libraries # AC_LIBTOOL_CXX # _LT_AC_LANG_CXX # --------------- # _LT_AC_LANG_CXX # _LT_AC_PROG_CXXCPP # --------------- # _LT_AC_PROG_CXXCPP # AC_LIBTOOL_F77 # -------------- # enable support for Fortran 77 libraries # AC_LIBTOOL_F77 # _LT_AC_LANG_F77 # --------------- # _LT_AC_LANG_F77 # AC_LIBTOOL_GCJ # -------------- # enable support for GCJ libraries # AC_LIBTOOL_GCJ # _LT_AC_LANG_GCJ # --------------- # _LT_AC_LANG_GCJ # AC_LIBTOOL_RC # -------------- # enable support for Windows resource files # AC_LIBTOOL_RC # AC_LIBTOOL_LANG_C_CONFIG # ------------------------ # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. # AC_LIBTOOL_LANG_C_CONFIG # AC_LIBTOOL_LANG_CXX_CONFIG # -------------------------- # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. # AC_LIBTOOL_LANG_CXX_CONFIG # AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) # ------------------------ # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. # AC_LIBTOOL_POSTDEP_PREDEP # AC_LIBTOOL_LANG_F77_CONFIG # ------------------------ # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. # AC_LIBTOOL_LANG_F77_CONFIG # AC_LIBTOOL_LANG_GCJ_CONFIG # -------------------------- # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. # AC_LIBTOOL_LANG_GCJ_CONFIG # AC_LIBTOOL_LANG_RC_CONFIG # -------------------------- # Ensure that the configuration vars for the Windows resource compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. # AC_LIBTOOL_LANG_RC_CONFIG # AC_LIBTOOL_CONFIG([TAGNAME]) # ---------------------------- # If TAGNAME is not passed, then create an initial libtool script # with a default configuration from the untagged config vars. Otherwise # add code to config.status for appending the configuration named by # TAGNAME from the matching tagged config vars. # AC_LIBTOOL_CONFIG # AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------------------- # AC_LIBTOOL_PROG_COMPILER_NO_RTTI # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # --------------------------------- # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) # --------------------------------------- # AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) # ------------------------------------ # See if the linker supports building shared libraries. # AC_LIBTOOL_PROG_LD_SHLIBS # _LT_AC_FILE_LTDLL_C # ------------------- # Be careful that the start marker always follows a newline. # _LT_AC_FILE_LTDLL_C # _LT_AC_TAGVAR(VARNAME, [TAGNAME]) # --------------------------------- # old names # This is just to silence aclocal about the macro not being used ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ # LT_AC_PROG_SED # -------------- # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. test -z "$LDLIBS" && LDLIBS=-lm test -z "$PROGEXT" && PROGEXT="" test -z "$CFLAGS" test -z "$LDFLAGS" T1LIB_DATA_DIR="${datadir}/t1lib" echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for X" >&5 echo $ECHO_N "checking for X... $ECHO_C" >&6 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then withval="$with_x" fi; # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then # Both variables are already set. have_x=yes else if test "${ac_cv_have_x+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -fr conftest.dir if mkdir conftest.dir; then cd conftest.dir # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat >Imakefile <<'_ACEOF' acfindx: @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' _ACEOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl; do if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && test -f $ac_im_libdir/libX11.$ac_extension; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /lib) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -fr conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Intrinsic.h. # First, try using that file with no special directory specified. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # We can compile using X headers with no special include directory. ac_x_includes= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Intrinsic.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lXt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { XtMalloc (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS=$ac_save_LIBS for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl; do if test -r $ac_dir/libXt.$ac_extension; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then # Didn't find X anywhere. Cache the known absence of X. ac_cv_have_x="have_x=no" else # Record where we found X for the cache. ac_cv_have_x="have_x=yes \ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" fi fi fi eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then echo "$as_me:$LINENO: result: $have_x" >&5 echo "${ECHO_T}$have_x" >&6 no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes \ ac_x_includes=$x_includes ac_x_libraries=$x_libraries" echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5 echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. cat >>confdefs.h <<\_ACEOF #define X_DISPLAY_MISSING 1 _ACEOF X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . case `(uname -sr) 2>/dev/null` in "SunOS 5"*) echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5 echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6 ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_nospace=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_R_nospace=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_R_nospace = yes; then echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_space=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_R_space=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_R_space = yes; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 X_LIBS="$X_LIBS -R $x_libraries" else echo "$as_me:$LINENO: result: neither works" >&5 echo "${ECHO_T}neither works" >&6 fi fi LIBS=$ac_xsave_LIBS esac fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main () { XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dnet_dnet_ntoa=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_stub_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. echo "$as_me:$LINENO: checking for gethostbyname" >&5 echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6 if test "${ac_cv_func_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define gethostbyname to an innocuous variant, in case declares gethostbyname. For example, HP-UX 11i declares gettimeofday. */ #define gethostbyname innocuous_gethostbyname /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef gethostbyname /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) choke me #else char (*f) () = gethostbyname; #endif #ifdef __cplusplus } #endif int main () { return f != gethostbyname; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6 if test $ac_cv_func_gethostbyname = no; then echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5 echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6 if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_nsl_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_nsl_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6 if test $ac_cv_lib_nsl_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5 echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6 if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bsd_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_bsd_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6 if test $ac_cv_lib_bsd_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. echo "$as_me:$LINENO: checking for connect" >&5 echo $ECHO_N "checking for connect... $ECHO_C" >&6 if test "${ac_cv_func_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define connect to an innocuous variant, in case declares connect. For example, HP-UX 11i declares gettimeofday. */ #define connect innocuous_connect /* System header to define __stub macros and hopefully few prototypes, which can conflict with char connect (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef connect /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_connect) || defined (__stub___connect) choke me #else char (*f) () = connect; #endif #ifdef __cplusplus } #endif int main () { return f != connect; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_connect=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5 echo "${ECHO_T}$ac_cv_func_connect" >&6 if test $ac_cv_func_connect = no; then echo "$as_me:$LINENO: checking for connect in -lsocket" >&5 echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); int main () { connect (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_connect=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6 if test $ac_cv_lib_socket_connect = yes; then X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. echo "$as_me:$LINENO: checking for remove" >&5 echo $ECHO_N "checking for remove... $ECHO_C" >&6 if test "${ac_cv_func_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define remove to an innocuous variant, in case declares remove. For example, HP-UX 11i declares gettimeofday. */ #define remove innocuous_remove /* System header to define __stub macros and hopefully few prototypes, which can conflict with char remove (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef remove /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_remove) || defined (__stub___remove) choke me #else char (*f) () = remove; #endif #ifdef __cplusplus } #endif int main () { return f != remove; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_remove=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_remove=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5 echo "${ECHO_T}$ac_cv_func_remove" >&6 if test $ac_cv_func_remove = no; then echo "$as_me:$LINENO: checking for remove in -lposix" >&5 echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6 if test "${ac_cv_lib_posix_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); int main () { remove (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_posix_remove=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_posix_remove=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6 if test $ac_cv_lib_posix_remove = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo "$as_me:$LINENO: checking for shmat" >&5 echo $ECHO_N "checking for shmat... $ECHO_C" >&6 if test "${ac_cv_func_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shmat to an innocuous variant, in case declares shmat. For example, HP-UX 11i declares gettimeofday. */ #define shmat innocuous_shmat /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shmat (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shmat /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shmat) || defined (__stub___shmat) choke me #else char (*f) () = shmat; #endif #ifdef __cplusplus } #endif int main () { return f != shmat; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shmat=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shmat=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5 echo "${ECHO_T}$ac_cv_func_shmat" >&6 if test $ac_cv_func_shmat = no; then echo "$as_me:$LINENO: checking for shmat in -lipc" >&5 echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6 if test "${ac_cv_lib_ipc_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); int main () { shmat (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ipc_shmat=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ipc_shmat=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6 if test $ac_cv_lib_ipc_shmat = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5 echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6 if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char IceConnectionNumber (); int main () { IceConnectionNumber (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ICE_IceConnectionNumber=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6 if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi athena_includes= athena_libraries= # Check whether --with-athena or --without-athena was given. if test "${with_athena+set}" = set; then withval="$with_athena" fi; if test "$with_athena" = "no" then athena_includes=no athena_libraries=no fi # Check whether --with-athena-includes or --without-athena-includes was given. if test "${with_athena_includes+set}" = set; then withval="$with_athena_includes" athena_includes="$withval" fi; # Check whether --with-athena-libraries or --without-athena-libraries was given. if test "${with_athena_libraries+set}" = set; then withval="$with_athena_libraries" athena_libraries="$withval" fi; echo "$as_me:$LINENO: checking for Athena" >&5 echo $ECHO_N "checking for Athena... $ECHO_C" >&6 # # # Search the include files. # if test "$athena_includes" = ""; then if test "${ice_cv_athena_includes+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ice_athena_save_LIBS="$LIBS" ice_athena_save_CFLAGS="$CFLAGS" ice_athena_save_CPPFLAGS="$CPPFLAGS" ice_athena_save_LDFLAGS="$LDFLAGS" # LIBS="$X_PRE_LIBS -lXaw -lXmu -lXext -lXt -lX11 $X_EXTRA_LIBS $LIBS" CFLAGS="$X_CFLAGS $CFLAGS" CPPFLAGS="$X_CFLAGS $CPPFLAGS" LDFLAGS="$X_LIBS $LDFLAGS" # cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { int a; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # X11/Xaw/Text.h is in the standard search path. ice_cv_athena_includes= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # X11/Xaw/Text.h is not in the standard search path. # Locate it and put its directory in `athena_includes' # # /usr/include/Motif* are used on HP-UX (Motif). # /usr/include/X11* are used on HP-UX (X and Athena). # /usr/dt is used on Solaris (Motif). # /usr/openwin is used on Solaris (X and Athena). # Other directories are just guesses. for dir in "$x_includes" "${prefix}/include" /usr/include /usr/local/include \ /usr/include/Motif2.0 /usr/include/Motif1.2 /usr/include/Motif1.1 \ /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 \ /usr/dt/include /usr/openwin/include \ /usr/dt/*/include /opt/*/include /usr/include/Motif* \ "${prefix}"/*/include /usr/*/include /usr/local/*/include \ "${prefix}"/include/* /usr/include/* /usr/local/include/*; do if test -f "$dir/X11/Xaw/Text.h"; then ice_cv_athena_includes="$dir" break fi done fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # LIBS="$ice_athena_save_LIBS" CFLAGS="$ice_athena_save_CFLAGS" CPPFLAGS="$ice_athena_save_CPPFLAGS" LDFLAGS="$ice_athena_save_LDFLAGS" fi athena_includes="$ice_cv_athena_includes" fi # # # Now for the libraries. # if test "$athena_libraries" = ""; then if test "${ice_cv_athena_libraries+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ice_athena_save_LIBS="$LIBS" ice_athena_save_CFLAGS="$CFLAGS" ice_athena_save_CPPFLAGS="$CPPFLAGS" ice_athena_save_LDFLAGS="$LDFLAGS" # LIBS="$X_PRE_LIBS -lXaw -lXmu -lXext -lXt -lX11 $X_EXTRA_LIBS $LIBS" CFLAGS="$X_CFLAGS $CFLAGS" CPPFLAGS="$X_CFLAGS $CPPFLAGS" LDFLAGS="$X_LIBS $LDFLAGS" # cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { XtToolkitInitialize(); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # libXaw.a is in the standard search path. ice_cv_athena_libraries= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # libXaw.a is not in the standard search path. # Locate it and put its directory in `athena_libraries' # # # /usr/lib/Motif* are used on HP-UX (Motif). # /usr/lib/X11* are used on HP-UX (X and Athena). # /usr/dt is used on Solaris (Motif). # /usr/openwin is used on Solaris (X and Athena). # Other directories are just guesses. for dir in "$x_libraries" "${prefix}/lib" /usr/lib /usr/local/lib \ /usr/lib/Motif2.0 /usr/lib/Motif1.2 /usr/lib/Motif1.1 \ /usr/lib/X11R6 /usr/lib/X11R5 /usr/lib/X11R4 /usr/lib/X11 \ /usr/dt/lib /usr/openwin/lib \ /usr/dt/*/lib /opt/*/lib /usr/lib/Motif* \ "${prefix}"/*/lib /usr/*/lib /usr/local/*/lib \ "${prefix}"/lib/* /usr/lib/* /usr/local/lib/*; do if test -d "$dir" && test "`ls $dir/libXaw.* 2> /dev/null`" != ""; then ice_cv_athena_libraries="$dir" break fi done fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # LIBS="$ice_athena_save_LIBS" CFLAGS="$ice_athena_save_CFLAGS" CPPFLAGS="$ice_athena_save_CPPFLAGS" LDFLAGS="$ice_athena_save_LDFLAGS" fi # athena_libraries="$ice_cv_athena_libraries" fi # Add Athena definitions to X flags # if test "$athena_includes" != "" && test "$athena_includes" != "$x_includes" && test "$athena_includes" != "no" then X_CFLAGS="-I$athena_includes $X_CFLAGS" fi if test "$athena_libraries" != "" && test "$athena_libraries" != "$x_libraries" && test "$athena_libraries" != "no" then case "$X_LIBS" in *-R\ *) X_LIBS="-L$athena_libraries -R $athena_libraries $X_LIBS";; *-R*) X_LIBS="-L$athena_libraries -R$athena_libraries $X_LIBS";; *) X_LIBS="-L$athena_libraries $X_LIBS";; esac fi # # athena_libraries_result="$athena_libraries" athena_includes_result="$athena_includes" test "$athena_libraries_result" = "" && athena_libraries_result="in default path" test "$athena_includes_result" = "" && athena_includes_result="in default path" test "$athena_libraries_result" = "no" && athena_libraries_result="(none)" test "$athena_includes_result" = "no" && athena_includes_result="(none)" echo "$as_me:$LINENO: result: libraries $athena_libraries_result, headers $athena_includes_result" >&5 echo "${ECHO_T}libraries $athena_libraries_result, headers $athena_includes_result" >&6 # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi; # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi; # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi; # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done fi SED=$lt_cv_path_SED echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 5500 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; esac need_locks="$enable_libtool_lock" echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:6735:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* ) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for *BSD fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux*) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris* | sysv5*) symcode='[BDRT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # # Check for any special shared library compilation flags. # lt_prog_cc_shlib= if test "$GCC" = no; then case $host_os in sco3.2v5*) lt_prog_cc_shlib='-belf' ;; esac fi if test -n "$lt_prog_cc_shlib"; then { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : else { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} lt_cv_prog_cc_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_prog_compiler_static" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7796: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:7800: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case "$cc_basename" in xlc*) lt_prog_compiler_pic='-qnocommon' lt_prog_compiler_wl='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $CC in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic='-Kpic' lt_prog_compiler_static='-dn' ;; solaris*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8039: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8043: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8099: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8103: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds="$tmp_archive_cmds" fi else ld_shlibs=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec=' ' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case "$cc_basename" in xlc*) output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs=no ;; esac fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=no hardcode_shlibpath_var=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no hardcode_shlibpath_var=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which librarie types wil actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= # Source file extension for C++ test sources. ac_ext=cc # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes if test "$GXX" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_CXX=yes else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_CXX=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX=' ' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes if test "$GXX" = yes ; then lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case "$cc_basename" in xlc*) output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_CXX=no ;; esac fi ;; dgux*) case $cc_basename in ec++) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd12*) # C++ shared libraries reported to be fairly broken before switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | kfreebsd*-gnu) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC) archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_CXX='+b $libdir' hardcode_libdir_separator_CXX=: ;; ia64*) hardcode_libdir_flag_spec_CXX='-L$libdir' ;; *) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case "$host_cpu" in hppa*64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; *) hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC) case "$host_cpu" in hppa*64*|ia64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case "$host_cpu" in ia64*|hppa*64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; irix5* | irix6*) case $cc_basename in CC) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: ;; linux*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; cxx) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd='echo' ;; osf3*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ $rm $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sco*) archive_cmds_need_lc_CXX=no case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.0-5 | solaris2.0-5.*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' fi ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) archive_cmds_need_lc_CXX=no ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" for p in `eval $output_verbose_link_cmd`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" \ || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $rm -f confest.$objext case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case "$cc_basename" in xlc*) lt_prog_compiler_pic_CXX='-qnocommon' lt_prog_compiler_wl_CXX='-Wl,' ;; esac ;; dgux*) case $cc_basename in ec++) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | kfreebsd*-gnu) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; cxx) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; sco*) case $cc_basename in CC) lt_prog_compiler_pic_CXX='-fPIC' ;; *) ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; unixware*) ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:12579: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:12583: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:12639: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:12643: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || \ test -n "$runpath_var_CXX" || \ test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_CXX # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_CXX" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) test "$enable_shared" = yes && enable_static=no ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case "$cc_basename" in xlc*) lt_prog_compiler_pic_F77='-qnocommon' lt_prog_compiler_wl_F77='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $CC in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic_F77='-Kpic' lt_prog_compiler_static_F77='-dn' ;; solaris*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14935: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14939: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14995: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14999: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds_F77="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds_F77="$tmp_archive_cmds" fi else ld_shlibs_F77=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_F77=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77=' ' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='' link_all_deplibs_F77=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case "$cc_basename" in xlc*) output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_F77=no ;; esac fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; ia64*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; *) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; sco3.2v5*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4.2uw2*) archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag_F77='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv5*) no_undefined_flag_F77=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec_F77= hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var_F77" || \ test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$CC # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17034: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17038: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case "$cc_basename" in xlc*) lt_prog_compiler_pic_GCJ='-qnocommon' lt_prog_compiler_wl_GCJ='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $CC in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic_GCJ='-Kpic' lt_prog_compiler_static_GCJ='-dn' ;; solaris*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17277: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17281: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17337: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:17341: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_GCJ=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_GCJ=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_GCJ=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds_GCJ="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds_GCJ="$tmp_archive_cmds" fi else ld_shlibs_GCJ=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_GCJ=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_GCJ=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_GCJ=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_GCJ=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ=' ' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi[45]*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_GCJ=no hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='' link_all_deplibs_GCJ=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case "$cc_basename" in xlc*) output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_GCJ=no ;; esac fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; ia64*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; *) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; sco3.2v5*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_GCJ=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4.2uw2*) archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag_GCJ='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv5*) no_undefined_flag_GCJ=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec_GCJ= hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ test "X$hardcode_automatic_GCJ" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$CC lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether char is unsigned" >&5 echo $ECHO_N "checking whether char is unsigned... $ECHO_C" >&6 if test "${ac_cv_c_char_unsigned+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((char) -1) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_char_unsigned=no else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_char_unsigned=yes fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_char_unsigned" >&5 echo "${ECHO_T}$ac_cv_c_char_unsigned" >&6 if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then cat >>confdefs.h <<\_ACEOF #define __CHAR_UNSIGNED__ 1 _ACEOF fi echo "$as_me:$LINENO: checking for char" >&5 echo $ECHO_N "checking for char... $ECHO_C" >&6 if test "${ac_cv_type_char+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((char *) 0) return 0; if (sizeof (char)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_char=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_char=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5 echo "${ECHO_T}$ac_cv_type_char" >&6 echo "$as_me:$LINENO: checking size of char" >&5 echo $ECHO_N "checking size of char... $ECHO_C" >&6 if test "${ac_cv_sizeof_char+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_char" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_char=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (char), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (char)); } unsigned long ulongval () { return (long) (sizeof (char)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (char))) < 0) { long i = longval (); if (i != ((long) (sizeof (char)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (char)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_char=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (char), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_char=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5 echo "${ECHO_T}$ac_cv_sizeof_char" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF echo "$as_me:$LINENO: checking for short" >&5 echo $ECHO_N "checking for short... $ECHO_C" >&6 if test "${ac_cv_type_short+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((short *) 0) return 0; if (sizeof (short)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_short=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_short=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 echo "${ECHO_T}$ac_cv_type_short" >&6 echo "$as_me:$LINENO: checking size of short" >&5 echo $ECHO_N "checking size of short... $ECHO_C" >&6 if test "${ac_cv_sizeof_short+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_short" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_short=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (short)); } unsigned long ulongval () { return (long) (sizeof (short)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (short))) < 0) { long i = longval (); if (i != ((long) (sizeof (short)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (short)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_short=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_short=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 echo "${ECHO_T}$ac_cv_sizeof_short" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((int *) 0) return 0; if (sizeof (int)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (int)); } unsigned long ulongval () { return (long) (sizeof (int)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int))) < 0) { long i = longval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((long *) 0) return 0; if (sizeof (long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long)); } unsigned long ulongval () { return (long) (sizeof (long)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6 if test "${ac_cv_type_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((long long *) 0) return 0; if (sizeof (long long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6 echo "$as_me:$LINENO: checking size of long long" >&5 echo $ECHO_N "checking size of long long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long long)); } unsigned long ulongval () { return (long) (sizeof (long long)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF echo "$as_me:$LINENO: checking for float" >&5 echo $ECHO_N "checking for float... $ECHO_C" >&6 if test "${ac_cv_type_float+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((float *) 0) return 0; if (sizeof (float)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_float=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_float=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_float" >&5 echo "${ECHO_T}$ac_cv_type_float" >&6 echo "$as_me:$LINENO: checking size of float" >&5 echo $ECHO_N "checking size of float... $ECHO_C" >&6 if test "${ac_cv_sizeof_float+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_float" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (float))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (float))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (float))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (float))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (float))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_float=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (float), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (float), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (float)); } unsigned long ulongval () { return (long) (sizeof (float)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (float))) < 0) { long i = longval (); if (i != ((long) (sizeof (float)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (float)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_float=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (float), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (float), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_float=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_float" >&5 echo "${ECHO_T}$ac_cv_sizeof_float" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_FLOAT $ac_cv_sizeof_float _ACEOF echo "$as_me:$LINENO: checking for double" >&5 echo $ECHO_N "checking for double... $ECHO_C" >&6 if test "${ac_cv_type_double+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((double *) 0) return 0; if (sizeof (double)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_double=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_double=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_double" >&5 echo "${ECHO_T}$ac_cv_type_double" >&6 echo "$as_me:$LINENO: checking size of double" >&5 echo $ECHO_N "checking size of double... $ECHO_C" >&6 if test "${ac_cv_sizeof_double+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_double" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (double))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (double))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (double))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (double))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (double))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_double=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (double), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (double)); } unsigned long ulongval () { return (long) (sizeof (double)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (double))) < 0) { long i = longval (); if (i != ((long) (sizeof (double)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (double)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_double=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (double), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_double=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_double" >&5 echo "${ECHO_T}$ac_cv_sizeof_double" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF echo "$as_me:$LINENO: checking for long double" >&5 echo $ECHO_N "checking for long double... $ECHO_C" >&6 if test "${ac_cv_type_long_double+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((long double *) 0) return 0; if (sizeof (long double)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long_double=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_double=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long_double" >&5 echo "${ECHO_T}$ac_cv_type_long_double" >&6 echo "$as_me:$LINENO: checking size of long double" >&5 echo $ECHO_N "checking size of long double... $ECHO_C" >&6 if test "${ac_cv_sizeof_long_double+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long_double" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long double))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long double))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long double))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long double))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long double))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_double=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long double), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long double)); } unsigned long ulongval () { return (long) (sizeof (long double)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long double))) < 0) { long i = longval (); if (i != ((long) (sizeof (long double)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long double)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long_double=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long double), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long_double=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_double" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_double" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double _ACEOF echo "$as_me:$LINENO: checking for void *" >&5 echo $ECHO_N "checking for void *... $ECHO_C" >&6 if test "${ac_cv_type_void_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((void * *) 0) return 0; if (sizeof (void *)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_void_p=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_void_p=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5 echo "${ECHO_T}$ac_cv_type_void_p" >&6 echo "$as_me:$LINENO: checking size of void *" >&5 echo $ECHO_N "checking size of void *... $ECHO_C" >&6 if test "${ac_cv_sizeof_void_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_void_p" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (void *))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_void_p=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (void *), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (void *)); } unsigned long ulongval () { return (long) (sizeof (void *)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (void *))) < 0) { long i = longval (); if (i != ((long) (sizeof (void *)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (void *)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_void_p=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (void *), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_void_p=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5 echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF if test "x${GCC}" = "xyes" then CFLAGS="$CFLAGS" echo "$as_me:$LINENO: checking \"for gcc strength-reduce bug\"" >&5 echo $ECHO_N "checking \"for gcc strength-reduce bug\"... $ECHO_C" >&6 if test "${ac_cv_c_gcc_strength_bug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_c_gcc_strength_bug="yes" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main(void) { static int Array[3]; unsigned int B = 3; int i; for(i=0; i&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_gcc_strength_bug="no" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_c_gcc_strength_bug="yes" fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_c_gcc_strength_bug" >&5 echo "${ECHO_T}$ac_cv_c_gcc_strength_bug" >&6 if test "$ac_cv_c_gcc_strength_bug" = "yes" then CFLAGS="$CFLAGS -fno-strength-reduce" fi fi echo "$as_me:$LINENO: checking \"whether external symbols need an underscore prefix\"" >&5 echo $ECHO_N "checking \"whether external symbols need an underscore prefix\"... $ECHO_C" >&6 if test "${ac_cv_c_extern_prefix+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else saved_libs=$LIBS LIBS="conftest_asm.s $LIBS" cat > conftest_asm.s <conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern int ac_test; int main () { if (ac_test) return 1 ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_extern_prefix="yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_extern_prefix="no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$saved_libs fi echo "$as_me:$LINENO: result: $ac_cv_c_extern_prefix" >&5 echo "${ECHO_T}$ac_cv_c_extern_prefix" >&6 if test "$ac_cv_c_extern_prefix" = "yes" then cat >>confdefs.h <<\_ACEOF #define NEED_UNDERSCORE_PREFIX 1 _ACEOF fi echo "$as_me:$LINENO: checking \"which ANSI integer type is 16 bit\"" >&5 echo $ECHO_N "checking \"which ANSI integer type is 16 bit\"... $ECHO_C" >&6 if test "${ac_16bit_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_16bit_type= else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main(void) { if (sizeof(short)==2) return(0); else if (sizeof(int)==2) return(1); else return(2); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_16bit_type="short" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_16bit_type="int" fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_16bit_type" >&5 echo "${ECHO_T}$ac_16bit_type" >&6 if test "$ac_16bit_type" = "short" then T1_AA_TYPE16="-DT1_AA_TYPE16=short" T1_INT16="short" else T1_AA_TYPE16="-DT1_AA_TYPE16=int" T1_INT16="int" fi echo "$as_me:$LINENO: checking \"which ANSI integer type is 32 bit\"" >&5 echo $ECHO_N "checking \"which ANSI integer type is 32 bit\"... $ECHO_C" >&6 if test "${ac_32bit_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_32bit_type= else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main(void) { if (sizeof(int)==4) return(0); else if (sizeof(long)==4) return(1); else return(2); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_32bit_type="int" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_32bit_type="long" fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_32bit_type" >&5 echo "${ECHO_T}$ac_32bit_type" >&6 if test "$ac_32bit_type" = "int" then T1_AA_TYPE32="-DT1_AA_TYPE32=int" T1_INT32="int" else T1_AA_TYPE32="-DT1_AA_TYPE32=long" T1_INT32="long" fi echo "$as_me:$LINENO: checking \"which ANSI integer type is 64 bit\"" >&5 echo $ECHO_N "checking \"which ANSI integer type is 64 bit\"... $ECHO_C" >&6 if test "${ac_64bit_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main(void) { if (sizeof(long)==8) return(0); else return(1); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_64bit_type="long" else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_64bit_type="" fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_64bit_type" >&5 echo "${ECHO_T}$ac_64bit_type" >&6 if test "$ac_64bit_type" = "long" then T1_AA_TYPE64="-DT1_AA_TYPE64=long" else T1_AA_TYPE64= fi CFLAGS="${CFLAGS} -DT1LIB_IDENT=\"\\\"${T1LIB_IDENTIFIER}\\\"\" -DGLOBAL_CONFIG_DIR=\"\\\"${T1LIB_DATA_DIR}\\\"\"" echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5 echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6 if test "${ac_cv_header_stat_broken+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if defined(S_ISBLK) && defined(S_IFDIR) # if S_ISBLK (S_IFDIR) You lose. # endif #endif #if defined(S_ISBLK) && defined(S_IFCHR) # if S_ISBLK (S_IFCHR) You lose. # endif #endif #if defined(S_ISLNK) && defined(S_IFREG) # if S_ISLNK (S_IFREG) You lose. # endif #endif #if defined(S_ISSOCK) && defined(S_IFREG) # if S_ISSOCK (S_IFREG) You lose. # endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "You lose" >/dev/null 2>&1; then ac_cv_header_stat_broken=yes else ac_cv_header_stat_broken=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5 echo "${ECHO_T}$ac_cv_header_stat_broken" >&6 if test $ac_cv_header_stat_broken = yes; then cat >>confdefs.h <<\_ACEOF #define STAT_MACROS_BROKEN 1 _ACEOF fi echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6 if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6 if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned _ACEOF fi if test "$no_x" = "yes" then MAIN_TARGET="libt1.la" MAIN_HEADER="t1lib.h" XSUBDIRS="" T1LIBX_OBJS="" T1LIBX_SRCS="" T1LIBX_HEADERS="" XOBJS="" else MAIN_TARGET="libt1.la libt1x.la" MAIN_HEADER="t1lib.h t1libx.h" XSUBDIRS="xglyph" T1LIBX_OBJS="t1lib/t1x11.lo" T1LIBX_SRCS="t1lib/t1x11.c" T1LIBX_HEADERS="t1lib/t1x11.h t1lib/t1libx.h" XOBJS="t1x11.lo" fi if test "$no_x" = "yes" then CFLAGS="${CFLAGS} -DT1LIB_NO_X11_SUPPORT" MAKEFILES="Makefile \ lib/Makefile \ lib/type1/Makefile \ lib/t1lib/Makefile \ type1afm/Makefile \ examples/Makefile \ doc/Makefile" else MAKEFILES="Makefile \ lib/Makefile \ lib/type1/Makefile \ lib/t1lib/Makefile \ xglyph/Makefile \ type1afm/Makefile \ examples/Makefile \ doc/Makefile" fi ac_config_files="$ac_config_files $MAKEFILES lib/t1lib/t1lib.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "$MAKEFILES" ) CONFIG_FILES="$CONFIG_FILES $MAKEFILES" ;; "lib/t1lib/t1lib.h" ) CONFIG_FILES="$CONFIG_FILES lib/t1lib/t1lib.h" ;; "lib/t1lib/sysconf.h" ) CONFIG_HEADERS="$CONFIG_HEADERS lib/t1lib/sysconf.h:lib/t1lib/sysconf.h.in" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@LDLIBS@,$LDLIBS,;t t s,@PROGEXT@,$PROGEXT,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@T1LIB_LT_CURRENT@,$T1LIB_LT_CURRENT,;t t s,@T1LIB_LT_REVISION@,$T1LIB_LT_REVISION,;t t s,@T1LIB_LT_AGE@,$T1LIB_LT_AGE,;t t s,@T1LIB_DATA_DIR@,$T1LIB_DATA_DIR,;t t s,@T1LIB_IDENTIFIER@,$T1LIB_IDENTIFIER,;t t s,@MAIN_TARGET@,$MAIN_TARGET,;t t s,@MAIN_HEADER@,$MAIN_HEADER,;t t s,@OPTIONS@,$OPTIONS,;t t s,@no_x@,$no_x,;t t s,@CC@,$CC,;t t s,@T1_AA_TYPE16@,$T1_AA_TYPE16,;t t s,@T1_AA_TYPE32@,$T1_AA_TYPE32,;t t s,@T1_AA_TYPE64@,$T1_AA_TYPE64,;t t s,@T1_INT16@,$T1_INT16,;t t s,@T1_INT32@,$T1_INT32,;t t s,@XSUBDIRS@,$XSUBDIRS,;t t s,@T1LIBX_OBJS@,$T1LIBX_OBJS,;t t s,@T1LIBX_SRCS@,$T1LIBX_SRCS,;t t s,@T1LIBX_HEADERS@,$T1LIBX_HEADERS,;t t s,@XOBJS@,$XOBJS,;t t s,@T1LIB_VERSION@,$T1LIB_VERSION,;t t s,@T1LIB_REVISION@,$T1LIB_REVISION,;t t s,@T1LIB_PATCHLEVEL@,$T1LIB_PATCHLEVEL,;t t s,@T1LIB_VERSIONSTRING@,$T1LIB_VERSIONSTRING,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@CPP@,$CPP,;t t s,@X_CFLAGS@,$X_CFLAGS,;t t s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t s,@X_LIBS@,$X_LIBS,;t t s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@CXXCPP@,$CXXCPP,;t t s,@F77@,$F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi echo echo "Configure finished!" echo " Do: 'make' to compile the t1lib-package." echo " Do: 'make without_doc' to compile if you do not have LaTeX." echo " Do: 'make install' to install the t1lib-package." echo "" t1lib-5.1.2/Changes0000644000175000001440000006106510733501627012570 0ustar rmzusersNov 1996: t1lib-0.1-alpha ------------------------- - first public release of t1lib with all basic functionality May 1997: t1lib-0.2-beta ------------------------- - Now uses autoconf to configure the software for the system. - All functions put into one library. - ATTENTION: Argument order for the glyph-setting functions changed to be consistent with the info functions. Programs that already use t1lib have to be rewritten (sorry....) - Function for computing the width of a string added (T1_GetStringWidth()). - Function for computing the BoundingBox of a string added (T1_GetStringBBox()). - Function T1_GetMetricsInfo() added. It returns a struct containing width, bounding box, number of characters and horizontal position of the characters in character space coordinates (afm-units). - Function T1_GetBBox() renamed to T1_GetCharBBox() for consistency reasons. - All exit() calls removed from library and replaced by appropriate error return codes. - t1lib now optionally supports a logfile for logging of error- and warning-messages at runtime. The "verbosity" of this logfile may be chosen by the user. - Documentation more complete. July 1997: t1lib-0.3-beta ------------------------- - Code for placing character bitmaps in T1_SetString() slightly advanced; the restrictions concerning slanted fonts are eliminated. - T1_GetStringBBox()/T1_GetCharBBox() extended. It is now possible to get the bounding box if the font is slanted. This is implemented by examining the characters outline at 1000bp. - Some Bugs in the code managing linked lists of font sizes have been corrected. - Bug in T1_CopyFont() has been corrected. This should work now. - The behavior during configuration file searching has been changed to be compatible to well known UNIX-conventions. - As the main new feature in this release t1lib now has direct support for X11 (optionally). There is a set of functions that act similar to XDrawText(), i.e. they draw directly into a drawable (pixmap or window). - Caching of bitmaps of the X11 rastering functions is also done in the X-Server for maximum performance (although it is not as fast as I dreamed of, admittedly). - X11 rastering functions use the current foreground/background colors - The X11 rastering functions implement automatical antialiasing between foreground and background color - The X11 rastering functions provide an opaque and a transparent mode - The X11 rastering functions can draw into drawable of any depth (provided the depth is large enough) - A new target has been added to the makefiles allowing to remove a t1lib-installation automatically from a system. December 1997: t1lib-0.4-beta ----------------------------- - Many memory allocation bugs fixed. t1lib is now "libefence-proved". - Kerning and Metrics-Lookup rewritten. The corresponding functions are now based on character indices rather than on character names which makes them up to 8 x faster than before, depeding on data and context. - Raph Levien (raph@acm.org) contributed a fast algorithm for subsampling which improves Antialiasing time significantly. - Fred L. Drake, Jr. (fdrake@acm.org) contributed a Python-interface to t1lib. This allows Python programmers to make use of Adobe Type 1 fonts. This package, called t1python, is distributed with t1lib in an independent subdirectory of the distribution. See README.t1python for more information on t1python. - Bitmaps and antialiased bitmaps may now be padded 8, 16 or 32 bits. This allows (with some restrictions) somewhat faster concatenation of characterbitmaps to stringbitmaps. The padding-value may be set and queried at runtime. - The optional X11-interface, introduced in t1lib-0.3-beta, has been reduced to a simple wrapper. X11-pixmap caching has been completely dropped since it has proven to be too inefficient. However, at the level of the function calls, nothing has changed. - Configuration of t1lib (with or without X11-interface) may be queried by applicationprogrammers at compiletime or by applications at runtime. - Two functions for informations on fonts have been added: 1) T1_GetFontBBox(): Return a fonts' bounding box. 2) T1_GetAllCharNames(): Return a list of all character defined in a Type 1 font. This might be of interest if somebody wants to set up new encodings. - Function T1_CloseLib() added. This function allows to completely free the data-structures of t1lib. T1_CloseLib() should be called in future when an application using t1lib exits. - Many other things not worth to be metioned ... March 1998: t1lib-0.5-beta -------------------------- - Changed the license to the GNU General Public Library License (LGPL) - Definition of INFINITY removed from lib/type1/[regions.c|regions.h|t1imager.h]. Collided with a definition in math.h on OS/2. - Implemented proper handling of environment variables CFLAGS, LDFLAGS and CC during build process. - Added target 'without_doc' for people who have a very rudimentary or no LaTeX-System at all - Fixed some bugs that appeared when font files from database were not found - Clipmask Bug in the X11-rastering functions fixed - Bugs in VM-reallocation (T1_LoadFont()) repeatedly fixed. It is now ANSI-C compliant. - Alignment of VM changed. This was needed on some systems. - Set of functions for accessing information from FontInfo dictionary is now complete. This introduces the new functions T1_GetFullName(), T1_GetFamilyName(), T1_GetWeight(), T1_GetItalicAngle(), T1_GetIsFixedPitch(), T1_GetVersion(), T1_GetNotice(). - ATTENTION: In the above context, T1_GetPostScriptName() has been renamed to T1_GetFontName() for consistency reasons, sorry. - ATTENTION: All types "unsigned char (*)" have been changed to char (*) in the API functions. This was necessary while adapting t1lib to ANSI-standard to make it portable. Sorry for this confusion. - New function T1_AddFont(): Fonts can now be added to the font database at runtime. This means especially, one can ignore a FontDataBase file thus can start t1lib-programs on single fontfiles without doing a complete setup before. - There is now also the possibility to ignore the currently active configuration file, thereby setting all search paths to the current working directory and having an empty font data base. This is meant for small applications that work on single files. - t1lib is now able to work with fonts without corresponding afm-files. AFM-information can be produced from pfa- and pfb-files. This, of course, refers only to character-metrics information. - A function T1_WriteAFMFallbackFile() is provided which allows to dump metrics information to a valid AFM-file. - New subdirectory type1afm created which contains type1afm, a program to extract afm files from Type 1 font files. - Renamed definitions MAX, MIN, ABS, TRUE and FALSE because they collided with system header files on some systems. - Corrected antialiasing functions. The metrics should now be as correct as possible and black pixel at the right edge of the bitmaps should not appear any more. - Handling of unencoded characters in strings (such as adieresis in AdobeStandardEncoding) is now consistent in rotated and non-rotated glyphs. - A few functions have been added to get information on the file search environment and to manipulate the search paths from within applications. - Mixed endian setups (i.e., client and X-server on different machines with different endianess) should now be handled correctly. - In summary t1lib should now be much more portable than before. - Update to t1python-0.3 March 1998: t1lib-0.6-beta -------------------------- - Cleaned up the sources in type1-directory - Functions Xalloc() and Xfree removed. x11dummy.c from list of source files removed. - A few bugs fixed - Character positioning rewritten. It does now handle strings correctly in which the leftmost pixels does not belong to the first character and the rightmost pixels do not belong to the last character. - t1lib now substitutes .notdef for defined character names that have no corresponding charstring. This is a workaround for some fonts in the ghostscript distribution (e.g., s050000l.pfb) - Separated the X11-wrapper from the rest of t1-stuff. t1lib now consists of two libraries and two include files. - Cleaned up configuration and compilation process. May 1998: t1lib-0.7-beta ------------------------ - Athena libraries are explicitly located for non-standard system - glyph-structure changed. glyph.metrics.characterWidth is replaced glyph.metrics.advanceX and an entry glyph.metrics.advanceY is added. - Interpretation of the sign of glyph.metrics.descent has changed. - String-rastering functions now support Underlining, Overlining and Overstriking. - Functions for overriding default line-parameters implemented. - Whitespace at beginning and ending of glyphs is now correctly recorded into leftSideBearing and RightSideBearing. - Function T1_ConcatGlyphs() added to API. It concatenates two glyphs of identical depth with an optional displacement inserted. - xglyph output window has changed for X-rastering functions. It is now of constant size with the logical origin in the center. Too large glyphs are simply clipped. - t1lib can be compiled and run on VMS thanks to John Hasstedt (John.Hasstedt@sunysb.edu). A configure.com script for building on VMS is included in the toplevel directory. - T1_GetMetricsInfo() and T1_GetStringBBox() fixed. Now results are correct also if the leftmost pixel in a glyph doesn't belong to the first char and if the rightmost pixel does not belong to the last character. - Leading and trailing white space in glyphs should now be recorded consistently and correctly for all rastering functions. - xglyph can now display a character map of a font. - Global variable T1_errno introduced. It basically works the same way as the errno in libc. This allows applications a unified error-handling. - Update to t1python-0.7. November 1998: t1lib-0.8-beta ----------------------------- - T1_GetAllCharNames() returned invalid list if the Charstrings dictionary was larger than the actual number of charstrings defined (which is perfectly valid, even if it does not make much sense) --> fixed. - 4 x Antialiasing implemented. This can improve the quality at small sizes once more, at the cost of some computational and memory requirement. It is possible to work with 2 x and 4 x concurrently. - Function T1_GetLibIdent() added to API. - Function T1_SetRasterFlags() added to API. It allows to selectively enable or disable certain rasterizer features like, e.g., hinting. - xglyph extended to support 4 x antialiasing. - xglyph now recognizes a few commandline options, primarily intended for debugging purposes. - xglyph is now somewhat more intelligent (and faster) if slanting, extending or reencoding is applied to a font. - New function T1_SetDefaultEncoding(). It allows to set a default encoding vector which then is applied to all subsequently loaded fonts that have StandardEncoding. - Bug in Type 1 rasterizer corrected which prevented fonts with non-standard lenIV values from being correctly decrypted (Charstring decryption). - Internal ISOLatin1Encoding removed from rasterizer since there's no reason for mainting this encoding scheme internally - tlib now has notion of "Encoding Schemes". The format of encoding files is extended correspondingly and is backward compatible. - Memory leaks eliminated, thanks to David Huggins-Daines. - Some slight performance improvements. - Kerning performance improved. Moreover, kerning pairs need no longer be alphabetically sorted. - AFM-parser modified to work with DOS-style AFM-files. - Some bugs in scan-code of Type 1 rasterizer corrected. Scanner is now aware of pfb-blocks and can scan files with multiple binary data segments. - t1lib now uses GNU-libtool, thanks to Hirotsugo Kakugawa (h.kakugawa@computer.org) - An encoding file for IsoLatin2 charset is included thanks to Jiri Pavlovsky (jirap@bajt.cz). - The angle-argument of the rastering functions has been replaced by a more general transformation specification. This is an incompatible change to previous versions, but I think it should be worth it. - t1lib can now handle fontfile names with arbitrary extensions and even without extension. - t1lib compiles and runs under Win32 using the cygwin32 toolkit. - Maximum number of stem-hints enlarged (-> 256) because 128 were not enough for complicated fonts. May 1999: t1lib-0.9 ------------------- - Sub-Pixel positioning for Antialiasing functions enthanced (It was in fact not correct before. - Multiple Master fonts are rejected instead of SIGSEGV (nearly as professional as supporting them ;) - An additional set of functions allows access, filling and manipulation of outlines. - Functionality for non-antialiased "bytemaps". - "Smart Antialiasing", allows to automatically let t1lib decide what AA-level to use. The switchlimits are adjustable. - An AFM-filename may explicitly be specified. This suppresses t1lib´s search for these files. This allows interfacing with other path search systems like kpathsea. This was suggested by Nicolai Langfeldt (janl@math.uio.no). - Some problems with aspect ratios different from 1 and transformed glyphs fixed. - Support for Right-To-Left typesetting. This might be experimental because I don't know the rules for this exactly. - In the context of Right-To-Left typesetting T1_ConcatGlyphs() expects one additional argument "mode". ATTENTION: This is an incompatible change with respect to V. 0.8. - abort()-calls in type1-sources are caught by longjmp(). t1lib does not any longer exit a program. Rather, errors may be handled by the user. - If a rastering operation did not produce any black pixels, the rastering fuctions do not return a NULL-glyph any longer. Rather, a glyph with the correct metrics and NULL-bitmap pointer is returned. This seems to come closer to accepted standards. - The t1python-package is currently not distributed with t1lib because the interface is not up to date. - A lot of bugs fixed (and a lot of others introduced, of course :) June 1999: t1lib-0.9.1 --------------------- - Several Bug-fixes, some functions that have been reported to be missing by users, but no general new features. - New functions T1_GetExtend(), T1_GetSlant() and T1_GetTransform() which give access to currently active values of fontlevel transformations - New function T1_GetNoKernPairs() which gives access to the number of defined kerningpairs. - New functions to query the grayvalue settings (T1_AAGetGrayValues(), T1_AAHGetGrayValues() and T1_AANGetGrayValues()) - Arbitrary linear transformations on fontlevel including caching using T1_TransformFont() (on suggestion and patches by Derek B. Noonburg, (derekn@foolabs.com) - Introduction of the initialization flag T1_NO_AFM which suppresses use of AFM data. This limits the functionality of t1lib considerably but applications that do not need those advanced functions can gain some performance boost while loading fonts because AFM files are not parsed and the mapping tables are not setup (also by Derek B. Noonburg) - xglyph clips output window for the function fonttable() to the physical screen size. This is to prevent from freezing or exceeding resources if the fonttable button had accidentally been pressed while a large size was active. - The utility function T1_DumpPixmap() removed from API. New function T1_XImageFromGlyph() added to X11 interface. This function allows, together with the Xpm-library function XpmWriteFileFromImage(), to write xpm-files from glyphs of arbitrary depths, colors, etc ... - Functions T1_CopyOutline() and T1_FreeOutline() added to the outline interface. - Fixed alignment problem on 64bit architecture. September 1999: t1lib-0.9.2: ---------------------------- - Support for EMX-environments under MSDOS. This concerns the file locating routines. - t1lib now allows for charstring code 15 and escape code 15 by ignoring these. They may appear in some old Adobe fonts. - Makefiles are more independent of GNU make. - Finally, undefined/missing characters are handled consistent in all rastering functions by substituting .notdef. - Several bug-fixes November 1999: t1lib-1.0: ------------------------- - Bug-fixes. - There happen to exist different assumptions about what exactly ISOLatin1Encoding is. Especially the name for char 45 (dec) is not uniquely specified in ISO 8859-1. Thus t1lib provides two encoding files ISOLatin1Encoding one which (PSLatin1.enc) is compatible with PostScript Level 2 and above. March 2000: t1lib-1.0.1: ------------------------- - A few bug Fixes. - lenIV=-1 is now handled. According to an undocumented Adobe convention lenIV=-1 indicates suppressing of charstring encryption. - Patches to compile t1lib und MS Visual C++ 6.0. In case something goes wrong, please contact Nakano Hideo (hideo@mb.infoeddy.ne.jp). February 2001: t1lib-1.1.0: --------------------------- - Bug Fixes. - Functions T1_GetFontFilePath() and T1_GetAfmFilePath() which return the complete path of the files used by t1lib. - Fixed parser code which previously failed on ASCII-encrypted files in which the hex-lines were separated by instead of by (Yes, there such DOSian files out there ...). - Multiple inclusion protection for t1lib.h - T1_QueryLigs() fixed. It did not work correct if successors and/or ligatures were not in the current encoding. - New patches for VMS by Martin P. J. Zinser (zinser@decus.de). - Patch by Sergey Babkin (babkin@bellatlantic.net) to correct the rasterizer to respect StdStemWidths. - General support for font subsetting. - Dokumentation also provided as pdf for those people who do not have LaTeX installed. This is due to suggestions and patches by Nguyen-Dai Quy (NDQ@iris.ltas.ulg.ac.be). April 2001: t1lib-1.1.1: ------------------------ - Update to libtool-1.3.5. - T1_GetFontBBox() also accepts specification consisting of floating point numbers (as suggested by Derek B. Noonburg (derekn@foolabs.com)). - Within the near future the t1lib-webpage will be no longer available because I will change my employer. - Similarly, the sources will be distributed from sunsite only from then on. - The Author's eMail-address will also become invalid in the near future. The new and hopefully permanent eMail.address will be "Rainer.Menzner@web.de". July 2001: t1lib-1.2: ---------------------- - Fixed bug in subsetting code. - Fixed bug in AFM-parser code. - Fixed kerning mapping code. Kerning did not work correctly for characters that appeared multiple times in an encoding vector. - In the same context a new function, T1_GetEncodingIndices() has been added to the API. It returns an array of indices (by contrast, T1_GetEncodingIndex() returns only the lowest index found). - Support for composite characters. - Additional support for dvips encoding files (thanks to suggestion and contribution by Nicolai Langfeldt (janl@linpro.no). - Documentation is installed in PostScript and PDF format, but no longer in DVI format. October 2001: t1lib-1.3: ------------------------ - *Really* an update to libtool-1.3.5 - Global Font Metrics Information is loaded from AFM files in order to be able to read the typographic ascender. Line ruling did not behave as documented. However, problems could still exist because the typographic ascender specification is optional in AFMs. - Reorganized search path handling and, in particular, the respective documentation is more detailed. - The configuration file now allows multiple lines of one type of search path specification and it is also possible to quote path specification in order to specify paths that contains special characters like spaces, colons, etc. - Multiple font databases are supported. - T1_PrintLog() extended to accept a variable argument list. - The environment variable T1LIB_LOGMODE is evaluated to give the user the chance to specify a loglevel and hence to detect t1lib-problems even if the application programmer did not enable the log file features. - Further bug fixes November 2001: t1lib-1.3.1: --------------------------- - Color problem in t1x11-module fixed. - Fixes in AFM parser. Among others, Version had been read as name, instead of as string. This led to a failure to scan global font info for some standard AFMs. - Fixes in of OpenVMS special code - Further Fixes January 2003: t1lib-5.0.0: -------------------------- - Forced PostScript target in the doc directory to file. - Subsetting code extended in order to ensure that components of composite characters are also part of the subset. - Hinting meachanism reworked in order to get rid of some rasterizing artifacts. - Experimental support for stroked fonts (PaintType=1) - Experimental support for stroking standard ATM fonts with PaintType=0. - For historical reasons, there happened to exist a few documented API functions that did not adhere to the T1_... naming convention. After considering the pro's and con's, I have decided to cleanup the interface, thus making this version incompatible to the previous version. Especially in the type1 subdirectory there are still a lot of global symbols, but at least these are not part of the documented API. The following functions are affected: CheckForInit() --> T1_CheckForInit() CheckForFontID() --> T1_CheckForFontID() T1_Get_no_fonts() --> T1_GetNoFonts() Furthermore, I have removed and made static a few functions which accidentally had found their way into t1lib.h, but which had not been part of the documented API. I'm sorry if this causes inconveniences ... - The new version, 5.0.0, follows as consequence from the issues discussed above. It is defined by the libtool quantities CURRENT, REVISION and AGE. - Functions for drawing rectangles. - Bug Fixes - Please also have a look at the topic "Future" in README.t1lib-5.0.0. February 2004: t1lib-5.0.1: --------------------------- - Support for Flex was not adapted to the changes from 5.0.0. This led to rasterization errors in fonts that use the Flex functionality --> fixed. - Bug Fixes April 2004: t1lib-5.0.2: ------------------------ - Changes not updated for this version Mai 2005: t1lib-5.1.0: ---------------------- - Check against MultipleMasterFonts somewhat more tolerant, so that Type 1 Fonts automatically created from Multiple Master Fonts (e.g. using Mmpfb) should now be acceptable. - The configure-machinery had been somewhat out of date and has been updated. The distributed configure script has been generated by AutoConf 2.59 and the redistributed libtool parts are taken from GNU libtool 1.5.10. - Top-Level TeX-file in the doc subdirectory adapted to recent TeX systems' requirements. - Added IsoLatin9.enc to distribution. - Subsetting extended so that it works for SEAC-constructed composites even if no AFM composite character information is available - Somewhat more intelligent defaults for subsetting when composite characters are included in the subset. - Reallocation had been broken by relocation of internal StandardEncoding vector. This problem turned out on systems where realloc() actually returned a different pointer. - Fix for outline code on 64bit systems. This involves a redefinition of the T1_PATHPOINT struct. This should be uncritical because for 32bit systems there is no difference, whereas on 64bit systems, this has never worked correctly before. - DESTDIR support in Makefile.in by Volker Zell - Support for XLFD font database format (in which the fonts' names appear in the first place on a line). - Further Bug Fixes December 2006: t1lib-5.1.1: --------------------------- - DESTDIR support was missing and has been addded in install-target for type1afm. - A bug fix in Anti-Aliasing subsampling code, which could make t1lib crash under certain conditions. - Small number of further fixes, in particular with respect to the build mechanism. December 2007: t1lib-5.1.2: --------------------------- - Small number of fixes reported by users. The fixes pertain to a vulnerability issue, memory access issues. - More decent handling if Encoding and / or FontBBox specification are missing (which is invalid with respect to the specification, but recoverablel). t1lib-5.1.2/README.t1python0000644000175000001440000000121210733501627013726 0ustar rmzusers About t1python -------------- t1python is a wrapper in the Python language, written by Fred L. Drake, Jr (fdrake@acm.org), which makes most functionality of t1lib available from within Python script programs. Further information about this package is available at http://www.python.org/sigs/image-sig/t1lib/ As opposed to some earlier versions t1python is not included in the current version of t1lib. This is due to time constraints of Fred and myself. Users interested in t1python should watch the URL above for getting information about newer versions of t1python. -Rainer t1lib-5.1.2/configure.in0000644000175000001440000002047710733501627013610 0ustar rmzusersdnl Process this file with autoconf to produce a configure script. dnl dnl This file configure.in is part of the t1lib-package (V. 1.0). dnl dnl Author: Rainer Menzner (Rainer.Menzner@web.de) dnl Date: 06/25/1997 dnl Last Modified: 2007-12-21 dnl AC_REVISION([configure.in 1.00]) AC_INIT(lib/t1lib/t1base.c) AC_CONFIG_HEADER(lib/t1lib/sysconf.h:lib/t1lib/sysconf.h.in) AC_CONFIG_AUX_DIR(ac-tools) dnl We set CFLAGS in order to have complete control over compiler dnl switches during development dnl CFLAGS="$CFLAGS -g -Wall" dnl The following variables specify version information of the dnl library. Starting with V. 1.0.0 the libtool scheme is used dnl as intended by its authors. dnl dnl Note: The name of the shared library on Linux is build as dnl libt1.so.$(T1LIB_LT_CURRENT)-$(T1LIB_LT_AGE).$(T1LIB_LT_AGE).$(T1LIB_LT_REVISION) dnl Since I'm forgetful sometimes, I quote the libtool infopage here: dnl dnl 1. Start with version information of `0:0:0' for each libtool library. dnl dnl 2. Update the version information only immediately before a public dnl release of your software. More frequent updates are unnecessary, dnl and only guarantee that the current interface number gets larger dnl faster. dnl dnl 3. If the library source code has changed at all since the last dnl update, then increment REVISION (`C:R:A' becomes `C:r+1:A'). dnl dnl 4. If any interfaces have been added, removed, or changed since the dnl last update, increment CURRENT, and set REVISION to 0. dnl dnl 5. If any interfaces have been added since the last public release, dnl then increment AGE. dnl dnl 6. If any interfaces have been removed since the last public release, dnl then set AGE to 0. define( MACRO_T1LIB_LT_CURRENT, 6) define( MACRO_T1LIB_LT_REVISION, 2) define( MACRO_T1LIB_LT_AGE, 1) dnl ----------------------------------------------------------- dnl ----------------------------------------------------------- dnl dnl Do not change anything below this line! dnl dnl ----------------------------------------------------------- dnl ----------------------------------------------------------- dnl Build version string and setup stuff to be substituted in dnl Makefile's and t1lib.h define( MACRO_T1LIB_IDENTIFIER, "builtin(eval, MACRO_T1LIB_LT_CURRENT - MACRO_T1LIB_LT_AGE).builtin(eval, MACRO_T1LIB_LT_AGE).builtin(eval, MACRO_T1LIB_LT_REVISION)") T1LIB_LT_CURRENT=builtin(eval, MACRO_T1LIB_LT_CURRENT) T1LIB_LT_REVISION=builtin(eval, MACRO_T1LIB_LT_REVISION) T1LIB_LT_AGE=builtin(eval, MACRO_T1LIB_LT_AGE) T1LIB_IDENTIFIER=MACRO_T1LIB_IDENTIFIER T1LIB_VERSION=builtin(eval, MACRO_T1LIB_LT_CURRENT - MACRO_T1LIB_LT_AGE) T1LIB_REVISION=builtin(eval, MACRO_T1LIB_LT_AGE) T1LIB_PATCHLEVEL=builtin(eval, MACRO_T1LIB_LT_REVISION) T1LIB_VERSIONSTRING=\"MACRO_T1LIB_IDENTIFIER\" dnl We use this file by Andreas Zeller to check for libXaw builtin(include, ac-tools/ice_find_athena.m4) builtin(include, ac-tools/aclocal.m4) dnl We want these before the checks, so the checks can modify their values. test -z "$LDLIBS" && LDLIBS=-lm AC_SUBST(LDLIBS) test -z "$PROGEXT" && PROGEXT="" AC_SUBST(PROGEXT) test -z "$CFLAGS" AC_SUBST(CFLAGS) test -z "$LDFLAGS" AC_SUBST(LDFLAGS) T1LIB_DATA_DIR="${datadir}/t1lib" dnl The following variables should be used AC_SUBST(T1LIB_LT_CURRENT) AC_SUBST(T1LIB_LT_REVISION) AC_SUBST(T1LIB_LT_AGE) AC_SUBST(T1LIB_DATA_DIR) AC_SUBST(T1LIB_IDENTIFIER) AC_SUBST(MAIN_TARGET) AC_SUBST(MAIN_HEADER) AC_SUBST(OPTIONS) AC_SUBST(no_x) AC_SUBST(CC) AC_SUBST(T1_AA_TYPE16) AC_SUBST(T1_AA_TYPE32) AC_SUBST(T1_AA_TYPE64) AC_SUBST(T1_INT16) AC_SUBST(T1_INT32) AC_SUBST(XSUBDIRS) AC_SUBST(T1LIBX_OBJS) AC_SUBST(T1LIBX_SRCS) AC_SUBST(T1LIBX_HEADERS) AC_SUBST(XOBJS) AC_SUBST(T1LIB_VERSION) AC_SUBST(T1LIB_REVISION) AC_SUBST(T1LIB_PATCHLEVEL) AC_SUBST(T1LIB_VERSIONSTRING) dnl **** Check for some programs and libraries **** AC_PROG_MAKE_SET AC_PROG_CC AC_PROG_CPP AC_PATH_XTRA ICE_FIND_ATHENA AM_PROG_LIBTOOL AC_PROG_INSTALL dnl **** Check for some compiler/system characteristics AC_C_CHAR_UNSIGNED AC_CHECK_SIZEOF(char,0) AC_CHECK_SIZEOF(short,0) AC_CHECK_SIZEOF(int,0) AC_CHECK_SIZEOF(long,0) AC_CHECK_SIZEOF(long long,0) AC_CHECK_SIZEOF(float,0) AC_CHECK_SIZEOF(double,0) AC_CHECK_SIZEOF(long double,0) AC_CHECK_SIZEOF(void *,0) dnl **** Check for gcc strength-reduce bug **** if test "x${GCC}" = "xyes" then dnl We don'use CFLAGS="$CFLAGS" AC_CACHE_CHECK( "for gcc strength-reduce bug", ac_cv_c_gcc_strength_bug, AC_TRY_RUN([ int main(void) { static int Array[[3]]; unsigned int B = 3; int i; for(i=0; i conftest_asm.s < we do it by hand: if test "$no_x" = "yes" then CFLAGS="${CFLAGS} -DT1LIB_NO_X11_SUPPORT" MAKEFILES="Makefile \ lib/Makefile \ lib/type1/Makefile \ lib/t1lib/Makefile \ type1afm/Makefile \ examples/Makefile \ doc/Makefile" else MAKEFILES="Makefile \ lib/Makefile \ lib/type1/Makefile \ lib/t1lib/Makefile \ xglyph/Makefile \ type1afm/Makefile \ examples/Makefile \ doc/Makefile" fi AC_OUTPUT([ $MAKEFILES \ lib/t1lib/t1lib.h ]) echo echo "Configure finished!" echo " Do: 'make' to compile the t1lib-package." echo " Do: 'make without_doc' to compile if you do not have LaTeX." echo " Do: 'make install' to install the t1lib-package." echo "" dnl echo " Do: 'make t1python-all' to compile the t1python-package." dnl echo "" dnl Local Variables: dnl comment-start: "dnl " dnl comment-end: "" dnl comment-start-skip: "\\bdnl\\b\\s *" dnl compile-command: "autoconf" dnl End: t1lib-5.1.2/configure.com0000755000175000001440000005706010733501627013761 0ustar rmzusers$ goto start This command file writes the command files make.com in this directory, make.com and sysconf.h in [.lib.t1lib], make.com in [.lib.type1], and make.com in [.xglyph]. Executing the make.com in this directory will use the other make.com files to compile the C files and put them in the T1 object library in this directory, and compile and link xglyph. Xglyph requires the xaw and xmu libraries; I used the libraries that came with ghostview. This command file looks for a required header file in X11_ROOT:[XAW]. If it does not find it looks for an X11 directory tree parallel to this tree. If it does not find it there, it creates the command file, but you have to edit it to tell it where the files and libraries are before you can execute it. I linked ghostview using the static version of xmu and xaw, so I link to object libraries instead of sharable images. I renamed the xaw3d directory to xaw in the x11 tree of ghostview so I did not have to change xglyph.c. To run xglyph on V6.* of VMS, you need to define T1LIB_CONFIG to be the T1LIB.CONFIG file in the xglyph directory; it will also not show the timing information on V6.*. I have compiled the library and run xglyph on VMS V6.2, both VAX and Alpha; I used DECC V5.6. I use IEEE floating on Alpha and G floating on VAX. John Hasstedt Physics Department State University of New York at Stony Brook John.Hasstedt@sunysb.edu Nov-1999 - Extended the functionality to check for xaw/xmu also in the X11 path (which is the most Unix compatible way to store them ;-). - Added tests for shareable version of the Xaw/Xmu libraries, using the shareable images if the appropriate logicals are defined. If not the object libraries are used as before. - Added support for type1afm build - Adapted to t1lib 0.9.2 Dec-1999 - Added support for absolute pathnames for font files under OpenVMS Aug-2000 - First cut of an incremental build Jul-2002 - Create a shareable image on OpenVMS Alpha Feb-2003 - Add missing initialization for xaw_root - Clarify description of Xglyph as >>test<< application - Improved method to build options file for shareable image (Thanks to Hartmut Becker Hartmut.Becker@compaq.com) Feb-2004 - Add DECC$NO_ROOTED_SEARCH_LISTS definition to get Xglyph compile ok on later versions of Compaq C Nov-2004 - Save and restore user environment instead of just overwriting - Build example applications - Add options processing - Polish shareable image creation - Start work on version perserving case Dec-2004 - Moving defines into sysconf.h, avoiding quote madness Martin Zinser zinser@zinser.no-ip.info $start: $ ! If a user has a symbol cc or something else, don't use it. $ set symbol/scope=(nolocal,noglobal) $ say = "write sys$output" $ ! $ say "Getting the version number" $ t1lib_identifier = "?.?" $ open/read in configure. $loop: $ read/end=done in rec $ if (f$element(0,"=",rec) .nes. "T1LIB_IDENTIFIER") then goto loop $ t1lib_identifier = f$element(1,"=",rec) $done: $ close in $ ! $ say "Creating make.com" $ create make.com $ open/append out make.com $ copy sys$input: out $ deck $ true = 1 $ false = 0 $ tmpnam = "temp_" + f$getjpi("","pid") $ tt = tmpnam + ".txt" $ tc = tmpnam + ".c" $ th = tmpnam + ".h" $ its_decc = false $ its_vaxc = false $ its_gnuc = false $ s_case = False $! $! Setup variables holding "config" information $! $ ccopt = "" $ lopts = "" $! $! Which command parameters were given $! $ gosub check_opts $! $eod $ if (f$getsyi("ARCH_NAME") .eqs. "VAX") $ then $ float = "g_float" $ else $ float = "ieee_float" $ endif $ write out "$ cflags = ""/prefix=all/float=''float'"" + ccopt" $ copy sys$input: out $ deck $! $! Marker for futher work with name=as_is compilation to work around $! fact that DECW shareable does not contain mixed case entry points $! TBD: Compile t1x11 and xglyph along the lines of [--]motif_name.h+'source' $! Make sure to get the include path to the "jackets" right $! $ if s_case $ then $ create motif_name.h $ open/append outh motif_name.h $ copy sys$input: outh $ deck/dollar="$ eoh" #ifdef __cplusplus #define VMS_BEGIN_C_PLUS_PLUS extern "C" { #define VMS_END_C_PLUS_PLUS } #else #define VMS_BEGIN_C_PLUS_PLUS #define VMS_END_C_PLUS_PLUS #endif #include "motif_redefines.h" $ eoh $ close outh $ endif $ set default [.lib.t1lib] $ @make.com $ write sys$output "Compiling in [.lib.type1]" $ set default [-.type1] $ @make.com $ set default [--] $ write sys$output "Creating t1.olb" $ library/create t1.olb [.lib.t1lib]*.obj,[.lib.type1]*.obj $ write sys$output "Creating xglyph.exe" $ set default [.xglyph] $ @make.com $ set default [-] $ write sys$output "Creating type1afm.exe" $ set default [.type1afm] $ @make.com $ set default [-] $ write sys$output "Creating example applications" $ set default [.examples] $ @make.com $ set default [-] $! $! Establish the Compiling Environment $! $ Cpu_Model = F$GetSYI("HW_MODEL") $ open/write optf t1.opt $T1_L: $ file = f$search("[.lib.t1lib]*.obj") $ if file .eqs. "" then goto TY_L $ write optf file $ goto t1_l $TY_L: $ file = f$search("[.lib.type1]*.obj") $ if file .eqs. "" then goto end_opt $ write optf file $ goto ty_l $END_OPT: $ close/nolog optf $! $! Alpha gets a shareable image $! $ If Cpu_Model .gt. 1024 $ Then $ write sys$output "Creating t1shr.exe" $ call anal_obj_axp t1.opt _link.opt $ open/append optf t1.opt $ if s_case then write optf "case_sensitive=YES" $ write optf "sys$share:decw$xlibshr.exe/share" $ close optf $ LINK_/NODEB/SHARE=t1shr.exe t1.opt/opt,_link.opt/opt $ endif $! $ dele/noconf *.opt;* $ write sys$output "Done" $ exit $! $!------------------------------------------------------------------------------ $! $! Analyze Object files for OpenVMS AXP to extract Procedure and Data $! information to build a symbol vector for a shareable image $! All the "brains" of this logic was suggested by Hartmut Becker $! (Hartmut.Becker@compaq.com). All the bugs were introduced by me $! (zinser@zinser.no-ip.info), so if you do have problem reports please do not $! bother Hartmut/HP, but get in touch with me $! $! Version history $! 0.01 20040406 Skip over shareable images in option file $! 0.02 20041109 Fix option file for shareable images with case_sensitive=YES $! $ ANAL_OBJ_AXP: Subroutine $ V = 'F$Verify(0) $ SAY := "WRITE_ SYS$OUTPUT" $ $ IF F$SEARCH("''P1'") .EQS. "" $ THEN $ SAY "ANAL_OBJ_AXP-E-NOSUCHFILE: Error, inputfile ''p1' not available" $ goto exit_aa $ ENDIF $ IF "''P2'" .EQS. "" $ THEN $ SAY "ANAL_OBJ_AXP: Error, no output file provided" $ goto exit_aa $ ENDIF $ $ open/read in 'p1 $ create a.tmp $ open/append atmp a.tmp $ loop: $ read/end=end_loop in line $ if f$locate("/SHARE",f$edit(line,"upcase")) .lt. f$length(line) $ then $ write sys$output "ANAL_SKP_SHR-i-skipshare, ''line'" $ goto loop $ endif $ f= f$search(line) $ if f .eqs. "" $ then $ write sys$output "ANAL_OBJ_AXP-w-nosuchfile, ''line'" $ goto loop $ endif $ define/user sys$output nl: $ define/user sys$error nl: $ anal/obj/gsd 'f /out=x.tmp $ open/read xtmp x.tmp $ XLOOP: $ read/end=end_xloop xtmp xline $ xline = f$edit(xline,"compress") $ write atmp xline $ goto xloop $ END_XLOOP: $ close xtmp $ goto loop $ end_loop: $ close in $ close atmp $ if f$search("a.tmp") .eqs. "" - then $ exit $ ! all global definitions $ search a.tmp "symbol:","EGSY$V_DEF 1","EGSY$V_NORM 1"/out=b.tmp $ ! all procedures $ search b.tmp "EGSY$V_NORM 1"/wind=(0,1) /out=c.tmp $ search c.tmp "symbol:"/out=d.tmp $ define/user sys$output nl: $ edito/edt/command=sys$input d.tmp sub/symbol: "/symbol_vector=(/whole sub/"/=PROCEDURE)/whole exit $ ! all data $ search b.tmp "EGSY$V_DEF 1"/wind=(0,1) /out=e.tmp $ search e.tmp "symbol:"/out=f.tmp $ define/user sys$output nl: $ edito/edt/command=sys$input f.tmp sub/symbol: "/symbol_vector=(/whole sub/"/=DATA)/whole exit $ sort/nodupl d.tmp,f.tmp 'p2' $ delete a.tmp;*,b.tmp;*,c.tmp;*,d.tmp;*,e.tmp;*,f.tmp;* $ if f$search("x.tmp") .nes. "" - then $ delete x.tmp;* $! $ EXIT_AA: $ if V then set verify $ endsubroutine $!------------------------------------------------------------------------------ $! $! Check command line options and set symbols accordingly $! $ CHECK_OPTS: $ i = 1 $ OPT_LOOP: $ if i .lt. 9 $ then $ cparm = f$edit(p'i',"upcase") $ if cparm .eqs. "DEBUG" $ then $ ccopt = ccopt + "/noopt/deb" $ lopts = lopts + "/deb" $ endif $ if f$locate("CCOPT=",cparm) .lt. f$length(cparm) $ then $ start = f$locate("=",cparm) + 1 $ len = f$length(cparm) - start $ ccopt = ccopt + f$extract(start,len,cparm) $ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) - then s_case = true $ endif $ if cparm .eqs. "LINK" then linkonly = true $ if f$locate("LOPTS=",cparm) .lt. f$length(cparm) $ then $ start = f$locate("=",cparm) + 1 $ len = f$length(cparm) - start $ lopts = lopts + f$extract(start,len,cparm) $ endif $ if f$locate("CC=",cparm) .lt. f$length(cparm) $ then $ start = f$locate("=",cparm) + 1 $ len = f$length(cparm) - start $ cc_com = f$extract(start,len,cparm) if (cc_com .nes. "DECC") .and. - (cc_com .nes. "VAXC") .and. - (cc_com .nes. "GNUC") $ then $ write sys$output "Unsupported compiler choice ''cc_com' ignored" $ write sys$output "Use DECC, VAXC, or GNUC instead" $ else $ if cc_com .eqs. "DECC" then its_decc = true $ if cc_com .eqs. "VAXC" then its_vaxc = true $ if cc_com .eqs. "GNUC" then its_gnuc = true $ endif $ endif $ i = i + 1 $ goto opt_loop $ endif $ return $!------------------------------------------------------------------------------ $ eod $ close out $ ! $ say "Creating [.lib.t1lib]sysconf.h" $ cc sys$input:'ccopt'/float='float'/object=test.obj #include #include main() { FILE *f=fopen("[.lib.t1lib]sysconf.h", "w"); if (!f) exit(EXIT_FAILURE); fprintf(f, "#define SIZEOF_CHAR %d\n", sizeof(char)); fprintf(f, "#define SIZEOF_SHORT %d\n", sizeof(short)); fprintf(f, "#define SIZEOF_INT %d\n", sizeof(int)); fprintf(f, "#define SIZEOF_LONG %d\n", sizeof(long)); #ifdef __VAX fprintf(f, "#define SIZEOF_LONG_LONG %d\n", sizeof(long)); #else fprintf(f, "#define SIZEOF_LONG_LONG %d\n", sizeof(long long)); #endif fprintf(f, "#define SIZEOF_FLOAT %d\n", sizeof(float)); fprintf(f, "#define SIZEOF_DOUBLE %d\n", sizeof(double)); #ifdef __VAX fprintf(f, "#define SIZEOF_LONG_DOUBLE %d\n", sizeof(double)); #else fprintf(f, "#define SIZEOF_LONG_DOUBLE %d\n", sizeof(long double)); #endif fprintf(f, "#define SIZEOF_VOID_P %d\n", sizeof(void *)); exit(EXIT_SUCCESS); } $ link test $ run test $ open/append sysconf [.lib.t1lib]sysconf.h $ write sysconf "" $ write sysconf "#define T1_AA_TYPE16 short" $ write sysconf "#define T1_AA_TYPE32 int" $ write sysconf "#define T1_INT16 short" $ write sysconf "#define T1_INT32 int" $ write sysconf "" $ write sysconf "#define T1LIB_IDENT ", t1lib_identifier $ write sysconf "" $ write sysconf "#define GLOBAL_CONFIG_DIR ""T1_FONT_DIR""" $ close sysconf $ delete test.obj;*,test.exe;* $ ! $ say "Creating [.lib.t1lib]make.com" $ copy sys$input: [.lib.t1lib]make.com $ deck $ call make parseafm.obj "cc ''cflags' parseafm" - parseafm.c $ call make t1aaset.obj "cc ''cflags' t1aaset" - t1aaset.c $ call make t1afmtool.obj "cc ''cflags' t1afmtool" - t1afmtool.c $ call make t1base.obj "cc ''cflags' t1base" - t1base.c $ call make t1delete.obj "cc ''cflags' t1delete" - t1delete.c $ call make t1enc.obj "cc ''cflags' t1enc" - t1enc.c $ call make t1env.obj "cc ''cflags' t1env" - t1env.c $ call make t1finfo.obj "cc ''cflags' t1finfo" - t1finfo.c $ call make t1load.obj "cc ''cflags' t1load" - t1load.c $ call make t1outline.obj "cc ''cflags' t1outline" - t1outline.c $ call make t1set.obj "cc ''cflags' t1set" - t1set.c $ call make t1subset.obj "cc ''cflags' t1subset" - t1subset.c $ call make t1trans.obj "cc ''cflags' t1trans" - t1trans.c $ call make t1x11.obj "cc ''cflags' t1x11" - t1x11.c $ exit $! $MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES $ V = 'F$Verify(0) $! P1 = What we are trying to make $! P2 = Command to make it $! P3 - P8 What it depends on $ $ If F$Search(P1) .Eqs. "" Then Goto Makeit $ Time = F$CvTime(F$File(P1,"RDT")) $arg=3 $Loop: $ Argument = P'arg $ If Argument .Eqs. "" Then Goto Exit $ El=0 $Loop2: $ File = F$Element(El," ",Argument) $ If File .Eqs. " " Then Goto Endl $ AFile = "" $Loop3: $ OFile = AFile $ AFile = F$Search(File) $ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl $ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit $ Goto Loop3 $NextEL: $ El = El + 1 $ Goto Loop2 $EndL: $ arg=arg+1 $ If arg .Le. 8 Then Goto Loop $ Goto Exit $ $Makeit: $ VV=F$VERIFY(0) $ write sys$output P2 $ 'P2 $ VV='F$Verify(VV) $Exit: $ If V Then Set Verify $ENDSUBROUTINE $eod $ ! $ say "Creating [.lib.type1]make.com" $ create [.lib.type1]make.com $ deck $! $! Just some general variables $! $ true = 1 $ false = 0 $ tmpnam = "temp_" + f$getjpi("","pid") $ tc = tmpnam + ".c" $! $ gosub check_function $! $ call make arith.obj "cc ''cflags' arith" - arith.c $ call make curves.obj "cc ''cflags' curves" - curves.c $ call make fontfcn.obj "cc ''cflags' fontfcn" - fontfcn.c $ call make hints.obj "cc ''cflags' hints" - hints.c $ call make lines.obj "cc ''cflags' lines" - lines.c $ call make objects.obj "cc ''cflags' objects" - objects.c $ call make paths.obj "cc ''cflags' paths" - paths.c $ call make regions.obj "cc ''cflags' regions" - regions.c $ call make scanfont.obj "cc ''cflags' scanfont" - scanfont.c $ call make spaces.obj "cc ''cflags' spaces" - spaces.c $ call make t1io.obj "cc ''cflags' t1io" - t1io.c $ call make t1snap.obj "cc ''cflags' t1snap" - t1snap.c $ call make t1stub.obj "cc ''cflags' t1stub" - t1stub.c $ call make token.obj "cc ''cflags' token" - token.c $ call make type1.obj "cc ''cflags' type1" - type1.c $ call make util.obj "cc ''cflags' util" - util.c $ exit $! $!------------------------------------------------------------------------------ $! $! Check if a specific function needs to be implemented $! $CHECK_FUNCTION: $! $! bstring --> memset ... $! $ func = "bstring" $ hfile = "" $ open/write tmpc 'tc $ write tmpc "#include " $ write tmpc "#include " $ write tmpc "int main(){" $ write tmpc " memset(NULL,1,1);" $ write tmpc "}" $ close tmpc $ gosub cc_prop_check $! $ return $! $!------------------------------------------------------------------------------ $! $! Check for properties of C/C++ compiler $! $CC_PROP_CHECK: $ cc_prop = false $ set message/nofac/noident/nosever/notext $ on error then continue $ cc 'all_cflags' 'tmpnam' $ if $status then cc_prop = true $ set message/fac/ident/sever/text $ delete/nolog 'tmpnam'.*;* $ if cc_prop $ then $ if (func .nes. "") $ then $ write sys$output "Function ''func' implemented in C RTL" $ else $ write sys$output "h-file ''hfile' part of C RTL" $ endif $ else $ if (func .nes. "") $ then $ CALL MAKE 'func'.OBJ "CC ''cflags' ''func'.C" 'func'.C $ endif $ if (hfile .nes. "") then copy 'hfile'.h_in 'hfile'.h $ endif $ return $! $!------------------------------------------------------------------------------ $! $MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES $ V = 'F$Verify(0) $! P1 = What we are trying to make $! P2 = Command to make it $! P3 - P8 What it depends on $ $ If F$Search(P1) .Eqs. "" Then Goto Makeit $ Time = F$CvTime(F$File(P1,"RDT")) $arg=3 $Loop: $ Argument = P'arg $ If Argument .Eqs. "" Then Goto Exit $ El=0 $Loop2: $ File = F$Element(El," ",Argument) $ If File .Eqs. " " Then Goto Endl $ AFile = "" $Loop3: $ OFile = AFile $ AFile = F$Search(File) $ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl $ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit $ Goto Loop3 $NextEL: $ El = El + 1 $ Goto Loop2 $EndL: $ arg=arg+1 $ If arg .Le. 8 Then Goto Loop $ Goto Exit $ $Makeit: $ VV=F$VERIFY(0) $ write sys$output P2 $ 'P2 $ VV='F$Verify(VV) $Exit: $ If V Then Set Verify $ENDSUBROUTINE $eod $ ! $ say "Creating [.xglyph]make.com" $ xaw_root = "" $ check_xaw = "X11_ROOT,X11" $ check_rel = f$parse("[-.x11]") - "].;" $ if (check_rel .nes. "") $ then $ define rel_loc "''check_rel'.]" $ check_xaw = check_xaw + ",rel_loc" $ endif $ i = 0 $SEARCH_XAW: $ dir = f$element(i,",",check_xaw) $ if (dir.nes.",") $ then $ if ( f$search("''dir':[xaw]label.h") .nes. "" ) then xaw_root = dir $ i = i + 1 $ goto search_xaw $ endif $ create [.xglyph]make.com $ open/append out [.xglyph]make.com $ if (xaw_root .eqs. "") $ then $ say "I could not locate the xaw and xmu files. In case you want" $ say "to build the Xglyph test application you need to edit" $ say "[.xglyph]make.com to add appropriate paths." $ write out "$ type/nopage sys$input" $ write out "In case you want to build the Xglyph test application you" $ write out "need to edit this file to delete the exit command and define" $ write out "the dir symbol for the location of the xmu and xaw libraries." $ write out "$ exit" $ write out "$ xaw_root = "":[dir.X11""" $ else $ write out "$ xaw_root = ""''xaw_root'""" $ endif $ copy sys$input: out $ deck $ if (f$getsyi("ARCH_NAME") .eqs. "VAX") $ then $ olb_dir = "exe" $ else $ olb_dir = "exe_alpha" $ endif $ save_x11_dir = f$trnlnm("x11_directory") $ save_xmu_dir = f$trnlnm("xmu_directory") $ save_xaw_dir = f$trnlnm("xaw_directory") $ save_olb_dir = f$trnlnm("olb_directory") $ save_dnrsl = f$trnlnm("decc$no_rooted_search_lists") $ if (xaw_root.nes."X11") then define x11 'xaw_root',decw$include: $ define x11_directory decw$include: $ define xmu_directory 'xaw_root':[xmu] $ define xaw_directory 'xaw_root':[xaw] $ define olb_directory 'xaw_root':['olb_dir'] $ define DECC$NO_ROOTED_SEARCH_LISTS 1 $ open/write optf xglyph.opt $ write optf "xglyph.obj" $ write optf "[-]t1.olb/library" $ write optf "sys$share:decc$shr.exe/share" $ write optf "sys$share:decw$xextlibshr/share" $ write optf "sys$share:decw$xlibshr/share" $ write optf "sys$share:decw$xtlibshrr5/share" $ if (f$trnlnm("xaw3dlibshr").nes."") $ then $ write optf "xaw3dlibshr/share" $ else $ write optf "olb_directory:xaw3dlib/library" $ endif $ if (f$trnlnm("xmulibshr").nes."") $ then $ write optf "xmulibshr/share" $ else $ write optf "olb_directory:xmulib/library" $ endif $ close optf $ call make xglyph.obj "cc ''cflags' xglyph.c" - xglyph.c $ call make xglyph.obj "link xglyph.opt/option" - xglyph.obj [-]t1.olb $ if (save_x11_dir .nes. "") $ then $ define x11_directory 'save_x11_dir' $ else $ deassign x11_directory $ endif $ if (save_xmu_dir .nes. "") $ then $ define xmu_directory 'save_xmu_dir' $ else $ deassign xmu_directory $ endif $ if (save_xaw_dir .nes. "") $ then $ define xaw_directory 'save_xaw_dir' $ else $ deassign xaw_directory $ endif $ if (save_olb_dir .nes. "") $ then $ define olb_directory 'save_olb_dir' $ else $ deassign olb_directory $ endif $ if (save_dnrsl .nes. "") $ then $ define DECC$NO_ROOTED_SEARCH_LISTS 'save_dnrsl' $ else $ deassign DECC$NO_ROOTED_SEARCH_LISTS $ endif $ exit $! $MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES $ V = 'F$Verify(0) $! P1 = What we are trying to make $! P2 = Command to make it $! P3 - P8 What it depends on $ $ If F$Search(P1) .Eqs. "" Then Goto Makeit $ Time = F$CvTime(F$File(P1,"RDT")) $arg=3 $Loop: $ Argument = P'arg $ If Argument .Eqs. "" Then Goto Exit $ El=0 $Loop2: $ File = F$Element(El," ",Argument) $ If File .Eqs. " " Then Goto Endl $ AFile = "" $Loop3: $ OFile = AFile $ AFile = F$Search(File) $ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl $ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit $ Goto Loop3 $NextEL: $ El = El + 1 $ Goto Loop2 $EndL: $ arg=arg+1 $ If arg .Le. 8 Then Goto Loop $ Goto Exit $ $Makeit: $ VV=F$VERIFY(0) $ write sys$output P2 $ 'P2 $ VV='F$Verify(VV) $Exit: $ If V Then Set Verify $ENDSUBROUTINE $eod $ close out $ say "Creating [.type1afm]make.com" $ create [.type1afm]make.com $ open/append out [.type1afm]make.com $ copy sys$input: out $ deck $ call make type1afm.obj "cc ''cflags' type1afm.c" - type1afm.c $ call make type1afm.exe "link type1afm,[-]t1/library" - type1afm.obj [-]t1.olb $ exit $! $MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES $ V = 'F$Verify(0) $! P1 = What we are trying to make $! P2 = Command to make it $! P3 - P8 What it depends on $ $ If F$Search(P1) .Eqs. "" Then Goto Makeit $ Time = F$CvTime(F$File(P1,"RDT")) $arg=3 $Loop: $ Argument = P'arg $ If Argument .Eqs. "" Then Goto Exit $ El=0 $Loop2: $ File = F$Element(El," ",Argument) $ If File .Eqs. " " Then Goto Endl $ AFile = "" $Loop3: $ OFile = AFile $ AFile = F$Search(File) $ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl $ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit $ Goto Loop3 $NextEL: $ El = El + 1 $ Goto Loop2 $EndL: $ arg=arg+1 $ If arg .Le. 8 Then Goto Loop $ Goto Exit $ $Makeit: $ VV=F$VERIFY(0) $ write sys$output P2 $ 'P2 $ VV='F$Verify(VV) $Exit: $ If V Then Set Verify $ENDSUBROUTINE $eod $ close out $ say "Creating [.examples]make.com" $ create [.examples]make.com $ open/append out [.examples]make.com $ copy sys$input: out $ deck $ call make subset.obj "cc ''cflags' subset.c" - subset.c $ call make subset.exe "link subset,[-]t1/library" - subset.obj [-]t1.olb $ call make t1example1.obj "cc ''cflags' /include=[-.lib.t1lib] t1example1.c" - t1example1.c $ call make t1example1.exe "link t1example1,[-]t1/library" - t1example1.obj [-]t1.olb $ exit $! $MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES $ V = 'F$Verify(0) $! P1 = What we are trying to make $! P2 = Command to make it $! P3 - P8 What it depends on $ $ If F$Search(P1) .Eqs. "" Then Goto Makeit $ Time = F$CvTime(F$File(P1,"RDT")) $arg=3 $Loop: $ Argument = P'arg $ If Argument .Eqs. "" Then Goto Exit $ El=0 $Loop2: $ File = F$Element(El," ",Argument) $ If File .Eqs. " " Then Goto Endl $ AFile = "" $Loop3: $ OFile = AFile $ AFile = F$Search(File) $ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl $ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit $ Goto Loop3 $NextEL: $ El = El + 1 $ Goto Loop2 $EndL: $ arg=arg+1 $ If arg .Le. 8 Then Goto Loop $ Goto Exit $ $Makeit: $ VV=F$VERIFY(0) $ write sys$output P2 $ 'P2 $ VV='F$Verify(VV) $Exit: $ If V Then Set Verify $ENDSUBROUTINE $eod $ close out $ say "Creating [.examples]t1libvms.config" $ create [.examples]t1libconf.fdl $ open/append out [.examples]t1libconf.fdl $ copy sys$input: out $ deck IDENT "T1lib config file" FILE ORGANIZATION sequential RECORD BLOCK_SPAN yes CARRIAGE_CONTROL carriage_return FORMAT stream_lf $eod $ close out $ create/fdl=[.examples]t1libconf.fdl [.examples]t1libvms.config $ open/append out [.examples]t1libvms.config $ copy sys$input: out $ deck This is a configuration file for t1lib FONTDATABASE=FontDataBase ENCODING=[-.fonts.enc];sys$disk:[] AFM=[-.fonts.afm];sys$disk:[] TYPE1=[-.fonts.type1];sys$disk:[] $eod $ close out $ exit t1lib-5.1.2/Makefile.in0000644000175000001440000000707010733501627013336 0ustar rmzusers# Makefile.in # # This file is part of the t1lib-package! See documentation and Readme files # of the t1lib-package for copyright restrictions. # # Targets provided: # all (default) # install # uninstall # without_doc # clean # distclean # t1python-all # t1python-clean # # Author: Rainer Menzner (Rainer.Menzner@web.de) # Date: 04/06/1997 # Last modified: 2005-05-01 # SHELL = /bin/sh CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ OPTIONS = @OPTIONS@ X_LIBS = @X_LIBS@ TOPSRC = @top_srcdir@ XPM_LIB = -lXpm XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@ LDFLAGS = @LDFLAGS@ LDLIBS = @LDLIBS@ AR = ar rc RANLIB = @RANLIB@ RM = rm -f X_CFLAGS = @X_CFLAGS@ YACC = @YACC@ LEX = @LEX@ LEXLIB = @LEXLIB@ ALLCFLAGS = $(CFLAGS) $(X_CFLAGS) SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS)' 'OPTIONS=$(OPTIONS)' @SET_MAKE@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ bindir = @bindir@ datadir = @datadir@ libdir = @libdir@ mandir = @mandir@/man1 manext = .1 no_x = @no_x@ t1lib_version = @T1LIB_VERSION@ t1lib_revision = @T1LIB_REVISION@ t1lib_patchlevel = @T1LIB_PATCHLEVEL@ # Main target to build MAIN_TARGET = @MAIN_TARGET@ COMMONSUBDIRS = lib \ type1afm \ examples DOCSUBDIRS = doc # Drop xglyph from targets if we do not have X11 XSUBDIRS = @XSUBDIRS@ ALLSUBDIRS = $(COMMONSUBDIRS) $(XSUBDIRS) DUMMYSUBDIRS = XXXX all: $(DUMMYSUBDIRS) $(DOCSUBDIRS) without_doc: $(DUMMYSUBDIRS) # warning the following target does only work with gcc and is no # official target. It generates .dependencies files and changes # the suffixes from .o to .lo. dependencies: dummy for i in $(ALLSUBDIRS); do \ (cd $$i; make dependencies ) || exit 1; \ done $(DOCSUBDIRS): dummy for i in $(DOCSUBDIRS); do \ (cd $$i; $(SUBMAKE) ) || exit 1; \ done $(DUMMYSUBDIRS): dummy for i in $(ALLSUBDIRS); do \ (cd $$i; $(SUBMAKE) ) || exit 1; \ done install: dummy for i in $(ALLSUBDIRS) $(DOCSUBDIRS); do \ (cd $$i; $(MAKE) install) || exit 1; \ done uninstall: dummy for i in $(ALLSUBDIRS) $(DOCSUBDIRS); do \ (cd $$i; $(MAKE) uninstall) || exit 1; \ done $(RM) -Rf $(datadir)/t1lib-$(t1lib_version).$(t1lib_revision) .PHONY: uninstall .PHONY: install .PHONY: clean clean: dummy for i in $(ALLSUBDIRS); do \ (cd $$i; $(MAKE) clean) || exit 1; \ done for i in $(DOCSUBDIRS); do \ (cd $$i; $(MAKE) clean) || exit 1; \ done # In order not to delete the t1python Makefile, we have to remove the # Makefile's one at a time: distclean: clean $(RM) *~ $(RM) config.cache config.log config.status $(RM) Makefile $(RM) lib/Makefile $(RM) lib/type1/Makefile $(RM) lib/t1lib/Makefile $(RM) lib/t1lib/sysconf.h $(RM) type1afm/Makefile $(RM) examples/Makefile $(RM) xglyph/Makefile $(RM) doc/Makefile $(RM) libtool # The following two targets are for building and cleaning the python- # interface contributed by Fred L. Drake, Jr. They are completely # independent from the other t1lib-targets. t1python-all: (cd t1python; $(MAKE); $(MAKE)) t1python-clean: (cd t1python; $(MAKE) clean) dummy: t1lib-5.1.2/README.win320000644000175000001440000000044610733501627013112 0ustar rmzusersThe directory win32 contains some files for compiling t1lib under MS Visual C++ 6.0. They are contributed by Nakano Hideo (hideo@mb.infoeddy.ne.jp). I can't tell anything about this and add it to the sources for convenience. (RMz, 2000-03-20) t1lib-5.1.2/ac-tools/0000755000175000001440000000000010733501627013006 5ustar rmzuserst1lib-5.1.2/ac-tools/aclocal.m40000644000175000001440000063731310733501627014663 0ustar rmzusers# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- ## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 ## Free Software Foundation, Inc. ## Originally by Gordon Matzigkeit , 1996 ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ## ## As a special exception to the GNU General Public License, if you ## distribute this file as part of a program that contains a ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. # serial 47 AC_PROG_LIBTOOL # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) # ----------------------------------------------------------- # If this macro is not defined by Autoconf, define it here. m4_ifdef([AC_PROVIDE_IFELSE], [], [m4_define([AC_PROVIDE_IFELSE], [m4_ifdef([AC_PROVIDE_$1], [$2], [$3])])]) # AC_PROG_LIBTOOL # --------------- AC_DEFUN([AC_PROG_LIBTOOL], [AC_REQUIRE([_AC_PROG_LIBTOOL])dnl dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. AC_PROVIDE_IFELSE([AC_PROG_CXX], [AC_LIBTOOL_CXX], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX ])]) dnl And a similar setup for Fortran 77 support AC_PROVIDE_IFELSE([AC_PROG_F77], [AC_LIBTOOL_F77], [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 ])]) dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [ifdef([AC_PROG_GCJ], [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([A][M_PROG_GCJ], [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([LT_AC_PROG_GCJ], [define([LT_AC_PROG_GCJ], defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) ])])# AC_PROG_LIBTOOL # _AC_PROG_LIBTOOL # ---------------- AC_DEFUN([_AC_PROG_LIBTOOL], [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl # Prevent multiple expansion define([AC_PROG_LIBTOOL], []) ])# _AC_PROG_LIBTOOL # AC_LIBTOOL_SETUP # ---------------- AC_DEFUN([AC_LIBTOOL_SETUP], [AC_PREREQ(2.50)dnl AC_REQUIRE([AC_ENABLE_SHARED])dnl AC_REQUIRE([AC_ENABLE_STATIC])dnl AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_LD])dnl AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl AC_REQUIRE([AC_PROG_NM])dnl AC_REQUIRE([AC_PROG_LN_S])dnl AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! AC_REQUIRE([AC_OBJEXT])dnl AC_REQUIRE([AC_EXEEXT])dnl dnl AC_LIBTOOL_SYS_MAX_CMD_LEN AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE AC_LIBTOOL_OBJDIR AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] # Same as above, but do not quote variable references. [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" AC_CHECK_TOOL(AR, ar, false) AC_CHECK_TOOL(RANLIB, ranlib, :) AC_CHECK_TOOL(STRIP, strip, :) old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then AC_PATH_MAGIC fi ;; esac AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], enable_win32_dll=yes, enable_win32_dll=no) AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes AC_ARG_WITH([pic], [AC_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= AC_LIBTOOL_LANG_C_CONFIG _LT_AC_TAGCONFIG ])# AC_LIBTOOL_SETUP # _LT_AC_SYS_COMPILER # ------------------- AC_DEFUN([_LT_AC_SYS_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_AC_SYS_COMPILER # _LT_AC_SYS_LIBPATH_AIX # ---------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], [AC_LINK_IFELSE(AC_LANG_PROGRAM,[ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_AC_SYS_LIBPATH_AIX # _LT_AC_SHELL_INIT(ARG) # ---------------------- AC_DEFUN([_LT_AC_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_AC_SHELL_INIT # _LT_AC_PROG_ECHO_BACKSLASH # -------------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], [_LT_AC_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac echo=${ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string="`eval $cmd`") 2>/dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(ECHO) ])])# _LT_AC_PROG_ECHO_BACKSLASH # _LT_AC_LOCK # ----------- AC_DEFUN([_LT_AC_LOCK], [AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], [*-*-cygwin* | *-*-mingw* | *-*-pw32*) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; ]) esac need_locks="$enable_libtool_lock" ])# _LT_AC_LOCK # AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_REQUIRE([LT_AC_PROG_SED]) AC_CACHE_CHECK([$1], [$2], [$2=no ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then $2=yes fi fi $rm conftest* ]) if test x"[$]$2" = xyes; then ifelse([$5], , :, [$5]) else ifelse([$6], , :, [$6]) fi ])# AC_LIBTOOL_COMPILER_OPTION # AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ------------------------------------------------------------ # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD else $2=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then ifelse([$4], , :, [$4]) else ifelse([$5], , :, [$5]) fi ])# AC_LIBTOOL_LINKER_OPTION # AC_LIBTOOL_SYS_MAX_CMD_LEN # -------------------------- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [# find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* ) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for *BSD fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi ])# AC_LIBTOOL_SYS_MAX_CMD_LEN # _LT_AC_CHECK_DLFCN # -------------------- AC_DEFUN([_LT_AC_CHECK_DLFCN], [AC_CHECK_HEADERS(dlfcn.h)dnl ])# _LT_AC_CHECK_DLFCN # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ------------------------------------------------------------------ AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); }] EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_unknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_AC_TRY_DLOPEN_SELF # AC_LIBTOOL_DLOPEN_SELF # ------------------- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi ])# AC_LIBTOOL_DLOPEN_SELF # AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) # --------------------------------- # Check to see if options -c and -o are simultaneously supported by compiler AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* ]) ])# AC_LIBTOOL_PROG_CC_C_O # AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) # ----------------------------------------- # Check to see if we can do hard links to lock some files if needed AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_REQUIRE([_LT_AC_LOCK])dnl hard_links="nottested" if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi ])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS # AC_LIBTOOL_OBJDIR # ----------------- AC_DEFUN([AC_LIBTOOL_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir ])# AC_LIBTOOL_OBJDIR # AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) # ---------------------------------------------- # Check hardcoding attributes. AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_AC_TAGVAR(hardcode_action, $1)= if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existant directories. if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_AC_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_AC_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_AC_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi ])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH # AC_LIBTOOL_SYS_LIB_STRIP # ------------------------ AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], [striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi ])# AC_LIBTOOL_SYS_LIB_STRIP # AC_LIBTOOL_SYS_DYNAMIC_LINKER # ----------------------------- # PORTME Fill in your ld.so characteristics AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_MSG_CHECKING([dynamic linker characteristics]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no ])# AC_LIBTOOL_SYS_DYNAMIC_LINKER # _LT_AC_TAGCONFIG # ---------------- AC_DEFUN([_LT_AC_TAGCONFIG], [AC_ARG_WITH([tags], [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], [include additional configurations @<:@automatic@:>@])], [tagnames="$withval"]) if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then AC_MSG_WARN([output file `$ofile' does not exist]) fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) else AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) fi fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in "") ;; *) AC_MSG_ERROR([invalid tag name: $tagname]) ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then AC_MSG_ERROR([tag name \"$tagname\" already exists]) fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_LIBTOOL_LANG_CXX_CONFIG else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then AC_LIBTOOL_LANG_F77_CONFIG else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then AC_LIBTOOL_LANG_GCJ_CONFIG else tagname="" fi ;; RC) AC_LIBTOOL_LANG_RC_CONFIG ;; *) AC_MSG_ERROR([Unsupported tag name: $tagname]) ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" AC_MSG_ERROR([unable to update list of available tagged configurations.]) fi fi ])# _LT_AC_TAGCONFIG # AC_LIBTOOL_DLOPEN # ----------------- # enable checks for dlopen support AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_DLOPEN # AC_LIBTOOL_WIN32_DLL # -------------------- # declare package support for building win32 dll's AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_WIN32_DLL # AC_ENABLE_SHARED([DEFAULT]) # --------------------------- # implement the --enable-shared flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_SHARED], [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([shared], [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]AC_ENABLE_SHARED_DEFAULT) ])# AC_ENABLE_SHARED # AC_DISABLE_SHARED # ----------------- #- set the default shared flag to --disable-shared AC_DEFUN([AC_DISABLE_SHARED], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_SHARED(no) ])# AC_DISABLE_SHARED # AC_ENABLE_STATIC([DEFAULT]) # --------------------------- # implement the --enable-static flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_STATIC], [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([static], [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]AC_ENABLE_STATIC_DEFAULT) ])# AC_ENABLE_STATIC # AC_DISABLE_STATIC # ----------------- # set the default static flag to --disable-static AC_DEFUN([AC_DISABLE_STATIC], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_STATIC(no) ])# AC_DISABLE_STATIC # AC_ENABLE_FAST_INSTALL([DEFAULT]) # --------------------------------- # implement the --enable-fast-install flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_FAST_INSTALL], [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([fast-install], [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) ])# AC_ENABLE_FAST_INSTALL # AC_DISABLE_FAST_INSTALL # ----------------------- # set the default to --disable-fast-install AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_FAST_INSTALL(no) ])# AC_DISABLE_FAST_INSTALL # AC_LIBTOOL_PICMODE([MODE]) # -------------------------- # implement the --with-pic flag # MODE is either `yes' or `no'. If omitted, it defaults to `both'. AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl pic_mode=ifelse($#,1,$1,default) ])# AC_LIBTOOL_PICMODE # AC_PROG_EGREP # ------------- # This is predefined starting with Autoconf 2.54, so this conditional # definition can be removed once we require Autoconf 2.54 or later. m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi]) EGREP=$ac_cv_prog_egrep AC_SUBST([EGREP]) ])]) # AC_PATH_TOOL_PREFIX # ------------------- # find a file program which can recognise shared library AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="ifelse([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi ])# AC_PATH_TOOL_PREFIX # AC_PATH_MAGIC # ------------- # find a file program which can recognise a shared library AC_DEFUN([AC_PATH_MAGIC], [AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# AC_PATH_MAGIC # AC_PROG_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH([gnu-ld], [AC_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no]) AC_REQUIRE([LT_AC_PROG_SED])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown ])# AC_DEPLIBS_CHECK_METHOD # AC_PROG_NM # ---------- # find the pathname to a BSD-compatible name lister AC_DEFUN([AC_PROG_NM], [AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi]) NM="$lt_cv_path_NM" ])# AC_PROG_NM # AC_CHECK_LIBM # ------------- # check for math library AC_DEFUN([AC_CHECK_LIBM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac ])# AC_CHECK_LIBM # AC_LIBLTDL_CONVENIENCE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl convenience library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl case $enable_ltdl_convenience in no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; "") enable_ltdl_convenience=yes ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; esac LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_CONVENIENCE # AC_LIBLTDL_INSTALLABLE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl installable library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-install to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided and an installed libltdl is not found, it is # assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' # and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single # quotes!). If your package is not flat and you're not using automake, # define top_builddir and top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_CHECK_LIB(ltdl, lt_dlinit, [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], [if test x"$enable_ltdl_install" = xno; then AC_MSG_WARN([libltdl not installed, but installation disabled]) else enable_ltdl_install=yes fi ]) if test x"$enable_ltdl_install" = x"yes"; then ac_configure_args="$ac_configure_args --enable-ltdl-install" LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) else ac_configure_args="$ac_configure_args --enable-ltdl-install=no" LIBLTDL="-lltdl" LTDLINCL= fi # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_INSTALLABLE # AC_LIBTOOL_CXX # -------------- # enable support for C++ libraries AC_DEFUN([AC_LIBTOOL_CXX], [AC_REQUIRE([_LT_AC_LANG_CXX]) ])# AC_LIBTOOL_CXX # _LT_AC_LANG_CXX # --------------- AC_DEFUN([_LT_AC_LANG_CXX], [AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([_LT_AC_PROG_CXXCPP]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) ])# _LT_AC_LANG_CXX # _LT_AC_PROG_CXXCPP # --------------- AC_DEFUN([_LT_AC_PROG_CXXCPP], [ AC_REQUIRE([AC_PROG_CXX]) if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP fi ])# _LT_AC_PROG_CXXCPP # AC_LIBTOOL_F77 # -------------- # enable support for Fortran 77 libraries AC_DEFUN([AC_LIBTOOL_F77], [AC_REQUIRE([_LT_AC_LANG_F77]) ])# AC_LIBTOOL_F77 # _LT_AC_LANG_F77 # --------------- AC_DEFUN([_LT_AC_LANG_F77], [AC_REQUIRE([AC_PROG_F77]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) ])# _LT_AC_LANG_F77 # AC_LIBTOOL_GCJ # -------------- # enable support for GCJ libraries AC_DEFUN([AC_LIBTOOL_GCJ], [AC_REQUIRE([_LT_AC_LANG_GCJ]) ])# AC_LIBTOOL_GCJ # _LT_AC_LANG_GCJ # --------------- AC_DEFUN([_LT_AC_LANG_GCJ], [AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) ])# _LT_AC_LANG_GCJ # AC_LIBTOOL_RC # -------------- # enable support for Windows resource files AC_DEFUN([AC_LIBTOOL_RC], [AC_REQUIRE([LT_AC_PROG_RC]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) ])# AC_LIBTOOL_RC # AC_LIBTOOL_LANG_C_CONFIG # ------------------------ # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) AC_DEFUN([_LT_AC_LANG_C_CONFIG], [lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' _LT_AC_SYS_COMPILER # # Check for any special shared library compilation flags. # _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= if test "$GCC" = no; then case $host_os in sco3.2v5*) _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' ;; esac fi if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : else AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no fi fi # # Check to make sure the static flag actually works. # AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), [], [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_DLOPEN_SELF($1) # Report which librarie types wil actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC="$lt_save_CC" ])# AC_LIBTOOL_LANG_C_CONFIG # AC_LIBTOOL_LANG_CXX_CONFIG # -------------------------- # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], [AC_LANG_PUSH(C++) AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([_LT_AC_PROG_CXXCPP]) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_AC_TAGVAR(no_undefined_flag, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Dependencies to place before and after the object being linked: _LT_AC_TAGVAR(predep_objects, $1)= _LT_AC_TAGVAR(postdep_objects, $1)= _LT_AC_TAGVAR(predeps, $1)= _LT_AC_TAGVAR(postdeps, $1)= _LT_AC_TAGVAR(compiler_lib_search_path, $1)= # Source file extension for C++ test sources. ac_ext=cc # Object file extension for compiled C++ test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_AC_TAGVAR(compiler, $1)=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration AC_PROG_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_AC_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=yes else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) _LT_AC_TAGVAR(always_export_symbols, $1)=yes # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds it's shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GXX" = yes ; then lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case "$cc_basename" in xlc*) output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac fi ;; dgux*) case $cc_basename in ec++) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; ghcx) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before switch to ELF _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | kfreebsd*-gnu) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_AC_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; *) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; ia64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; *) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC) case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case "$host_cpu" in ia64*|hppa*64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; irix5* | irix6*) case $cc_basename in CC) # SGI C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; linux*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; cxx) # Compaq C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; openbsd2*) # C++ shared libraries are fairly broken _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd='echo' ;; osf3*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ $rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; sco*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; lcc) # Lucid # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' fi ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_AC_TAGVAR(GCC, $1)="$GXX" _LT_AC_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... AC_LIBTOOL_POSTDEP_PREDEP($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_DLOPEN_SELF($1) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld ])# AC_LIBTOOL_LANG_CXX_CONFIG # AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) # ------------------------ # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" ifelse([$1], [], [#! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG], [# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) # Is the compiler the GNU C compiler? with_gcc=$_LT_AC_TAGVAR(GCC, $1) # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_[]_LT_AC_TAGVAR(LD, $1) # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) # Commands used to build and install a shared archive. archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) # Flag that forces no undefined symbols. no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" # Set to yes if exported symbols are required. always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) # The commands to list exported symbols. export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) # Symbols that must always be exported. include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) ifelse([$1],[], [# ### END LIBTOOL CONFIG], [# ### END LIBTOOL TAG CONFIG: $tagname]) __EOF__ ifelse([$1],[], [ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ]) else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ])# AC_LIBTOOL_CONFIG # AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi ])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # --------------------------------- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_NM]) AC_REQUIRE([AC_OBJEXT]) # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32*) symcode='[[ABCDGISTW]]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux*) if test "$host_cpu" = ia64; then symcode='[[ABCDGIRSTW]]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris* | sysv5*) symcode='[[BDRT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[[]] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) # --------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], [_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) ifelse([$1],[CXX],[ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case "$cc_basename" in xlc*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; esac ;; dgux*) case $cc_basename in ec++) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | kfreebsd*-gnu) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC) # KAI C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; icpc) # Intel C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; cxx) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC) # Rational C++ 2.4.1 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx) # Digital/Compaq C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; sco*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; *) ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc) # Lucid _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; unixware*) ;; vxworks*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case "$cc_basename" in xlc*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; newsos6) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; linux*) case $CC in icc* | ecc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; ccc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; sco3.2v5*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' ;; solaris*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sunos4*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; uts4*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" ;; esac ]) # AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) # ------------------------------------ # See if the linker supports building shared libraries. AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) ifelse([$1],[CXX],[ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw*) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ],[ runpath_var= _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)= _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_AC_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac _LT_AC_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; sunos4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds" fi else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=yes _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=yes else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) _LT_AC_TAGVAR(always_export_symbols, $1)=yes # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds it's shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # see comment about different semantics on the GNU ld section _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; bsdi[[45]]*) _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case "$cc_basename" in xlc*) output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac fi ;; dgux*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; *) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; openbsd*) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi ;; os2*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; sco3.2v5*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_AC_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_AC_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4.2uw2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv5*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' ;; uts4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_AC_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) _LT_AC_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac ])# AC_LIBTOOL_PROG_LD_SHLIBS # _LT_AC_FILE_LTDLL_C # ------------------- # Be careful that the start marker always follows a newline. AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include # #undef WIN32_LEAN_AND_MEAN # #include # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ ])# _LT_AC_FILE_LTDLL_C # _LT_AC_TAGVAR(VARNAME, [TAGNAME]) # --------------------------------- AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) # old names AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) # This is just to silence aclocal about the macro not being used ifelse([AC_DISABLE_FAST_INSTALL]) AC_DEFUN([LT_AC_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj, no) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS) ]) AC_DEFUN([LT_AC_PROG_RC], [AC_CHECK_TOOL(RC, windres, no) ]) ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ # LT_AC_PROG_SED # -------------- # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. AC_DEFUN([LT_AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_MSG_RESULT([$SED]) ]) t1lib-5.1.2/ac-tools/ltmain.sh0000644000175000001440000054602210733501627014637 0ustar rmzusers# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.10 TIMESTAMP=" (1.1220.2.130 2004/09/19 12:13:49)" # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` if test "X$win32_nmres" = "Ximport" ; then win32_libid_type="x86 archive import" else win32_libid_type="x86 archive static" fi fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" status=$? if test "$status" -ne 0 && test ! -d "$my_xdir"; then exit $status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename $darwin_archive` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" # Remove the table of contents from the thin files. $AR -d "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" __.SYMDEF 2>/dev/null || true $AR -d "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" __.SYMDEF\ SORTED 2>/dev/null || true cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" $AR -xo "${darwin_base_archive}" rm "${darwin_base_archive}" cd "$darwin_curdir" done # $darwin_arches ## Okay now we have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f | xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist rm -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir (cd $my_xdir && $AR x $my_xabs) || exit $? fi # $darwin_arches fi # $run ;; *) # We will extract separately just the conflicting names and we will # no longer touch any unique names. It is faster to leave these # extract automatically by $AR in one run. $show "(cd $my_xdir && $AR x $my_xabs)" $run eval "(cd \$my_xdir && $AR x \$my_xabs)" || exit $? if ($AR t "$my_xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$my_xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$my_xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $my_xdir && $AR xN $i $my_xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$my_xdir && $AR xN $i \$my_xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2003 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $EXIT_SUCCESS ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $EXIT_SUCCESS ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $EXIT_SUCCESS ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case "$arg_mode" in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit $EXIT_FAILURE fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-mingw* | *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # gcc -m* arguments should be passed to the linker via $compiler_flags # in order to pass architecture information to the linker # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo # but this is not reliable with gcc because gcc may use -mfoo to # select a different linker, different libraries, etc, while # -Wl,-mfoo simply passes -mfoo to the linker. -m*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" if test "$with_gcc" = "yes" ; then compiler_flags="$compiler_flags $arg" fi continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test "$status" -ne 0 && test ! -d "$output_objdir"; then exit $status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` if eval $echo \"$deplib\" 2>/dev/null \ | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5* ) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$deplibs $path" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$save_output-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$save_output-${k}.$objext k=`expr $k + 1` output=$output_objdir/$save_output-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadale object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) cwrappersource=`$echo ${objdir}/lt-${output}.c` cwrapper=`$echo ${output}.exe` $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) #define HAVE_DOS_BASED_FILE_SYSTEM #ifndef DIR_SEPARATOR_2 #define DIR_SEPARATOR_2 '\\' #endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); char * basename (const char *name); char * fnqualify(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup ((char *) basename (argv[0])); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = fnqualify(argv[0]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } char * basename (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha (name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return (char *) base; } char * fnqualify(const char *path) { size_t size; char *p; char tmp[LT_PATHMAX + 1]; assert(path != NULL); /* Is it qualified already? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha (path[0]) && path[1] == ':') return xstrdup (path); #endif if (IS_DIR_SEPARATOR (path[0])) return xstrdup (path); /* prepend the current directory */ /* doesn't handle '~' */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ p = XMALLOC(char, size); sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); return p; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \$progdir/\$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # GNU ar 2.10+ was changed to match POSIX; thus no paths are # encoded into archives. This makes 'ar r' malfunction in # this piecewise linking case whenever conflicting object # names appear in distinct ar calls; check, warn and compensate. if (for obj in $save_oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 AR_FLAGS=cq fi # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" save_umask=`umask` umask 0077 if $mkdir "$tmpdir"; then umask $save_umask else umask $save_umask $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyways case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "----------------------------------------------------------------------" $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "----------------------------------------------------------------------" exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" if test "$mode" = uninstall; then if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $EXIT_SUCCESS # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: t1lib-5.1.2/ac-tools/config.guess0000755000175000001440000012450410733501627015334 0ustar rmzusers#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. timestamp='2004-09-07' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amd64:OpenBSD:*:*) echo x86_64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; cats:OpenBSD:*:*) echo arm-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; luna88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit 0 ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; *:OS400:*:*) echo powerpc-ibm-os400 exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit 0 ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in *86) UNAME_PROCESSOR=i686 ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms && exit 0 ;; I*) echo ia64-dec-vms && exit 0 ;; V*) echo vax-dec-vms && exit 0 ;; esac esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: t1lib-5.1.2/ac-tools/install-sh0000755000175000001440000002177410733501627015025 0ustar rmzusers#!/bin/sh # install - install a program, script, or datafile scriptversion=2004-07-05.00 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: t1lib-5.1.2/ac-tools/config.sub0000755000175000001440000007511310733501627015000 0ustar rmzusers#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. timestamp='2004-08-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m32rle | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | msp430-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: t1lib-5.1.2/ac-tools/mkinstalldirs0000755000175000001440000000132210733501627015612 0ustar rmzusers#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here t1lib-5.1.2/ac-tools/ice_find_athena.m40000644000175000001440000001273310733501627016336 0ustar rmzusersdnl dnl ice_find_athena.m4 dnl dnl ----------------------------------------------------------- dnl dnl * To: autoconf-collection@peti.gmd.de dnl * Subject: ice_find_athena.m4 dnl * From: Andreas Zeller dnl * Date: Sat, 29 Nov 1997 17:14:09 +0100 (MET) dnl * Sender: autoconf-collection-owner@peti.gmd.de dnl dnl ----------------------------------------------------------- dnl dnl ICE_FIND_ATHENA dnl --------------- dnl dnl Find Athena libraries and headers. dnl Put Athena include directory in athena_includes, dnl put Athena library directory in athena_libraries, dnl and add appropriate flags to X_CFLAGS and X_LIBS. dnl dnl AC_DEFUN(ICE_FIND_ATHENA, [ AC_REQUIRE([AC_PATH_XTRA]) athena_includes= athena_libraries= AC_ARG_WITH(athena, [ --without-athena do not use Athena widgets]) dnl Treat --without-athena like dnl --without-athena-includes --without-athena-libraries. if test "$with_athena" = "no" then athena_includes=no athena_libraries=no fi AC_ARG_WITH(athena-includes, [ --with-athena-includes=DIR Athena include files are in DIR], athena_includes="$withval") AC_ARG_WITH(athena-libraries, [ --with-athena-libraries=DIR Athena libraries are in DIR], athena_libraries="$withval") AC_MSG_CHECKING(for Athena) # # # Search the include files. # if test "$athena_includes" = ""; then AC_CACHE_VAL(ice_cv_athena_includes, [ ice_athena_save_LIBS="$LIBS" ice_athena_save_CFLAGS="$CFLAGS" ice_athena_save_CPPFLAGS="$CPPFLAGS" ice_athena_save_LDFLAGS="$LDFLAGS" # LIBS="$X_PRE_LIBS -lXaw -lXmu -lXext -lXt -lX11 $X_EXTRA_LIBS $LIBS" CFLAGS="$X_CFLAGS $CFLAGS" CPPFLAGS="$X_CFLAGS $CPPFLAGS" LDFLAGS="$X_LIBS $LDFLAGS" # AC_TRY_COMPILE([ #include #include ],[int a;], [ # X11/Xaw/Text.h is in the standard search path. ice_cv_athena_includes= ], [ # X11/Xaw/Text.h is not in the standard search path. # Locate it and put its directory in `athena_includes' # # /usr/include/Motif* are used on HP-UX (Motif). # /usr/include/X11* are used on HP-UX (X and Athena). # /usr/dt is used on Solaris (Motif). # /usr/openwin is used on Solaris (X and Athena). # Other directories are just guesses. for dir in "$x_includes" "${prefix}/include" /usr/include /usr/local/include \ /usr/include/Motif2.0 /usr/include/Motif1.2 /usr/include/Motif1.1 \ /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 \ /usr/dt/include /usr/openwin/include \ /usr/dt/*/include /opt/*/include /usr/include/Motif* \ "${prefix}"/*/include /usr/*/include /usr/local/*/include \ "${prefix}"/include/* /usr/include/* /usr/local/include/*; do if test -f "$dir/X11/Xaw/Text.h"; then ice_cv_athena_includes="$dir" break fi done ]) # LIBS="$ice_athena_save_LIBS" CFLAGS="$ice_athena_save_CFLAGS" CPPFLAGS="$ice_athena_save_CPPFLAGS" LDFLAGS="$ice_athena_save_LDFLAGS" ]) athena_includes="$ice_cv_athena_includes" fi # # # Now for the libraries. # if test "$athena_libraries" = ""; then AC_CACHE_VAL(ice_cv_athena_libraries, [ ice_athena_save_LIBS="$LIBS" ice_athena_save_CFLAGS="$CFLAGS" ice_athena_save_CPPFLAGS="$CPPFLAGS" ice_athena_save_LDFLAGS="$LDFLAGS" # LIBS="$X_PRE_LIBS -lXaw -lXmu -lXext -lXt -lX11 $X_EXTRA_LIBS $LIBS" CFLAGS="$X_CFLAGS $CFLAGS" CPPFLAGS="$X_CFLAGS $CPPFLAGS" LDFLAGS="$X_LIBS $LDFLAGS" # AC_TRY_LINK([ #include #include ],[XtToolkitInitialize();], [ # libXaw.a is in the standard search path. ice_cv_athena_libraries= ], [ # libXaw.a is not in the standard search path. # Locate it and put its directory in `athena_libraries' # # # /usr/lib/Motif* are used on HP-UX (Motif). # /usr/lib/X11* are used on HP-UX (X and Athena). # /usr/dt is used on Solaris (Motif). # /usr/openwin is used on Solaris (X and Athena). # Other directories are just guesses. for dir in "$x_libraries" "${prefix}/lib" /usr/lib /usr/local/lib \ /usr/lib/Motif2.0 /usr/lib/Motif1.2 /usr/lib/Motif1.1 \ /usr/lib/X11R6 /usr/lib/X11R5 /usr/lib/X11R4 /usr/lib/X11 \ /usr/dt/lib /usr/openwin/lib \ /usr/dt/*/lib /opt/*/lib /usr/lib/Motif* \ "${prefix}"/*/lib /usr/*/lib /usr/local/*/lib \ "${prefix}"/lib/* /usr/lib/* /usr/local/lib/*; do if test -d "$dir" && test "`ls $dir/libXaw.* 2> /dev/null`" != ""; then ice_cv_athena_libraries="$dir" break fi done ]) # LIBS="$ice_athena_save_LIBS" CFLAGS="$ice_athena_save_CFLAGS" CPPFLAGS="$ice_athena_save_CPPFLAGS" LDFLAGS="$ice_athena_save_LDFLAGS" ]) # athena_libraries="$ice_cv_athena_libraries" fi # Add Athena definitions to X flags # if test "$athena_includes" != "" && test "$athena_includes" != "$x_includes" && test "$athena_includes" != "no" then X_CFLAGS="-I$athena_includes $X_CFLAGS" fi if test "$athena_libraries" != "" && test "$athena_libraries" != "$x_libraries" && test "$athena_libraries" != "no" then case "$X_LIBS" in *-R\ *) X_LIBS="-L$athena_libraries -R $athena_libraries $X_LIBS";; *-R*) X_LIBS="-L$athena_libraries -R$athena_libraries $X_LIBS";; *) X_LIBS="-L$athena_libraries $X_LIBS";; esac fi # # athena_libraries_result="$athena_libraries" athena_includes_result="$athena_includes" test "$athena_libraries_result" = "" && athena_libraries_result="in default path" test "$athena_includes_result" = "" && athena_includes_result="in default path" test "$athena_libraries_result" = "no" && athena_libraries_result="(none)" test "$athena_includes_result" = "no" && athena_includes_result="(none)" AC_MSG_RESULT( [libraries $athena_libraries_result, headers $athena_includes_result]) ])dnl t1lib-5.1.2/xglyph/0000755000175000001440000000000010733501627012600 5ustar rmzuserst1lib-5.1.2/xglyph/bchr.pfb0000644000175000001440000010406510733501627014215 0ustar rmzusers€Ô%!PS-AdobeFont-1.0 %%CreationDate: Fri Nov 2 19:00:13 1990 % Bitstream Type 1 Font Program % Copyright 1990 as an unpublished work by Bitstream Inc., Cambridge, MA. % All rights reserved. % Confidential and proprietary to Bitstream Inc. % U.S. GOVERNMENT RESTRICTED RIGHTS % This software typeface product is provided with RESTRICTED RIGHTS. Use, % duplication or disclosure by the Government is subject to restrictions % as set forth in the license agreement and in FAR 52.227-19 (c) (2) (May, 1987), % when applicable, or the applicable provisions of the DOD FAR supplement % 252.227-7013 subdivision (a) (15) (April, 1988) or subdivision (a) (17) % (April, 1988). Contractor/manufacturer is Bitstream Inc., % 215 First Street, Cambridge, MA 02142. % Bitstream is a registered trademark of Bitstream Inc. 11 dict begin /FontInfo 9 dict dup begin /version (2.0-1.0) readonly def /Notice (Copyright 1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.) readonly def /FullName (Bitstream Charter) readonly def /FamilyName (Bitstream Charter) readonly def /Weight (Normal) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -109 def /UnderlineThickness 61 def end readonly def /FontName /CharterBT-Roman def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding StandardEncoding def /FontBBox {-161 -236 1193 963} readonly def /UniqueID 15530648 def currentdict end currentfile eexec €9€¢•@ƒŠA3ƒœ©Ò.+™ò¶v|Öu ¬ü²NÍ6s›¶I”Åg7 Lì’É”_ðt^÷ÿư©£¸Içé‡@ål Z÷‡UœÆ•j³3Ï…SÕ\ ŽõìkôbêÄ.s€Ê’®‚³Ö¼ò»]Vp”Ïâ}N¬–“èƒrÒX´~ 8vUŽ¿uz¼\Ýö+ÏÍ‚qòYƒ;¬yprìš0c¿s…à-ŒX¬ß³;Œ‡h²x±L‹ûËp5Á`iÝï–z3꣜ëiѦ3‹æù¤ˆ™”ôÕX‚åYCtë·V-gÌôn®äÑ©žV–CäÀ MÑc‰ÄÛ•ŠW×(üNR¾§>uŽã¹D/ÎŒŸ yP›¼¢^Et*ãRBB¦’·»¸h®tÙö#ùoÞžëª#.AöGÌg¢¾@¸ž&–‡v½spÅÚ•ËÅÄ~ Œý¢5@±áîY'hv Ž@~Ú¿‡®,5É>÷‚9?4KëÚ2îX{PÀJÃRúûhíÞn9’jÖ'QþÄ(_ü<Å9€E>טSÖ~Ùpƒ–Ú=¢ŒÑaxø<…v—ê5hªoBÈõºó;=¿LÍ÷½±]­: }ýgý®ÏÏçÀzpT¸î¦†­‹ B¿ÎôcgH2ÁBT͉e”FßôH}J2ýû,`Ôj0€racQZº~`,â6‚PûP‚Ã×@ç”ÅE0èk$ÖaèBf;¶½æTýeMP˜z  ê &¼˜c}¸³•‰ïξ!11“IütiØñÒ¾]§äig ºSm˜auÀ:§ç^4X,[»8ÜÜE›kÆY¢ê¹Ìåsx>¸¿Ï¸à/Ð÷Ãç;›dB¬"ù½Z“x?bQõ‹°-¾ê³þAÝw|BÆØÍ¥†x p-ì=™d‘¦õÇa3OëÆ­¿Ï6œ!¢Æ9±zçùlnGFbpó—ùtÛçeO0‰ÖÊÊìH¢Ø-÷sä·#U}®í ¸¹TÿëPD£¼–E…zü7Îw!òÊfC_¸Mí¿ ?/¯!‚}ÉXÅ[ÑÄ]Ìå¹^ lŽ…e KY’qÒo{–åFýÏš©Ž zìÂLˆÁÛ¿†SÉ%;ÇÙ&iX¶u￸ՠ̀cå«jièî™a†gÅß#9}Ëoùk$2fr< ˆ?ñ©ÆÒª`àzÒ†è(XÀ³³l&8Œqdð»‚U›J‘Ñxv‡T?åYK%c™Y|5!­=ûåoÞ“ülˆ/’•s»—Ÿ¿¯°ÂN% …N.§ªÃшKØtä 1é{µ·È:¬¦µ9Ô%† €“;&bÎ<‰ûtÁ¦ÙÙQV4ØšºÒ6vo|Dúšêp¢üƒŠ»"Nœ² aMŽ•IÇxˆ_¢ÝqDãÖÍòG\mÖõ^XœØpõVŠž¿ùùç yÄu®Ø‹&à85½'õ[Z’éâ”zoÉ=“Ó‘}iž^¸+¾Ù‹]wåK A ?0·¦ r ’|Q Ž|HÞý<, D)%mM+<ÿ-¡]®çló‘iæKoÔì¢'«ËŒÉÎÃ|`jUu:+Ev+"É`&ƒÀh”ªQ—³ gF+éºPkx;À•L©«€Fí <ÓººwŠ0ÂŒ³;ÀZãs²¸5É/:ÍèÊoº2•µýRïÉ‹wè¨kFÛæaÝzãUÀdÊYKqˆ \v¬R^:«à¨  ë*æxóæ_í²11&^'‹…áÃÏ7CëMê9Ñjý]¸^cþ¹&ËŽæT=¶¢ífŠ9í‹Osé4i‹Cïù¶Þv˜WL––Hx–éç„Kå ›¹¼ðú(à¼øZ)ù¸ŒÞVèÖ|+«7kœæþe¼ðÅÕÄ^ Äå¸-°Cy0ƒ¤jaaù©ŽkìYÆ7¼‡q’t’‰œ¿õ=³WÙ%‡ @È£>nþTTdm‘p¾s=\2í‹¿DƒŸx1jÓÏ,;;ßo³’a^H†$/SœÀÙeÿ|²¼OêÊó·x©÷A ÍG¼žSÁly{¼<]ð¸sóÉœ&‹\í¸À4÷Ù÷LòW†4x…•XÒÁ„XDÎuªVLârYý¹„…ƒíg²¦–Ÿ Ò•ýÜÞþ©LœG€Ó0Q‡ËŠVYo,© ñ;^ ,tGqÜró‘X½è¤È"{G¸ª¯z×ìÒ¤žÐœ#ˆ¦þÿO1]¹Œ™žD/6p©oD—mWë p Ihƒ×úžiJ‡EÙîºxͰäÞx 2“›‡ZÐÈWö˜onI@¶tÝ;DýçБºK§KðÓ›^¶ ¡Í€’û²©òy„h…ßùV®äfÁ¶4ZKaœV¥ÆšŒÓÞÎiRÇzZÏ`=óËRâ¶<HÍ÷;Yî±Û9 \6 K*ÿ)ŠLcÏ:˜ 8K‹ö‡•’HÂøÚi<½Ö<5‰O|y7+ÝsÞ·/d–gÜV“Cþ¢3‚ƒò¨»šbá”Àúø˜ÁÄÝU»ˆ"Û&l­3ƒÈó¼¢yo;&h”K‚¤ÿys˜Ã]:6wCãJ×W3¾t;&9ªœÓŸˆa*ÀѪfˆèývßÂŽ} › ¶ž ›kô.žý£,á)$KÀÒÖìªÏ”~8)âZ¸ä],Þyw—¡¹wÀ“÷ÅàæJYa?#èã!˜7yâa_È2}˜Ÿ„ùÐß¼ åûaÀ(©¤¹û9 VæmÀtv z båÔXåO%“·cmì”(1u0¿Q*Ýé^ ‹ÑÆŠ\Š ¯Â)½®çÌFáQú;*ãÇ­Ï<.‡½¸½/‡˜¡š4¦o¶9rÛË'öÖ$ÆÃef׿]y X: º.És.ˆnç@pâ‹¥—MgCÚSÞ2¿ðÄãDˆ_”L©Xq" +5.!É@cl,b+ûA§¢sOòE’|GòK+äçñÍõïçOÇØüY넞fkiÜ Ö!3 v³8—:ÕìGcÓï÷÷•…°Ö¿&µŠƒšiUj/QLj¢ìÁu_EHj ÄðÒXAß®ª+Cª× OèüMI¤ÖÆ“ýkPÍ#@ÅñÁãZ°ÖqSû™ã”z¥N xvTÎü*?ªdü¥Ì;'!o–Âcnûh,c‡ƒ{ˆ4¹Ä/(sÒTc;½$®VÔÚÅreÜÕiÆHuOºd†û j ~úü~3«¬Q£†üY•\¹C®ËŠè^ï‘a4]Hï…®ãŽîcë{zgÕsrµþ.sô3ÄùVùNý½kåªê¶ï¦ÍG°¾;±U,$åGL‘™B³CæÊS2–Dµn™%>Ðó”=wÇ{é,àR¼b&Ž„Ÿ¨³d)S9²p*ª‰f,\™1e$šÎ}¤ë8jaKW|+ô¦L  ô&½¤¾åVnèi8ÑsGèÿ‰mlü;Ö¼Œ…ÒÓI¶Ïx³¨‰Âsö2–›ü³¹mg!2ËEž%àò†àJ¼Z¢¡$(sßIl¥¹¤5‚jM²Z1¬ÕŒ¾q/ZWiÙNC—œì5¡æœa° '¾§Ÿ{|zQ`êê7¨6i‘ŽbW§Ü R²7)_-…%IŸ·ÑHc’_îÆI$—ºÙehOòaÙbDx×ù'÷^Ö´z'\¨îÝE%Ös"XG‡”XUéÌŸ[~„"*3‚zóÒã1ôßÁš¶êÏó~4Ó4‘؇EÛðîÉ13Ë¡â ÈZ"öÓÔh»ÔãØ,ÎEY V#ˆgŸ^ÿJòòö¾¾&ìaMO±Vž‘åô­€ZâCÝ üs׺HÏtÙõÔÃ÷¥ùiÒEîÚyó[ÇpÛp#bï&1%Ò¦ŠÑ-VvŒ´ˆ¯Ž!/Ύ“š+—Ð ^õ æ‚¼¡âø@Ö“–K•g‚V»„»jƒª¶¾&^mÝußlÄCqa|¶ŠcôìæGÐz+®W¦“K½bØæKÕלŒ2†ýÏ)z׫œÅ0õcn·»÷À e™€ôyظ ILÛ éO?œÊâÜ ~ÂYØf ô°¢¡™Osev#÷PÅRâÁï¶€?™Y ‘_ómð2ã^ÍÄg¹o÷ò¢PsÿyŸÞæU–¤ò{3YpŘ%ž«–böMô¼°´)Ü$ÃÎç©b ®‹x,À –Ap¸Å‰eKa6’&sCÌÃi7>"-èÚ/–œŒWn€9ý(%ˆêÓ< ù¯x_7)$1,/®û6½éä“âUjÅN|½Y®ëž¾Ùm&‹L>³YÅ¿!ÂvÈœ2½Â ñR©hIRéq¨2*ß³ ¸À„R[=Üúô1›¥U)¿eß­ЉSÊeX¶ç‘èuë%÷üè‹“,!>@ß¼é×йQÛïd);_¿S!z¦…Q]µ$ùU¥jÑ´ÓŸ~æ·l‚µÿ¢v”¯!¯Xç2ø—àÎ#=±ÂÒë¶`þÊGÌ+ !Ë?~#€¯o‰þ–W‚[´îîd±º"JðŠ%¶ŒÜ¡ó!UqZ²ð>5òÔ™ Ï™ñ)•ñ _ÞÍòȲã7 c¯ÀïV~ðrn¥¬ñJ‹ôù\å7êzPÐ(¥ äÜЃWÖOõ=‚ƒ5ð=(ÔÞßL!Úë -?ÂÀ8Ÿ89ÌèºÍ»d^|k£h}OQi(û¾ÜeKÅB‰âŸ$Þõ/$QH|:»'P †$0 ÛÞ@Z/“.<~z°™jœ1>Ä×ï‘·Õ“"VQc¶ªqÞ"ÌJI¾ç[2L¿ƒ-lË.Ù³ú´ªï^ª~ÉqX§É‹@[ižÉT¸) „¸[IKI²ä‰T‘š•»Êеô ‚ù‹÷-O¥5@û£o“¦ò¦åìåh 5ÆÛã¹Í6S[K³Š\}º‘?­Nâp ˆ³9E¥6p‹&Ñõãe „Ž[>˜ñäUå.¯ôSWFi„ågëàêýL×Ë!ð/ ¯_@Ú/j6P¬‚rªÉνá=JY?(ãNꥷٖýò~ã*B&Ç’ ʪÂO.Bâ‡HuDšBù” …çÞŽ/îÔsV#kfÇH¢ôà–d¶fÉ®dãeǪײO f6Øò)8˜-¢ Í£E]4îa#ͿҾìÄÀÄâɸëNÈäÛ(3L6m¢vJþÂJaÜ%ÄŽ¨ƒú¨U9AMw€àÊ;èP O°z q#äT0àþ7Vi°‹h)®bùƒ¿^ʃ¾FÙ‹ÿ…Ö0Ñg[8f¬Y‹²µÚƒG‚Pâ'û kDU‡ïë!”dšy“‰>÷… „x´P¹\Ë2JQ…<†×(µ«0º:á*Ó›0x2B<ïF$Ê&â ò¸Ì0®ù[`ÿۥȷJ„,ˆ<ØÂú{jCKy‡/NƦì¡Wx7æGÞÃ2ø=h ƒ'¹KD–v¸WÂעܩ³'Œˆq»Ì ÊʆtpÓÙÂ)ªº†¸ô2B·òÏVÔ-§É\£G2C´í ,md…˜ré£.”±¶fø .Õù¸¯Mr…äZ^c(  Ú‘®oTïrƒéf™µ£ÛpuðüZ⇿é†×‚¼ß}Ö#Ü(ÿ¡›µßÓfsÓŦ]sÚ†Ã_ ÿDuႎ“cMj0oíÝ9Ñ*Ióždâ–øV-¯V`2=ŠÜÃ#Vˆn‚¸Ñ[Ÿ2BÑZ.¯GR™›ƒ ’?ÉwW“x-RØñäÑËõ¬Vô°Rmp”ãÓb#«íÝÃñã|Ñ[ o^µbú”ÑH:z¤ÑžÁ†¬ÿ›nÇÆ¢nY?ל¾û{Ð"ݵ¸ún:.§Õå%šsL¾"RŸn^mDáêÛæ ºŽ_™}Í»c,úáQ(i,”c D.+ñHµdeÑ”Õ(4ć|0Ë¥~ñ¹Nz“ª\q¯èTfÞ'>=WÄ>dqœgF¤Ý9ž4/"ö_­þÕ7£wa_ÄÜ="Àe ׃oÖ‰Dð÷™áÄOz}Ú“1Ç(€Önµ[Šƒ> àPͶÃÔÞ…×Ðæ³/Îê¤ïqüiSPçÐá3†]_‹ÀèEÜéà?™Ì ËÕ[ÜÐnªÔ;dÈÙé¢OŠ{dH¢,àRßÙ¾ý—ø6bŒ~¡gì=|vCùTgG\p ’Á¥œôÐ_ joîÆÀé«£Pé¶Ö™ÛÞýw2£³uÛþß!heÔ‰&ê÷”?õ.*áF¡‘Œ‹i0üèDzŠ$™¬%ÊŸ:]œ„êþN‹éz%MüÀ]å¨4X5æUás² Ébò…¹ÆŠæ?CÙÐt®ØÄ0FˆŠÈS›0êH”§Ý\ÍëC˜ÇåR¿=áî-—žàdÛEŒ?ÔP9}!]xžê²cúù%Ýí)Ý£Oz¢¿)p3Ö˜Vr³“Ø)NÉ|âíµi`«ÌÎpC[™˜@ ×clâÔ¯9‹ÚÿLz)é^ã»éŠáfÈGçÏÁzÖõsôÑÓMrŠìu¢ÎS4Á-Õø*æÅª”^»î[õ~Ãéúàоí¸'m5èœæ¿4­eHÐòóÕ©nI ,iŠÑá¶]+±ÇÀÌø³ø@­µå«±ø»Šª¡×F>Öœ¯/”P'Û,*¤ÆýÒ{sùñ3»-[å8RëO¡¥‘t¦ÎlÄý_À%®÷Åù°3~‘Ep¢Œ}Y"yx ï4¯}´ÙFd–ÞåØ eIhW½dóWWÖ§s€o+:yx ôÌÜâX M¡_A,®§~ЊGüDT¨ÿ]tü2¦\¦ýÏg˜>ƒ,ˆ&ÂÛ¶þ†"òò|cãdJ>€›àâßÑØ6­£`@vÓ»å‹>3\WGíS 7L´ZÕâð±‡ÆìrlÈ'¶lÓ2ÝTP ¢dßþnQÀç ÚÍ«T‘‘©KJ»°%¾ÿ[´G¯¿œÓͬ$[*SR™mËïœîa!@œÑ/'Ùáª-šO–û |ý¼èøeÏêällÑC ÄûÀÖD êl"!cd sLñÊë”]&7º¢Ñ„š¥ `øiQ«f$n†Q9.s®ù’dq4‹­ðS/õÆÜÛ²Yˆ]¨3™óö— ã>º[lÌ­¹'"¨¶£8NŠú3¬1°vZÏ@É*"€k¦¼¾M9Æò<ô…|$F•,#/NOb zž'™1Xè/;Ñyï4TŽƒï;(Γt¤ó³Úò @ ™_Bå8i}|j÷ùƒ¥"N–DôÍ*•ày—›4àñ¸¯Wï}ñFäéÍZù‘àþµ‰MgŠLÞ·aúë®Ù‡â´¨ $r¶úaÎÎð“có1Å,q*mÖ%ÕÎVõ&êñ[*ê6HÅ]zkR<–ë1Äç‰æ5>´ÄýbúX®cPvOƒ†2ð¿¡Ûs'/ IFrãÈTÁÿ…,…ô/O ô‹ÚE@„ÆqGäCÔóéñ‡Â¶ó?WæŲmÊ_yð}$©ÈmÌu–ç ÿ[ <4K[?qy_3êЈ~Øf;Ÿxì ir#|™#Û0È^å¤Wi™7÷1Vy«'%è=yzþ`Ž»OÒPü—½%ŒùáNXU.tó!Áwa{:‘ð‡ø‘š¶=p\öïçü-PæZí¹2Âßp!÷¬Y(¦vs¦œЋW:c2à Í–®Ê@ÎOlh`¸AÛ¬Í(Ëÿ¿ a?c-t“x?¦50“ @6»¤вAHhnÁ–V}§Êa-€çã70¨e¡Ç#™ D››Ùw‡Nf\ —|ݼ!bðþÜ;…ŽïtÓ=TòõìùÚÖ ¨Ñ™¢hª6¶-´s%÷xù&áôÆX"*?€·zd€éuÕb*Ñ©&Œ¤0|ÙÑk8Ú%ŠÚŒ½ÁJ;¾¶ûràgœDT¬Ù¾aÐú8¡€.ávëlž®²¦ŒŠ«˜aÃwåx ã7t6«bqûä|·ôtê––s8»¢ß´¤Zñ[wà7²vÁ߯¦¢‘ ¼¼ EoÆjˆ#ñžÃu€sd“Z¥Sé …¥‹MÙl`3”~¦ˆ¨ s˜üŒ^&Gq»è¥É&«¹ÖKÙ÷ Öð’¯mmFÄ¿™C†¯uqŸ­_JZÆ@3U/¸O´z£r2^‘o®;0tÅ0ÞB O~sÁEvÆI€ËO®³E}[ý¢hâÅU¹u*|l£C'OŒ9W©ÜS§ÒðN„ŒT¤S¯µÌ$utTaÎJ+2À*3´_‰w‹6=/Aö¶A }VršQ«üš âį)éd¥øÞ܈˜ÂPêé 2FP4ƒÌ?2í´(¤|"Ù)B+ƒ'˜ÏÞÍ÷uFá?•¢È¤€3ÜéàÃå Ã&tÀ\äËå/¯ÛAT©%^ Z˜ª·à"øxFv×¶±Nk·?I—é)½ö" ÏHÊ23bvœ·#e«S]Æõ)iG¥¤9§®¤”l)_rñçÿTÑFǯTn®‡Æâú&ûw¨„‰#“96T\çȺaOb¿WéÌŸ[~„i—ÀZŠA‹ƒ½å¿ðÕB¹4Q¶¬UÖË•Ø|/q`k$Q;vcÝ4T 2ãêšù³‚j¬öäqbXn»ðã#…“±1Ñþä$b½9”äTÛr!ø}L£Š iž„Ê#ûP•ù aÒjû(cLh‘õÀˆî]À‚ö¾äÌeç˜P_v"l—¹óŽÎv×,OÛ¡a? œ§)´¿W¤Iׯ»‡ bÅë±t.}b/JŠW}Àõ¡Ôo10ÆøàRâ–o15šâjjWçfÿ§#€ýH΢‚©=r?9+ÄúÞÞ_´jR ýÚÀ«-VU¹º iö&4+1*¼˜ªÄPÅ4ˆty|•‡¤‹Ruw£üÅv\B?`÷‰¿ît/á*¼¢«K4RÚô— /“ž‘uïy4³ÕÞbÊAbZ0 )ZÀ ]4`ÚÑM Ù ž•ò7ŸqÓicLN}™‡{JP6æŠìn#çÂkR »L~Ô¦˜¬å÷õ°qõC"fŒÿX^ Ñý¯Wá…<eõ' ÄDðj})§Ù$shäòÑ ½z/p‡X7îÞ̉Å.½ª½ëð`zÄÕïz8ŠíÒzù•ÒC[âUãnÛû*Ä‘ÿñÅ õ¤ýÑ !Ê‹sG£ø¦Ñš»…,Vn”N²O‚#ªÈö}† ;¹ëÉD‹‹™Õd%Iìæo”ž5 Ó¡©€]~º4)Ûœ¥”ÛˆÉaEÑFK ZË?ëq肈Ø^:#hc]‹MX¤Ÿ¹e²Å,z£3fƒgqÓ†.ÇñÂ): ®^ªœ¹1Ê‚¥Úyׯá{Ñÿ ^°p)§|h’fÕ—?XwHF8¥o_ÓA`+MJlAø Ìæ™ž©)Üå¸Vëë ÖCÖXlîò¾)ÎA ôm 7• “.-ÄrÊнܜ–KsÚtÙ­¸9Ô1î— ï¶ 8ø%ê¿RO»VÖg·1•­v™~а%d9 Q뀙4.Á $0¡Bçui ’Þ•<Ìõ¶[Ôœé!C÷E¬J ¿¥²/†¨ÅRWnžna¤h@\©"¨Wƒv÷ˆÄ›6íí1åZ´9u+¡•ðXݰ<~—ÛàoÂKÄ¹šŒ± †çs dÀ]8ðDz›k±\8¤Ø{¼˜ i‰Ç윳ÍüXãwbFËJMp l&ói„íbG€uâYë„uÈÖ Èk #%]ÎM#‡mÑ(L¸åXf+…÷p¦ß6ôűbî~¦¯ºÜƒSuí:ØbÍúœöˆt†@Ÿ$ÀÉû„1¶%ácy6Åo&mR$üAH½®PßI‚±‹õQY óXžlthíLôÝÒü2'Ð’gm£È‚ ³ÌèU±¥hjõÒõæV#'§§)JB_ ÿ¢`fÏ€DqQÖÔ3ž”g8Å8ƒÏ4g†Am@jÛ<áÝûÜpîÓ¯d­ö‹™DWË”Žáó2J>ÉKG j‚A lt`•¸¶r6ª*S\Ý1u*BD,Á£jYæà`¯º!ÌW—âƒmëL¿^ô^„ε¿AîãM„·¥ÉÕw¦Ø'âðãŸ%ñ…O\éf“¨ÂÏ2}ÄÛóüDm±¾*ßYU•ýzîtŽÜömÜ Ovþ ˜Å$òôûõëÁP—!Neýµµ‘ñ¦`]JçÞtáT‰ Í¡©Ú›‡åŒÈÞå¸x·…0µ‘KýÀØèȦ§Æ¿q•s‹}3[rO*2‚¼7‹6þ~Wã©Ð ªö³ŸÞËáéǯ!Ú~9käj©b/ À+¿&M‘˜l=·ivèCP˜¶Õ©t¼ìñ‡fOÏT· ÿ¿ë­¨Òan¸bp¿æž,˃ü‘£j4Äœo+8”€²ÖjX´'eV'~–8©rÕ1õÖ06Yû'χ§ŽÛa1örŒçß­/û6f½£=ÊB²VóÙü€Ï…ãø;O@‘¯XǨ{ñ¸ïÒ–j-„ŠkSÈÓd 3ªð³¡i]©ÞŒßSÇvbkÒh;Á^7“Âè åÙ뜿zùØmç0÷«mQóÔŒh+ä|¨[V]mNyéz[6wÜdÐL蜫ËYÐðÜ×øê‹öo$’»Þ{ùÌ7m¼Ò$0E®áÝ6ܘCg½—ýãàúw«ëMûº®u…§~ÝG8ߺ¯r—`s£ý÷&šaöN‹ËKH†*Èé-gÿütÛÐ'sôÁ 4QåŠî0c/òí,¹,xð¦sVT ´ð§ð­-Ý­L¤p>±øÈˆ:ñë£F=¯i³2*NP™,É%$uVÏ^¬3cô¶(sq³«;‘Êò"˜¥²P0(pyá3?è5&‹«­ I*±¤A[õø–»ÒU_W“ÅQj¬ggs_×8Tþ­÷¶m¨7î˜ä¹gõ$º¢,ÔÎËë;ˆP|µ¨³=2×Yë!GéògŸÕ€ÍËz›²g€u|{.ºÉ_r‘Ÿ…+:ã{3ªj$l;¸a§HÆ[Õ–X @ÉeEäI‹Ö‰•½Z çDzöÒ€vâÝOÁ­X¢;'ÍëEI±0!:Cv¨`v¯$§{>EË“‹ŽÑ…ÿ)í‹O8f«¬M“1s „{c\sðjÊÖ¶ªî=]‚*\kµ S€f{;o ø»Á.%½çìä?¢Ù P혫™1ýë~\¬?Œi¯19®“^³îKtËâfA Ï4ÜLÔSOÜ»ëÁ@bô„Þ¤`šƒ"œU² èJ—qBº¼E­-È•¦À=ÀfÍ”hì·¦ÌørjN‚þ>˜ñ½Ï2Ãe¥jX@ŽYà…·W•mý™&›_\åøÕ´õìûgáCA#š, `´~(MèðXþbNÛÔ-/›Äª=u íS{ÑQ3e{~D‰Í uÏ/ÉEšô·'ݻݠ‘'ToqúNô·j·Ç„c)-j œ`c •µÅß\UZãÝ-µqäç%×›Cj­4™Os)˜õC±g·Bõóþè§9ë>ach…Ã÷ºci€ëœX#Æ$ÂàËU‘áÏ1ŠÉ­Ö kÕAŽg{ÿ ³ã´yèwb‰EJ‰]î¯ê¾™o1óºêËÞ‡d°{†¶ßCÇ\À¾hÎ.PO Ý,ö¬xµÚÏu‰ÌÌ—èoCBî?l´É8½Èy½|ƒ ®Ø(þÖÕò—Ú\>wä X•C\§¬o^hs ~ä(>mªå`½(kgŠFŒËùÈ苸nÜÈS.ɘæe›f™ˆÎ!|.{ËC'¬‰0?0¼'¤ªºVlñ¨$=îœÕ8޾QÎýÔÜ<=“›ñfÓg;%ȭŪ{èT9pä‘ǃo§½Ã›®¨¡QóD“ª6;jCD»qÖRû7&‹zXØì¦õúïsE¨ÿaþÞ­zlƒöÚVqi•`^ö(B[%eY‘‡@LÉh=È‚¼Ñ½mZìýƒ´ï ¡YP<ߘÆ÷-œ=o<¼Ë—PÒ¦ol[%Jmƒ>ïåÐÙv]c{0ïÇJm/vþ­ZQa2I/û(á¾~â¦)ÃÓz äƒ1Úãê®x± wüŸ†~àõDŽ•¿¦/|Á›[ ¬<ãÈ|!‡¸U@ õªhLŸ•ƒÍT#º“?¬¤W ÿLEbIÒúºÐö5Fµ ¦Á.‰Û§ñÿêJÙ¸Háù¿6ÎLóÇðy…o ÐDÐŧ Â?Èr÷¬pt‹ß›õí"‚wr®Ö͈4/áä}¢=«ovÇÚȇ÷]Œó–4î® 5*š®*ŒSÿ —~¡Yžú‰»M® B°˜Ì¤¼…qäî_½d‚päÁžûºÒ­õ-Å!j`³ˆ¸fø@û;q…h;’™l?_Åm½¿>äL>÷ÆÝÆìRÅ™`Õ8ÎU—m¬ÒËHZ2›ÏbÌô#Uù´ø ñ4k˜Î |É6pPÚ"é#31­?Õ¥ï‚ÒdÎýžòÀzL˜ ÛA¥éœÙ0uz„X±‚aC·—mm]*‚É´–áä+Û[Ãj*TR:QeoرlHoÑI_–B`mâ b>®!hbG8¾Ú9Xô#ð+LÛªPlèk¼V‚'Ò*¹,ÓoÊÃ%nqRéÈ·ôœ ?•Ú ÿáÌ13I*)¾ÿ3àlÜ5e8òË:ºs4ÈÖ0‡/ŽQ¹ñêuÏú<òGFª¯ÅCäüÝœ ârß&À@ Þì—Ã×Ï9_ÿ!âWCBy‚xóÄ@ÎJs2xþ äs›ë­à¦+¸ vÇ=Øû¢v£&Í"ÔQÏÜžÕênkpS3]àƒÅct?ŽÏ)+¤ŸñCäþVµÑò»Áh—3+K°Í/œ¼Ê€“ì›I´¥é&Ùs™<ÖÀÞ¤ÊIum¥o™»”é¹X9$™Cšw°‡%Ø‘ï*óVUË¥(“¬9Sfy'Öj7Q³˜œ@CÆå0V´’¬Ã×ä@Ú)¹KæÜDòkD3 ѱ‘—Gá‘ *–Ö+3yÚD £(2(Šyw‚X+qåŽqT¾ qA‹”S—@ó²ù ¶#lŽ•ç$ÇX±³eœUå(†Óq·#Iî·ðŒŽÁ ,a:jò4ŒÀfª<¨‚Øp…9*Ôôs± ’øEqi‚™Í¼Ï¾õ:pЇoŸØnh×0ÊpˆÙU:ñå^ð-ØÖz«!”»63…‡bl@Á&ÐëÅT™±òÌœèÓô`zÝaºp‰öÓï+3 nëZ¶×Eóü}Æ/w¯ ¬å c =ïí~dG¹„™aäGP»IùÀ¹8MQ¸Q÷b…I$"å¨uë¹Už¼7+ŒÖœ8äG½†òà/0f ³ÇXH¦=«‘ÆW}'„£ îýIÉ#È9AKîdÔîÙ€˜ó2üÃ~yÐùÂÓ,5†š›Ȧ?HÖ½"îÅŸÊÝY‹ºP ê)ä[ ¢PÛöžÊq> ÖðY·(`({/ÛLyD>3ÓUMXÄ¡çö0ÞÇ3Aå˾`y•Óbá¯$péA¬>ó p2ˆ‚ÚDx¢7:ipotwåw Ñ(2˜aJÛÞ4´ƒ¸Ÿsαö¼=;?z›—‡3˜òaÉ’*¨ÝúÒˆãÍ­2ÙPè¿uk(¡0.ÌÿÑ:P ^®bîàú'Î ŠÊƃYÃÅ-ªÛÖŒýf«^¨'²|Uh¾š%¬eÎü…)%¯<%V€ü‚K ÀƒŒªÐ–açàÇ»ìGö¿$´"}T¢Œ†÷ÝCëUÊúpz_Þ©Ýã‡FÏlVü(q˜ayeo`ûãħœýnè~¬g&ýç$­Ÿz±QX¿ñ'ûƒœ3 *¹Ä9"fMFocWp -b±íPj'µCçd“†0¢QüÀ|IŒ™=ˆ–n+ë. Åí`²Yn\Öö´I?0KUÉ‚‡¢§ ZóŸèîé³nè¾€8Mk”åÀý3æQþS6â@ÖE”üöÓ·T){ÞªCÓLFBü6ˆ²€z|8cøPº¯¨š¥Œâ_ûgѼŸï§J·lxÒ(ÿxrÇ–yÑ,Aˆ¬Lº’ó•´×±±Ðš-+yÚ®ŸçæYŒ¥¾ÆHÅ:Ýkx¡œ¬®j7Œ2ó; ÁƒX·fkEˆæçÅó‘õÆ›»D¼ï×Àe²¸"k˜¨9‚sSòý«|vøÐJp†V•Rkºyi ~Tž´!(Ø7Ð.z~”W¡aÇ=ÄùÃç~‚öw«5ó~Ÿh®8ŽâÇùŠTÚ§7áhÚw»r¡Ðì÷:î‰Å^Ug:ÂQjšÎ¶)M¿žEø(Uk¨è ?&ÐF”U8½æf)¢0¾–„¾Üöªî'îà—g üÜR’Òi’뎾¾…î&¡‡˜„&­Í_|)v \íËcÄߨ *üIš)¢ç'u88éÇn·hçwƸá.bÕ{oªÈ¼êC,¯ ¸b”’ìÆ.Ö¯©Ö32oâk¤£³‹zèÖìnÝ­Š»¿±æ/hŸMdõÄ·ˆø^zÎñ ©“ÓÞÏA ™vÐԜ݀…úxhÛ)P&²Oñ¯ îP©™²ÚXˆÍõÒ«hhü:×6ŽþÄ€úæl¾õaU½ÌrÙÞìÇý],Ûwdžœ­?M8D‘…ßÝÔ"n¸Ÿ›ù±<ŽyâЄý+zø¶¹›;ÏÛ!hi}†»Ù%gIûåºiéëK *ë;o;.Q‡ëøHÁÄW…õÌ_i^VŠFJPmäpY¿«÷ XFœï¹‘•tô¡œ¶§¢xKû¼÷“˜9tË>`ª©§*v÷Ø8N¦¬\ñ`ºÆDÀÀ®ÅÑc˜CÐŒœ…Ÿ{'ˆx•Et”µ÷GQÐ?ΞùÅ0? …þ–Zç<™Ãó±U&«•ôÔN<†b246ó·¬PÉAÒ¢Q UÕí=¨ º=ﳂ+,?b ´f2Ь@¥v- T,>Å øûðæ¼Ýc•øçvÖ×W'þ50•>22Ø<ÑÿÖû§5|p Õ:²7Ê+Ÿriv™¡s«â€)¯#p¨Ãa ¿yuT²Ó´xÇ») £#ßê¿Ú‚:ÂmqÙ:LàW€ Åù•‘~Z®cFV7!½f¥9Á­Hê„Ëþüû?‡»²«]…Èìœô(Þ‹l}VtÁ>½Û¢;Ìr—â8‹´‰”gQÂr û&HlÁµ³¤.è™9ØI À;­LjÚp¥øâ9ó½ O /œÕTAçòœWüÑ$/Zeù¤–-oçHÆœý7÷%ãá^ίüj3’~_òö¡92Ôù\Ë™t3•„«‡»—:8Ý0ÒÃú$umTx‡'$JàÈ™oEHäëEu°Ê¤Rdd¥5;À!; »FÅ&ùCVOzV¹½2Z²3ä×Â(!ì_*ð&¤ý‡ôú5-ÝÉ1³ˆÆ|ñ•ÎX×Û‚\Ç#h,ü—\ÀJµÑ—™jÃ8üùMê,W@w¸½)ÌRsÕÓ¹Ùa£ð8Jٳوa  "4}Íõ¦éÅM¡±¤–œ­¨7ÕÇbƒž-OW‰r†ž!?ŸäN‰Ïí»ˆW‡@’,+bÐ!׋ÃìÚÀ¾“9Jl›ù#•+ôƒÈÏ̯šâó¶i3…âD³›V­vކ¢%op¢Å<¥ñüâ¬$¼7YÑ”îœl©Ÿ|‡¨ûz÷i^¤*gטN”¹|æu±ZRÙH„_œ ™Sîñ.¾Æƒ½6~A®œ¢—„x;dç%)ó%ÑïÛp™jWâ?g"Žbà)F¡  XpŒÿúŒúì1 \j­{‰§$ùû÷Vߘ y‚à´1m ðŽ3J›QŠÓ¶i8úqáÃIH;PGõ §ê½-¡§mthkBÍIA£ÆòõÃr>Hmbñ>ªW7Á‰nšnW9 Ågñ»B½ŸÎHm»®;™_¢ñûå.r™à5Â$¥/¬çЛ´ ¨,DÆéÝÓ0LÈÅ[ G{ç©:"gP­xîF(I¢Iî0RØ­ÍÒ^ÒÇÇøƒáÕy™0g”@÷-Ó¹¨1W¤`ºÊý}{ßA0¥îhϦ í{I3méÝš²Ñ-è`²+“[ëë~•¢gajƨ®æ\QRž‡’`i$?«ÕÓ5i?NNñ߉ÌêrîüœÞshÀü/w 2/Ö#•uuðÛUœÌZd׃Ja¼V¯P­DÖñ™à ,°ÑZÜi,g¦ÔoîÆA±DxÀ‚¤¿?l˜œÇ„Í_´YáùÖ¯žYÖ>}ÝË„}ŘD©¦›õƒÂ¶¼ó8A«ÆS9ZT`u †B3ëK÷v‚Þ¯“•~ÐG(íßß}`¨Јf6\«ÓWé¡A1/С:.µjðÀ"ñ ÝXW‡(O‡Uâ1mJ!?§¾Ë¼W3Ž1? /R@ë¡ EuËê¦Fr‹Ý}:¤ï»-©*ùTé0æËR‰I ¿\É+£g{sÛy±°9Ë`ÁA¹AJa·Т]´3O|ò/šæKˆ’ÄHkpiT®™€mEM(Î,K Ÿ,÷Ñ÷‰âZ’A")@íy»#ÀçgêÑ o[,U0‰Ô ¶‚)û/»D#•Nt!ê$l—µõ‘ä¯Ö±i³eô:|£¸5kÑä_»9eÝ®"956zÀçx›‡:ÁÞõX.¬Ý¹ в$´ÖíìWeÓ˜=Óé>@]=% »þ®‰IÑ¿…‰Q°h@¦.ª0¤ƒO(í±.ÏAö¶áÙ>"ú¶±©Oùø%²Ø¦×>Ça«“ÜAµ9u™AbÍݺ԰wö,¦ØcnCÑEĦ ÁÜ„­¤é£"úŽ©œ‡ÅÎñ<ÞÉ÷…Y»àØ¡éÎ:'5Ž­=»ñ¬­ütF¸I›ßpBþ:Q»LÙÀöFãfåpgä•öÔà8Õ¨)ݵ ìL‚í¥º€Ç?PÜÂxy˜U3;‡#;O|X½RµxYG1ÕÆÒÍcKœMTØ9ÆWú¢\¬ž Ô® ‡œšuTZàã®óÎS‰5ÔÓˆ¦4FcûÍ-ñ¸ {†ac2Ñ(WÁ\Õ炊Tº‹Ú~F.ߘZÅCŠ1ÇÅ`m3g>Aä5Geh"–¯Ì&¸#œ¨\šAk¥ÃX²ÛK„?ýCâV€yͬþ x¼(²ðÍX~«ÂÆ-ôr?#®’&úÇf™4Ž›¢Þ´Y¹´…·`°ÓNñµyܼ¯ œ›Ð_ÅÉMò2©â@•Ѳ”¯ ÉŸné+”ðÀê åk7…19º÷û–BõÎ0àÎ'œ•PM}À¼*•mÙÓ¸¢â†5Qð¶Áœ42¸Þ¶y·Zb½o‡AþüQßÊÍ:»³“Æ oÒR#½ ÙB&o,Ño&š¸ŽxY¬Êòa‘"Y‡W_^ Ù@Ùg{ÞŒBR3§º‰mЫö¹E1;£EOŸ·ò”¾þžšÊlnÁ$Pë  $ïHê&ÀP _RÓ˜ >4°N){>×Q¤g(wµð¹G~o#@¶:–ü*óð)FºWÐÇjTSWò¡&~˱ý¼»»¸t,b>äYt WqòÛm¿ežÌ/<²ájwü)‘—E[š¶…=9=™§ÕÒÌkuv¾ÐNg^a0;öðÏðo„”°Šƒv·7œ)mv]#!ׂò£t<‘‹¦k?ËÀD|k†‚o³jºÒÃ%àÔ‹qi››ÛIÏjLI^®Ö vñœ`2¢œüI)6÷›“îlËðåwKÚ—WÙŒqÚ\M ƒ\E,²&¥4ß@“ÎJåq¥ßDÀW}¢\«ºª‰#˶+r­­u½æØev ñIç…[7rÙ ï¹’ßltlpÐ;T`δßTY´åFð?½šÕlYáf וWFƒ~‘TzN ½€ÕñC‚,<"<ýß"‹”UwZíkD.ÍÉ;þH@^.â8/Ns:³¶b~§µÎ×–IŠ‹¹žm„øMT ³óyœKþ¥9’ƒÂnAtNÔÄ8vÎPn^ÿIÁ-€;Â:œ™#±'º]~ç[Þë/T ”yÖÆK\›_¯GJzAކô{Û°½õMPQ‰x\§ÖRªÈ,!É—„ÕÝ›~»’ßò}—#}‘Ÿ™^ÉîXPyްF)øbR_–0='b±”QˆÙóÎŽHF݈À^ÀùÇ)B–y"ò¦ÎôÇ¢¢¬-÷J@•p!-§%€QÁs­1ÁÞ‹ô©!üž¹VfÎ7^›â«63Iá%a·å@²©²CâYƒû'I6'wŠ<œì—î­»Ÿ#bu); ª¼ok@[ü¬©ï·BÜý“ÒðoÈëasüV%ó1ëê$û‘÷—\BKd—-”&¼SÒj¥©¹LKà»<ðC/‚˜&;ºV=¼¶ÛUèüh:V!ÔÞ‹=<æ-ýÇaÿiz”Hh kÔáÚÔÕ`‚SìO sÃóÚsSV5ôˆƒæ1§Ø#‹¸] öƒœrø=ÌüX½Üúº,*[c®öž•;j‘[¦µŽ=«ƒåpœ mm ‰\RN®#O—Ua5ûr4Ùþ‹šQçÚ¾!g3È<îs`6I=xljϡžË°hÎáh[ñåÒ*/Óx?š <î’¤þÐÐ^$s—¤IÈH–¾•ŸRßÐÆb ‚°G³M#y¶ø³h]¤õó…bwü)„²\¬y‡ »ŸþºÄ™Þf Àj܇ZC”hõàÁ{ Î"BÓµÙ0¹·¯ÄΉ²²l€)b×M´»7¹'ÂBòÑØNti¼é:J‰­JÜNšýˆ2Êø´óñËÚ ‘—û 5hÖ\ñìŽ}ÖÇö”–˧6ˆØÆ›–ÁIseá\y!Æt±ŽHME˜%Êç®ožò:9O`¦EÈbM=˜Ÿ>ö¼*\óðíÊû?÷(¶“ãž/hî\4h1þ’<Ñt¬®ç9&ÌìƒúCäÉ£û ÷ 8uª×£’!ÀsYRf7°’m?@BfG*,{6V×,Oؽ þ³×I²?xpZJ¬ˆ)ëÛè÷ õI$)uts‚¯/²¨@§Wæ@D¶7‡*‹ )uƒ88 sA°Gˆ“Ø)í×õhçmµÙâ·~f1­1˜ùT#ˆCc¡ù&£"2ç‹`ì+TùÉ Î4^,\îÏM÷Àkb•k²¯£q¼ ìü Ñf¡¡Z\šA°Oìt\pߤ̯€àxOðË” ‘ª'(±óJ½˜9û¦å×<6¤¥ò9%*Oè¶•‹ß|]NÛ gÄ󸕉[Þ媀tnùPðÇ…¾wen Ì“¼äÕ5¡‹ Î슽«yŠz1j†S›4'O¦îY4ì ô1–¢NC½bëã1ÎsòžSê*ùobùÃKAU¿a0Âño¶ðεˮ1¢ë—„ÓÊÉÛ3W‰Ët£ GP¥eXázBÅ ™ð@V*œ(ünê„íÚ_³â<š(öZ³–.áj  czöŒQ¼¨'F >Ú[¾Ã›„8Ørd÷£ô"½<ÀmwÌXw*¸!‹Ù¼ äC˜2YjãŽv—bûŒ Ö-h 2î 뻚-^§£Áýñp"¦98Ô¾šùÕð¤H€ÀìÞPÜ句¡úWæ$6°ŸtPæ+PgG$YÆ.†«àxo¾ôËñ¯0Dœs!¿¦ã †ß-¢Ôuƒ7 $ÚØ‚uìJæ‚ÿDÇî·žþ3SÈä„b}m¤WœGe×±Ù…^?±ÇâF;?¯ƒd˜Å1K·¥.‚û‹³ÿÀÒwoÛ6¹ä ›á›Æq–‰Äþ$%s!|~@R´ýê*8ü<‡ÄÊ|/sìüÝ¢å îW¿øb­Å;²•ÿ9åä.ö˦&á»-©ñŠ„–âô (,;Û#x ÷]G£>EÌvêu’)» >4nVð§öÍ¢l_ızš.•r€³ÌÀ—¿käŒM0Â_9Ø'‹2ƒ·¢z>ÍÃJm;‹c×^~i»ñŠÒ èW7.wV¦ íK`¶«ÀZ l>±ÏAXsíYK –”0õðWV ô5R%q8‰"¶±°«„Bç¾=è1¼×S!kÖ(¥Ö;ÐûÍhÆ´v]NBm`„Â=g€9·L~(}Ð:Éž•@V÷ƒQÝÌȧãüd+£ÜEÙJ÷B_’}á«„ñŽõ”ýù\ñãl]ÈÇ“€â̤~¸"Ö|o)íd†ä©¤\ñº¼¦KbqG‡àÚI\4‚©¸¼ó¯Î¬–ôè;䘣FgÐŒä£#:ÞÝ¥lyßÙ’KÅzfsRd‘†ï ,ÄÍ–Æ&X<öIÌ"CQøMY9Í`Ì@D-Xû›JQÖ±lŒ’p6aØåvKrob4-,óâ’Ävø»ü#•Ú ñElu$MV¦Å*åÚJc›eÁW(;ÖøŠS¡uy$Õß$3Œä<õÇ#£.PÎ9e 3àì“ü P~{ŠÿcÔù‹Àb(èíÓˆ7¦ölÓvšlM>ª²Ò|ꂟCfÓvænÍz>úðC8öä{>C2«*•~Äv¢;üECM¸ URj$kk>˜ Zu:m£'k[Ù=h‘òÞäà¼K;ý5pöDz¢fü®-åø©-A±Îâx ¨“Ç’B8ëºá¡zX®2•æ³~Gq­®}•ÄÈ.¡Tì,RÏzXŸÏXˆäè=Ù¨×Îáž3ÄÀ*q§§eSkßÙñDŒåuBÙÔ9¨¦Ä˜¡#©UÄ[]¬qL°ŠÌ}Nœ„X’ËÕ¤T»C<'„ÂòÌ®ºuª)œ ¥‹ÏF2Ã4{:?´V³8|;?i¼Ç1ygEŽ|·raݨÁ¸¨âЊ|T’ z§M¼¸¾ÐôÙˆÑX‡=±p°.Tm†ìØç©s†h®ìÝÖ¬idñ€Yš?¬P¨¹c€6}Ý  ÏSÁ±–瑇qíÑÚº¿±yFA©ý]¸s‹A ob­§&€‰ÍÙ…±DÀ:G³°“x§$>ƒ•€Ðqåz¸xZcß›|®['"mü|Š)"PÃ%š\1ŒÊ!¸„[Ôü1Y *Å"ÙÔ2UÁz„ˆÿóÕUÓ•6œ…8T^Hp?¬vC³ ¢ÌÞ ˆÐ+%>w÷O¸ dp-­T‰lÈÙp?;S=µ” g-ÞY,y×±Ê.ñÆb{Îû¦—/jçÆ‚ÓÉ"°^àTc M”‰–L}j#zt·Z_°|Z6æjÃSóX5 ª=±ÝOˆî…¸õú"_Ï¿3~­Tƒ ý½ÆeËN6|ñC/©Üâý]ì5×g‰êið§ÔýI"t|MQj"ÀÅÛf7¼ï‡ã4M–lþåö–îK6g)‰*4ßD}0Gb°bù/è¨êo€Ö®÷tÁŽ…áPé;ŒŸ”îw_”4Ö’Õ™Š#Ťž…6½Ea;üþ_€`àÜkÆj»;‘c LóŠÄwgíƒmx”ÑFi"¦ŠxÿÀn~°ò¬=%¹ß¡žœ©jYÑ÷­eGŒdL‡ðûwX´v…a%ù ‡^£*Z Òø^l¯gÁÒÁÉ*Å–qïô™‚xsvb6 ßPƒÍ|]/Å©¯ÑàqäjSI{Ò€¨õ_]Ms^(ÈìIÛ÷®EÜ•YÌéâlê®PR|211¶'  ã7 ¾¥ëçcª=¢BE:Ÿ->[Ïk¨…1;éshÄ­mrÇ™ÚãÄ|7*«™¼:© Åï!/ðÒðÖ§ngÖÖʯÅ/›`»ýŽWÎ ¢¼ ãÈ5‚Å” ~á¢vµv¹I¹uüáùÈAôxºÙØ‹&¬V‡sŠšÓã9´·ˆòîæ°á¶N°ÑZ4ç·ÚT{þ¶³3 Qþ–¦üYy]ÈÌÆõß“~ð]›çö·Ò¶–9?kôãÉTü¼Z‰Ÿbœ6ó0×q½ <Âe¥·Ÿ§EM5­MoÂÄ ÄÚ£¥‹B}Ä"܇l‰ùÓs‡VYƒŸ²Ùê›cŠ| 4óC+htq#òF´ü”÷©k½uòZ¦À¯…wdý0»’;‘é1¥,±x ŒÞä¢!üí¡TärnIâõ_û+e¾½ÿ¶›ÐyÔ——nÁÏô$Ù\%Q&ß‹:1° ¢4<„O ãsE'ÛíèItÉŠ Ù;KÓ%Ày5Ê_DhØ<´U -ÄÑ\¿´Øçj9?V!WÍña0#iJ˜[ïÈþ ²8DRkÐ ÕèÉ0Ì¥%AÆ¥T£:Gž%Ü#ÎoݧX¬Zh*~¶gF OÜ98¶Ù¢50-ƒt–kDŠÓ‘èÙŸ³¾iL²«€ˆÿB†oˆšczÓ|L; RAZL€à[ŠÏ‡Vå¢CçSÄÏ7ýwßÙ”‰6•õ]H`ˆ¨ôFÆýË1BD0ÉO¹$A^Àôò ¿—|\×XQ¯¾äº\-ÝbªÁ o'cˆªBÍVô¶siVt¯ªGMÞ~x¾\Ãðš9õzˆ´KÆ„ C[Àù±ùEfÄ%cÒB¹ÊI€}5VÃÝò]³ú£ÔÌpUD82⃿°4¸£N†Kn0ç*^Ì=cš5Ž€j6ïŸ ·cMqe<œ[-ƒ·å®h(òt|TÔº£¸÷3õ¼ž/kô>ð3Á¨Ÿ *„ª„¾ÉZžç=ê …0IŒ÷1'jÍò{†Žñßuò’cñA&û<PKïo…¥EgÅZÄS\®¬ç¹ ë"Bq”j,{e 7—šÇÜÝQ_ZŸ[Ë{ cÒ¹d> »«:ÆÕÙÁ(!t> éaå½yUFF|¢-‹ê$.(<ö1 å9 s{ZH¸/(4‚GcÈÕÂjn ­Ð.‚¡6ñWªWýqy“ï n“NÐzͬ8«/œ.ùJ0ö o"ASö÷)mÃÍÀ Nd¡‰‰[Iu¦w’K>Ì‘%¹“(Y80H RÚ= žÌÐrÄÜGõx/¬J7HÎ ü“ ~·EìJ+¢·•~òFuy‘ÿµÂO@Íó“ .Q³‡µ}Í»ÈFCÜ#ª&6«&ñ.6·‡¯‡À˜"º¹f|ô´Z‚€]ï:•·zQæï‘»xõ3MãZnwÂæL%¹_¯^ÛØ À䳯ipæDd'•G Çáë FÊO°‹ß{ž”%öIkžº”Nb{Lcž¿ª]g—ôê>õ)N„”R»4…8¿ß¯ Ù˜ ›ò(A$LNàÌò\tmŸ¥äZÞ_Ëd;`L¢AÔ\©yÃoh¹È´Þ+HH¼?©µv}6Â>^I‘1ë§¹³·û]Ñ_Ò䫱$1iDžJµ˜^!5”§2luªyc9åw«J0IT~¢;cÂ^IŠñ—_3輿‘*±áÏ;)W©Š¸™¢3ÓUŒOº¼Z¼dÈó쉋y"K¨vIÔK}¹¾=7b"+ÈmpŽG#fëkËhhqá;{”È3=†´¶–o½Üàl;ãöʺŽL¡p Ôm%`ÊO‹Wòå`[%}mÙuJt€J·òس‹ÿC±âº› ðä9Æ]!s,sG|.»ûË5xùCÞ© SáöãYã¥ñô}Ry¢+XÄd¸Ñ‘áÊÊño_mȆ:Üîõ¹ H…Ø™ oiŒàxåêÀ•›b¿d5¡†Iâ“S®v¹:}õhwÌ/Áv9S(Ý~I“|£OÌéÒXs£÷8#ÉŠææV¢±Àl¨¯Áde”¸ÈË“L=d¯Ä÷}yêâ+Ш|¯*”øF% ‹^[q˜í„vIÇúZ>²õ‘?CçAV¸–jŠ@ÁúBËæÑsƒbømÛh˜qœ¸ùMu³Ú@0²‡Ðò¥î½2kZ±û:R³Îª¾®€‹´ÒM‘‰ Œ_›ò6yÂÌGc¿ÖY›f÷8àÙÒÜ-?áQ‘|އþPk°Û•Þ(á3tz¶àÂË~šíM¹å9Øh6[&É¢Ø¨í© :"Ým(A r•yk+­}ˆ¾RÂŒîÒNdõþõÛÕ}êÀª+¯þ̵©ÊtGæÈ r‚WEþàèP3*°s¥öá Z9¡Þb‰ÿ;¬4j7%PpXœ«P. E‰ä‹–r )û,J#Ý¡|Xú”…2äm!:Q·¨o¨ôÑ{¨õ| »o,TÉlï¼z•‹¯oI,Ù\„Li4ñêÿKcç ŽÌ/pMYvE‹«i·®iž=>¶—¬Òz(¸S!§LÇÀ:ô¡O ÆÌ<©YM¬ VH€ÑâÂÝIÙøØ¶qA&kºúê_³fDáLª pÀ&…>Ž{7ÄPyÐÈX§m“u’_‚Évã» /7FFb³šé.[PN©¦-O¤DÅ µîä8¼”ý ªërXÃÅôTyL$3•ÁÏÅz÷Ò’MS3\ê €÷0K3º¨ó´äÙÓWsñgž¿¤› žv¨‡`IÐ$<¼«T5ëùM‡ý"Ùà³P_ÁŒ¶¥&ï…ý:h¸² !–Ã42ù<]R#WÏo_° #Y1´…~û«¡BºÍ‹vÿD,l'ˆÐ"\¬ßÕåC@´0íÖ¦+= Ž·‚FÝOëó\Ë[ËE)%>ä…“U‘êr³½~_—]BÈ„½ ¿OÚ^qN¦O³~²Ƴêyk_P»TÅ wj4ò²'Ó“¨eL,¼ªˆÌܱyÞ—Ý/‚8l»sE€-âV÷¦n׊Àë‡å/z0á…¼Ñ.¤\ј)ÆŽ°gQ9â¼Ö¾äTK[ðáÐBåÅÝ£å,ñ»æùŒŒsù­[ nÔH^äEÍ)Ñæ5ï¹OÒxdf®,UéÝoœ…²fºpð?yÚ1dläõ ¿Òý²gQzÂÙ¢ ]8œ–¢µN'Ÿ»°Ò/½8ÎáueÀZâybèõúà߫֯WûÊ¥#Ë?1W&×±!d¾»)äDKH±ÈÜ¡•)ˆ _ˆ@ήÿÚ©f•6ÚõGÔCcv—8y³Þøþ ª½ð6?õsnÓéa ámFˆÔÂf OL]Æ^l ib’Žgž0 |–(:Ô0õ[Ùy¹l[ j"?„©rW™£ ¾ON+Mg×›>¬ñ€¹Xè†S+D§r)¬\üŸÞ`(©[¼ÖI ÜœÈü•!íI’šDãÊËë6X/ºÖ‰6Å×[ßMçö~–hªjO\L¬§A€-üPm Ümm·$YŽw=Ø FD s3˜ý+;U¹ƒTš+ÖÏG ã~ëB› s‡†?zfÑ3觪¦¤Y6•Hë)ÃÜýª-pS0G2:Nþ¸¾Áv;KEEÊ;żA£É¹(A˜žŽwB³s?85ŽûU¶W­ûHÒtþ£®†­T¥xö;ˆŽ"qÇæÆí1¢¸Î°\R®šÌᇜ¤ÍÐl.¾¤§3çh׿:©Bæ¾HB³É³Žs¨ûW!oÑŽ¼wçjãÚ­¤”—Y R*h_nœßð—¼LºïõVJôO€[@4ºNê ; wx°©“]C41SÔFÊ*2pëtaÂi®&\š‡l™4ÐVËÞ í✠ƒ4].#ÜGÍ“ )@Vd ž·•¤Â‚¹cí$ù€ˆhÞy‡Œz^ rùS\àýëò2Ò§Š°¾Xlˆª*ÔéÜ%zÝTl˜ú ®jè>þWŽ?Y–°+Ukš`Ò¹+è̬{„d+‘lQ{÷ì'¤µˆö<'ãN §â†Žz=iß |:öìXy¢ûœÈ_BÎaC攉å6_v½Óæ(tÝ×')Ü™öMG ËM6–ÔnQcGgðU¢‚à>„*,¶A5XAú†›eï1yÞtq`›w‰ízà z×1 Gn€õÌã‡þÒœÞãX®?ø²Á%Îõo6ÈéX 9.ìéÜ«zQR„~¾2~9TCŸ‘ÊZ[dýÐö‰áu6êIkXàò„_>ê¼Ç·:Û½Š×G‹jÑ’«Î‡u^o¸O OÆ‚¥"?TsçýÿUDƒ›«1+œ‹ WŽ$?wŠg´ÆöYÀÀH¨ Ù4ðC¹ržB_R¥?ÍÿYø9ÃŽÊÀ®2H*v3i$ÇŒw8up'i}ªë(ø  ¦Ñy¿Ñ0¬‰£!±rcÈ=ÿš×F8¤GpéïuØQ½Ô£èÿDk6b"Qmždcõ扪¸S.ÈÕ‰åúŠ õ¿‚B®¯P‹Ïµðs}·ÛÓe}ˆo뺃cÜíÉÇ„*lÌL6¶Ç cr”GÖB¬Npœ)Éû©‚ÿ=—)s A˜¤2ÁdÅmŒDB¥4Í-"'¸8Îç(žˆs›»¹b© ¤݇µÒÖÖïûÖèý²¥K[ÍY*‡·qÜ62‰ä8™Ò˜Ù'^Ybj:†5 Úȃú¬Òð£¢Þ <û+ºñlT¨àÕ21¾„gRR#EñÄ fÛ§Àr¾ˆ’ÆîÆ’TlVµ]I¼/êvYeIß´CErqüçÈ«pWó)­ü:îàDѺ`@Ù|Ÿ:é~¬*Ò^ ˜'š¨ÕEh¤š2Ó}’`ϺeE¿¤‹XÌiÿŠKŸù«P‹›c‘ìcv«¬³ èà7ä B€'&¦‰Ò ܳçó-ØêE‹ É ©·@:?FÖ-ìÆ&W›£j–Ym…®´•­)É•J?þH’·ô t$( XösΠ0ÝMÙ­áB(?QÇH²©†¢£ú<½mIžÔsÆ â ±Þíôm  ã@æ½RÆâ©`&µW?dÓÉq-fxŽî` Ó&¯©§ž1ª±kQ ¹¨¾ úEše¼@ß)@‹r:ÆØ5,Éÿ[PŸn‹ò#Ѝƒ\ßK, â‚å-È‘íUe™a†BFœÖ ÇÄEKVÑÖÊÒ"ò·„ä‚/SK-=fC`ã´Õ¦—Óˆ„S}J f³}Ò#Œ»ION¯»n­Æ€6¥$w¼³\ð'}¤&Õ ­.k€|!¯Â'ñ·1Êü=.wäòÈ òrPr‡ Ø9ÞmYEå£(ÎJÅ¥l…A¥Ñ$±ZwL¶â`M•Ø£u¸Q’§Õ$uƒb5A’f 8©kÛ DŸ ÐhÝžkŠÕUG>á—†ŠúyåUz{[êäÑÙ'À¸áÙÄa@“@ã‹1%­ÎÇ«L«)—Åñß–¬Œ6‘O^È‘c=Â"‚•¿Ãñ-Qp|¢™8’ÌL¼§ýõøº8¼ÝVNqt]q<¹Žþ^Ú¸¾Û#øI÷–Øm­)Eàç¶œlNÛø¼ØÝ-€aQ T sv"„ˆ~Ëó–îÂÃpz,ÃfÐ1%ìÛ¦8]"§V·N€©ƒzF‰fÅqLã\Y”±Lh¤÷£ŒKFoÈz—¸œíß[B÷§¾ÀwÚ¼±ÉQ"YΦqÞÔj$ÿðõ|¿ÕÍðÂ'5W£v`âT¥—/Ö¢UA%a¹>Â>ù‹JžÆÂª^ÿhª©Pâøþ#*!”rÛ/ÁÖâ¾ò 0bљɊ¿­C¡P!‰Þžûª^iו.4‡u–˜×²cIµ`Uåm1ìEÌÏ…+»C_ÂýМ—ÌR ó“Û»LWI”+zYìÐ!³†Ó1ÿsãöãMjjú O.nõEžœtÎøMæ&¦¡KtEËCÝ'‚ãć8®ä+ óJj 3µ—„Ø\¥í¾×UB¼Q) ð¨a17ƒ+)¶†BI.b\žndÒnKwàJ©hÂÆ6!ubÍæÍ½¬LAìæ z=%9Sq¶b×c”Þgw—ã¾G|åáߪ¦€Žë0ã¾#0œ*ñô8…¾ßÙñFÔ€0ˆ´'ËÌ,xE‰Ú?x˜ nŠæ3 póùß›¼“¬eâŒ%ÒÛîE!öNÎÅÈhp9 Ô5göqýaØ.Ý,1d!Z‹þÔü,BŽ>ÞØ3 –©¸$=™?áé_…÷p+êÐCAÝì¿™v÷yÌß.À‡‘Îý”ð.“ÏÈlšÊ$q.²aΫKBÊè0â9_ÎZ®Þ0 tùH®Þ ­ò ³qtÍcÓ_êUÀºnl±~õzžœ:èxô Ó,"B]0wŒ¨ÚOTÚ§„_lƒVœG»ù„OßzZ65Ý$©x0Û§Þû‹VU#vl.}+ÜÐ D_Ù& ªøavu Ù=ìˆhö±$ˆ¢‹GnoìÿïLoÊXÍž2J—ðm T:SâÕvBÂ1,ˆ¼÷uq‰Ì”¼É΂[H¾qf¥¬_½)x°ƒè¶ >9>(ÑÁì”: ñÇÁœ¦‰º*‹Ó k ø®Uõ&ª¼ÏÕ@À-&Ú}¢œ?aïrï!”¤‘¶£€‹¼ŒO¾ýªßsÜwDæÎ):¡,œoEÇÓÁ— š±‡÷£ ¿øAW1ƨÅÒÑPQøÈx¦¹í_:"©}•ƒµ¥+ê3n>&Ó {'ÿnwBƒŸðF î}ñÞ€èrÑ•KXbãó»®4³}1 ÝOO´êbÊ[ЮÇwt9@€C¼‹š7ñŽºMΦÆRÑïØ5²e÷= PøCŸA Sd†öóÖým³jºÐþ½dÍEyCÍòÕõ5ëw´Þ#"Ád—7|Ç>ÐuÇy×'ª?ax+c œã‰ê¡vrD’zQØùÏ\ó?úÎÈòK³-~oÊX~>`7;|ÃX޶4iÝô!J5./U@¼§Ç^ûê\e‰ [™æÕAf´?º'ð“c«f –ko ñnåq^Lx'†ÃÞx¨ÿ‹¿®ÙR=Mî*ó‰ÍÜ-¢ ÆÝSÃûaõý}âêE 9sº\cÊ.°¸¬TÙ?+Ýn>ø¹Û-ú‰J¼¨\ោ@»Û©wdš& ¸ø&Å#Vˆnökw‡+µ$ô“QïÛ«š£á óÿÊ‚'ŒAÓÉÉsF"¦v—q檘BHZ(GR}딜›¨­ ð{ac“{Jk0§9](ß°þH½·‹–i‹`Ï||ââ{¥«¬&½ÑR«±Ð[Ÿ7çÉÿ@¼\žóšž^Z YLà`ðû°LÅÊêDÂRÍçIöÛÙrN­FK™÷&(jGìGö™³ˆ¦¯\šE=W®b®…-¬ggh›ÅI¬ÜÍ…é«c)ç)vëk¹<ÜfÆ´NH>Ö…r ÈÏ/’í®*‹2w´B üszkŠZº% ?ê)fÿWx”34ü;Ê!Àô¸ƒ“ÓC±Þœr1y=82lÑÚ¯™q¶¸aw»4Êà2ã/*Ç€Îê1i78’Ñ¡‘r7x£wÄÅ{8ƒU´ýß è>N‡?„OÇÓ-x ^ðÙ$zõ­ƒÖ(VF d,+E»œ©à5xv‰SBÒnIPµÍ춨ꜿlùüséÏ´ÔÖD¿|´Õe¬|÷k& b³fôI“p'' ¡èÒ2–úï·m™ õ¥ù“š)û‚Ë+¬K!Ÿ¹ðM€B«kÛPã‘Ì9(Ã6¯žIâœÅó522êî¸O±›£ÛdâÅ;?wM”úËGÚÔA¡Ì^d¶Üàß+0:ÇßÎâao@z?d.{•[}~vpT¶¶póõïö´"ÖAžˆÉa>‡•DZ®°}÷ÅT]QÊ ÀNEµÜ®Ìq;Ræ.‘lQw0š—Çqãø”&^Ž‹¾x€Ít÷ÛX×\¥í™(DßIøÚ‡«=€  y}ñ:®A0¹S ¤¹á0ÄvkMß1¡Ã¶Z¾šUˆßqâ|¨k2>²UDh¹0Ï µh%ß4 ÄRå3m¼*qaõ·ÞAÞ1» f®JPëÀ¶vº‰Õȳ¾øc^±ÌHøªE…#Lû4;ïýˆ Iÿ^Þ%VXFkç£ÇäˆÓôƃ kÜÔ ÿyµƒ F¼ÄˆjÅÎtÀ§i ¨MŠê~^UÞ÷7/ØúÊZ(ó8e¾e“œÐÒU_+Yvî9›«Óªn²FÇ0‚·Ú%† ظQµH@Œ–Y>u’4»Ä;•ìi/âªr%ÃjoÄp2Dˆ=2}&ðçµôD¢cù«púin\íª­Uc2â÷)N0@À2X×îmL³Œ­MN÷þÜÝ©,9C·0T¸Øïµ¹CEðщŒë¢:ó éÝ·Xv×R[uAaYöù3á|gúWµoè÷\Ös¢ÿ&#âáz®ª¤½–2òï,Ä ¬ì@žù º—+ÐèOålª²püîÁUæ³Ã“mr óm·j¡/¥kÏ<üùÖ‘Çd`¡&–G"Ñ׌¹ëä£ —,ƱÞЛÚS…ëT_…^KD•Œ²%¸Ÿ›õÀ›0¿} ó9˜ãá×ñxÒ.Ò¶@»°6)nŽ÷ÒÎ æù‡$q¥Õ‹Ò(ÎFcúÍ— í;@AâŠ~NˆæŽ Ä&¢ó´&×ÕÀ€"µÑ1uýWJãr•Ó5šKÄ»‰¹*kSЯXwããþÙZŒ#z•ŽW . •ÖòÔÀÈŠÌçã`34ït_¨â«TU?94ˆ`°7¿¬­$IdxΖƒ’Ó…˜ÚureÚðwëMÒ³Ö£UÁ=@°øÊÿ±š‘ʽ|eª#ñè„‹ ±I©cf̸#ëêÓYÄc1®ãŒjÆûç“HTpƒïÄ…hÚ‰÷V~{ÜqîxîþÔfl nMI­… ‘ž!ºç ¼wTJÉãè0‚i±¸/H_ÐO°ýå¼ 1e¡ÈOM?Áœvg|Ø 6æ g7ëÀƒÃF:{xŸ?Ø Ví’•’ ìœZ޼«VÞ¸‡½a;Ú¬CÒÅ„WtÁb,Ö¨®c€ZAxã@ìîÀW¿I½k2pÎÅÕ&ZðRÐCQtÞi08û¢ilˆ \ÔRŒ®¼QbÄ—”’>PCšÓ¿…È ¼I' { µh&7ÖR°Nå˜e©²XáúReýáL£K{µ“-ƒÊ*Þžg?j–/¿"7‘Ô<{H;™½ãõ@“ÚÐ1~V]¢E‰ùoü\Y1«¬ &¡ïžj?±³Hµƒ:q³ªB5¢{ïJéÜØ¿õ8x½h–iœØÏ¬úTN´È„FIFÃäÐQ|Eì¾D%ù[šQc]Þ8¢úcý߀øµìü*"-NÇúÏ`úTœª{ì"ÐDzB_Râ"É€»¨QÚPq· ãÊ@«CWöxd¢L²û¥Wò_ë?nf3¹žXÚÓ uSÝìdÓÚ'bþ/@÷ä¢ñC[E•áûú[mÝý êzè:Ô »°°µ¢¥:lJ­ù¤_OFõŠ<¸ÌI·Vǽõ^±Ã„ЀpI—ƒPÅ=±¡x£6Ñ$–Õ„{’þ%Ç99·ª$\u–çNR©±ƒ±‡£Î¦¨a?¡ Á~ªVšu߇€¦È¸ìrgîÓü@@c½{Û#8¬[9Ã<߀öfš]%)ÿY[tÿ vü|ÂÒ€»ý¬\Ñ6YÙ¨ÛÔr+ÿ´vÚqzᎿ¨hJi\TmÂÞ¦E01óŸï᳦šäô^ÈMñdh ¿ƒøolÁJ-ïÉB€å…{Æ#„}=fò: ø3~¯­2iÀd#¥&_UÒü];ªGæÀŠR»x6ø©z˜–8£$Çê·‚EÈå-/6@ˆú¾Aß­&Jãó¤B™–ìS ,2&‹Œ­ ‰þê_TT̈D[ôÐ5€(½mn£Æ÷p 2N6kvxUñ=Õ$ˆýún^Ñ¥çåi3YFÇœ2J¾t¢J«çÒ³m#=@ù$ÜXÎâ&Õ;÷ð5dÒǯŸýY­Ç,ÒskV—ÛðïÈ:¥½;ÿ¤Î‰¸óÙÐ}¢ à×eÐ=—k½r=Ï%Ú¶=]£KçÊ4~ Ö˜áW¦¯Úõ>P>‘óý^Q¥÷_°E¶ÙÂîwT¢CDnQc×[ʹ[Oޯ˅V Ñv5fÆzK8 +Fe©CûJ¢ 6ôã„ ½B|«‡®wnqˆkƒ„~ŸC’ѹ;Žì¬~S“'scÍŸàAYvoB]© lŸ+ ËûôÖ‘º*¬&òÉ`@»Dµ>#ÀþZãG3þLÈõÞ¡ª¤ Ìy»-¹ì_eÖÂì¯d÷q!2ó©–Ùm[\òE mÁb›k³e9„}Ñœãy;× ³@»n›½|ò€è~þ˜q€IS ¥ûß’gA:³X"r:ËV'Ù$¹é À„"tÜdþjØâ5)êÕň 6ÍLËʼn—LE/ŸÉ“s^‰lLKƒ`N§º¾È;TC¨ÜÿHâÒ[˜Æ9%\ýgIÏñ#l¸Â‡‹óLh[òP>¸Ëñ‚ñkjÌñ&4­UfúžµLcSøæ¶ž“/ékÜEp0Ü–bÉæÿ(zÌf·š±“fK>\1Ýë"à¢p ä×ëS{$‹}y“Et¿»NA#ó{å˜y튺´¡‚Ê)¥´¬”,õæ£@)Ç/ãqHÞ8|Å^«¤Èqâ5€tŒ™y¯™—w^¾×ƒ$û²+ÄÓ\u¨Î¿ÞË"¦w÷Ló¢9VA8iÛàí}&ÔPý®ôÆdV es‘(0•Õˆ™HGãB²´¦6e»}"ÔpUˆ£Ù7•ÆïE1ŸRêö}Á\žvM›ÑzÚýæ\E«(éÍĬ¦môùr†¼{Ö÷r¥ Ί‰ Ÿ%®WRÑØëb­¢$,ïqåú$Ò!{ÎðæWQô#Ÿq°é/ví5##b¡éÊ¿p°VÞtZ;šzÃÁÃú¶?Œú…aê˜{K¬#yjLîÍg+þt_éÙá&p#¢¨~¢…VÇ¿v|i‚]¨×wÉ”'e#ü1ûv:3?5¦¼½W°lƒÊžÿ ÜÑ9 @Jú¦ÍˆzyÖZ3øÚ p ³cj¢’ø¨Ü±¯l†už6… ]àȱìðunMÜTXÊ:‡Ä[ÙÉí!ëh¥Vg^Ã,—¯þ}RHéë%x5À™5¦äó‡¡óD•ÜvôfM ËÁ*ªix3씣q*¸¹k+ 0çxtµ‚V*Á–Œd:…Tµ_“Ч+õæ>fÛw%c5o¢ÚAìš×‚"CmÔiØšÔìËzØõœ>’UÉíàÝsQ~?¯^ËQ3Ž>Ñ©Y©!^Ú,y]‰ž·úiÔ©w…iIa„Ë"+µ÷’:CuØW­\¨ê3õA98]±P€M€ŸgOŠš%¦´]Z­/fÅ‚ Ó*8ðÀ‹Ú`ˆ<½ÃxN²¸ù´Ñü +:(]GX¾îßð€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €t1lib-5.1.2/xglyph/Makefile.in0000644000175000001440000000443310733501627014651 0ustar rmzusers# Makefile.in # # This file is part of the t1lib-package! See documentation and Readme files # of the t1lib-package for copyright restrictions. # # Targets provided: # all (default) # install # uninstall # clean # # Author: Rainer Menzner (Rainer.Menzner@web.de) # Date: 04/06/1997 # Last modified: 2004-12-12 # # Modified by H.Kakugawa to use libtool LIBTOOL = ../libtool SHELL = /bin/sh CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ OPTIONS = @OPTIONS@ X_LIBS = @X_LIBS@ TOPSRC = @top_srcdir@ XPM_LIB = -lXpm XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@ LDFLAGS = @LDFLAGS@ LDLIBS = @LDLIBS@ AR = ar rc RANLIB = @RANLIB@ RM = rm -f X_CFLAGS = @X_CFLAGS@ YACC = @YACC@ LEX = @LEX@ LEXLIB = @LEXLIB@ ALLCFLAGS = $(CFLAGS) SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS)' 'OPTIONS=$(OPTIONS)' @SET_MAKE@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ bindir = @bindir@ datadir = @datadir@ libdir = @libdir@ mandir = @mandir@/man1 manext = .1 no_x = @no_x@ # targets to build MAIN_TARGET = @MAIN_TARGET@ OBJS = \ xglyph.lo SRCS = \ xglyph.c T1LIB = ../lib/libt1.la T1LIBX = ../lib/libt1x.la XAWLIB = -lXaw -lXt -lXmu all: xglyph xglyph: $(OBJS) $(T1LIBX) $(T1LIB) $(LIBTOOL) --mode=link \ $(CC) -o xglyph $(LDFLAGS) $(OBJS) $(T1LIBX) $(T1LIB) \ $(X_LIBS) $(XAWLIB) $(XLIB) $(LDLIBS) .SUFFIXES: .lo .c.lo: $(LIBTOOL) --mode=compile \ $(CC) -c $(CPPFLAGS) $(CFLAGS) $< .PHONY: clean dependencies: dummy gcc -MM *.c | sed 's/\.o:/.lo:/g' > .dependencies clean: dummy $(RM) xglyph *.lo *.o .libs/* *~ \#*\# *.log *.bak -rmdir .libs install: dummy $(MKINSTALLDIRS) $(DESTDIR)$(bindir) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) xglyph $(DESTDIR)$(bindir)/xglyph uninstall: dummy $(LIBTOOL) --mode=uninstall $(RM) -f $(DESTDIR)$(bindir)/xglyph dummy: # Dependencies of object files (generated by "gcc -MM *.c"): include .dependencies t1lib-5.1.2/xglyph/.dependencies0000644000175000001440000000007710733501627015233 0ustar rmzusersxglyph.lo: xglyph.c ../lib/t1lib/t1lib.h ../lib/t1lib/t1libx.h t1lib-5.1.2/xglyph/t1lib.config0000644000175000001440000000021110733501627014774 0ustar rmzusersThis is a configuration file for t1lib TYPE1=.:../Fonts/type1 FONTDATABASE=./FontDataBase ENCODING=.:../Fonts/enc AFM=.:../Fonts/afm t1lib-5.1.2/xglyph/xglyph.c0000644000175000001440000044341610733501627014273 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: xglyph.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2003-01-02 ----- Description: This file is part of the t1-library. The program xglyph allows viewing of character- and string-glyphs. Diverse parameters may be interactively configured. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ /* definitions for activating special tests for features of t1lib via commandline arguments: */ #define CHECK_PERFORMANCE 0x0001 #define CHECK_T1_COPYFONT_T1_ADDFONT 0x0002 #define CHECK_CONCATGLYPHS 0x0004 #define CHECK_CONCATOUTLINES 0x0008 #define CHECK_FOR_BAD_CHARS 0x0010 #define CHECK_DEFAULT_ENCODING 0x0020 #define CHECK_SMART_AA 0x0040 #define NO_GRID 0x0080 #define CHECK_AA_CACHING 0x0100 #define CHECK_CACHE_STROKED 0x0200 #define CHECK_SET_RECT 0x0400 /* #define SHOW_MANIPULATE_PATHS */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* The following stuff is necessary for compiling and running xglyph on VMS. Submitted by John Hasstedt (John.Hasstedt@sunysb.edu), who did the VMS-port of t1lib. */ #if defined(__VMS) && __CRTL_VER < 70000000 # define putenv(p) \ printf("You must define T1LIB_CONFIG before running this program\n"); \ exit; # define gettimeofday(p1,p2) #endif /* Note: We include t1lib.h and t1libx.h from lib/t1lib. That way the objectfile does only need to be rebuild when the header itself changes and not each time the library has been recompiled */ #include "../lib/t1lib/t1lib.h" #include "../lib/t1lib/t1libx.h" #ifndef PI #define PI 3.1415927 #endif /* utility functions */ BBox ComputeRotBBox( BBox, float); long time_diff(struct timeval *, struct timeval *); /* fallback-function */ void exitprog( Widget, XtPointer, XtPointer); void togglekerning( Widget, XtPointer, XtPointer); void toggleligatur( Widget, XtPointer, XtPointer); void toggler2l( Widget, XtPointer, XtPointer); void toggleunderline( Widget, XtPointer, XtPointer); void toggleoverline( Widget, XtPointer, XtPointer); void toggleoverstrike( Widget, XtPointer, XtPointer); void showchar( Widget , XtPointer , XtPointer ); void showstring( Widget , XtPointer , XtPointer ); void aashowchar( Widget , XtPointer , XtPointer ); void aashowstring( Widget , XtPointer , XtPointer ); void showcharX( Widget , XtPointer , XtPointer ); void showstringX( Widget , XtPointer , XtPointer ); void aashowcharX( Widget , XtPointer , XtPointer ); void aashowstringX( Widget , XtPointer , XtPointer ); void showabout( Widget , XtPointer , XtPointer ); void toggleopacity( Widget, XtPointer, XtPointer); void setcolor( Widget, XtPointer, XtPointer); void fonttable( Widget, XtPointer, XtPointer); void toggleaalevel( Widget, XtPointer, XtPointer); int ComputeAAColorsX( unsigned long fg, unsigned long bg, int nolevels); void printusage( int max); int CheckTransform( void); #define DOUBLEMARGIN 10 #define SIMPLEMARGIN 5 #define XOUTPUT_HALFVSIZE 200 #define XOUTPUT_HALFHSIZE 300 #define XGLYPH_PAD 16 #define T1LIBENCFILE "IsoLatin1.enc" #define MAXENCODINGS 10 #define TESTFONTFILE "eufm10.pfb" #define SHOWGRID #define CROSS_SIZE 6 #define PAD(bits, pad) (((bits)+(pad)-1)&-(pad)) #define DIALOGWIDTH 170 #define DIALOGHEIGHT 20 #define ACTIONBUTTONHEIGHT 20 #define APPLICATIONHEIGHT 690 #define EDITABLE_COLOR "red" #define MESSAGEBOXHEIGHT 180 #define AAMAXPLANES 17 #define GRAY0 WhitePixel(display, screen_number) #define GRAY1 gray1.pixel #define GRAY2 gray2.pixel #define GRAY3 gray3.pixel #define GRAY4 BlackPixel(display, screen_number) #define min(a,b) (a < b ? a : b) #define max(a,b) (a > b ? a : b) #define DEFAULT_SIZE "100.0" #define DEFAULT_CHAR "65" /* Global variables for rasterizer parameters */ float Size=400.0, Slant=0.0, Extent=1.0, Angle=0.0; int Modflag=0; int FontID=0, Caching=1, DeviceResolution=72; int StrokeWidth; int nofonts; long Space=0; int Opacity=0; int aalevel; char TestString[1024]="Test"; int TestChar=70; char EncodingFile[128]=""; char LastEncodingFile[128]=""; struct { char *encfilename; char **encoding; } encstruct[MAXENCODINGS]; int *last_resolution; float *lastExtent; float *lastSlant; int LigDetect=0; unsigned long fg, bg, outbg; Pixmap tmp_pixmap=0; Pixmap white_pixmap=0; Pixmap perf_pixmap; Pixmap pixmap; XImage *ximage; XColor edit_color, gray0, gray1, gray2, gray3, gray4; XColor white, black, gray, red, green, blue, pink4, yellow, gridcolor1, gridcolor2,wozu; XColor aacolors[AAMAXPLANES]; unsigned long aapixels[AAMAXPLANES]; XGCValues xgcvalues; unsigned short dummy; char input; int overallwidth; char commandline[256]; GLYPH *glyph; GLYPH *glyph1, *glyph2; char **Encoding=NULL; unsigned int height, width; char statusstring[1024]; T1_TMATRIX matrix; T1_TMATRIX *matrixP; static char msg_buf[256]; /* How t1lib pads lines: */ int t1_pad=0; /* When to swap bytes in aa-pixels? */ int xglyph_byte_order; /* The following is for time measurements: */ struct timeval time_start, time_stop; struct timeval *time_ptr_start, *time_ptr_stop; void *void_ptr; /* Global X(t)-stuff */ Display *display; Screen *screen; int screennumber; int depth; Widget TopLevel; Widget OutputWindow; Widget Output; Widget OutputWindow2; Widget Output2; Widget dialogfontid; Widget dialogsize; Widget dialogslant; Widget dialogextent; Widget dialogangle; Widget dialogteststring; Widget dialogtestcharacter; Widget dialogdevres; Widget dialogstroke; Widget dialogencfile; Widget dialogspace; Widget dialogtmatrix; Widget labelstatus; Widget fgcolorbutton; Widget bgcolorbutton; /* color setting widgets */ Widget fgwhitebutton; Widget fgblackbutton; Widget fggraybutton; Widget fgredbutton; Widget fggreenbutton; Widget fgbluebutton; Widget bgwhitebutton; Widget bgblackbutton; Widget bggraybutton; Widget bgredbutton; Widget bggreenbutton; Widget bgbluebutton; Widget fglabel; Widget bglabel; Widget colorbox; Widget fgstatus; Widget bgstatus; Widget optionsbox; /* Commandline handling */ char *xglyphoptions[]={"--help", /* 0 */ "--Help", /* 1 */ "--noGrid", /* 2 */ "--setPad", /* 3 */ "--logError", /* 4 */ "--logWarning", /* 5 */ "--logStatistic", /* 6 */ "--logDebug", /* 7 */ "--ignoreForceBold", /* 8 */ "--ignoreFamilyAlignment", /* 9 */ "--ignoreHinting", /* 10 */ "--ignoreAFM", /* 11 */ "--debugLine", /* 12 */ "--debugRegion", /* 13 */ "--debugPath", /* 14 */ "--debugFont", /* 15 */ "--debugHint", /* 16 */ "--checkPerformance", /* 17 */ "--checkCopyFont", /* 18 */ "--checkConcatGlyphs", /* 19 */ "--checkConcatOutlines", /* 20 */ "--checkBadCharHandling", /* 21 */ "--checkDefaultEncoding", /* 22 */ "--checkSmartAntialiasing", /* 23 */ "--checkAACaching", /* 24 */ "--checkSetRect", /* 25 */ "--cacheStrokedGlyphs", /* 26 */ NULL}; int extraflags=0; /* #define SHOW_MANIPULATE_PATHS */ #ifdef SHOW_MANIPULATE_PATHS void mymanipulate( long *x, long *y, int type) { double corr; double dx, dy; dx=(double)*x; dy=(double)*y; /* we have to scale down because we deal with fractional pels */ /* corr=0.000000000000004*dx*dx; dy *=1.0+corr; */ /* #define PERIOD 500.0 corr=65536.0*0.5*sin(2*PI/PERIOD/65536.0*dx); dy +=corr*30.0; */ *y=(long)dy; } #endif int main( int argc, char **argv) { XtAppContext TopLevelApp; Arg args[10]; int i, j, numopts=0; Widget kerningbutton; Widget ligaturbutton; Widget r2lbutton; Widget showcharbutton; Widget showstringbutton; Widget aashowcharbutton; Widget aashowstringbutton; Widget showcharbuttonX; Widget showstringbuttonX; Widget aashowcharbuttonX; Widget aashowstringbuttonX; Widget stringlabel; Widget aboutbutton; Widget opacitybutton; Widget underlinebutton; Widget overstrikebutton; Widget overlinebutton; Widget transbox; Widget fonttablebutton; Widget aalevelbutton; Widget exitbutton; Widget box; int rasterflags=0, initflags=0, optfound; int loglevel=0; i=0; j=0; while (xglyphoptions[i++]!=NULL) numopts++; for ( i=1; i no option */ break; } /* Assign address of time parameter */ time_ptr_start=&time_start; time_ptr_stop=&time_stop; /* Check for environment entry. If not set, set it to current directory so that configuration file is found there */ if (getenv("T1LIB_CONFIG")==NULL){ putenv( "T1LIB_CONFIG=./t1lib.config"); } /* Set log-level: */ T1_SetLogLevel( loglevel & (~(0x01<<8))); /* Get padding value if not set from commandline. For 32 bit architectures like Intel, 16 might be the best padding default value: */ if (t1_pad==0) t1_pad=16; if (T1_SetBitmapPad( t1_pad)!=0){ t1_pad=T1_GetBitmapPad(); } /* Initialize t1-library. If xglyph is called with arguments that are no options, we assume that the arguments are font files and ignore the fontdata base file. At this point the value of "i" is the number of commandline arg that is supposed to contain a fontfile name (or it is argc, if no files where specified). Note further that "loglevel" contains (1) info whether to create a log file in the first bit of the higher byte of the lower word and (2) info which loglevel to set. (3) It further may contain more initialization flags. */ if ((extraflags & CHECK_AA_CACHING)){ loglevel |= (T1_AA_CACHING<<8); } if (i==argc){ if (T1_InitLib( (loglevel>>8) | initflags )==NULL){ fprintf(stderr,"Initialization of t1lib failed (T1_errno=%d)!\n", T1_errno); return(-1); } } else{ /* There are still arguments which we interprete as fontfile names */ if (T1_InitLib( (loglevel>>8) | initflags | IGNORE_FONTDATABASE )==NULL){ fprintf(stderr,"Initialization of t1lib failed (T1_errno=%d)!\n", T1_errno); return(-1); } /* We start adding fonts as the i-th commandline arguments */ for ( j=i; j" ); i++; XtSetValues(r2lbutton,args,i); XtAddCallback( r2lbutton, XtNcallback, (XtCallbackProc) toggler2l, (XtPointer) 0 ); /* The toggle widget for underlining (un-)setting */ underlinebutton = XtCreateManagedWidget("toggle", toggleWidgetClass, optionsbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 55 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, "Underline" ); i++; XtSetValues(underlinebutton,args,i); XtAddCallback( underlinebutton, XtNcallback, (XtCallbackProc) toggleunderline, (XtPointer) 0 ); /* The toggle widget for underlining (un-)setting */ overlinebutton = XtCreateManagedWidget("toggle", toggleWidgetClass, optionsbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 55 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, "Overline" ); i++; XtSetValues(overlinebutton,args,i); XtAddCallback( overlinebutton, XtNcallback, (XtCallbackProc) toggleoverline, (XtPointer) 0 ); /* The toggle widget for underlining (un-)setting */ overstrikebutton = XtCreateManagedWidget("toggle", toggleWidgetClass, optionsbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 55 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, "Overstrike" ); i++; XtSetValues(overstrikebutton,args,i); XtAddCallback( overstrikebutton, XtNcallback, (XtCallbackProc) toggleoverstrike, (XtPointer) 0 ); /* The button to raster and display the current character using the current settings */ showcharbutton = XtCreateManagedWidget("Com", commandWidgetClass, box, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 60 ); i++; XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++; XtSetArg( args[i], XtNlabel, "Char"); i++; XtSetValues(showcharbutton,args,i); XtAddCallback( showcharbutton, XtNcallback, (XtCallbackProc) showchar, (XtPointer) 0 ); /* The button to raster and display the current string using the current settings */ showstringbutton = XtCreateManagedWidget("Com", commandWidgetClass, box, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 60 ); i++; XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++; XtSetArg( args[i], XtNlabel, "String"); i++; XtSetValues(showstringbutton,args,i); XtAddCallback( showstringbutton, XtNcallback, (XtCallbackProc) showstring, (XtPointer) 0 ); /* The button to raster and display the current character using the current settings and antialiasing */ aashowcharbutton = XtCreateManagedWidget("Com", commandWidgetClass, box, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 120 ); i++; XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++; XtSetArg( args[i], XtNlabel, "AAChar"); i++; XtSetValues(aashowcharbutton,args,i); XtAddCallback( aashowcharbutton, XtNcallback, (XtCallbackProc) aashowchar, (XtPointer) 0 ); /* The button to raster and display the current string using the current settings and antialiasing */ aashowstringbutton = XtCreateManagedWidget("Com", commandWidgetClass, box, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 120 ); i++; XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++; XtSetArg( args[i], XtNlabel, "AAString"); i++; XtSetValues(aashowstringbutton,args,i); XtAddCallback( aashowstringbutton, XtNcallback, (XtCallbackProc) aashowstring, (XtPointer) 0 ); /* The button to raster and display the current character using the current settings */ showcharbuttonX = XtCreateManagedWidget("Com", commandWidgetClass, box, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 60 ); i++; XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++; XtSetArg( args[i], XtNlabel, "CharX"); i++; XtSetValues(showcharbuttonX,args,i); XtAddCallback( showcharbuttonX, XtNcallback, (XtCallbackProc) showcharX, (XtPointer) 0 ); /* The button to raster and display the current string using the current settings */ showstringbuttonX = XtCreateManagedWidget("Com", commandWidgetClass, box, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 60 ); i++; XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++; XtSetArg( args[i], XtNlabel, "StringX"); i++; XtSetValues(showstringbuttonX,args,i); XtAddCallback( showstringbuttonX, XtNcallback, (XtCallbackProc) showstringX, (XtPointer) 0 ); /* The button to raster and display the current character using the current settings and antialiasing */ aashowcharbuttonX = XtCreateManagedWidget("Com", commandWidgetClass, box, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 120 ); i++; XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++; XtSetArg( args[i], XtNlabel, "AACharX"); i++; XtSetValues(aashowcharbuttonX,args,i); XtAddCallback( aashowcharbuttonX, XtNcallback, (XtCallbackProc) aashowcharX, (XtPointer) 0 ); /* The button to raster and display the current string using the current settings and antialiasing */ aashowstringbuttonX = XtCreateManagedWidget("Com", commandWidgetClass, box, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 120 ); i++; XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++; XtSetArg( args[i], XtNlabel, "AAStringX"); i++; XtSetValues(aashowstringbuttonX,args,i); XtAddCallback( aashowstringbuttonX, XtNcallback, (XtCallbackProc) aashowstringX, (XtPointer) 0 ); /* The box for color trasp/op and fonttable button */ transbox=XtCreateManagedWidget("box", boxWidgetClass, box, NULL, 0); i=0; XtSetArg(args[i], XtNheight,20); i++; XtSetArg(args[i], XtNwidth,90); i++; XtSetValues(transbox,args,i); /* The button to display an AA font table */ fonttablebutton = XtCreateManagedWidget("Com", commandWidgetClass, transbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 80 ); i++; XtSetArg( args[i], XtNheight, 15 ); i++; XtSetArg( args[i], XtNlabel, "Font Table"); i++; XtSetValues(fonttablebutton,args,i); XtAddCallback( fonttablebutton, XtNcallback, (XtCallbackProc) fonttable, (XtPointer) 0 ); /* The toggle widget for opacity/transparency */ opacitybutton = XtCreateManagedWidget("toggle", toggleWidgetClass, transbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 80 ); i++; XtSetArg( args[i], XtNheight, 15 ); i++; XtSetArg( args[i], XtNlabel, "Transparent" ); i++; XtSetValues(opacitybutton,args,i); XtAddCallback( opacitybutton, XtNcallback, (XtCallbackProc) toggleopacity, (XtPointer) 0 ); outbg=pink4.pixel; /* the initial bgcolor for transparent mode */ /* The toggle widget for opacity/transparency */ aalevelbutton = XtCreateManagedWidget("toggle", toggleWidgetClass, transbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 80 ); i++; XtSetArg( args[i], XtNheight, 15 ); i++; XtSetArg( args[i], XtNlabel, "AA-Low" ); i++; XtSetValues(aalevelbutton,args,i); XtAddCallback( aalevelbutton, XtNcallback, (XtCallbackProc) toggleaalevel, (XtPointer) 0 ); aalevel=T1_AA_LOW; /* the initial bgcolor for transparent mode */ /* The box for color selecting buttons for the X11-rastering functions */ colorbox=XtCreateManagedWidget("box", boxWidgetClass, box, NULL, 0); i=0; XtSetArg(args[i], XtNheight,20); i++; XtSetArg(args[i], XtNwidth,280); i++; XtSetValues(colorbox,args,i); /* FG-label */ fgstatus = XtCreateManagedWidget("label", labelWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, fg); i++; XtSetValues(fgstatus,args,i); fglabel = XtCreateManagedWidget("label", labelWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 80 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, "Foreground"); i++; XtSetValues(fglabel,args,i); fgwhitebutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, white.pixel); i++; XtSetValues(fgwhitebutton,args,i); XtAddCallback( fgwhitebutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); fgblackbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, black.pixel); i++; XtSetValues(fgblackbutton,args,i); XtAddCallback( fgblackbutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); fggraybutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, gray.pixel); i++; XtSetValues(fggraybutton,args,i); XtAddCallback( fggraybutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); fgredbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, red.pixel); i++; XtSetValues(fgredbutton,args,i); XtAddCallback( fgredbutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); fggreenbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, green.pixel); i++; XtSetValues(fggreenbutton,args,i); XtAddCallback( fggreenbutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); fgbluebutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, blue.pixel); i++; XtSetValues(fgbluebutton,args,i); XtAddCallback( fgbluebutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); /* BG-label */ bgstatus = XtCreateManagedWidget("label", labelWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, bg); i++; XtSetValues(bgstatus,args,i); bglabel = XtCreateManagedWidget("label", labelWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 80 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, "Background"); i++; XtSetValues(bglabel,args,i); bgwhitebutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, white.pixel); i++; XtSetValues(bgwhitebutton,args,i); XtAddCallback( bgwhitebutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); bgblackbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, black.pixel); i++; XtSetValues(bgblackbutton,args,i); XtAddCallback( bgblackbutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); bggraybutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, gray.pixel); i++; XtSetValues(bggraybutton,args,i); XtAddCallback( bggraybutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); bgredbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, red.pixel); i++; XtSetValues(bgredbutton,args,i); XtAddCallback( bgredbutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); bggreenbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, green.pixel); i++; XtSetValues(bggreenbutton,args,i); XtAddCallback( bggreenbutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); bgbluebutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 20 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, ""); i++; XtSetArg( args[i], XtNbackground, blue.pixel); i++; XtSetValues(bgbluebutton,args,i); XtAddCallback( bgbluebutton, XtNcallback, (XtCallbackProc) setcolor, (XtPointer) 0 ); /* Label for the next box */ stringlabel=XtCreateManagedWidget("Label", labelWidgetClass, box, NULL, 0); i=0; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNlabel, "Test-String:"); i++; XtSetValues(stringlabel,args,i); /* An input-box for the test-string */ dialogteststring=XtCreateManagedWidget("dialog1", asciiTextWidgetClass, box, NULL, 0); i=0; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight,30); i++; XtSetArg(args[i], XtNwrap, XawtextWrapLine); i++; XtSetArg(args[i], XtNeditType, XawtextEdit ); i++; XtSetArg(args[i], XtNforeground, edit_color.pixel); i++; XtSetValues(dialogteststring,args,i); /* Label for the next box */ labelstatus=XtCreateManagedWidget("Label", labelWidgetClass, box, NULL, 0); i=0; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, "No Messages!"); i++; XtSetValues(labelstatus,args,i); /* The button to exit the program */ exitbutton = XtCreateManagedWidget("Com2", commandWidgetClass, box, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 100 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNx, 0 ); i++; XtSetArg( args[i], XtNy, 0 ); i++; XtSetArg( args[i], XtNlabel, " Exit Program"); i++; XtSetValues(exitbutton,args,i); XtAddCallback( exitbutton, XtNcallback, (XtCallbackProc) exitprog, (XtPointer) 0 ); /* The About widget for the about message */ aboutbutton = XtCreateManagedWidget("Com", commandWidgetClass, box, NULL, 0); i=0; XtSetArg( args[i], XtNwidth, 55 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, "About" ); i++; XtSetValues(aboutbutton,args,i); XtAddCallback( aboutbutton, XtNcallback, (XtCallbackProc) showabout, (XtPointer) 0 ); XtRealizeWidget(TopLevel); XtPopup(Output,XtGrabNone); if( extraflags & CHECK_PERFORMANCE){ XtPopup(Output2,XtGrabNone); } /* Set parameters for X11-support */ T1_SetX11Params( display, DefaultVisual(display, screennumber), DefaultDepth( display, screennumber), DefaultColormap(display, screennumber)); /* Create a dummy-pixmap because we need one to destroy before the next is created! */ pixmap = XCreatePixmap(display, XtWindow(OutputWindow), 200, 200, DefaultDepth(display,screennumber) ); XtAppMainLoop(TopLevelApp); return(0); } /* Compute the BBox of a rotated box: */ BBox ComputeRotBBox( BBox inbox, float angle) { int i; BBox resultbox={ 0, 0, 0, 0}; struct point { double x; double y; } p[4], P[4]; double sinalpha, cosalpha; sinalpha=sin((double)angle*PI/180); cosalpha=cos((double)angle*PI/180); /* initialize points */ p[0].x=(double) inbox.llx; p[0].y=(double) inbox.lly; p[1].x=(double) inbox.urx; p[1].y=(double) inbox.lly; p[2].x=(double) inbox.urx; p[2].y=(double) inbox.ury; p[3].x=(double) inbox.llx; p[3].y=(double) inbox.ury; /* fprintf( stderr, "InBox: (%f,%f), (%f,%f), (%f,%f), (%f,%f)\n", p[0].x, p[0].y, p[1].x, p[1].y, p[2].x, p[2].y, p[3].x, p[3].y); */ /* Compute tranformed points */ P[0].x=p[0].x*cosalpha-p[0].y*sinalpha; P[0].y=p[0].x*sinalpha+p[0].y*cosalpha; P[1].x=p[1].x*cosalpha-p[1].y*sinalpha; P[1].y=p[1].x*sinalpha+p[1].y*cosalpha; P[2].x=p[2].x*cosalpha-p[2].y*sinalpha; P[2].y=p[2].x*sinalpha+p[2].y*cosalpha; P[3].x=p[3].x*cosalpha-p[3].y*sinalpha; P[3].y=p[3].x*sinalpha+p[3].y*cosalpha; /* fprintf( stderr, "RotPoints: (%f,%f), (%f,%f), (%f,%f), (%f,%f)\n", P[0].x, P[0].y, P[1].x, P[1].y, P[2].x, P[2].y, P[3].x, P[3].y); */ /* Get BBox: */ for (i=0; i<4; i++){ if (P[i].x < (float) resultbox.llx) resultbox.llx=(int) floor(P[i].x +0.5); if (P[i].x > (float) resultbox.urx) resultbox.urx=(int) floor(P[i].x +0.5); if (P[i].y < (float) resultbox.lly) resultbox.lly=(int) floor(P[i].y +0.5); if (P[i].y > (float) resultbox.ury) resultbox.ury=(int) floor(P[i].y +0.5); } return(resultbox); } void exitprog(Widget exitbutton, XtPointer client_data , XtPointer call_data) { int i; for (i=0; i< T1_GetNoFonts(); i++){ /* printf("Enc-Scheme=%s\n", T1_GetEncodingScheme( i));*/ ; } T1_CloseLib(); exit(0); } void togglekerning( Widget kerningbutton, XtPointer client_data, XtPointer call_data) { int i; char state=0; Arg args[10]; /* Get state of toggle Button: */ i=0; XtSetArg(args[i], XtNstate, &state); i++; XtGetValues(kerningbutton,args,1); if ((state)) Modflag |= T1_KERNING; else Modflag &= ~T1_KERNING; } void toggleligatur( Widget ligaturbutton, XtPointer client_data, XtPointer call_data) { int i; char state=0; Arg args[10]; /* Get state of toggle Button: */ i=0; XtSetArg(args[i], XtNstate, &state); i++; XtGetValues(ligaturbutton,args,1); LigDetect=state; } void toggler2l( Widget r2lbutton, XtPointer client_data, XtPointer call_data) { int i; char state=0; Arg args[10]; /* Get state of toggle Button: */ i=0; XtSetArg(args[i], XtNstate, &state); i++; XtGetValues(r2lbutton,args,1); if ((state)) Modflag |= T1_RIGHT_TO_LEFT; else Modflag &= ~T1_RIGHT_TO_LEFT; /* Invert state */ i=0; if (state){ XtSetArg( args[i], XtNwidth, 55 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, "<--|" ); i++; } else{ XtSetArg( args[i], XtNwidth, 55 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; XtSetArg( args[i], XtNlabel, "|-->" ); i++; } XtSetValues(r2lbutton,args,i); } void toggleunderline( Widget underlinebutton, XtPointer client_data, XtPointer call_data) { int i; char state=0; Arg args[10]; /* Get state of toggle Button: */ i=0; XtSetArg(args[i], XtNstate, &state); i++; XtGetValues(underlinebutton,args,1); if ((state)) Modflag |= T1_UNDERLINE; else Modflag &= ~T1_UNDERLINE; } void toggleoverline( Widget overlinebutton, XtPointer client_data, XtPointer call_data) { int i; char state=0; Arg args[10]; /* Get state of toggle Button: */ i=0; XtSetArg(args[i], XtNstate, &state); i++; XtGetValues( overlinebutton,args,1); if ((state)) Modflag |= T1_OVERLINE; else Modflag &= ~T1_OVERLINE; } void toggleoverstrike( Widget overstrikebutton, XtPointer client_data, XtPointer call_data) { int i; char state=0; Arg args[10]; /* Get state of toggle Button: */ i=0; XtSetArg(args[i], XtNstate, &state); i++; XtGetValues( overstrikebutton,args,1); if ((state)) Modflag |= T1_OVERSTRIKE; else Modflag &= ~T1_OVERSTRIKE; } void toggleopacity( Widget opacitybutton, XtPointer client_data, XtPointer call_data) { int i; char state=0; Arg args[10]; /* Get state of toggle Button: */ i=0; XtSetArg(args[i], XtNstate, &state); i++; XtGetValues(opacitybutton,args,1); i=0; XtSetArg( args[i], XtNstate, state); i++; XtSetArg( args[i], XtNwidth, 80 ); i++; XtSetArg( args[i], XtNheight, 20 ); i++; Opacity=state; /* Invert state */ if (state){ XtSetArg( args[i], XtNlabel, "Opaque" ); i++; XtSetValues(opacitybutton,args,i); outbg=bg; } else{ XtSetArg( args[i], XtNlabel, "Transparent" ); i++; XtSetValues(opacitybutton,args,i); outbg=pink4.pixel; } } /* Toggle the antialiasing level */ void toggleaalevel( Widget aalevelbutton, XtPointer client_data, XtPointer call_data) { int i; char state=0; Arg args[10]; /* Get state of toggle Button: */ i=0; XtSetArg(args[i], XtNstate, &state); i++; XtGetValues( aalevelbutton,args,1); i=0; XtSetArg( args[i], XtNstate, state); i++; XtSetArg( args[i], XtNwidth, 80 ); i++; XtSetArg( args[i], XtNheight, 15 ); i++; /* Invert state */ if (state){ XtSetArg( args[i], XtNlabel, "AA-High" ); i++; XtSetValues(aalevelbutton,args,i); aalevel=T1_AA_HIGH; } else{ XtSetArg( args[i], XtNlabel, "AA-Low" ); i++; XtSetValues(aalevelbutton,args,i); aalevel=T1_AA_LOW; } } /* Set a new fore/background color */ void setcolor( Widget widget, XtPointer client_data, XtPointer call_data) { int i; Arg args[10]; /* foreground colors */ if (widget==fgwhitebutton){ fg=white.pixel; i=0; XtSetArg( args[i], XtNbackground, fg ); i++; XtSetValues(fgstatus,args,i); return; } if (widget==fgblackbutton){ fg=black.pixel; i=0; XtSetArg( args[i], XtNbackground, fg ); i++; XtSetValues(fgstatus,args,i); return; } if (widget==fggraybutton){ fg=gray.pixel; i=0; XtSetArg( args[i], XtNbackground, fg ); i++; XtSetValues(fgstatus,args,i); return; } if (widget==fgredbutton){ fg=red.pixel; i=0; XtSetArg( args[i], XtNbackground, fg ); i++; XtSetValues(fgstatus,args,i); return; } if (widget==fggreenbutton){ fg=green.pixel; i=0; XtSetArg( args[i], XtNbackground, fg ); i++; XtSetValues(fgstatus,args,i); return; } if (widget==fgbluebutton){ fg=blue.pixel; i=0; XtSetArg( args[i], XtNbackground, fg ); i++; XtSetValues(fgstatus,args,i); return; } /* background colors */ if (widget==bgwhitebutton){ bg=white.pixel; if (Opacity) outbg=bg; i=0; XtSetArg( args[i], XtNbackground, bg ); i++; XtSetValues(bgstatus,args,i); return; } if (widget==bgblackbutton){ bg=black.pixel; if (Opacity) outbg=bg; i=0; XtSetArg( args[i], XtNbackground, bg ); i++; XtSetValues(bgstatus,args,i); return; } if (widget==bggraybutton){ bg=gray.pixel; if (Opacity) outbg=bg; i=0; XtSetArg( args[i], XtNbackground, bg ); i++; XtSetValues(bgstatus,args,i); return; } if (widget==bgredbutton){ bg=red.pixel; if (Opacity) outbg=bg; i=0; XtSetArg( args[i], XtNbackground, bg ); i++; XtSetValues(bgstatus,args,i); return; } if (widget==bggreenbutton){ bg=green.pixel; if (Opacity) outbg=bg; i=0; XtSetArg( args[i], XtNbackground, bg ); i++; XtSetValues(bgstatus,args,i); return; } if (widget==bgbluebutton){ bg=blue.pixel; if (Opacity) outbg=bg; i=0; XtSetArg( args[i], XtNbackground, bg ); i++; XtSetValues(bgstatus,args,i); return; } /* we shouldn't get here */ return; } void showchar( Widget showcharbutton, XtPointer client_data, XtPointer call_data) { int i, j; Arg args[10]; sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID); sscanf( XawDialogGetValueString(dialogsize),"%f", &Size); sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle); sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar); sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution); sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth); if (FontID<0 || FontID>=T1_GetNoFonts()) { sprintf(statusstring, "t1lib: FontID out of range!"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Ensure that font is loaded before any operation on the font */ if ( T1_CheckForFontID( FontID) < 1 ) { T1_LoadFont( FontID); } if ( StrokeWidth == 0.0f ) { T1_ClearStrokeFlag( FontID); } else { T1_SetStrokeFlag( FontID); if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) { sprintf( statusstring, "t1lib: Unable to setup strokewidth!"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } } if (CheckTransform()==0 && Angle==0.0){ matrixP=NULL; } else{ matrixP=T1_RotateMatrix( &matrix, Angle); } if (DeviceResolution!=last_resolution[FontID]){ /* Delete all size dependent data for that font */ for ( i=0; i reset to internal encoding */ for (i=0; i so load it */ i=0; while (encstruct[i].encfilename != NULL) i++; encstruct[i].encoding=T1_LoadEncoding(EncodingFile); encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1); if (encstruct[i].encoding==NULL){ free( encstruct[i].encfilename); encstruct[i].encfilename=NULL; } i++; } for (j=0; jmetrics.ascent - glyph->metrics.descent; overallwidth=glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing; width=overallwidth; /* Prepare status message: */ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nCharactername: %s\nT1_errno: %d\n", time_diff(time_ptr_start,time_ptr_stop), glyph->metrics.leftSideBearing, glyph->metrics.rightSideBearing, glyph->metrics.ascent, glyph->metrics.descent, glyph->metrics.advanceX, glyph->metrics.advanceY, glyph->bpp, PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent), T1_GetFontName(FontID), T1_GetCharName(FontID,(char)TestChar), T1_errno); if (glyph->bits !=NULL) { ximage=XCreateImage( display, DefaultVisual(display, screennumber), 1, /* depths for bitmap is 1 */ XYBitmap, /* XYBitmap or XYPixmap */ 0, /* No offset */ glyph->bits, width, height, t1_pad, /* lines padded to bytes */ 0 /*PAD(width,8)/8*/ /* number of bytes per line */ ); /* Force bit and byte order */ ximage->bitmap_bit_order=0; ximage->byte_order=0; XFreePixmap(display,pixmap); pixmap = XCreatePixmap(display, XtWindow(TopLevel), width, height, DefaultDepth(display,screennumber) ); XPutImage(display, pixmap, DefaultGC( display, screennumber), ximage, 0, 0, 0, 0, width, height ); XDestroyImage(ximage); } i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); i=0; XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++; if (glyph->bits != NULL) { XtSetArg( args[i], XtNbitmap, pixmap); i++; } else { XtSetArg( args[i], XtNbitmap, 0); i++; } XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, WhitePixel(display,screennumber)); i++; XtSetArg( args[i], XtNforeground, BlackPixel(display,screennumber)); i++; XtSetValues(OutputWindow ,args,i); i=0; XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++; if (glyph->bits != NULL) { XtSetArg( args[i], XtNbitmap, pixmap); i++; } else { XtSetArg( args[i], XtNbitmap, 0); i++; } XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetValues(Output ,args,i); glyph->bits=NULL; /* Since XDestroyImage() free's this also! */ } void showstring( Widget showstringbutton, XtPointer client_data, XtPointer call_data) { int i,j,k,l,m,none_found; Arg args[10]; char *theString='\0'; char *ligtheString='\0'; char *succs, *ligs; char buf_char; sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID); sscanf( XawDialogGetValueString(dialogsize),"%f", &Size); sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle); sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space); sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution); sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth); if (FontID<0 || FontID>=T1_GetNoFonts()) { sprintf(statusstring, "t1lib: FontID out of range!"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Ensure that font is loaded before any operation on the font */ if ( T1_CheckForFontID( FontID) < 1 ) { T1_LoadFont( FontID); } if ( StrokeWidth == 0.0f ) { T1_ClearStrokeFlag( FontID); } else { T1_SetStrokeFlag( FontID); if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) { sprintf( statusstring, "t1lib: Unable to setup strokewidth"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } } if (CheckTransform()==0 && Angle==0.0){ matrixP=NULL; } else{ matrixP=T1_RotateMatrix( &matrix, Angle); } if (DeviceResolution!=last_resolution[FontID]){ /* Delete all size dependent data for that font */ for ( i=0; i reset to internal encoding */ for (i=0; i so load it */ i=0; while (encstruct[i].encfilename != NULL) i++; encstruct[i].encoding=T1_LoadEncoding(EncodingFile); encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1); if (encstruct[i].encoding==NULL){ free( encstruct[i].encfilename); encstruct[i].encfilename=NULL; } i++; } for (j=0; j0){ buf_char=theString[j]; while (k>0){ none_found=1; for (l=0;lcompchar > -1 ? T1_GetCharName( FontID, ccd->compchar) : "not_enc", ccd->compchar, ccd->numPieces); printf( " basechar %s (%d)\n", ccd->pieces[0].piece > -1 ? T1_GetCharName( FontID, ccd->pieces[0].piece) : "not_enc", ccd->pieces[0].piece); printf( " accent %s (%d)\n", ccd->pieces[1].piece > -1 ? T1_GetCharName( FontID, ccd->pieces[1].piece) : "not_enc", ccd->pieces[1].piece); } T1_FreeCompCharData( ccd); } } */ XSetForeground( display, DefaultGC( display, screennumber), black.pixel); XSetBackground( display, DefaultGC( display, screennumber), white.pixel); /* Reset T1_errno: */ T1_errno=0; gettimeofday(time_ptr_start, void_ptr); if( extraflags & CHECK_CONCATGLYPHS){ glyph2=T1_SetString(FontID,(char *)ligtheString,0,Space,Modflag,Size,matrixP); glyph1=T1_CopyGlyph( glyph2); glyph2=T1_SetString(FontID+1,(char *)ligtheString,0,Space,Modflag,Size,matrixP); glyph=T1_ConcatGlyphs( glyph1, glyph2, 0, 0, Modflag); } else if( extraflags & CHECK_CONCATOUTLINES){ { T1_OUTLINE *path=NULL; path=T1_GetStringOutline(FontID,(char *)ligtheString, 0,Space,Modflag,Size,matrixP); if (path==NULL){ return; } #ifdef SHOW_MANIPULATE_PATHS T1_AbsolutePath( path); T1_ManipulatePath( path, &mymanipulate); T1_RelativePath( path); #else T1_ConcatOutlines( path, T1_GetStringOutline(FontID+1,(char *)ligtheString, 0,Space,Modflag,Size,matrixP)); #endif glyph=T1_FillOutline( path, Modflag); } } else{ if( extraflags & CHECK_FOR_BAD_CHARS){ sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar); ligtheString[strlen(ligtheString)/2]=(unsigned char) TestChar; } glyph=T1_SetString(FontID,(char *)ligtheString,0,Space,Modflag,Size,matrixP); } gettimeofday(time_ptr_stop, void_ptr); free(ligtheString); if ( glyph ==NULL ) { sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno)); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } height=glyph->metrics.ascent - glyph->metrics.descent; overallwidth=glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing; width=overallwidth; /* Prepare status message: */ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nT1_errno: %d\n", time_diff(time_ptr_start,time_ptr_stop), glyph->metrics.leftSideBearing, glyph->metrics.rightSideBearing, glyph->metrics.ascent, glyph->metrics.descent, glyph->metrics.advanceX, glyph->metrics.advanceY, glyph->bpp, PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent), T1_GetFontName(FontID), T1_errno); if (glyph->bits != NULL) { ximage=XCreateImage( display, DefaultVisual(display, screennumber), 1, /* depths for bitmap is 1 */ XYBitmap, /* XYBitmap or XYPixmap */ 0, /* No offset */ glyph->bits, width, height, t1_pad, /* lines padded to bytes */ 0 /*PAD(width,8)/8*/ /* number of bytes per line */ ); /* Force bit and byte order */ ximage->bitmap_bit_order=LSBFirst; ximage->byte_order=LSBFirst; XFreePixmap(display,pixmap); pixmap = XCreatePixmap(display, XtWindow(TopLevel), width, height, DefaultDepth(display,screennumber) ); XPutImage(display, pixmap, DefaultGC( display, screennumber), ximage, 0, 0, 0, 0, width, height ); XDestroyImage(ximage); } i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); i=0; XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++; if (glyph->bits != NULL) { XtSetArg( args[i], XtNbitmap, pixmap); i++; } else { XtSetArg( args[i], XtNbitmap, 0); i++; } XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, WhitePixel(display,screennumber)); i++; XtSetValues(OutputWindow ,args,i); i=0; XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++; if (glyph->bits != NULL) { XtSetArg( args[i], XtNbitmap, pixmap); i++; } else { XtSetArg( args[i], XtNbitmap, 0); i++; } XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, WhitePixel(display,screennumber)); i++; XtSetValues(Output ,args,i); glyph->bits=NULL; /* Since XDestroyImage() free's this also! */ } void aashowchar( Widget showcharbutton, XtPointer client_data, XtPointer call_data) { int i, j; Arg args[10]; sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID); sscanf( XawDialogGetValueString(dialogsize),"%f", &Size); sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle); sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar); sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution); sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth); if (FontID<0 || FontID>=T1_GetNoFonts()) { sprintf(statusstring, "t1lib: FontID out of range!"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Ensure that font is loaded before any operation on the font */ if ( T1_CheckForFontID( FontID) < 1 ) { T1_LoadFont( FontID); } if ( StrokeWidth == 0.0f ) { T1_ClearStrokeFlag( FontID); } else { T1_SetStrokeFlag( FontID); if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) { sprintf( statusstring, "t1lib: Unable to setup strokewidth"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } } if (CheckTransform()==0 && Angle==0.0){ matrixP=NULL; } else{ matrixP=T1_RotateMatrix( &matrix, Angle); } if (DeviceResolution!=last_resolution[FontID]){ /* Delete all size dependent data for that font */ for ( i=0; i reset to internal encoding */ for (i=0; i so load it */ i=0; while (encstruct[i].encfilename != NULL) i++; encstruct[i].encoding=T1_LoadEncoding(EncodingFile); encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1); if (encstruct[i].encoding==NULL){ free( encstruct[i].encfilename); encstruct[i].encfilename=NULL; } i++; } for (j=0; jmetrics.ascent - glyph->metrics.descent; overallwidth=glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing; width=overallwidth; /* Prepare status message: */ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nCharactername: %s\nT1_errno: %d\n", time_diff(time_ptr_start,time_ptr_stop), glyph->metrics.leftSideBearing, glyph->metrics.rightSideBearing, glyph->metrics.ascent, glyph->metrics.descent, glyph->metrics.advanceX, glyph->metrics.advanceY, glyph->bpp, PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent), T1_GetFontName(FontID), T1_GetCharName(FontID,(char)TestChar), T1_errno); /* printf("glyph->bits=%u\n", glyph->bits); printf("glyph->metrics.leftSideBearing=%u\n", glyph->metrics.leftSideBearing); printf("glyph->metrics.rightSideBearing=%u\n", glyph->metrics.rightSideBearing); printf("glyph->metrics.advanceX=%u\n", glyph->metrics.advanceX); printf("glyph->metrics.ascent=%u\n", glyph->metrics.ascent); printf("glyph->metrics.descent=%u\n", glyph->metrics.descent); printf("glyph->pFontCacheInfo=%u\n", glyph->pFontCacheInfo); */ if (glyph->bits != NULL) { ximage=XCreateImage( display, DefaultVisual(display, screennumber), DefaultDepth(display,screennumber), /* depths for bitmap is 1 */ ZPixmap, /* XYBitmap or XYPixmap */ 0, /* No offset */ glyph->bits, width, height, t1_pad, /* lines padded to bytes */ 0 /*PAD(width,8)/8*/ /* number of bytes per line */ ); ximage->byte_order=xglyph_byte_order; XFreePixmap(display,pixmap); pixmap = XCreatePixmap(display, XtWindow(TopLevel), width, height, DefaultDepth(display,screennumber) /* 8 */ /* depth */ ); XPutImage(display, pixmap, DefaultGC( display, screennumber), ximage, 0, 0, 0, 0, width, height ); XDestroyImage(ximage); } i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); i=0; XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++; if (glyph->bits != NULL) { XtSetArg( args[i], XtNbitmap, pixmap); i++; } else { XtSetArg( args[i], XtNbitmap, 0); i++; } XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, WhitePixel(display,screennumber)); i++; XtSetValues(OutputWindow ,args,i); i=0; XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++; if (glyph->bits != NULL) { XtSetArg( args[i], XtNbitmap, pixmap); i++; } else { XtSetArg( args[i], XtNbitmap, 0); i++; } XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetValues(Output ,args,i); glyph->bits=NULL; /* Since XDestroyImage() free's this also! */ } void aashowstring( Widget showstringbutton, XtPointer client_data, XtPointer call_data) { int i,j,k,l,m,none_found; Arg args[10]; char *theString='\0'; char *ligtheString='\0'; char *succs, *ligs; char buf_char; sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID); sscanf( XawDialogGetValueString(dialogsize),"%f", &Size); sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle); sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space); sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution); sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth); if (FontID<0 || FontID>=T1_GetNoFonts()) { sprintf(statusstring, "t1lib: FontID out of range!"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Ensure that font is loaded before any operation on the font */ if ( T1_CheckForFontID( FontID) < 1 ) { T1_LoadFont( FontID); } if ( StrokeWidth == 0.0f ) { T1_ClearStrokeFlag( FontID); } else { T1_SetStrokeFlag( FontID); if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) { sprintf( statusstring, "t1lib: Unable to setup strokewidth"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } } if (CheckTransform()==0 && Angle==0.0){ matrixP=NULL; } else{ matrixP=T1_RotateMatrix( &matrix, Angle); } if (DeviceResolution!=last_resolution[FontID]){ /* Delete all size dependent data for that font */ for ( i=0; i reset to internal encoding */ for (i=0; i so load it */ i=0; while (encstruct[i].encfilename != NULL) i++; encstruct[i].encoding=T1_LoadEncoding(EncodingFile); encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1); if (encstruct[i].encoding==NULL){ free( encstruct[i].encfilename); encstruct[i].encfilename=NULL; } i++; } for (j=0; j0){ buf_char=theString[j]; while (k>0){ none_found=1; for (l=0;lmetrics.ascent - glyph->metrics.descent; overallwidth=glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing; width=overallwidth; /* Prepare status message: */ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nT1_errno: %d\n", time_diff(time_ptr_start,time_ptr_stop), glyph->metrics.leftSideBearing, glyph->metrics.rightSideBearing, glyph->metrics.ascent, glyph->metrics.descent, glyph->metrics.advanceX, glyph->metrics.advanceY, glyph->bpp, PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent), T1_GetFontName(FontID), T1_errno); /* printf("glyph->bits=%u\n", glyph->bits); printf("glyph->metrics.leftSideBearing=%u\n", glyph->metrics.leftSideBearing); printf("glyph->metrics.rightSideBearing=%u\n", glyph->metrics.rightSideBearing); printf("glyph->metrics.advanceX=%u\n", glyph->metrics.advanceX); printf("glyph->metrics.ascent=%u\n", glyph->metrics.ascent); printf("glyph->metrics.descent=%u\n", glyph->metrics.descent); printf("glyph->pFontCacheInfo=%u\n", glyph->pFontCacheInfo); */ if (glyph->bits != NULL) { ximage=XCreateImage( display, DefaultVisual(display, screennumber), DefaultDepth(display,screennumber), ZPixmap, /* XYBitmap or XYPixmap */ 0, /* No offset */ glyph->bits, width, height, t1_pad, /* lines padded to bytes */ 0 /* number of bytes per line */ ); ximage->byte_order=xglyph_byte_order; XFreePixmap(display,pixmap); pixmap = XCreatePixmap(display, XtWindow(TopLevel), width, height, DefaultDepth(display,screennumber) ); XPutImage(display, pixmap, DefaultGC( display, screennumber), ximage, 0, 0, 0, 0, width, height ); XDestroyImage(ximage); } i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); i=0; XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++; if (glyph->bits != NULL) { XtSetArg( args[i], XtNbitmap, pixmap); i++; } else { XtSetArg( args[i], XtNbitmap, 0); i++; } XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, WhitePixel( display, screennumber)); i++; XtSetValues(OutputWindow ,args,i); i=0; XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++; if (glyph->bits != NULL) { XtSetArg( args[i], XtNbitmap, pixmap); i++; } else { XtSetArg( args[i], XtNbitmap, 0); i++; } XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, WhitePixel( display, screennumber)); i++; XtSetValues(Output ,args,i); glyph->bits=NULL; /* Since XDestroyImage() free's this also! */ } void showcharX( Widget showcharbutton, XtPointer client_data, XtPointer call_data) { int i, j; Arg args[10]; int tmp_width, tmp_height; sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID); sscanf( XawDialogGetValueString(dialogsize),"%f", &Size); sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle); sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar); sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution); sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth); if (FontID<0 || FontID>=T1_GetNoFonts()) { sprintf(statusstring, "t1lib: FontID out of range!"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Ensure that font is loaded before any operation on the font */ if ( T1_CheckForFontID( FontID) < 1 ) { T1_LoadFont( FontID); } if ( StrokeWidth == 0.0f ) { T1_ClearStrokeFlag( FontID); } else { T1_SetStrokeFlag( FontID); if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) { sprintf( statusstring, "t1lib: Unable to setup strokewidth"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } } if (CheckTransform()==0 && Angle==0.0){ matrixP=NULL; } else{ matrixP=T1_RotateMatrix( &matrix, Angle); } if (DeviceResolution!=last_resolution[FontID]){ /* Delete all size dependent data for that font */ for ( i=0; i reset to internal encoding */ for (i=0; i so load it */ i=0; while (encstruct[i].encfilename != NULL) i++; encstruct[i].encoding=T1_LoadEncoding(EncodingFile); encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1); if (encstruct[i].encoding==NULL){ free( encstruct[i].encfilename); encstruct[i].encfilename=NULL; } i++; } for (j=0; jmetrics.advanceX - CROSS_SIZE, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY, XOUTPUT_HALFHSIZE + glyph->metrics.advanceX + CROSS_SIZE, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY); XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber), XOUTPUT_HALFHSIZE + glyph->metrics.advanceX, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY - CROSS_SIZE, XOUTPUT_HALFHSIZE + glyph->metrics.advanceX, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY + CROSS_SIZE); } } XSetForeground( display, DefaultGC( display, screennumber), fg); /* Check for errors */ if (glyph==NULL) { sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno)); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Prepare status message: */ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nCharactername: %s\nT1_errno: %d\n", time_diff(time_ptr_start,time_ptr_stop), glyph->metrics.leftSideBearing, glyph->metrics.rightSideBearing, glyph->metrics.ascent, glyph->metrics.descent, glyph->metrics.advanceX, glyph->metrics.advanceY, glyph->bpp, PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent), T1_GetFontName(FontID), T1_GetCharName(FontID,(char)TestChar), T1_errno); /* Finally, set the resources: */ i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); i=0; XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++; XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, outbg); i++; XtSetValues(OutputWindow ,args,i); i=0; XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++; XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetValues(Output ,args,i); } void showstringX( Widget showstringbutton, XtPointer client_data, XtPointer call_data) { int i,j,k,l,m,none_found; Arg args[10]; int tmp_width, tmp_height; char *theString='\0'; char *ligtheString='\0'; char *succs, *ligs; char buf_char; sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID); sscanf( XawDialogGetValueString(dialogsize),"%f", &Size); sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle); sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space); sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution); sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth); if (FontID<0 || FontID>=T1_GetNoFonts()) { sprintf(statusstring, "t1lib: FontID out of range!"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Ensure that font is loaded before any operation on the font */ if ( T1_CheckForFontID( FontID) < 1 ) { T1_LoadFont( FontID); } if ( StrokeWidth == 0.0f ) { T1_ClearStrokeFlag( FontID); } else { T1_SetStrokeFlag( FontID); if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) { sprintf( statusstring, "t1lib: Unable to setup strokewidth"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } } if (CheckTransform()==0 && Angle==0.0){ matrixP=NULL; } else{ matrixP=T1_RotateMatrix( &matrix, Angle); } if (DeviceResolution!=last_resolution[FontID]){ /* Delete all size dependent data for that font */ for ( i=0; i reset to internal encoding */ for (i=0; i so load it */ i=0; while (encstruct[i].encfilename != NULL) i++; encstruct[i].encoding=T1_LoadEncoding(EncodingFile); encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1); if (encstruct[i].encoding==NULL){ free( encstruct[i].encfilename); encstruct[i].encfilename=NULL; } i++; } for (j=0; j0){ buf_char=theString[j]; while (k>0){ none_found=1; for (l=0;lmetrics.advanceX - CROSS_SIZE, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY, XOUTPUT_HALFHSIZE + glyph->metrics.advanceX + CROSS_SIZE, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY); XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber), XOUTPUT_HALFHSIZE + glyph->metrics.advanceX, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY - CROSS_SIZE, XOUTPUT_HALFHSIZE + glyph->metrics.advanceX, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY + CROSS_SIZE); } } XSetForeground( display, DefaultGC( display, screennumber), fg); /* Free the ligature-converted string */ free(ligtheString); /* Check for errors */ if (glyph==NULL) { sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno)); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Prepare status message: */ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nT1_errno: %d\n", time_diff(time_ptr_start,time_ptr_stop), glyph->metrics.leftSideBearing, glyph->metrics.rightSideBearing, glyph->metrics.ascent, glyph->metrics.descent, glyph->metrics.advanceX, glyph->metrics.advanceY, glyph->bpp, PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent), T1_GetFontName(FontID), T1_errno); /* Finally, set resources */ i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); i=0; XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++; XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, outbg); i++; XtSetValues(OutputWindow ,args,i); i=0; XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++; XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, outbg); i++; XtSetValues(Output ,args,i); } void aashowcharX( Widget showcharbutton, XtPointer client_data, XtPointer call_data) { int i, j; Arg args[10]; int tmp_width, tmp_height; sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID); sscanf( XawDialogGetValueString(dialogsize),"%f", &Size); sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle); sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar); sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution); sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth); if (FontID<0 || FontID>=T1_GetNoFonts()) { sprintf(statusstring, "t1lib: FontID out of range!"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Ensure that font is loaded before any operation on the font */ if ( T1_CheckForFontID( FontID) < 1 ) { T1_LoadFont( FontID); } if ( StrokeWidth == 0.0f ) { T1_ClearStrokeFlag( FontID); } else { T1_SetStrokeFlag( FontID); if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) { sprintf( statusstring, "t1lib: Unable to setup strokewidth"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } } if (CheckTransform()==0 && Angle==0.0){ matrixP=NULL; } else{ matrixP=T1_RotateMatrix( &matrix, Angle); } if (DeviceResolution!=last_resolution[FontID]){ /* Delete all size dependent data for that font */ for ( i=0; i reset to internal encoding */ for (i=0; i so load it */ i=0; while (encstruct[i].encfilename != NULL) i++; encstruct[i].encoding=T1_LoadEncoding(EncodingFile); encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1); if (encstruct[i].encoding==NULL){ free( encstruct[i].encfilename); encstruct[i].encfilename=NULL; } i++; } for (j=0; jmetrics.advanceX - CROSS_SIZE, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY, XOUTPUT_HALFHSIZE + glyph->metrics.advanceX + CROSS_SIZE, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY); XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber), XOUTPUT_HALFHSIZE + glyph->metrics.advanceX, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY - CROSS_SIZE, XOUTPUT_HALFHSIZE + glyph->metrics.advanceX, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY + CROSS_SIZE); } } XSetForeground( display, DefaultGC( display, screennumber), fg); /* Check for errors */ if (glyph==NULL) { sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno)); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Prepare status message: */ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nCharactername: %s\nT1_errno: %d\n", time_diff(time_ptr_start,time_ptr_stop), glyph->metrics.leftSideBearing, glyph->metrics.rightSideBearing, glyph->metrics.ascent, glyph->metrics.descent, glyph->metrics.advanceX, glyph->metrics.advanceY, glyph->bpp, PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent), T1_GetFontName(FontID), T1_GetCharName(FontID,(char)TestChar), T1_errno); /* Finally, set the resources: */ i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); i=0; XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++; XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, outbg); i++; XtSetValues(OutputWindow ,args,i); i=0; XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++; XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetValues(Output ,args,i); } void aashowstringX( Widget showstringbutton, XtPointer client_data, XtPointer call_data) { int i,j,k,l,m,none_found; Arg args[10]; int tmp_width, tmp_height; char *theString='\0'; char *ligtheString='\0'; char *succs, *ligs; char buf_char; sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID); sscanf( XawDialogGetValueString(dialogsize),"%f", &Size); sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle); sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space); sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution); sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth); if (FontID<0 || FontID>=T1_GetNoFonts()) { sprintf(statusstring, "t1lib: FontID out of range!"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Ensure that font is loaded before any operation on the font */ if ( T1_CheckForFontID( FontID) < 1 ) { T1_LoadFont( FontID); } if ( StrokeWidth == 0.0f ) { T1_ClearStrokeFlag( FontID); } else { T1_SetStrokeFlag( FontID); if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) { sprintf( statusstring, "t1lib: Unable to setup strokewidth"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } } if (CheckTransform()==0 && Angle==0.0){ matrixP=NULL; } else{ matrixP=T1_RotateMatrix( &matrix, Angle); } if (DeviceResolution!=last_resolution[FontID]){ /* Delete all size dependent data for that font */ for ( i=0; i reset to internal encoding */ for (i=0; i so load it */ i=0; while (encstruct[i].encfilename != NULL) i++; encstruct[i].encoding=T1_LoadEncoding(EncodingFile); encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1); if (encstruct[i].encoding==NULL){ free( encstruct[i].encfilename); encstruct[i].encfilename=NULL; } i++; } else for (j=0; j0){ buf_char=theString[j]; while (k>0){ none_found=1; for (l=0;lmetrics.advanceX - CROSS_SIZE, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY, XOUTPUT_HALFHSIZE + glyph->metrics.advanceX + CROSS_SIZE, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY); XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber), XOUTPUT_HALFHSIZE + glyph->metrics.advanceX, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY - CROSS_SIZE, XOUTPUT_HALFHSIZE + glyph->metrics.advanceX, XOUTPUT_HALFVSIZE - glyph->metrics.advanceY + CROSS_SIZE); } } XSetForeground( display, DefaultGC( display, screennumber), fg); /* Free the ligature-converted string */ free(ligtheString); /* Check for errors */ if (glyph==NULL) { sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno)); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Prepare status message: */ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nT1_errno: %d\n", time_diff(time_ptr_start,time_ptr_stop), glyph->metrics.leftSideBearing, glyph->metrics.rightSideBearing, glyph->metrics.ascent, glyph->metrics.descent, glyph->metrics.advanceX, glyph->metrics.advanceY, glyph->bpp, PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent), T1_GetFontName(FontID), T1_errno); /* Finally, set resources */ i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); i=0; XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++; XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, outbg); i++; XtSetValues(OutputWindow ,args,i); i=0; XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++; XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++; XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, outbg); i++; XtSetValues(Output ,args,i); } void fonttable( Widget fonttablebutton, XtPointer client_data, XtPointer call_data) { int i, j; Arg args[10]; static Pixmap pixmap=0; int x, y; int CellLeftMargin, CellTopMargin; int ColAdvance, RowAdvance; int width, height; int FontID, DeviceResolution; float Size, Extent, Slant; float scale; BBox fontbbox, tmpbbox; sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID); sscanf( XawDialogGetValueString(dialogsize),"%f", &Size); sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle); sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space); sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution); sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth); if (FontID<0 || FontID>=T1_GetNoFonts()) { sprintf(statusstring, "t1lib: FontID out of range!"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } /* Ensure that font is loaded before any operation on the font */ if ( T1_CheckForFontID( FontID) < 1 ) { T1_LoadFont( FontID); } if ( StrokeWidth == 0.0f ) { T1_ClearStrokeFlag( FontID); } else { T1_SetStrokeFlag( FontID); if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) { sprintf( statusstring, "t1lib: Unable to setup strokewidth"); i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); return; } } /* We don't obey rotation when displaying a fonttable */ matrixP=NULL; if (DeviceResolution!=last_resolution[FontID]){ /* Delete all size dependent data for that font */ for ( i=0; i reset to internal encoding */ for (i=0; i so load it */ i=0; while (encstruct[i].encfilename != NULL) i++; encstruct[i].encoding=T1_LoadEncoding(EncodingFile); encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1); if (encstruct[i].encoding==NULL){ free( encstruct[i].encfilename); encstruct[i].encfilename=NULL; } i++; } else for (j=0; jfontbbox.urx) fontbbox.urx=tmpbbox.urx; if (tmpbbox.ury>fontbbox.ury) fontbbox.ury=tmpbbox.ury; } } /* We scale the font bounding box according to extent, slant and device resolution. For the slant, we assume that the font contains at least one character which reaches to the upper right corner and the same for lower left corner. */ scale=DeviceResolution/72.0; fontbbox.urx=fontbbox.urx+(int)((float)fontbbox.ury*Slant); fontbbox.llx=fontbbox.llx+(int)((float)fontbbox.lly*Slant); fontbbox.urx=(int)((float)fontbbox.urx*Extent); fontbbox.llx=(int)((float)fontbbox.llx*Extent); fontbbox.llx=(int)((float)fontbbox.llx*scale); fontbbox.urx=(int)((float)fontbbox.urx*scale); fontbbox.lly=(int)((float)fontbbox.lly*scale); fontbbox.ury=(int)((float)fontbbox.ury*scale); /* Left and top margin of the char-origins with respect upper left corner of cell */ CellTopMargin=SIMPLEMARGIN + fontbbox.ury; if (fontbbox.llx < 0){ CellLeftMargin= - fontbbox.llx; } else{ CellLeftMargin=0; } /* How much to advance in which direction when incrementing */ ColAdvance=CellLeftMargin + fontbbox.urx ; RowAdvance=CellTopMargin - fontbbox.lly ; /* Scale the charspace values */ CellTopMargin = (int) floor((double)CellTopMargin*Size/1000.0+0.5)+SIMPLEMARGIN; CellLeftMargin = (int) floor((double)CellLeftMargin*Size/1000.0+0.5)+SIMPLEMARGIN; ColAdvance = (int) floor((double)ColAdvance*Size/1000.0+0.5)+DOUBLEMARGIN; RowAdvance = (int) floor((double)RowAdvance*Size/1000.0+0.5)+DOUBLEMARGIN; /* Overall width and height of map */ width=1+(16*ColAdvance); height=1+(16*RowAdvance); /* We clip to a window as large as the screen in this function */ if (width > 1024) width=WidthOfScreen(screen); if (height > 768) height=HeightOfScreen(screen); /* Create pixmap of appropriate size, */ if (pixmap!=0) XFreePixmap( display, pixmap); pixmap=XCreatePixmap( display, XtWindow(TopLevel), width, height, depth ); /* We always use opaque mode */ XSetForeground( display, DefaultGC( display, screennumber), bg); XFillRectangle( display, pixmap, DefaultGC( display, screennumber), 0, 0, width, height); XSetForeground( display, DefaultGC( display, screennumber), fg); XSetBackground( display, DefaultGC( display, screennumber), bg); /* Draw cell grid: */ for (j=0; j<17; j++){ XDrawLine( display, pixmap, DefaultGC( display, screennumber), j*ColAdvance, 0, j*ColAdvance, height); } for (j=0; j<17; j++){ XDrawLine( display, pixmap, DefaultGC( display, screennumber), 0, j*RowAdvance, width, j*RowAdvance); } /* Reset T1_errno: */ T1_errno=0; /* Set antialiasing level */ T1_AASetLevel( aalevel); /* Draw characters into pixmap */ for ( i=0; i<16; ) { /* row-loop */ for ( j=0; j<16; j++) { x=1+(j*ColAdvance)+CellLeftMargin; y=1+CellTopMargin+(i*RowAdvance); glyph=T1_AASetCharX( pixmap, DefaultGC( display, screennumber), 1, x, y, FontID, (char) (i*16+j), Size, matrixP); if (x>width) { sprintf( msg_buf, "Clipping row %d horizontally at column %d", i, j); T1_PrintLog( "fonttable()", msg_buf, T1LOG_STATISTIC); break; } } if (y>height) { sprintf( msg_buf, "Clipping vertically at row %d", i); T1_PrintLog( "fonttable()", msg_buf, T1LOG_STATISTIC); break; } i++; } /* If font was not loadable */ if (T1_GetFontName( FontID)==NULL) sprintf(statusstring, "t1lib: Can't get font name, T1_errno=%d!", T1_errno); else sprintf(statusstring,"Font %s, final T1_errno = %d\n %s", T1_GetFontName( FontID), T1_errno, T1_StrError(T1_errno)); /* Finally, set resources */ i=0; XtSetArg(args[i], XtNbitmap,NULL); i++; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++; XtSetArg(args[i], XtNlabel, statusstring); i++; XtSetValues(labelstatus,args,i); i=0; XtSetArg( args[i], XtNwidth, width); i++; XtSetArg( args[i], XtNheight, height); i++; XtSetArg( args[i], XtNbitmap, pixmap); i++; XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, outbg); i++; XtSetValues(OutputWindow ,args,i); i=0; XtSetArg( args[i], XtNwidth, width); i++; XtSetArg( args[i], XtNheight, height); i++; XtSetArg( args[i], XtNbitmap, pixmap); i++; XtSetArg( args[i], XtNresize, 1);i++; XtSetArg( args[i], XtNinternalWidth, 0); i++; XtSetArg( args[i], XtNinternalHeight, 0); i++; XtSetArg( args[i], XtNbackground, outbg); i++; XtSetValues(Output ,args,i); } /* This function shows the About-message */ void showabout( Widget aboutbutton, XtPointer client_data, XtPointer call_data) { int i; Arg args[10]; Pixmap about=0; XGCValues xgcvalues; GC gc; static char ident[80]=""; #define T1GCMASK GCForeground | GCBackground if (about==0) { about=XCreatePixmap( display, XtWindow(TopLevel), 380, MESSAGEBOXHEIGHT, depth); } gc=DefaultGC( display, screennumber); XGetGCValues( display, gc, T1GCMASK, &xgcvalues); fg=xgcvalues.foreground; bg=xgcvalues.background; XSetForeground( display, gc, white.pixel); XFillRectangle( display, about, gc, 0, 0, 380, MESSAGEBOXHEIGHT); XSetForeground( display, gc, black.pixel); XSetBackground( display, gc, white.pixel); /* Set antialiasing level */ T1_AASetLevel( aalevel); sprintf( ident, "This is xglyph, T1Lib Version %s", T1_GetLibIdent()); glyph=T1_AASetStringX( about, gc, 1, 10, 30, /* x_dest, y_dest */ 0, ident, 0, 0.0, T1_UNDERLINE | T1_KERNING, 20.0, NULL); glyph=T1_AASetStringX( about, gc, 1, 10, 60, /* x_dest, y_dest */ 0, "xglyph is an interactive tool for illustrating some", 0, 0.0, T1_KERNING, 15.0, NULL); glyph=T1_AASetStringX( about, gc, 1, 10, 80, /* x_dest, y_dest */ 0, "of the T1Lib features. T1Lib is distributed under", 0, 0.0, T1_KERNING, 15.0, NULL); glyph=T1_AASetStringX( about, gc, 1, 10, 100, /* x_dest, y_dest */ 0, "the GNU General Public Library License (LGPL).", 0, 0.0, T1_KERNING, 15.0, NULL); glyph=T1_AASetStringX( about, gc, 1, 10, 133, /* x_dest, y_dest */ 0, "Enjoy it!", 0, 0.0, T1_KERNING, 15.0, NULL); XSetForeground( display, gc, fg); XSetBackground( display, gc, bg); i=0; XtSetArg(args[i], XtNwidth,380); i++; XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++; XtSetArg(args[i], XtNbackgroundPixmap, about); i++; XtSetArg(args[i], XtNlabel, ""); i++; XtSetValues(labelstatus,args,i); } /* This function returns a time difference in Microseconds, provided that the time difference is not greater than approximately 35 minutes. */ long time_diff(struct timeval *time_ptr_start, struct timeval *time_ptr_stop) { return((time_ptr_stop->tv_sec - time_ptr_start->tv_sec)*1000000 +(time_ptr_stop->tv_usec - time_ptr_start->tv_usec)); } /* T1_ComputeAAColorsX(): Compute the antialiasing colors in dependency of foreground and background */ int ComputeAAColorsX( unsigned long fg, unsigned long bg, int nolevels) { static unsigned long last_fg; static unsigned long last_bg; unsigned long delta_red, delta_green, delta_blue; int i; int nocolors=0; aacolors[0].pixel=bg; aacolors[nolevels-1].pixel=fg; if ((fg==last_fg)&&(bg==last_bg)) return(nocolors); /* Get RGB values for fore- and background */ XQueryColor( display, DefaultColormap(display,screennumber), &aacolors[0]); XQueryColor( display, DefaultColormap(display,screennumber), &aacolors[nolevels-1]); delta_red = (aacolors[nolevels-1].red - aacolors[0].red)/(nolevels-1); delta_green = (aacolors[nolevels-1].green - aacolors[0].green)/(nolevels-1); delta_blue = (aacolors[nolevels-1].blue - aacolors[0].blue)/(nolevels-1); aapixels[0]=aacolors[0].pixel; aapixels[nolevels-1]=aacolors[nolevels-1].pixel; for (i=1; i #include #include /* All needed declarations */ #ifdef VMS # define LOCAL_CONFIG "t1libvms.config" #else # define LOCAL_CONFIG "./t1lib.config" #endif int main( void) { GLYPH *glyph; int i; char * my_config = malloc(25); sprintf(my_config, "T1LIB_CONFIG=%s",LOCAL_CONFIG); /* Set our environment to an existent config file directory */ putenv( my_config); /* Pad bitmaps to 16 bits, the default being 8 bits */ T1_SetBitmapPad( 16); /* Initialize t1lib and return if error occurs. No logfile will be generated */ if ((T1_InitLib(NO_LOGFILE)==NULL)){ fprintf(stderr, "Initialization of t1lib failed\n"); return(-1); } /* For every font in the database, generate a glyph for the string "Test" at 25 bp. Use Kerning. Then dump an ASCII representation of the glyph to stdout */ for( i=0; i .dependencies clean: dummy $(RM) $(TARGET1) $(TARGET2) *.o *.lo .libs/* *~ \#*\# *.log *.bak -rmdir .libs install: dummy uninstall: dummy dummy: # Dependencies of object files include .dependencies t1lib-5.1.2/examples/.dependencies0000644000175000001440000000010510733501627015526 0ustar rmzuserssubset.lo: subset.c ../lib/t1lib/t1lib.h t1example1.lo: t1example1.c t1lib-5.1.2/examples/t1lib.config0000644000175000001440000000020610733501627015303 0ustar rmzusersThis is a configuration file for t1lib FONTDATABASE=./FontDataBase ENCODING=../Fonts/enc:. AFM=../Fonts/afm:. TYPE1=../Fonts/type1:. t1lib-5.1.2/examples/subset.c0000644000175000001440000001573010733501627014562 0ustar rmzusers/*-------------------------------------------------------------------------- ----- File: subset.c ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2007-12-22 ----- Description: This file is part of t1lib. The program subset reads a font file name and a string from the commandline and creates a subset of the font which is sufficient to display the string. It is an example of how to use font subsetting. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007. As of version 0.5, t1lib is distributed under the GNU General Public Library Lincense. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ #include #include #include /* Note: We include t1lib.h from lib/t1lib. That way the objectfile does only need to be rebuild when the header itself changes and not each time the library has been recompiled */ #include "../lib/t1lib/t1lib.h" void printusage( void); int main(int argc, char *argv[]) { int i, j, result; int realargs=0; int logfile=0; char mask[256]; int flags=T1_SUBSET_DEFAULT; char *subset=NULL; unsigned long ofsize=0; FILE *ofp=stdout; char** encoding = 0; char* encodingfile = 0; int doreencode = 0; int reresult = 0; if (argc==1){ printusage(); return(0); } /* If we want to log anything, then log all */ T1_SetLogLevel(T1LOG_DEBUG); realargs=argc-1; for (j=1; j] [ ...] string\n"); fprintf(stdout, "\n"); fprintf(stdout, "Subset source fontfile(s) according to `string' and write result\nto stdout (T1Lib-%s)!\n\n", T1_GetLibIdent()); fprintf(stdout, "Options: -l Write a log-file t1lib.log.\n"); fprintf(stdout, " -a Create ASCII-encrypted file (default).\n"); fprintf(stdout, " -b Create Binary-enrypted file.\n"); fprintf(stdout, " -f Force reencoding of the font subset, even if\n"); fprintf(stdout, " the source font uses internal StandardEncoding.\n"); fprintf(stdout, " -s Skip reencoding of the font subset, even if the\n"); fprintf(stdout, " source font defines a font-specific encoding.\n"); fprintf(stdout, " -e Load an encoding from specified file and reencode\n"); fprintf(stdout, " source font before starting to create the subset.\n"); fprintf(stdout, " This option also implies [-f].\n"); return; } t1lib-5.1.2/examples/FontDataBase0000644000175000001440000000012610733501627015320 0ustar rmzusers8 bchr.afm bchri.afm bchb.afm bchbi.afm dcr10.afm dcti10.afm dcbx10.afm dcbxti10.afm t1lib-5.1.2/README.t1lib-5.1.20000644000175000001440000001566210733501627013632 0ustar rmzusers -------------------------------------------------------------------------- --------------------------- t1lib-README --------------------------------- -------------------------------------------------------------------------- /*-------------------------------------------------------------------------- ----- File: REAMDE.t1lib-5.1.2 ----- Author: Rainer Menzner (Rainer.Menzner@web.de) ----- Date: 2007-12-23 ----- Description: This is file README.t1lib of the t1lib-package. It contains an overview and brief installation instructions for the t1-library. ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007. As of version 0.5, t1lib is distributed under the GNU General Public Library License. The conditions can be found in the files LICENSE and LGPL, which should reside in the toplevel directory of the distribution. Please note that there are parts of t1lib that are subject to other licenses: The parseAFM-package is copyrighted by Adobe Systems Inc. The type1 rasterizer is copyrighted by IBM and the X11-consortium. ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-) ----- Credits: I want to thank IBM and the X11-consortium for making their rasterizer freely available. Also thanks to Piet Tutelaers for his ps2pk, from which I took the rasterizer sources in a format independent from X11. Thanks to all people who make free software living! --------------------------------------------------------------------------*/ About t1lib: ------------ t1lib is a library distributed under the GNU General Public Library License for generating character- and string-glyphs from Adobe Type 1 fonts under UNIX. t1lib uses most of the code of the X11 rasterizer donated by IBM to the X11-project. But some disadvantages of the rasterizer being included in X11 have been eliminated. Here are some of the features: - t1lib is completely independent of X11 (although the program provided for testing the library needs X11) - fonts are made known to library by means of a font database file at runtime - searchpaths for all types of input files are configured by means of a configuration file at runtime - characters are rastered as they are needed - characters and complete strings may be rastered by a simple function call - when rastering strings, pairwise kerning information from .afm-files may optionally be taken into account - an interface to ligature-information of afm-files is provided - a program to generate afm-files from Type 1 font files is included - rotation and arbitrary transformations are supported - there's support for extending and slanting fonts - underlining, overlining and overstriking is supported - new encoding vectors may be loaded at runtime and fonts may be reencoded using these encoding vectors - antialiasing is implemented - Right-To-Left typesetting is supported - Font subsetting is easily possible - support of composite character information - stroking of character outlines with variable strokewidths - An interactive test program called "xglyph" is included in the distribution. This program allows to test all of the features of the library. It requires X11. Changes and New Features: ------------------------- - See the file Changes in the T1Lib top-directory for information on new features. Installation: ------------- ----------------------------------------------------------------------------- Note: VMS-users should examine configure.com in the toplevel directory, which is a configure-script for VMS, kindly contributed by John Hasstedt and now maintained by Martin Zinser. This file contains notes on how to compile t1lib on VMS. ----------------------------------------------------------------------------- After unpacking the archive (what you obviously did already), change to subdirectory t1lib-..../ and type: ./configure This will create the Makefiles. Then type make In order to use the testprogram xglyph, X11 needs to be installed on your system. If you have difficulties during configuring and building t1lib, cd to directory t1lib-.../doc and execute $ latex t1lib_doc.tex $ makeindex t1lib_doc $ latex t1lib_doc.tex $ latex t1lib_doc.tex This will generate the docs which contain a more detailed description of the build-process. LaTeX2e is required. Alternatively, you can scan the preformatted pdf-documentation. Before installing the libraries, you should test whether all things work correct: 1) Change to subdirectory xglyph 2) Start the program xglyph 3) Ensure that the output-window is not hidden behind another window. 4) Before doing anything other, click on button "String". The string "Test" should now be rastered and displayed in the output-window, using font BitstreamCharterBTRoman at 100bp without kerning. If that works, most probably all works for you. 5) Have a look at t1lib_doc.dvi in the doc-subdirectory of the package and read the chapter on xglyph. However, most of this program is self-explaining, so that you might want to omit this step. 6) Play with the program and enjoy. 7) If you do not have X11, you can still check whether t1lib works for you. Copy one of the pfb-files from t1lib-.../Fonts/type1, say, bchr.pfb, to the type1afm-subdirectory, and run type1afm bchr.pfb If the afm-file bchr.afm is generated, t1lib will most probably work on your system. Documentation: -------------- As mentioned above, documentation is provided in LaTeX2e-format subdirectory T1Lib/doc. It should have been built during the build. The section on runtime setup is really important, because programs may fail due to an invalid or incomplete runtime setup, although the programs itself may be correct! A preformatted Version is also available in pdf. How to get it: -------------- t1lib is available at ftp://sunsite.unc.edu/pub/Linux/libs/graphics/t1lib-x.y[.z].tar.gz where x.y[.z] is the version identification. Closing: -------- You are allowed to send the author lots of money and dozents of gifts, but you needn't :-) If you have any comments to this library, feedback is wanted. Send eMail to: Rainer.Menzner@web.de Future: ------- Within the past years, my time has constantly and increasingly become spare so that I hardly found time to further develop t1lib. And developing free software is undoubtedly related to a certain amount of fun, which in turn only can come up if you are relaxed with respect to time ... Since t1lib now has reached a reasonably stable state, I intend to more or less freeze the development of new features at this point. Of course, bug fixes etc. should be possible further. If there is somebody out there willing to further develop t1lib, he or she is welcome to contact me ... Have fun, -Rainer