atp-1.2// 755 1205 36 0 5713653460 5213 atp-1.2//Makefile 644 1205 36 1066 5715372023 6736 # Makefile for atp # 18 Jan 95 atp2 v1.2 # CC=acc CC=cc # CC=gcc #To compile under MSDOS you may have to add -DMSDOS here, e.g., under #TurboC++1.0 #LETTER_SIZE selects default US paper format. Remove this flag to select A4 CFLAGS=-DLETTER_SIZE -O3 BINDIR=/usr/local/bin MANDIR=/usr/local/man/man1 atp: atp.o width.o $(CC) $(CFLAGS) atp.o width.o -o atp atp.o: atp.c width.o: width.c install: atp cp atp ${BINDIR}/atp chmod 555 ${BINDIR}/atp cp atp.1 ${MANDIR}/atp.1 chmod 444 ${MANDIR}/atp.1 clean: rm -f core *.o atp # end Makefile for atp atp-1.2//atp.1 644 1205 36 15005 5715372022 6161 .TH ATP 1 "January 28, 1995" .SH NAME atp \- Convert an ASCII file to PostScript format for printing .SH SYNOPSIS .B atp [ .B \-BCghlNoprRsvVW ] [ .B \-c .I columns ] [ .B \-t .I tabsize ] [ .B \-f .I font ] [ .B \-F .I headingsFont ] [ .B \-cf .I commentsFont ] [ .B \-title .I Title ] [ .B \-date .I Date ] [ .B \-M .I Tm,Bm,Lm,Rm [cm|in] ] [ .B \-T .I papersize ] [ .B \-wm .I string [font] ] [ .B \-# .I copies ] [ .B \-fonts ] [ .B \-level1 ] [ .B \-postscript ] [ .I file... ] .SH DESCRIPTION .B atp reads in ASCII files and converts them to PostScript format. By default, it formats the output in two columns landscape mode in either an A4 or letter-size page, whichever was chosen by your system admin, with a 'fancy' header and using a 7 points Courier font. Fonts, paper sizes, headings and formatting options may be specified. The PostScript output is by default directed to standard output; if the .B \-o option is set the output is written in the file .IR filename.ps . If no input file is given, the input is read from the standard input. When working with C or C++ source files, as specified by the .B \-C option, .I atp applies different styles to different areas of code: the comments are printed using a different font (Courier-BoldItalic, by default), the preprocessor instructions are italicized and the the function definitions headers are highlighted. .B atp understands the nroff's bold and italic backspace conventions, and formats consequently his output. Formfeed (control-L) characters in the input file causes a new page or column to be started. PostScript files in input are transcribed on standard output, without translation, unless the .B \-postscript option is set. For example: .RS atp -Co source.c .RE writes a two columns landscape listing of the file source.c in the file source.c.ps, highlighting comments and function's headers. .RS atp -p file.txt | lpr .RE prints a copy of the file file.txt, in portrait mode, on the default printer used by lpr. The fonts may be modified (scaled, rotated and sheared) by means of a transformation matrix. .I Font specifications have three parts: -a font name, as known to PostScript (e.g.: Times-Roman, Courier-Bold) -a point size (1 point = 1/72 inch); a valid font size is any floating point value comprised between 5 and 50 points. -an (optional) transformation matrix, that consists of four floating point values, separated by a comma and preceded by a colon. For example, valid font specifications are: Courier-Bold9:1,0,0.25,1 Helvetica10.5 AvantGarde-Demi7.34:1.75,0,-0.4,.8 A PostScript transformation Matrix is stored as a vector of 6 elements: .B [a b c d e f] The matrix produces the transformation: x' = .B a x + .B c y + .B e y' = .B b x + .B d y + .B f Since the translation of the font characters is no use, only the first four values must be specified, whereas .B e and .B f are kept to 0. The default values of the matrix .B [a,b,c,d] are .B [1,0,0,1]. The widths of the characters is expanded if .I a>1 and reduced if .IR a<1 ; the characters height is expanded if .I d>1 and reduced if .IR d<1 . Modifying the values of .I b and .I c causes a rotation of the font. Keeping .I b=0 and modifying .I c causes a font .I shearing. Tabs in the input stream are expanded (by default) to eight character positions. .SH OPTIONS .TP .B \-o Direct the output to file .B filename.ps .TP .B \-p Print the output in portrait mode (the default is the landscape mode). .TP .B \-C Assume that the input file is a C or a C++ source, recognizes and highlights the comments and the function definition's headers. .TP .B \-c columns Specify the number of the columns in which each page is subdivided. .TP .B \-B Turn off page headings. .TP .B \-title Title Print the text specified by .I Title as the title on each page, rather than the filename. .TP .B \-date Date Print the text specified by .I Date as the date on each page, rather than the current. Only the first 12 characters of Date are used. .TP .B \-f font Set the font to be used for the body of each page. The default is Courier7 in landscape mode, Courier10 in portrait mode, and Courier7:.83,0,0,1 if the -C option is set. .TP .B \-F headingFont Set the font to be used for the page headings. Defaults to Helvetica-Bold16. .TP .B \-cf commentFont Set the font to be used for emphasize the comments in a C source (when the -C option is specified). Defaults to Courier-BoldItalic7. .TP .B \-M Tm,Bm,Lm,Rm [cm|in] Set Top,Bottom,Left,Right margins. Their length is specified in points (1 point = 1/72 inch), unless the suffix .I cm or .I in are used. .TP .B \-g Disable the 'gaudy mode': don't paint the shaded frames in the headings. .TP .B \-s Turn off the shading of the headings .TP .B \-T papersize Set the output paper type as per the argument. The following paper sizes are recognized by atp: .I A3, .I A4, .I A5, .I B4, .I B5, .I Executive, .I Folio, .I Ledger, .I Legal, .I Letter, .I Quarto, .I Statement, .I Tabloid, .I 10x14. .TP .B \-N Precede each line with it's line number relative to the start of the file. .TP .B \-t tabsize Sets the number of columns to which tabs are expanded. The default is eight columns. .TP .B \-h Print usage message. .TP .B \-v or \-V Display information identifying the version of .IR atp . Nothing will be printed regardless of the other arguments. .TP .B \-r or \-R Wrap the text on the .I space character preceding the right margin. .TP .B \-W Truncate lines which are wide for the page. .TP .B \-l Simulate a line printer: make pages 66 lines long and omit headers. (Useful to print manual pages). .TP .B \-wm string [Font] Print the watermark .I "string" on each page, using the font .I Font or Times-BoldItalic, by default. .TP .B \-# copies Print each page .I copies times. .TP .B \-fonts List the fonts recognized by .IR atp . .TP .B \-level1 (or -l1) Generate a PostScript output suitable for a PostScript level 1 printer. With this option, the ASCII file must contain only 7-bit characters. By default, .I atp recognizes 8-bit characters and produces a level 2 PostScript program. .TP .B \-postscript Do not pass through PostScript files. .SH SEE ALSO lpr(1), lpq(1), lprm(1) .SH BUGS If a font is specified that is not available on the printer, the result is undetermined. No checking is performed on the input file to detect accidental printing of garbage files. .SH AUTHOR Paolo Severini - lendl@dist.dist.unige.it (MSDOS support by Kenneth H. Carpenter - khc@eece.ksu.edu; preprocessor papersize option and -date switch by Gabor J. Toth - jtoth@princeton.edu) input is read from the standard input. When working with C or C++ source files, as specified by the .B \-C option, .I atp applies different styles to different areas of code: the comments are printed using a different font (Courier-BoldItalic, by default), the preprocessor instructions are italicized and the the function definitions headers are highlighted. .B atp understands the nroff's bold and italic backspace conventions, and formats consequently his output. Formfeed (control-L) characters in tatp-1.2//atp.c 644 1205 36 102630 5715372022 6264 /* * atp.c v1.2 - February 1, 1995 * * Ascii to Postscript converter * * Copyright (C) 1995 Paolo Severini {lendl@dist.dist.unige.it} * * Permission to use and modify this software and its * documentation for any purpose other than its incorporation * into a commercial product is hereby granted without fee. * Permission to copy and distribute this software and its * documentation only for non-commercial use is also granted * without fee, provided, however, that the above copyright * notice appear in all copies, that both that copyright notice * and this permission notice appear in supporting documentation. * The author makes no representations about the suitability * of this software for any purpose. It is provided ``as is'', * without express or implied warranty. */ #include #include #include #include #define ROMAN 0 #define ITALIC 1 #define BOLD 2 #define COMMENT 3 #define PREPROC 1 #ifdef MSDOS #define BUF_DIM 64000 #else #define BUF_DIM 128000 #endif /* list of standard paper sizes from Adobe's PPD. */ typedef struct documentmedia { char *name; short width, height; } DocumentMedia; DocumentMedia papersizes[] = { "Letter", 612, 792, "letter", 612, 792, "LetterSmall", 612, 792, "Tabloid", 792, 1224, "Ledger", 1224, 792, "Legal", 612, 1008, "Statement", 396, 612, "Executive", 540, 720, "A3", 842, 1190, "a3", 842, 1190, "A4", 595, 842, "a4", 595, 842, "A4Small", 595, 842, "A5", 420, 595, "a5", 420, 595, "B4", 729, 1032, "b4", 729, 1032, "B5", 516, 729, "b5", 516, 729, "Folio", 612, 936, "Quarto", 610, 780, "10x14", 720, 1008, NULL, 0, 0 }; char *Version="atp v1.2 - February 1, 1995"; FILE *fout; extern char *font_names[20]; extern short font_widths[16][256]; /* from widths.c */ long LeftFrameWidth, /* length of the date frame */ RightFrameWidth, /* length of the page-number frame */ FrameHeight, Widths[4][256], /* widths of the characters of the fonts roman, italic, bold and for the font used for the C remarks */ PageWidth=0, PageHeight, TextWidth, TextHeight, STARTY, /* Y of the first line */ ENDY, /* Y of the last line */ MaxLength, /* length of a line */ Xpos, /* current X position */ Xgap, /* space between two colums */ XleftFrame, /* X of the date frame, and of the 1st column */ FontDim=700, /* default size for text (7pts) */ /* v1.1b -- changed from 8pts */ TitleDim=1600, /* default size for page headings */ TitleY, /* Y of page headings */ x, y, xw, yw, line_number=1, m_top, /* Margins */ m_bottom, m_left, m_right; short LandscapeMode=1, /* 0: portrait 1: landscape */ Decy, /* space between two lines */ opengraph=0, /* number of left braces opened */ comment=0, /* 1 within a C remark */ chardef=0, string=0, /* 1 within a C string */ outfile=0, /* if 1 write the output in a file */ Cmode=0, /* if 1 the input is considered a C source */ Columns=0, /* number of columns to print with */ TabSize=8, Ncopies=1, /* number of copies of each page */ NumberMode=0, /* if 1 enable line number printing */ TruncateMode=0, /* if 1 truncate long lines */ Print_Postscript=0, /* if 1 do not pass through PostScript files */ is_a_postscript_file=0, Modify_Matrix=0, /* if 1 the font is modified by a transformation matrix */ Level1=0, /* if 1 the output is in Postscript Level 1 format */ Modify_comm_matrix=0, HeaderMode=1, /* if 1 print the header */ FancyMode=1, /* if 1 paint the frames under title, date e page number */ ShadowMode=1, /* if 1 paint a shadow around the header chars */ ManualPageMode=0, RaggedMode=0, WatermarkMode=0, wm=ROMAN, /* font type used to print the current char: */ oldwm=-1, /* ROMAN, BOLD, COMMENT... */ n_file=0, /* # of input files translated */ cut_lines=0, /* # of lines cutted */ newpage=0, column=0, page=1, endpage=0, ic=0, /* count 0...TabSize-1 */ startline=1, /* 1 when a '\n' is found */ newline=1, /* 1 if a '\n' is found or the line is folded */ doc_pages=0; /* transformation matrices, in Postscript format */ float slim_matrix[4]={0.83, 0.0, 0.0, 1.0}, normal_matrix[4]={1,0,0,1}, title_matrix[4]={1,0,0,1}, Matrix[4]={1,0,0,1}, comment_matrix[4]={0.83,0,0,1}; char *font_wm[4]={"Rf","If","Bf","Cm"}, fontname[4][64], wm_font[256], titlefont[64], title[512], wm_string[512], date_s[16], datestr[32], file_in[128]; #ifdef MSDOS char *bs,*ms; /*to be malloc'ed*/ #else unsigned char bs[BUF_DIM]; /* buffer for the char read from the input stream */ char ms[BUF_DIM]; /* font type with which each char is printed (ROMAN, BOLD...) */ #endif long is=0; /* current position in bs[] and ms[] */ /* Forward declarations if in ANSI mode */ #ifdef _STDC_ void print_prolog(); void print_end(); void print_ps_matrix(float *); void manage_8bit(); void start_page(); void print_string(unsigned char *); void outs(unsigned char*, short); void empty_buffer(short); void look_for_header(); void translate_file(FILE *); void usage(); void error_s(char *); long width(char *, char *, long, float *); short font_id(char *); long select_font(char *, char *, float *); void prepare_fonts(char *); #endif /* Print a postscript matrix (the last two values are always 0,0) */ void print_ps_matrix(m) float *m; { short i; fputc('[',fout); for (i=0;i<4;i++) fprintf(fout,"%.2f ",m[i]); fprintf(fout,"0 0]"); return; } /* Change the Encoding vector of the fonts, for handle 8 bit characters, using the level2 procedure 'ISOLatinEncoding'. */ void manage_8bit() { if (Level1) { fprintf(fout,"/ChgFnt { pop findfont exch makefont exch scalefont setfont } def\n"); return; } fprintf(fout," %% change fonts using ISO Latin1 characters\n"); fprintf(fout,"/ChgFnt\n"); fprintf(fout,"{ dup FontDirectory exch known\n"); fprintf(fout," { exch pop }\n"); fprintf(fout," { dup 3 2 roll ReEncode } ifelse\n"); fprintf(fout," findfont exch makefont exch scalefont setfont\n"); fprintf(fout,"} def\n"); fprintf(fout,"/ReEncode {\n"); fprintf(fout,"findfont dup length dict begin\n"); fprintf(fout," { 1 index /FID ne {def} {pop pop} ifelse } forall\n"); fprintf(fout," /Encoding ISOLatin1Encoding def\n"); fprintf(fout," currentdict end definefont pop\n"); fprintf(fout,"} def\n"); return; } /* Write a string in PostScript format */ void print_string(s) unsigned char *s; { unsigned char c; fputc('(',fout); while ((c=(unsigned char)*s++)) if (c>=160 && !Level1) fprintf(fout,"\\%3o",c); else if (c==')' || c=='(' || c=='\\') { fputc('\\',fout); fputc(c,fout); } else fputc(c,fout); fputc(')',fout); } /* Print a postscript prolog, with the postscript procedures utilized for select the fonts, painting the frame, shadowing and underlining the characters, and so on. */ void print_prolog() { long cx,FrameLength,right; long ytitle,ydate,ypagn; float mat[4],cosf; short j; doc_pages=0; /* Arrange the position of the header frames */ right=PageWidth-m_right-RightFrameWidth; cx=m_left+(PageWidth-m_right-m_left)/2; FrameLength=right-LeftFrameWidth-XleftFrame; if (FrameLength<0) FrameLength=0; ytitle=TitleY+100+TitleDim/5.5; ydate=TitleY+90+TitleDim/5.5; ypagn=TitleY+40+TitleDim/5.5; fprintf(fout,"%%!PS-Adobe-%.1f\n%%Creator: %s\n",(Level1 ? 1.0:2.0),Version); fprintf(fout,"%%%%CreationDate: %s",datestr); fprintf(fout,"%%%%Orientation: %s\n",LandscapeMode ? "Landscape":"Portrait"); fprintf(fout,"%%%%Pages: (atend)\n"); fprintf(fout,"%%%%PageOrder: Ascend\n"); fprintf(fout,"%%%%Title: %s\n",title); fprintf(fout,"%%%%DocumentFonts: %s %s %s %s ",fontname[ROMAN], fontname[ITALIC],fontname[BOLD],titlefont); fprintf(fout,"%s \n", (Cmode ? fontname[COMMENT]:"")); fprintf(fout,"%%%%EndComments\n\n"); fprintf(fout,"/Centre { dup stringwidth pop 2 div neg 0 rmoveto } def\n"); manage_8bit(); /* PostScript procedures: /Rf, /If, /Bf, /Cm select the fonts for the normal, italic, bold text and for the C comments */ if (Cmode) { fprintf(fout,"/Cm { %ld ",FontDim); print_ps_matrix(comment_matrix); fprintf(fout," /%s /%s-Latin1 ChgFnt } def\n",fontname[COMMENT],fontname[COMMENT]); } for (j=ROMAN;j<=BOLD;j++) { fprintf(fout,"/%s { %ld ",font_wm[j],FontDim); print_ps_matrix(Matrix); fprintf(fout," /%s /%s-Latin1 ChgFnt } def\n",fontname[j],fontname[j]); } /* /Gpnf, /Titlef, /Datef select the fonts for the heading (page number,title and date) /Gl paints the left frame, /Gr paints the right frame, /Gm paints the central frame, /Header paints the three frames in the appropriate gray shade */ if (HeaderMode) { for (j=0;j<4;j++) mat[j]=title_matrix[j]; fprintf(fout,"/Gpnf { %ld ",TitleDim-150); print_ps_matrix(mat); fprintf(fout," /%s /%s-Latin1 ChgFnt } def\n",titlefont,titlefont); fprintf(fout,"/Titlef { %ld ",TitleDim); print_ps_matrix(mat); fprintf(fout," /%s /%s-Latin1 ChgFnt } def\n",titlefont,titlefont); fprintf(fout,"/Datef { %ld ",TitleDim-300); mat[0]*=0.83; print_ps_matrix(mat); fprintf(fout," /%s /%s-Latin1 ChgFnt } def\n",titlefont,titlefont); if (FancyMode) { fprintf(fout,"/Gl { newpath moveto %ld 0 rlineto 0 %ld rlineto -%ld 0 rlineto fill } def\n", LeftFrameWidth,FrameHeight,LeftFrameWidth); fprintf(fout,"/Gr { newpath moveto %ld 0 rlineto 0 %ld rlineto -%ld 0 rlineto fill } def\n", RightFrameWidth,FrameHeight,RightFrameWidth); fprintf(fout,"/Gm { newpath moveto %ld 0 rlineto 0 %ld rlineto -%ld 0 rlineto fill } def\n", FrameLength,FrameHeight,FrameLength); fprintf(fout,"/Header { 0.80 setgray %ld %ld Gl %ld %ld Gr 0.93 setgray %ld %ld Gm } def\n", XleftFrame,TitleY,right,TitleY,XleftFrame+LeftFrameWidth,TitleY); } } /* (string) U : print and underline the string, x y h (string) x-200 y-200 Fr : print the string at (x,y) and paint around it a shaded frame of height h. */ fprintf(fout,"/U { currentpoint 3 -1 roll dup stringwidth pop 0 currentpoint\n"); fprintf(fout," %ld sub newpath M rlineto stroke 3 1 roll M S} def\n",FontDim/9); fprintf(fout,"/M {moveto} def\n/S {show} def\n"); fprintf(fout,"/Fr { Bf newpath moveto 0.94 setgray dup stringwidth pop 350 add dup 0\n"); fprintf(fout," rlineto neg 3 2 roll 0 exch rlineto 0 rlineto fill 3 1 roll 0 setgray } def\n"); fprintf(fout,"/#copies %hd def\n",Ncopies); fprintf(fout,"initgraphics\n"); fprintf(fout,"1 100 div dup scale\n"); if (LandscapeMode) fprintf(fout,"90 rotate 0 -%ld translate\n",PageHeight); if (WatermarkMode) { cosf=((float)PageWidth)/PageHeight; fprintf(fout,"/Wmf { 1 [%.2f 1 -1 %.2f 0 0] ",cosf,cosf); fprintf(fout,"/%s /%s-Latin1 ChgFnt } def\n",wm_font,wm_font); fprintf(fout,"/Wm { gsave dup Wmf stringwidth %ld ",PageHeight); fprintf(fout,"exch div 0.7 mul dup currentfont exch\n\tscalefont setfont "); fprintf(fout,"%ld %ld M ",PageWidth/2,PageHeight/2); if (PageWidth>PageHeight) fprintf(fout,"2000 exch 2.5 div neg "); else fprintf(fout,"3.5 div -3500 "); fprintf(fout,"rmoveto pop dup\n"); fprintf(fout,"\tstringwidth 2 div neg\n\texch 2 div neg exch rmoveto 0.96 setgray"); fprintf(fout,"\n\tS grestore } def\n"); } fprintf(fout,"/StartPage { /SavedPage save def\n "); if (WatermarkMode) { print_string(wm_string); fprintf(fout," Wm\n"); } if (HeaderMode) { if (FancyMode) fprintf(fout," Header\n"); if (ShadowMode) { fprintf(fout," Datef 0 setgray %ld %ld M Centre dup S %ld %ld M Centre 1 setgray dup S\n", XleftFrame+LeftFrameWidth/2+120,ydate,XleftFrame+LeftFrameWidth/2,ydate+120); fprintf(fout," %ld %ld M Centre false charpath 0 setgray stroke\n",XleftFrame+LeftFrameWidth/2,ydate+120); fprintf(fout," Gpnf %ld %ld M Centre dup S %ld %ld M Centre 1 setgray dup S\n",right+RightFrameWidth/2+120,ypagn,right+RightFrameWidth/2,ypagn+120); fprintf(fout," %ld %ld M Centre false charpath 0 setgray stroke\n", right+RightFrameWidth/2,ypagn+120); fprintf(fout," Titlef %ld %ld M Centre dup S %ld %ld M Centre 1 setgray dup S\n",cx+120,ytitle,cx,ytitle+120); fprintf(fout," %ld %ld M Centre false charpath 0 setgray stroke\n",cx,ytitle+120); } else { fprintf(fout," Datef 0 setgray %ld %ld M Centre S\n",XleftFrame+LeftFrameWidth/2,ydate); fprintf(fout," Gpnf %ld %ld M Centre S\n",right+RightFrameWidth/2,ypagn); fprintf(fout," Titlef %ld %ld M Centre S\n",cx,ytitle); } } fprintf(fout," Rf 0 setgray } def\n"); fprintf(fout,"/EndPage { "); if (Columns==2) fprintf(fout,"1 setlinewidth %ld %ld M 0 -%ld rlineto stroke ",cx, STARTY+FontDim-350,TextHeight+400); fprintf(fout,"showpage SavedPage restore "); fprintf(fout,"} def\n%%EndProlog\n"); } /* End the postscript output */ void print_end() { if (!is_a_postscript_file) fprintf(fout,"%%%%Trailer\n%%%%Pages: %hd\n%%%%EOF\n",doc_pages); return; } /* Initiate a new page */ void start_page() { page=newpage; doc_pages++; fprintf(fout,"%%%%Page: %hd %hd\n",doc_pages,doc_pages); if (HeaderMode) fprintf(fout,"(%s) (%hd) (%s) ",title,page,date_s); fprintf(fout,"StartPage "); y=STARTY; x=xw=XleftFrame; yw=newpage=0; } /* Write a string in the postscript page, at the (xw,yw) coordinates. If mode=1 the string is the header of a function, and the function print it using the bold font, and within a frame */ void outs(s,mode) unsigned char *s; short mode; { short i=0; unsigned char *p; if (!*s) return; if (newpage) { start_page(); fprintf(fout,"%s ",font_wm[(oldwm=wm)]); } else if (wm!=oldwm) fprintf(fout,"%s ",font_wm[(oldwm=wm)]); p=s; if (y!=yw || mode) { while (*p==0x20) p++; /* skip the initial spaces */ if ((i=p-s)) { if (y!=yw) /* and move the X coordinate */ xw+=(Widths[ROMAN][0x20]*i)/1000L; else xw+=(Widths[wm][0x20]*i)/1000L; } if (!*p) /* if the string contains */ return; /* only spaces, exit */ yw=y; if (mode==0) /* else move the currentpoint */ fprintf(fout,"\n%ld %ld M ",xw,yw); } if (mode==0) { print_string(p); fputc(( (wm==ITALIC && !Cmode) ? 'U':'S'),fout); fputc(0x20,fout); } else /* print the string within a frame */ { s=p+strlen((char*)p)-1; i=0; while (*s==0x20) { i++; *s--='\0'; } fprintf(fout,"\n%ld %ld %ld ",xw,yw,FontDim+200); print_string(p); fprintf(fout," %ld %ld Fr M S Rf ",xw-200,yw-250); xw+=(Widths[BOLD][0x20]/1000L)*i; } while (*p) xw+=(Widths[wm][*p++]/1000L); /* update the X coordinate */ return; } /* Write in the Postscript output file the strings contained in the array bs[], using the font specified by the array ms[]. If mode=1 the strings are printed in bold and a shaded frame is painted around them */ void empty_buffer(mode) short mode; { long i, j, k, tmp, spos[768]; short c='\0'; unsigned char s[768]; char s2[16]; i=j=0; while (i1) { tmp=j-1; while (tmp>0 && s[tmp]!=0x20 && s[tmp]!='\t') tmp--; if (tmp) { /*s[tmp]='\0'; fprintf(fout,"\ni:%ld -> %ld j:%ld tmp:%ld s:(%s)",i,i-(j-tmp),j,tmp,s); */ i=spos[j=tmp]; } } s[j]='\0'; outs(s,((wm!=ROMAN)? 0:mode)); j=0; if ( (newline=((startline=(c=='\n')) || Xpos>=MaxLength)) || endpage ) { if (startline || endpage) { line_number++; i++; } else if (TruncateMode) { i++; while (i=0) { is=++i; empty_buffer(0); } else i=0; for (is=0;i=0;i--) ungetc(begin[i],fin); if (!strncmp(begin,PS_begin,4)) { is_a_postscript_file=1; while ((c=getc(fin))!=EOF) fputc(c,fout); return; } } if (!n_file || outfile) print_prolog(); line_number=startline=newline=newpage=page=1; Xpos=is=column=ic=endpage=0; wm=-1; if (Cmode) { while ((c=getc(fin))!=EOF) { if (c=='\r' || c==0x1a) continue; bs[is]=c; ms[is++]=nwm; if (c=='"' && !comment && !chardef) string^=1; else if (c==0x27 && !comment && !string) chardef^=1; else if (!string && !chardef) { if (c=='\n') { if (nwm==COMMENT && !(comment&=1)) nwm=ROMAN; else if (nwm==PREPROC && oldc!='\\') nwm=ROMAN; } else if (c=='*' && oldc=='/' && !comment) { nwm=COMMENT; comment|=1; if (is>1) ms[is-2]=nwm; ms[is-1]=nwm; } else if (c=='/' && oldc=='*' && comment&1) { nwm=ROMAN; comment=0; } else if (c=='/' && oldc=='/' && !comment) { nwm=COMMENT; comment|=2; if (is>1) ms[is-2]=nwm; ms[is-1]=nwm; } else if (!comment) { if (c=='#' && oldc=='\n') { nwm=PREPROC; ms[is-1]=nwm; } if (c=='{' && ++opengraph==1) look_for_header(); else if (c=='}' && --opengraph==0) empty_buffer(0); } } oldc=c; } empty_buffer(0); } else { if ((oldc=getc(fin))==EOF) ungetc(oldc,fin); while ((c=getc(fin))!=EOF) { if (c=='\r' || c==0x1a) continue; else if (c==0x1b) { c=getc(fin); c='\n'; } else if (c==0x08) { do { c=getc(fin); if (c==oldc) nwm=BOLD; else if (oldc=='_') nwm=ITALIC; oldc=c; c=getc(fin); } while (c==0x08); } else nwm=ROMAN; bs[is]=oldc; oldc=c; ms[is++]=nwm; if (is>=BUF_DIM) empty_buffer(0); } bs[is]=oldc; ms[is++]=ROMAN; empty_buffer(0); } if (yw||column) fprintf(fout,"\nEndPage\n"); if (TruncateMode && cut_lines) fprintf(stderr,"Warning: file %s: %hd lines cutted\n",file_in,cut_lines); } /* Print the usage message */ void usage() { fprintf(stderr,"Usage: atp [-BCghlNoprRsvVW] [-c columns] [-t tabsize] "); fprintf(stderr,"[-f font] [-F headings_font] [-cf comments_font] "); fprintf(stderr,"[-T papersize] [-title Title] [-date Date] "); fprintf(stderr,"[-M Tm,Bm,Lm,Rm [cm|in] ] [-wm string [font] ] [-# copies] "); fprintf(stderr,"[-fonts] [-level1] [-postscript] files...\n"); exit(-1); } /* Print an error message */ void error_s(s) char *s; { fprintf(stderr,"%s\n",s); exit(-1); } /* Return the position of the font 'name' in the array font_names[] or -1 if the font is unknown */ short font_id(name) char *name; { short i; for (i=0;strlen(font_names[i]);i++) if (!strcmp(font_names[i],name)) break; if (!strlen(font_names[i])) return -1; else return i; } /* Calculate the width of the string 's', printed in the font 'font' and dimension 'dim', and modified by the matrix 'm' Return the width, or -1 if the fontname is unknown */ long width (s,font,dim,m) char *s; char *font; long dim; float *m; { long wid=0; short id; if ((id=font_id(font))<0) return -1; if (!strncmp(font,"Courier",7)) wid=dim*.6*strlen(s); else { while (*s) wid+=font_widths[id][(short)*s++]; wid*=(dim*m[0]/1000.0); } return wid; } /* Manage the font selection: input: *p (string in the format Courier8:1,0,0,1 or Courier8.) output: *name=fontname (for instance, "Courier") *m=transformation matrix ([1,0,0,1]) return 100*font dimension (800) */ long select_font(p,name,m) char *p; char *name; float *m; { short i=0; char num[64]; long dim; while (*p && (*p<'0' || *p>'9')) name[i++]=*p++; name[i]='\0'; i=0; while (*p && *p!=':') num[i++]=*p++; num[i]='\0'; dim=100*atof(num); if (*p) if (sscanf(p+1,"%f,%f,%f,%f",&m[0],&m[1],&m[2],&m[3])!=4) error_s("Insert the matrix as 'n1,n2,n3,n4', ni = floating points number"); if ((i=font_id(name))<0) { fprintf(stderr,"Unknown fontname %s\n",name); exit (-1); } if (dim<500 || dim>5000) { fprintf(stderr,"Error: insert font as FontnameFontsize (i.e. Courier10,Helvetica-Bold8,...)\n"); fprintf(stderr,"Fontname must be a valid PostScript font name,\n"); fprintf(stderr,"Fontsize must be between 5 and 50\n"); exit(-1); } else return dim; } void prepare_fonts(font) char *font; { short i,j,bold,italic; for (i=0;strlen(font_names[i]);i++) if (!strcmp(font_names[i],font)) break; if (!strlen(font_names[i])) error_s("Invalid fontname"); bold= i ^ BOLD; italic= i ^ ITALIC; strcpy(fontname[ROMAN],font_names[i]); strcpy(fontname[ITALIC],font_names[italic]); strcpy(fontname[BOLD],font_names[bold]); if (!strncmp("Courier",font,7)) for (j=0;j<256;j++) Widths[ROMAN][j]=Widths[ITALIC][j]=Widths[BOLD][j]=FontDim*600L; else for (j=0;j<256;j++) { Widths[ROMAN][j]=FontDim*font_widths[i][j]; Widths[ITALIC][j]=FontDim*font_widths[italic][j]; Widths[BOLD][j]=FontDim*font_widths[bold][j]; } if (Cmode) { for (i=0;strlen(font_names[i]);i++) if (!strcmp(font_names[i],fontname[COMMENT])) break; if (!strlen(font_names[i])) error_s("Invalid fontname for comments"); if (!strncmp("Courier",fontname[COMMENT],7)) for (j=0;j<256;j++) Widths[COMMENT][j]=FontDim*600L; else for (j=0;j<256;j++) Widths[COMMENT][j]=FontDim*font_widths[i][j]; } /* appl. matrix transformation */ for (i=ROMAN;i<=BOLD;i++) for (j=0;j<256;j++) Widths[i][j]*=Matrix[0]; if (Cmode) for (j=0;j<256;j++) Widths[COMMENT][j]*=comment_matrix[0]; Decy=-1.096*FontDim*Matrix[3]; return; } int main(argc,argv) int argc; char *argv[]; { FILE *fin; time_t tim=time(NULL); char filename[128], textfont[128]; char *c, option[64]; short i, Mod_Margins=0; long tmp, mtop[2], mbottom[2], mleft[2], mright[2]; float mt,mb,ml,mr,mmul; mtop[0]=2200; mtop[1]=1800; /* default margins for Portrait */ mbottom[0]=4800; mbottom[1]=4300; /* and Landscape mode */ mleft[0]=5200; mleft[1]=3600; mright[0]=3600; mright[1]=3600; #ifdef MSDOS bs = ( unsigned char *)malloc(BUF_DIM); ms = (char *)malloc(BUF_DIM); if(!bs || !ms){ fprintf(stderr,"Memory allocation failure\n"); exit(-2); } #endif strcpy(datestr,ctime(&tim)); strcpy(title,""); for(i=0;i<12;i++) { date_s[i]=datestr[i+4]; } if (date_s[4]==' ') { date_s[4]=date_s[5]; date_s[5]=' '; } date_s[i]='\0'; strcpy(wm_font,"Times-BoldItalic"); strcpy(textfont,"Courier"); strcpy(titlefont,"Helvetica-Bold"); strcpy(fontname[COMMENT],"Courier-BoldItalic"); /* v1.1b -- changed from Palatino-Italic */ argv++; argc--; while (argc && **argv=='-') { argc--; strcpy(option,*argv++); if (!strcmp(option,"-level1") || !strcmp(option,"-l1")) Level1=1; else if (!strcmp(option,"-fonts")) { for (i=0;strlen(font_names[i]);i+=2) fprintf(stderr,"%-28s %-28s\n",font_names[i],font_names[i+1]); exit(0); } else if (!strcmp(option,"-title")) { argc--; strcpy(title,*argv++); } else if (!strcmp(option, "-date")) /* v1.1b -- added */ { argc--; strncpy(date_s, *argv++, 12); } else if (!strcmp(option,"-#")) { argc--; Ncopies=atoi(*argv++); if (Ncopies<1) { fprintf(stderr,"Wrong ncopies\n"); usage(); } } else if (!strcmp(option,"-postscript")) Print_Postscript=1; else if (!strcmp(option,"-cf")) { select_font(*argv,fontname[COMMENT],comment_matrix); if (strchr(*argv,':')) Modify_comm_matrix=1; else for (i=0;i<4;i++) comment_matrix[i]=normal_matrix[i]; argc--; argv++; } else if (!strcmp(option,"-wm")) { if (*argv) { if (strlen(*argv)<=3) sprintf(wm_string," %s ",*argv); else strcpy(wm_string,*argv); WatermarkMode=1; argc--; argv++; if (*argv && ((i=font_id(*argv)) >=0) ) { strcpy(wm_font,font_names[i]); argc--; argv++; } } else error_s("Expecting string after -wm"); } else { c=option; while (*(++c)) { if (*c=='o') outfile=1; else if (*c=='p') { LandscapeMode=0; FontDim=1000; } else if (*c=='N') NumberMode=1; else if (*c=='s') ShadowMode=0; else if (*c=='W') TruncateMode=1; else if (*c=='B') HeaderMode=0; else if (*c=='g') FancyMode=0; else if (*c=='l') ManualPageMode=1; else if (*c=='r' || *c=='R') RaggedMode=1; else if (*c=='C') Cmode=1; else if (*c=='v' || *c=='V') error_s(Version); else { if (!*argv) usage(); else argc--; if (*c=='c') { Columns=atoi(*argv++); if (Columns<1 || Columns>8) error_s("Invalid columns number"); } else if (*c=='t') { TabSize=atoi(*argv++); if (TabSize<1 || TabSize>40) error_s("Wrong tabsize\n"); } else if (*c=='T') { for (i=0;papersizes[i].name;i++) if (!strcmp(*argv,papersizes[i].name)) break; PageHeight=100L*papersizes[i].height; PageWidth=100L*papersizes[i].width; argv++; } else if (*c=='M') { if (*argv && sscanf(*argv,"%f,%f,%f,%f",&mt,&mb,&ml,&mr)==4) { argv++; if (*argv && !strcmp(*argv,"in")) { mmul=7200; argv++; argc--; } else if (*argv && !strcmp(*argv,"cm")) { mmul=2834.64; argv++; argc--; } else mmul=100.0; m_top=mt*mmul; m_bottom=mb*mmul; m_left=ml*mmul; m_right=mr*mmul; Mod_Margins=1; } else error_s("Insert margins as 'top,bottom,left,right [cm | in]'"); } else if (*c=='f') { FontDim=select_font(*argv,textfont,Matrix); if (strchr(*argv,':')) Modify_Matrix=1; argv++; } else if (*c=='F') { TitleDim=select_font(*argv,titlefont,title_matrix); argv++; } else usage(); } } } } if (!Columns) Columns=(LandscapeMode) ? 2:1; if (RaggedMode) TruncateMode=0; if (!PageWidth) { #ifdef LETTER_SIZE /* v1.1b -- added choice */ PageWidth=61200; PageHeight=79200; #else PageWidth=59500; PageHeight=84200; #endif } if (LandscapeMode) { tmp=PageHeight; PageHeight=PageWidth; PageWidth=tmp; } if (ManualPageMode) { Columns= (LandscapeMode) ? 2:1; Modify_Matrix=1; HeaderMode=0; } if (!HeaderMode) TitleDim=FrameHeight=0; else { FrameHeight=1.15*TitleDim*title_matrix[3]; if (FrameHeight<1400) { TitleDim=1200; FrameHeight=1400; title_matrix[0]/=title_matrix[3]; title_matrix[3]=1.0; } } if (Cmode) TruncateMode=0; /* Set margins */ if (!Mod_Margins) { i= (PageWidth > PageHeight) ? 1:0; m_top=mtop[i]; m_bottom=mbottom[i]; m_left=mleft[i]; m_right=mright[i]; } ENDY=m_bottom; XleftFrame=m_left; Xgap=(PageWidth-7200)/19.25-200*(Columns-2); TextWidth=(PageWidth-m_left-m_right-Xgap*(Columns-1))/Columns; if (TextWidth < 5000) error_s("Wrong margins: text width too small !!!"); TitleY=PageHeight-FrameHeight-m_top; if (HeaderMode) STARTY=TitleY-((PageWidth > PageHeight) ? 1700:2200); else STARTY=PageHeight-m_top-1000; if ((TextHeight=STARTY-ENDY) <8000) error_s("Wrong margins: text height too small !!!"); MaxLength=1000*TextWidth; LeftFrameWidth=300+0.83*width(date_s,titlefont,TitleDim,title_matrix); if (LeftFrameWidth<7200) LeftFrameWidth=7200; RightFrameWidth=300+width("48",titlefont,TitleDim,title_matrix); if (RightFrameWidth<4800) RightFrameWidth=4800; if (ManualPageMode) FontDim=TextHeight/71.6; /* 66 lines per page: 71.6 ~ 65.3*1.096 */ if (!Modify_Matrix && Cmode && !strncmp(textfont,"Courier",7)) for (i=0;i<4;i++) Matrix[i]=slim_matrix[i]; else if (Cmode && Modify_Matrix && !Modify_comm_matrix) for (i=0;i<4;i++) comment_matrix[i]=Matrix[i]; prepare_fonts(textfont); if (!argc) /* read from standard input */ { fin=stdin; strcpy(file_in,"stdin"); if (outfile) { if (strlen(title)) sprintf(filename,"%s.ps",title); else sprintf(filename,"stdin.ps"); if ((fout=fopen(filename,"w"))==NULL) { fprintf(stderr,"Can't open the file %s\n",filename); return(1); } } else fout=stdout; translate_file(fin); print_end(); } else { if (!strlen(title)) strcpy(title,*argv); if (!outfile) fout=stdout; while (argc) /* read from input files */ { if ((fin=fopen(*argv,"rb"))==NULL) { fprintf(stderr,"Can't open the file %s\n",*argv); return(1); } strcpy(file_in,*argv); if (outfile) { sprintf(filename,"%s.ps",*argv); if ((fout=fopen(filename,"w"))==NULL) { fprintf(stderr,"Can't open the file %s\n",filename); return(1); } translate_file(fin); print_end(); } else translate_file(fin); argv++; if (--argc) strcpy(title,*argv); fclose(fin); if (outfile) fclose(fout); n_file++; } if (!outfile) print_end(); } return 0; } bs = ( unsigned char *)malloc(BUF_DIM); ms = (char *)malloc(BUF_DIM); if(!bs || !ms){ atp-1.2//copyright 644 1205 36 1444 5715372023 7231 /* * atp.c v1.2 - January 28, 1995 * * Ascii to Postscript translator * * Copyright (C) 1995 Paolo Severini {lendl@dist.dist.unige.it} * * Permission to use and modify this software and its * documentation for any purpose other than its incorporation * into a commercial product is hereby granted without fee. * Permission to copy and distribute this software and its * documentation only for non-commercial use is also granted * without fee, provided, however, that the above copyright * notice appear in all copies, that both that copyright notice * and this permission notice appear in supporting documentation. * The author makes no representations about the suitability * of this software for any purpose. It is provided ``as is'', * without express or implied warranty. */ { i= (PageWidth > PageHeight) ? 1:0; m_top=mtop[i]; m_bottom=mbottom[i]; m_left=mleft[i]; m_right=mright[i]; } ENDY=m_bottom; XleftFrame=m_left; Xgap=(PageWidth-7200)/19.25-atp-1.2//README 644 1205 36 5627 5715372047 6173 atp v1.2 README - February 1, 1995 This directory contains the sources for atp, an ASCII to Postscript converter. Features: --------- - Produces PostScript output conforms to the Document Structuring conventions. - Handles a 8 bit (ISO-Latin) character set - Support for normal or 'gaudy' output - Allows the selection of papersize, number of columns, margins, landscape or portrait mode. - Fold/cut long lines - Line numbering - Recognizes and uses a great number of fonts Special Features: ----------------- - Understands the nroff's bold and italic backspace conventions (that allows to print a file generated by 'man' preserving the highlighting of the italic and bold characters). - If the input file is a C or C++ source, atp recognizes the comments and the the headers of the function definitions, and highlights them using a different font for the comments and painting a shaded frame around the function headers. - It is possible to modify the fonts by means of a transformation matrix (see the man page for the details.). Installation: ------------- type 'gunzip atp-1.2.tar.gz' 'tar -xvf atp-1.2.tar' to create the directory /atp-1.2, modify the Makefile to select the default papersize, then type 'make' to compile. To compile under MSDOS, modify the Makefile adding the flag -DMSDOS. Changes since v1.1: ------------------ - Compile also under MSDOS. (Thanks to Kenneth H.Carpenter, khc@eece.ksu.edu) - Added preprocessor option to set A4 or letter-size as default. Added -date switch and modified default settings. (Thanks to Gabor J.Toth, jtoth@princeton.edu) - Added -M option to specify margins, -r option to wrap the text without breaking the words New Makefile. (Thanks to Arlin B. Collins) - Added -wm option to paint a 'watermark' string. (Thanks to Uwe Kempf) - Fixed more bugs... Changes since v1.0: ------------------ - Fixed some bugs. Now atp run also on SGI. - Rewritten the code to find the C function definitions headers. Now are highlighted also the function's headers that span multiple lines. - Removed all the error messages in Italian... :-) - Added the -l option to format the pages to 66 lines (useful for man pages). - Pass through postscript files. - Support c++ files (understand // comments). Bug reports: (Thanks a lot !!!) ------------ Ian Abbott, Thomas Kern, Tom Lowery, Peter Peters, Andreas Pleschutznig, Ric Steinberger, Gabor J.Toth, Kenneth H.Carpenter, Arlin B. Collins, Uwe Kempf, Philippe Cosentino, Pierre Didierjean, Wally Crapps, Rob Allan, Alain Caron. TODO: ----- - Utilize an 'atp.cfg' configuration file with preference options based on input file extensions. - Manage duplex printers. Distribution: ------------- This code is absolutely free (read the file 'copyright'). You are welcome to e-mail me comments and bug-reports. -- Paolo Severini lendl@dist.dist.unige.it cut long lines - Line numbering - Recognizes and uses a great number of fonts Special Features: -----atp-1.2//width.c 644 1205 36 131636 5715372022 6627 /* * width.c v1.2 - January 21, 1994 * * Ascii to Postscript translator * fonts widths extracted from the .afm files * * Copyright (C) 1995 Paolo Severini {lendl@dist.dist.unige.it} * * Permission to use and modify this software and its * documentation for any purpose other than its incorporation * into a commercial product is hereby granted without fee. * Permission to copy and distribute this software and its * documentation only for non-commercial use is also granted * without fee, provided, however, that the above copyright * notice appear in all copies, that both that copyright notice * and this permission notice appear in supporting documentation. * The author makes no representations about the suitability * of this software for any purpose. It is provided ``as is'', * without express or implied warranty. */ char *font_names[]={ "Helvetica", "Helvetica-Oblique", "Helvetica-Bold", "Helvetica-BoldOblique", "Times-Roman", "Times-Italic", "Times-Bold", "Times-BoldItalic", "Palatino-Roman","Palatino-Italic", "Palatino-Bold","Palatino-BoldItalic", "NewCenturySchlbk-Roman","NewCenturySchlbk-Italic", "NewCenturySchlbk-Bold","NewCenturySchlbk-BoldItalic", "CharterBT-Roman","CharterBT-Italic", "CharterBT-Bold","CharterBT-BoldItalic", "AvantGarde-Demi","AvantGarde-DemiOblique", "AvantGarde-Book","AvantGarde-BookOblique", "Bookman-Light","Bookman-LightItalic", "Bookman-Demi","Bookman-DemiItalic", "Utopia-Regular","Utopia-Italic", "Utopia-Bold","Utopia-BoldItalic", "Courier", "Courier-Italic", "Courier-Bold", "Courier-BoldItalic", "Courier", "Courier-Oblique", "Courier-Bold", "Courier-BoldOblique", "" }; short font_widths[][256]={ { /*Helvetica*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 278, 355, 556, 556, 889, 667, 222, 333, 333, 389, 584, 278, 584, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 222, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 333, 737, 333, 420, 584, 333, 333, 333, 333, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667,1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 584, 611, 556, 556, 556, 556, 500, 556, 500 }, { /*Helvetica-Oblique*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 278, 355, 556, 556, 889, 667, 222, 333, 333, 389, 584, 278, 584, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 222, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 333, 737, 333, 420, 584, 333, 333, 333, 333, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667,1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 584, 611, 556, 556, 556, 556, 500, 556, 500 }, { /*Helvetica-Bold*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 333, 474, 556, 556, 889, 722, 278, 333, 333, 389, 584, 278, 584, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 278, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 333, 737, 333, 420, 584, 333, 333, 333, 333, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722,1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 584, 611, 611, 611, 611, 611, 556, 611, 556 }, { /*Helvetica-BoldOblique*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 333, 474, 556, 556, 889, 722, 278, 333, 333, 389, 584, 278, 584, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 278, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 333, 737, 333, 420, 584, 333, 333, 333, 333, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722,1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 584, 611, 611, 611, 611, 611, 556, 611, 556 }, { /*Times-Roman*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 333, 408, 500, 500, 833, 778, 333, 333, 333, 500, 564, 250, 564, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278, 564, 564, 564, 444, 921, 722, 667, 667, 722, 611, 556, 722, 722, 333, 389, 722, 611, 889, 722, 722, 556, 722, 667, 556, 611, 722, 722, 944, 722, 722, 611, 333, 278, 333, 469, 500, 333, 444, 500, 444, 500, 444, 333, 500, 500, 278, 278, 500, 278, 778, 500, 500, 500, 500, 333, 389, 278, 500, 500, 722, 500, 500, 444, 480, 200, 480, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 500, 500, 500, 500, 200, 500, 333, 760, 276, 500, 564, 333, 760, 333, 420, 564, 300, 300, 333, 333, 453, 250, 333, 300, 310, 500, 750, 750, 750, 444, 722, 722, 722, 722, 722, 722, 889, 667, 611, 611, 611, 611, 333, 333, 333, 333, 722, 722, 722, 722, 722, 722, 722, 564, 722, 722, 722, 722, 722, 722, 556, 500, 444, 444, 444, 444, 444, 444, 667, 444, 444, 444, 444, 444, 278, 278, 278, 278, 500, 500, 500, 500, 500, 500, 500, 564, 500, 500, 500, 500, 500, 500, 500, 500 }, { /*Times-Italic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 333, 420, 500, 500, 833, 778, 333, 333, 333, 500, 675, 250, 675, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 675, 675, 675, 500, 920, 611, 611, 667, 722, 611, 611, 722, 722, 333, 444, 667, 556, 833, 667, 722, 611, 722, 611, 500, 556, 722, 611, 833, 611, 556, 556, 389, 278, 389, 422, 500, 333, 500, 500, 444, 500, 444, 278, 500, 500, 278, 278, 444, 278, 722, 500, 500, 500, 500, 389, 389, 278, 500, 444, 667, 444, 444, 389, 400, 275, 400, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 500, 500, 500, 500, 275, 500, 333, 760, 276, 500, 675, 333, 760, 333, 420, 675, 300, 300, 333, 333, 523, 250, 333, 300, 310, 500, 750, 750, 750, 500, 611, 611, 611, 611, 611, 611, 889, 667, 611, 611, 611, 611, 333, 333, 333, 333, 722, 667, 722, 722, 722, 722, 722, 675, 722, 722, 722, 722, 722, 556, 611, 500, 500, 500, 500, 500, 500, 500, 667, 444, 444, 444, 444, 444, 278, 278, 278, 278, 500, 500, 500, 500, 500, 500, 500, 675, 500, 500, 500, 500, 500, 444, 500, 444 }, { /*Times-Bold*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 333, 555, 500, 500,1000, 833, 333, 333, 333, 500, 570, 250, 570, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570, 570, 500, 930, 722, 667, 722, 722, 667, 611, 778, 778, 389, 500, 778, 667, 944, 722, 778, 611, 778, 722, 556, 667, 722, 722,1000, 722, 722, 667, 333, 278, 333, 581, 500, 333, 500, 556, 444, 556, 444, 333, 500, 556, 278, 333, 556, 278, 833, 556, 500, 556, 556, 444, 389, 333, 556, 500, 722, 500, 500, 444, 394, 220, 394, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 500, 500, 500, 500, 220, 500, 333, 747, 300, 500, 570, 333, 747, 333, 420, 570, 300, 300, 333, 333, 540, 250, 333, 300, 330, 500, 750, 750, 750, 500, 722, 722, 722, 722, 722, 722,1000, 722, 667, 667, 667, 667, 389, 389, 389, 389, 722, 722, 778, 778, 778, 778, 778, 570, 778, 722, 722, 722, 722, 722, 611, 556, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278, 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 500, 556, 500 }, { /*Times-BoldItalic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 389, 555, 500, 500, 833, 778, 333, 333, 333, 500, 570, 250, 570, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570, 570, 500, 832, 667, 667, 667, 722, 667, 667, 722, 778, 389, 500, 667, 611, 889, 722, 722, 611, 722, 667, 556, 611, 722, 667, 889, 667, 611, 611, 333, 278, 333, 570, 500, 333, 500, 500, 444, 500, 444, 333, 500, 556, 278, 278, 500, 278, 778, 556, 500, 500, 500, 389, 389, 278, 556, 444, 667, 500, 444, 389, 348, 220, 348, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 500, 500, 500, 500, 220, 500, 333, 747, 266, 500, 606, 333, 747, 333, 420, 570, 300, 300, 333, 333, 500, 250, 333, 300, 300, 500, 750, 750, 750, 500, 667, 667, 667, 667, 667, 667, 944, 667, 667, 667, 667, 667, 389, 389, 389, 389, 722, 722, 722, 722, 722, 722, 722, 570, 722, 722, 722, 722, 722, 611, 611, 500, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278, 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 444, 500, 444 }, { /*Palatino-Roman*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 278, 371, 500, 500, 840, 778, 278, 333, 333, 389, 606, 250, 606, 250, 606, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 250, 250, 606, 606, 606, 444, 747, 778, 611, 709, 774, 611, 556, 763, 832, 337, 333, 726, 611, 946, 831, 786, 604, 786, 668, 525, 613, 778, 722,1000, 667, 667, 667, 333, 606, 333, 606, 500, 278, 500, 553, 444, 611, 479, 333, 556, 582, 291, 234, 556, 291, 883, 582, 546, 601, 560, 395, 424, 326, 603, 565, 834, 516, 556, 500, 333, 606, 333, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 500, 500, 500, 500, 606, 500, 333, 747, 333, 500, 606, 333, 747, 333, 400, 606, 300, 300, 333, 603, 628, 250, 333, 300, 333, 500, 750, 750, 750, 444, 778, 778, 778, 778, 778, 778, 944, 709, 611, 611, 611, 611, 337, 337, 337, 337, 774, 831, 786, 786, 786, 786, 786, 606, 833, 778, 778, 778, 778, 667, 604, 556, 500, 500, 500, 500, 500, 500, 758, 444, 479, 479, 479, 479, 287, 287, 287, 287, 546, 582, 546, 546, 546, 546, 546, 606, 556, 603, 603, 603, 603, 556, 601, 556 }, { /*Palatino-Italic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 333, 500, 500, 500, 889, 778, 278, 333, 333, 389, 606, 250, 606, 250, 296, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 250, 250, 606, 606, 606, 500, 747, 722, 611, 667, 778, 611, 556, 722, 778, 333, 333, 667, 556, 944, 778, 778, 611, 778, 667, 556, 611, 778, 722, 944, 722, 667, 667, 333, 606, 333, 606, 500, 278, 444, 463, 407, 500, 389, 278, 500, 500, 278, 278, 444, 278, 778, 556, 444, 500, 463, 389, 389, 333, 556, 500, 722, 500, 500, 444, 333, 606, 333, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 500, 500, 500, 500, 606, 500, 333, 747, 333, 500, 606, 333, 747, 333, 400, 606, 300, 300, 333, 556, 500, 250, 333, 300, 333, 500, 750, 750, 750, 500, 722, 722, 722, 722, 722, 722, 941, 667, 611, 611, 611, 611, 333, 333, 333, 333, 778, 778, 778, 778, 778, 778, 778, 606, 778, 778, 778, 778, 778, 667, 611, 500, 444, 444, 444, 444, 444, 444, 638, 407, 389, 389, 389, 389, 278, 278, 278, 278, 444, 556, 444, 444, 444, 444, 444, 606, 444, 556, 556, 556, 556, 500, 500, 500 }, { /*Palatino-Bold*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 278, 402, 500, 500, 889, 833, 278, 333, 333, 444, 606, 250, 606, 250, 296, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 250, 250, 606, 606, 606, 444, 747, 778, 667, 722, 833, 611, 556, 833, 833, 389, 389, 778, 611,1000, 833, 833, 611, 833, 722, 611, 667, 778, 778,1000, 667, 667, 667, 333, 606, 333, 606, 500, 278, 500, 611, 444, 611, 500, 389, 556, 611, 333, 333, 611, 333, 889, 611, 556, 611, 611, 389, 444, 333, 611, 556, 833, 500, 556, 500, 310, 606, 310, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 500, 500, 500, 500, 606, 500, 333, 747, 438, 500, 606, 333, 747, 333, 400, 606, 300, 300, 333, 611, 641, 250, 333, 300, 488, 500, 750, 750, 750, 444, 778, 778, 778, 778, 778, 778,1000, 722, 611, 611, 611, 611, 389, 389, 389, 389, 833, 833, 833, 833, 833, 833, 833, 606, 833, 778, 778, 778, 778, 667, 611, 611, 500, 500, 500, 500, 500, 500, 778, 444, 500, 500, 500, 500, 333, 333, 333, 333, 556, 611, 556, 556, 556, 556, 556, 606, 556, 611, 611, 611, 611, 556, 611, 556 }, { /*Palatino-BoldItalic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 333, 500, 500, 500, 889, 833, 278, 333, 333, 444, 606, 250, 606, 250, 315, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 250, 250, 606, 606, 606, 444, 833, 722, 667, 685, 778, 611, 556, 778, 778, 389, 389, 722, 611, 944, 778, 833, 667, 833, 722, 556, 611, 778, 667,1000, 722, 611, 667, 333, 606, 333, 606, 500, 278, 556, 537, 444, 556, 444, 333, 500, 556, 333, 333, 556, 333, 833, 556, 556, 556, 537, 389, 444, 389, 556, 556, 833, 500, 556, 500, 333, 606, 333, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 500, 500, 500, 500, 606, 556, 333, 747, 333, 500, 606, 389, 747, 333, 400, 606, 300, 300, 333, 556, 556, 250, 333, 300, 333, 500, 750, 750, 750, 444, 722, 722, 722, 722, 722, 722, 944, 685, 611, 611, 611, 611, 389, 389, 389, 389, 778, 778, 833, 833, 833, 833, 833, 606, 833, 778, 778, 778, 778, 611, 667, 556, 556, 556, 556, 556, 556, 556, 738, 444, 444, 444, 444, 444, 333, 333, 333, 333, 556, 556, 556, 556, 556, 556, 556, 606, 556, 556, 556, 556, 556, 556, 556, 556 }, { /*NewCenturySchlbk-Roman*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 296, 389, 556, 556, 833, 815, 204, 333, 333, 500, 606, 278, 606, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 606, 606, 606, 444, 737, 722, 722, 722, 778, 722, 667, 778, 833, 407, 556, 778, 667, 944, 815, 778, 667, 778, 722, 630, 667, 815, 722, 981, 704, 704, 611, 333, 606, 333, 606, 500, 204, 556, 556, 444, 574, 500, 333, 537, 611, 315, 296, 593, 315, 889, 611, 500, 574, 556, 444, 463, 389, 611, 537, 778, 537, 537, 481, 333, 606, 333, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 556, 556, 556, 556, 606, 500, 333, 737, 334, 426, 606, 333, 737, 333, 400, 606, 333, 333, 333, 611, 606, 278, 333, 333, 300, 426, 834, 834, 834, 444, 722, 722, 722, 722, 722, 722,1000, 722, 722, 722, 722, 722, 407, 407, 407, 407, 778, 815, 778, 778, 778, 778, 778, 606, 778, 815, 815, 815, 815, 704, 667, 574, 556, 556, 556, 556, 556, 556, 796, 444, 500, 500, 500, 500, 315, 315, 315, 315, 500, 611, 500, 500, 500, 500, 500, 606, 500, 611, 611, 611, 611, 537, 574, 537 }, { /*NewCenturySchlbk-Italic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 333, 400, 556, 556, 833, 852, 204, 333, 333, 500, 606, 278, 606, 278, 606, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 606, 606, 606, 444, 747, 704, 722, 722, 778, 722, 667, 778, 833, 407, 611, 741, 667, 944, 815, 778, 667, 778, 741, 667, 685, 815, 704, 926, 704, 685, 667, 333, 606, 333, 606, 500, 204, 574, 556, 444, 611, 444, 333, 537, 611, 333, 315, 556, 333, 889, 611, 500, 574, 556, 444, 444, 352, 611, 519, 778, 500, 500, 463, 333, 606, 333, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 556, 556, 556, 556, 606, 500, 333, 747, 422, 426, 606, 333, 747, 333, 400, 606, 333, 333, 333, 611, 650, 278, 333, 333, 372, 426, 834, 834, 834, 444, 704, 704, 704, 704, 704, 704, 870, 722, 722, 722, 722, 722, 407, 407, 407, 407, 778, 815, 778, 778, 778, 778, 778, 606, 778, 815, 815, 815, 815, 685, 667, 556, 574, 574, 574, 574, 574, 574, 722, 444, 444, 444, 444, 444, 333, 333, 333, 333, 500, 611, 500, 500, 500, 500, 500, 606, 500, 611, 611, 611, 611, 500, 574, 500 }, { /*NewCenturySchlbk-Bold*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 296, 333, 574, 574, 833, 852, 241, 389, 389, 500, 606, 278, 606, 278, 278, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 278, 278, 606, 606, 606, 500, 747, 759, 778, 778, 833, 759, 722, 833, 870, 444, 648, 815, 722, 981, 833, 833, 759, 833, 815, 667, 722, 833, 759, 981, 722, 722, 667, 389, 606, 389, 606, 500, 241, 611, 648, 556, 667, 574, 389, 611, 685, 370, 352, 667, 352, 963, 685, 611, 667, 648, 519, 500, 426, 685, 611, 889, 611, 611, 537, 389, 606, 389, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 574, 574, 574, 574, 606, 500, 333, 747, 367, 500, 606, 333, 747, 333, 400, 606, 344, 344, 333, 685, 747, 278, 333, 344, 367, 500, 861, 861, 861, 500, 759, 759, 759, 759, 759, 759, 981, 778, 759, 759, 759, 759, 444, 444, 444, 444, 833, 833, 833, 833, 833, 833, 833, 606, 833, 833, 833, 833, 833, 722, 759, 611, 611, 611, 611, 611, 611, 611, 870, 556, 574, 574, 574, 574, 370, 370, 370, 370, 611, 685, 611, 611, 611, 611, 611, 606, 611, 685, 685, 685, 685, 611, 667, 611 }, { /*NewCenturySchlbk-BoldItalic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 333, 400, 574, 574, 889, 889, 259, 407, 407, 500, 606, 287, 606, 287, 278, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 287, 287, 606, 606, 606, 481, 747, 741, 759, 759, 833, 741, 704, 815, 870, 444, 667, 778, 704, 944, 852, 833, 741, 833, 796, 685, 722, 833, 741, 944, 741, 704, 704, 407, 606, 407, 606, 500, 259, 667, 611, 537, 667, 519, 389, 611, 685, 389, 370, 648, 389, 944, 685, 574, 648, 630, 519, 481, 407, 685, 556, 833, 574, 519, 519, 407, 606, 407, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 574, 574, 574, 574, 606, 500, 333, 747, 412, 481, 606, 333, 747, 333, 400, 606, 344, 344, 333, 685, 650, 287, 333, 344, 356, 481, 861, 861, 861, 481, 741, 741, 741, 741, 741, 741, 889, 759, 741, 741, 741, 741, 444, 444, 444, 444, 833, 852, 833, 833, 833, 833, 833, 606, 833, 833, 833, 833, 833, 704, 741, 574, 667, 667, 667, 667, 667, 667, 815, 537, 519, 519, 519, 519, 389, 389, 389, 389, 574, 685, 574, 574, 574, 574, 574, 606, 574, 685, 685, 685, 685, 519, 648, 519 }, { /*CharterBT-Roman*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 338, 331, 745, 556, 852, 704, 201, 417, 417, 500, 833, 278, 833, 278, 481, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 319, 319, 833, 833, 833, 486, 942, 639, 604, 632, 693, 576, 537, 694, 738, 324, 444, 611, 520, 866, 713, 731, 558, 731, 646, 556, 597, 694, 618, 928, 600, 586, 586, 421, 481, 421,1000, 500, 201, 507, 539, 446, 565, 491, 321, 523, 564, 280, 266, 517, 282, 843, 568, 539, 551, 531, 382, 400, 334, 569, 494, 771, 503, 495, 468, 486, 500, 486, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 556, 556, 606, 556, 500, 500, 500, 900, 380, 442, 833, 319, 900, 500, 329, 833, 367, 367, 500, 547, 484, 278, 500, 367, 404, 442, 867, 867, 868, 486, 639, 639, 639, 639, 639, 639, 866, 632, 576, 576, 576, 576, 324, 324, 324, 324, 693, 713, 731, 731, 731, 731, 731, 833, 731, 694, 694, 694, 694, 586, 558, 609, 507, 507, 507, 507, 507, 507, 725, 446, 491, 491, 491, 491, 280, 280, 280, 280, 528, 568, 539, 539, 539, 539, 539, 833, 539, 569, 569, 569, 569, 495, 551, 495 }, { /*CharterBT-Italic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 338, 331, 745, 556, 852, 704, 201, 419, 419, 500, 833, 278, 833, 278, 481, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 319, 319, 833, 833, 833, 486, 942, 606, 588, 604, 671, 546, 509, 664, 712, 312, 447, 625, 498, 839, 683, 708, 542, 708, 602, 537, 565, 664, 590, 898, 569, 562, 556, 421, 481, 421,1000, 500, 201, 525, 507, 394, 523, 424, 292, 481, 551, 287, 269, 514, 275, 815, 556, 502, 516, 512, 398, 370, 333, 553, 454, 713, 477, 475, 440, 486, 500, 486, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 556, 556, 606, 556, 500, 500, 500, 900, 394, 442, 833, 319, 900, 500, 329, 833, 367, 367, 500, 547, 484, 278, 500, 367, 377, 442, 867, 867, 868, 486, 606, 606, 606, 606, 606, 606, 873, 604, 546, 546, 546, 546, 312, 312, 312, 312, 671, 683, 708, 708, 708, 708, 708, 833, 708, 664, 664, 664, 664, 562, 532, 574, 525, 525, 525, 525, 525, 525, 671, 394, 424, 424, 424, 424, 287, 287, 287, 287, 500, 556, 502, 502, 502, 502, 502, 833, 502, 553, 553, 553, 553, 475, 516, 475 }, { /*CharterBT-Bold*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 340, 339, 736, 581, 888, 741, 255, 428, 428, 500, 833, 289, 833, 289, 491, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 340, 340, 833, 833, 833, 487, 917, 651, 628, 638, 716, 596, 552, 710, 760, 354, 465, 650, 543, 883, 727, 752, 587, 752, 671, 568, 603, 705, 635, 946, 637, 610, 592, 443, 491, 443,1000, 500, 255, 544, 577, 476, 596, 524, 341, 551, 597, 305, 297, 553, 304, 892, 605, 577, 591, 575, 421, 447, 358, 600, 513, 799, 531, 515, 495, 493, 500, 493, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 581, 581, 606, 595, 500, 500, 500, 876, 408, 449, 833, 326, 876, 500, 329, 833, 383, 383, 500, 578, 491, 289, 500, 383, 433, 449, 899, 899, 899, 487, 651, 651, 651, 651, 651, 651, 890, 638, 596, 596, 596, 596, 354, 354, 354, 354, 716, 727, 752, 752, 752, 752, 752, 833, 752, 705, 705, 705, 705, 610, 587, 642, 544, 544, 544, 544, 544, 544, 768, 476, 524, 524, 524, 524, 305, 305, 305, 305, 569, 605, 577, 577, 577, 577, 577, 833, 577, 600, 600, 600, 600, 515, 591, 515 }, { /*CharterBT-BoldItalic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 340, 339, 751, 586, 898, 730, 261, 420, 420, 500, 833, 292, 833, 294, 481, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 346, 346, 833, 833, 833, 492, 936, 634, 628, 625, 702, 581, 539, 693, 747, 353, 474, 653, 529, 894, 712, 729, 581, 729, 645, 553, 584, 701, 617, 921, 608, 586, 572, 449, 481, 449,1000, 500, 261, 572, 556, 437, 579, 464, 325, 517, 595, 318, 297, 559, 307, 883, 600, 550, 565, 562, 449, 403, 366, 599, 492, 768, 510, 494, 465, 487, 500, 487, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 586, 586, 606, 601, 500, 500, 500, 894, 429, 450, 833, 320, 894, 500, 329, 833, 387, 387, 500, 578, 492, 292, 500, 387, 413, 450, 905, 905, 905, 492, 634, 634, 634, 634, 634, 634, 894, 625, 581, 581, 581, 581, 353, 353, 353, 353, 702, 712, 729, 729, 729, 729, 729, 833, 729, 701, 701, 701, 701, 586, 576, 622, 572, 572, 572, 572, 572, 572, 719, 437, 464, 464, 464, 464, 318, 318, 318, 318, 561, 600, 550, 550, 550, 550, 550, 833, 550, 599, 599, 599, 599, 494, 565, 494 }, { /*AvantGarde-Demi*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 280, 360, 560, 560, 860, 680, 280, 380, 380, 440, 600, 280, 600, 280, 460, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 280, 280, 600, 600, 600, 560, 740, 740, 580, 780, 700, 520, 480, 840, 680, 280, 480, 620, 440, 900, 740, 840, 560, 840, 580, 520, 420, 640, 700, 900, 680, 620, 500, 320, 640, 320, 600, 500, 280, 660, 660, 640, 660, 640, 280, 660, 600, 240, 260, 580, 240, 940, 600, 640, 660, 660, 320, 440, 300, 600, 560, 800, 560, 580, 460, 340, 600, 340, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 560, 560, 560, 560, 600, 560, 500, 740, 360, 460, 600, 420, 740, 420, 400, 600, 336, 336, 420, 576, 600, 280, 340, 336, 360, 460, 840, 840, 840, 560, 740, 740, 740, 740, 740, 740, 900, 780, 520, 520, 520, 520, 280, 280, 280, 280, 742, 740, 840, 840, 840, 840, 840, 600, 840, 640, 640, 640, 640, 620, 560, 600, 660, 660, 660, 660, 660, 660,1080, 640, 640, 640, 640, 640, 240, 240, 240, 240, 640, 600, 640, 640, 640, 640, 640, 600, 660, 600, 600, 600, 600, 580, 660, 580 }, { /*AvantGarde-DemiOblique*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 280, 360, 560, 560, 860, 680, 280, 380, 380, 440, 600, 280, 600, 280, 460, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 280, 280, 600, 600, 600, 560, 740, 740, 580, 780, 700, 520, 480, 840, 680, 280, 480, 620, 440, 900, 740, 840, 560, 840, 580, 520, 420, 640, 700, 900, 680, 620, 500, 320, 640, 320, 600, 500, 280, 660, 660, 640, 660, 640, 280, 660, 600, 240, 260, 580, 240, 940, 600, 640, 660, 660, 320, 440, 300, 600, 560, 800, 560, 580, 460, 340, 600, 340, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 560, 560, 560, 560, 600, 560, 500, 740, 360, 460, 600, 420, 740, 420, 400, 600, 336, 336, 420, 576, 600, 280, 340, 336, 360, 460, 840, 840, 840, 560, 740, 740, 740, 740, 740, 740, 900, 780, 520, 520, 520, 520, 280, 280, 280, 280, 742, 740, 840, 840, 840, 840, 840, 600, 840, 640, 640, 640, 640, 620, 560, 600, 660, 660, 660, 660, 660, 660,1080, 640, 640, 640, 640, 640, 240, 240, 240, 240, 640, 600, 640, 640, 640, 640, 640, 600, 660, 600, 600, 600, 600, 580, 660, 580 }, { /*AvantGarde-Book*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 295, 309, 554, 554, 775, 757, 351, 369, 369, 425, 606, 277, 606, 277, 437, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 277, 277, 606, 606, 606, 591, 867, 740, 574, 813, 744, 536, 485, 872, 683, 226, 482, 591, 462, 919, 740, 869, 592, 871, 607, 498, 426, 655, 702, 960, 609, 592, 480, 351, 605, 351, 606, 500, 351, 683, 682, 647, 685, 650, 314, 673, 610, 200, 203, 502, 200, 938, 610, 655, 682, 682, 301, 388, 339, 608, 554, 831, 480, 536, 425, 351, 672, 351, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 554, 554, 554, 554, 672, 615, 369, 747, 369, 425, 606, 332, 747, 485, 400, 606, 332, 332, 375, 608, 564, 277, 324, 332, 369, 425, 831, 831, 831, 591, 740, 740, 740, 740, 740, 740, 992, 813, 536, 536, 536, 536, 226, 226, 226, 226, 790, 740, 869, 869, 869, 869, 869, 606, 868, 655, 655, 655, 655, 592, 592, 554, 683, 683, 683, 683, 683, 683,1157, 647, 650, 650, 650, 650, 200, 200, 200, 200, 655, 610, 655, 655, 655, 655, 655, 606, 653, 608, 608, 608, 608, 536, 682, 536 }, { /*AvantGarde-BookOblique*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 295, 309, 554, 554, 775, 757, 351, 369, 369, 425, 606, 277, 606, 277, 437, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 277, 277, 606, 606, 606, 591, 867, 740, 574, 813, 744, 536, 485, 872, 683, 226, 482, 591, 462, 919, 740, 869, 592, 871, 607, 498, 426, 655, 702, 960, 609, 592, 480, 351, 605, 351, 606, 500, 351, 683, 682, 647, 685, 650, 314, 673, 610, 200, 203, 502, 200, 938, 610, 655, 682, 682, 301, 388, 339, 608, 554, 831, 480, 536, 425, 351, 672, 351, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 554, 554, 554, 554, 672, 615, 369, 747, 369, 425, 606, 332, 747, 485, 400, 606, 332, 332, 375, 608, 564, 277, 324, 332, 369, 425, 831, 831, 831, 591, 740, 740, 740, 740, 740, 740, 992, 813, 536, 536, 536, 536, 226, 226, 226, 226, 790, 740, 869, 869, 869, 869, 869, 606, 868, 655, 655, 655, 655, 592, 592, 554, 683, 683, 683, 683, 683, 683,1157, 647, 650, 650, 650, 650, 200, 200, 200, 200, 655, 610, 655, 655, 655, 655, 655, 606, 653, 608, 608, 608, 608, 536, 682, 536 }, { /*Bookman-Light*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 300, 380, 620, 620, 900, 800, 220, 300, 300, 440, 600, 320, 600, 320, 600, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 320, 320, 600, 600, 600, 540, 820, 680, 740, 740, 800, 720, 640, 800, 800, 340, 600, 720, 600, 920, 740, 800, 620, 820, 720, 660, 620, 780, 700, 960, 720, 640, 640, 300, 600, 300, 600, 500, 220, 580, 620, 520, 620, 520, 320, 540, 660, 300, 300, 620, 300, 940, 660, 560, 620, 580, 440, 520, 380, 680, 520, 780, 560, 540, 480, 280, 600, 280, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 620, 620, 620, 620, 600, 520, 420, 740, 420, 360, 600, 400, 740, 440, 400, 600, 372, 372, 340, 680, 600, 320, 320, 372, 420, 360, 930, 930, 930, 540, 680, 680, 680, 680, 680, 680,1260, 740, 720, 720, 720, 720, 340, 340, 340, 340, 800, 740, 800, 800, 800, 800, 800, 600, 800, 780, 780, 780, 780, 640, 620, 660, 580, 580, 580, 580, 580, 580, 860, 520, 520, 520, 520, 520, 300, 300, 300, 300, 560, 660, 560, 560, 560, 560, 560, 600, 560, 680, 680, 680, 680, 540, 620, 540 }, { /*Bookman-LightItalic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 320, 360, 620, 620, 800, 820, 280, 280, 280, 440, 600, 300, 600, 300, 600, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 300, 300, 600, 600, 600, 540, 780, 700, 720, 720, 740, 680, 620, 760, 800, 320, 560, 720, 580, 860, 720, 760, 600, 780, 700, 640, 600, 720, 680, 960, 700, 660, 580, 260, 600, 260, 600, 500, 280, 620, 600, 480, 640, 540, 340, 560, 620, 280, 280, 600, 280, 880, 620, 540, 600, 560, 400, 540, 340, 620, 540, 880, 540, 600, 520, 360, 600, 380, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 620, 620, 620, 620, 600, 620, 420, 740, 440, 300, 600, 320, 740, 440, 400, 600, 372, 372, 320, 620, 620, 300, 320, 372, 400, 300, 930, 930, 930, 540, 700, 700, 700, 700, 700, 700,1220, 720, 680, 680, 680, 680, 320, 320, 320, 320, 740, 720, 760, 760, 760, 760, 760, 600, 760, 720, 720, 720, 720, 660, 600, 620, 620, 620, 620, 620, 620, 620, 880, 480, 540, 540, 540, 540, 280, 280, 280, 280, 540, 620, 540, 540, 540, 540, 540, 600, 540, 620, 620, 620, 620, 600, 600, 600 }, { /*Bookman-Demi*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 360, 420, 660, 660, 940, 800, 320, 320, 320, 460, 600, 340, 600, 340, 600, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 340, 340, 600, 600, 600, 660, 820, 720, 720, 740, 780, 720, 680, 780, 820, 400, 640, 800, 640, 940, 740, 800, 660, 800, 780, 660, 700, 740, 720, 940, 780, 700, 640, 300, 600, 300, 600, 500, 320, 580, 600, 580, 640, 580, 380, 580, 680, 360, 340, 660, 340,1000, 680, 620, 640, 620, 460, 520, 460, 660, 600, 800, 600, 620, 560, 320, 600, 320, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 660, 660, 660, 660, 600, 600, 500, 740, 400, 400, 600, 360, 740, 460, 400, 600, 396, 396, 400, 660, 800, 340, 360, 396, 400, 400, 990, 990, 990, 660, 720, 720, 720, 720, 720, 720,1140, 740, 720, 720, 720, 720, 400, 400, 400, 400, 780, 740, 800, 800, 800, 800, 800, 600, 800, 740, 740, 740, 740, 700, 660, 660, 580, 580, 580, 580, 580, 580, 880, 580, 580, 580, 580, 580, 360, 360, 360, 360, 620, 680, 620, 620, 620, 620, 620, 600, 620, 660, 660, 660, 660, 620, 640, 620 }, { /*Bookman-DemiItalic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 320, 380, 680, 680, 880, 980, 320, 260, 260, 460, 600, 340, 600, 340, 360, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 340, 340, 620, 600, 620, 620, 780, 720, 720, 700, 760, 720, 660, 760, 800, 380, 620, 780, 640, 860, 740, 760, 640, 760, 740, 700, 700, 740, 660,1000, 740, 660, 680, 260, 580, 260, 620, 500, 320, 680, 600, 560, 680, 560, 420, 620, 700, 380, 320, 700, 380, 960, 680, 600, 660, 620, 500, 540, 440, 680, 540, 860, 620, 600, 560, 300, 620, 300, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 680, 680, 680, 680, 620, 620, 520, 780, 440, 380, 620, 280, 780, 480, 400, 600, 408, 408, 340, 680, 680, 340, 360, 408, 440, 380,1020,1020,1020, 620, 720, 720, 720, 720, 720, 720,1140, 700, 720, 720, 720, 720, 380, 380, 380, 380, 760, 740, 760, 760, 760, 760, 760, 600, 760, 740, 740, 740, 740, 660, 640, 660, 680, 680, 680, 680, 680, 680, 880, 560, 560, 560, 560, 560, 380, 380, 380, 380, 600, 680, 600, 600, 600, 600, 600, 600, 600, 680, 680, 680, 680, 600, 660, 600 }, { /*Utopia-Regular*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 242, 458, 530, 530, 838, 706, 278, 350, 350, 412, 570, 265, 570, 265, 460, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 265, 265, 570, 570, 570, 389, 793, 635, 646, 684, 779, 606, 580, 734, 798, 349, 350, 658, 568, 944, 780, 762, 600, 762, 644, 541, 621, 791, 634, 940, 624, 588, 610, 330, 460, 330, 570, 500, 278, 523, 598, 496, 598, 514, 319, 520, 607, 291, 280, 524, 279, 923, 619, 577, 608, 591, 389, 436, 344, 606, 504, 768, 486, 506, 480, 340, 228, 340, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 530, 530, 530, 530, 228, 554, 400, 818, 390, 442, 570, 400, 818, 400, 350, 570, 380, 380, 400, 606, 555, 265, 400, 380, 398, 442, 860, 860, 860, 389, 635, 635, 635, 635, 635, 627, 876, 680, 606, 606, 606, 606, 349, 349, 349, 349, 785, 780, 762, 762, 762, 762, 762, 570, 762, 791, 791, 791, 791, 588, 593, 601, 523, 523, 523, 523, 523, 523, 797, 496, 514, 514, 514, 514, 291, 291, 291, 291, 577, 619, 577, 577, 577, 577, 577, 570, 577, 606, 606, 606, 606, 506, 606, 506 }, { /*Utopia-Italic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 240, 402, 530, 530, 826, 725, 216, 350, 350, 412, 570, 265, 570, 265, 270, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 265, 265, 570, 570, 570, 425, 794, 624, 632, 661, 763, 596, 571, 709, 775, 345, 352, 650, 565, 920, 763, 753, 614, 753, 640, 533, 606, 794, 637, 946, 632, 591, 622, 330, 390, 330, 570, 500, 216, 561, 559, 441, 587, 453, 315, 499, 607, 317, 309, 545, 306, 912, 618, 537, 590, 559, 402, 389, 341, 618, 510, 785, 516, 468, 468, 340, 270, 340, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 530, 530, 530, 530, 270, 530, 400, 836, 425, 462, 570, 400, 836, 400, 400, 570, 370, 370, 400, 618, 560, 265, 400, 370, 389, 462, 890, 890, 890, 425, 624, 624, 624, 624, 624, 624, 880, 661, 596, 596, 596, 596, 345, 345, 345, 345, 770, 763, 753, 753, 753, 753, 753, 570, 753, 794, 794, 794, 794, 591, 604, 577, 561, 561, 561, 561, 561, 561, 779, 441, 453, 453, 453, 453, 317, 317, 317, 317, 537, 618, 537, 537, 537, 537, 537, 570, 537, 618, 618, 618, 618, 468, 584, 468 }, { /*Utopia-Bold*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 278, 473, 560, 560, 887, 748, 252, 365, 365, 442, 600, 280, 600, 280, 378, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 280, 280, 600, 600, 600, 456, 833, 644, 683, 689, 777, 629, 593, 726, 807, 384, 386, 707, 585, 918, 739, 768, 650, 768, 684, 561, 624, 786, 645, 933, 634, 617, 614, 335, 379, 335, 600, 500, 252, 544, 605, 494, 605, 519, 342, 533, 631, 316, 316, 582, 309, 948, 638, 585, 615, 597, 440, 446, 370, 629, 520, 774, 522, 524, 483, 365, 284, 365, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 560, 560, 560, 560, 284, 566, 430, 800, 405, 487, 600, 430, 800, 430, 396, 600, 402, 402, 430, 629, 552, 280, 430, 402, 427, 487, 900, 900, 900, 456, 644, 644, 644, 644, 644, 644, 879, 689, 629, 629, 629, 629, 384, 384, 384, 384, 783, 739, 768, 768, 768, 768, 768, 600, 768, 786, 786, 786, 786, 617, 640, 662, 544, 544, 544, 544, 544, 544, 806, 494, 519, 519, 519, 519, 316, 316, 316, 316, 585, 638, 585, 585, 585, 585, 585, 600, 585, 629, 629, 629, 629, 524, 609, 524 }, { /*Utopia-BoldItalic*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 285, 455, 560, 560, 896, 752, 246, 350, 350, 500, 600, 280, 600, 280, 260, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 280, 280, 600, 600, 600, 454, 828, 634, 680, 672, 774, 622, 585, 726, 800, 386, 388, 688, 586, 921, 741, 761, 660, 761, 681, 551, 616, 776, 630, 920, 630, 622, 618, 350, 460, 350, 600, 500, 246, 596, 586, 456, 609, 476, 348, 522, 629, 339, 333, 570, 327, 914, 635, 562, 606, 584, 440, 417, 359, 634, 518, 795, 516, 489, 466, 340, 265, 340, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 560, 560, 560, 560, 265, 568, 400, 824, 444, 560, 600, 400, 824, 400, 375, 600, 402, 402, 400, 634, 580, 280, 400, 402, 412, 560, 940, 940, 940, 454, 634, 634, 634, 634, 634, 634, 890, 672, 622, 622, 622, 622, 386, 386, 386, 386, 780, 741, 761, 761, 761, 761, 761, 600, 761, 776, 776, 776, 776, 622, 629, 628, 596, 596, 596, 596, 596, 596, 789, 456, 476, 476, 476, 476, 339, 339, 339, 339, 562, 635, 562, 562, 562, 562, 562, 600, 562, 634, 634, 634, 634, 489, 600, 489 } }; /*Bookman-Demi*/ 0, 0, 0, 0, 0, 0, 0, 0,56, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 584, 611, 611, 611, 611, 611, 556, 611, 556 }, { /*Helvetica-BoldOblique*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 333, 474, 556, 556, 889, 722, 278, 333, 333, 389, 584, 278, 584, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 278, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,