summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlpsv
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2008-05-04 18:23:09 +0000
committerNorbert Preining <preining@logic.at>2008-05-04 18:23:09 +0000
commit65f8f01e5ef4bc77d07c55af42eb640a60c7cb1b (patch)
tree0ebf952f218c2738d6bfc51681218afa9dd3f3f0 /Master/tlpkg/tlpsv
parentcc35786df18cbf01f1e4d2dc2e38dc762abfbaae (diff)
new package psview ... we have to discuss that ;-)
But most people in Bachotek were really impressed and did like it. Source is coming, too git-svn-id: svn://tug.org/texlive/trunk@7843 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlpsv')
-rw-r--r--Master/tlpkg/tlpsv/README86
-rw-r--r--Master/tlpkg/tlpsv/de/LC_MESSAGES/psv.mobin0 -> 12831 bytes
-rw-r--r--Master/tlpkg/tlpsv/en/LC_MESSAGES/psv.mobin0 -> 14616 bytes
-rwxr-xr-xMaster/tlpkg/tlpsv/gswxlua.exebin0 -> 1433088 bytes
-rw-r--r--Master/tlpkg/tlpsv/pl/LC_MESSAGES/psv.mobin0 -> 15324 bytes
-rw-r--r--Master/tlpkg/tlpsv/psv.bat1
-rw-r--r--Master/tlpkg/tlpsv/psv.desktop13
-rwxr-xr-xMaster/tlpkg/tlpsv/psv.exebin0 -> 24064 bytes
-rw-r--r--Master/tlpkg/tlpsv/psv.wx.lua2181
-rw-r--r--Master/tlpkg/tlpsv/psv_about.ps1336
-rw-r--r--Master/tlpkg/tlpsv/psv_about_pl.ps1330
-rw-r--r--Master/tlpkg/tlpsv/psv_usage.pdfbin0 -> 301999 bytes
-rw-r--r--Master/tlpkg/tlpsv/psv_usage_pl.pdfbin0 -> 198208 bytes
-rw-r--r--Master/tlpkg/tlpsv/psv_view.ps3988
14 files changed, 8935 insertions, 0 deletions
diff --git a/Master/tlpkg/tlpsv/README b/Master/tlpkg/tlpsv/README
new file mode 100644
index 00000000000..0a7c2bef7e1
--- /dev/null
+++ b/Master/tlpkg/tlpsv/README
@@ -0,0 +1,86 @@
+PS_View README
+
+This is PS_View (a previewing utility for Ghostscript interpreter)
+version 5.06. It is release candidat for BachoTeX -- now it is fully
+functional and needs through testing. It can be used as a basic
+PostScript viewer, but it still probably has bugs.
+
+It is written using wxWidgets, wxLua and wxGhostscript libriares.
+Curently, it works under Windows and Linux. It should work also
+under Mac OS X. It would be marvellous if the bold Mac OS X-ers
+could verify it.
+
+Sources needed to recompile the program are in a separate zip file
+(note that it doesn't contain the Lua and PostScript scripts needed
+to run the program).
+
+Package consists of:
+ README -- this file
+ gswxluas -- wxLuaGhostscript executable (ELF) file
+ gswxlua.exe -- wxLuaGhostscript executable (WIN32) file
+ mingwm10.dll -- minGW library needed by gswxlua.exe
+ psv.wx.lua -- wxLua part of PS_View program
+ psv_view.ps -- PostScript part of PS_View program
+ psv -- bash script for linux
+ psv.bat -- batch script for windows
+ psv.desktop -- info file for Xwindow users
+ psv.xpm -- icon for Xwindow
+ psv_about.ps -- about info file
+ psv_obsluga.pdf -- usage help file
+ pl/, de/, en/ -- locale messages
+
+Usage: psv[.bat] [Postscript/PDF file]
+ or
+Usage: gswxlua [-h|--help] [-c|--console] [-l|--lua] psv.wx.lua [options] [-p|--ps] psv_view.ps [-- [more options]]
+ -h, --help help on command line arguments;
+ -c, --console show message console;
+ -l, --lua wxLua script to construct application;
+ -q, --quiet turn off most of messages;
+ -v, --verbose turn on verbose/debug mode;
+ -n, --new open new window for document;
+ -g, --gsdll path to Ghostscript dll/so file;
+ -i, --gslib paths to Ghostscript init files;
+ -s, --gsset Ghostscript parameter (-s equivalent);
+ -d, --gsdef Ghostscript parameter (-d equivalent);
+ -p, --ps PostScript program to run;
+ -- all following argument will be passed to Ghostscript;
+
+Some paths are discovered automatically:
+
+1) first, all the relevant files are searched along the path given
+ in the command line (absolute or relative with respect to the
+ current directory)
+2) next, the files are searched in the directories defined in the config
+ file [TODO: editing of the config file]
+3) the Lua file is additionaly searched in the directory
+ where the executable file has been found
+3a) in turn, the PostScript file is searched in the directory
+ where the Lua file was found
+3b) if the search described in the points 3, 3a was needed, the resulting
+ path is added to the search path of the Ghostscript input files
+4) the Ghostscript library file (.dll or .so) is searched along the path
+ given in the command line (-g option)
+4a) then it is searched along the path defined by the GS_DLL environment
+ variable
+4b) if all attempts so far fail, the last resort in Unix is the
+ standard library directory (/usr/local/lib, /usr/lib) and in
+ Windows is the register key (HKEY_LOCAL_MACHINE/SOFTWARE/GPL_Ghostscript)
+4c) if the the Ghostscript library file was found in the points 2 or 4,
+ the subdirectory lib/ of the relevant Ghostscript tree is also added
+ to the search path of the Ghostscript input files
+
+Contact: BOP s.c., ul. T. Bora-Komorowskiego 24, 80-377 Gda\'nsk, Poland
+ bop@bop.com.pl
+
+Copyright 1993-2008 P. Strzelczyk, P. Pianowski, B. Jackowski
+
+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 3 of the License, or
+(at your option) any later version. It has been released 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, see <http://www.gnu.org/licenses/>.
diff --git a/Master/tlpkg/tlpsv/de/LC_MESSAGES/psv.mo b/Master/tlpkg/tlpsv/de/LC_MESSAGES/psv.mo
new file mode 100644
index 00000000000..bd778d1be0d
--- /dev/null
+++ b/Master/tlpkg/tlpsv/de/LC_MESSAGES/psv.mo
Binary files differ
diff --git a/Master/tlpkg/tlpsv/en/LC_MESSAGES/psv.mo b/Master/tlpkg/tlpsv/en/LC_MESSAGES/psv.mo
new file mode 100644
index 00000000000..342dd92869d
--- /dev/null
+++ b/Master/tlpkg/tlpsv/en/LC_MESSAGES/psv.mo
Binary files differ
diff --git a/Master/tlpkg/tlpsv/gswxlua.exe b/Master/tlpkg/tlpsv/gswxlua.exe
new file mode 100755
index 00000000000..07590c421cc
--- /dev/null
+++ b/Master/tlpkg/tlpsv/gswxlua.exe
Binary files differ
diff --git a/Master/tlpkg/tlpsv/pl/LC_MESSAGES/psv.mo b/Master/tlpkg/tlpsv/pl/LC_MESSAGES/psv.mo
new file mode 100644
index 00000000000..04c5215a5ce
--- /dev/null
+++ b/Master/tlpkg/tlpsv/pl/LC_MESSAGES/psv.mo
Binary files differ
diff --git a/Master/tlpkg/tlpsv/psv.bat b/Master/tlpkg/tlpsv/psv.bat
new file mode 100644
index 00000000000..49174d470f9
--- /dev/null
+++ b/Master/tlpkg/tlpsv/psv.bat
@@ -0,0 +1 @@
+@start gswxlua.exe -g ..\tlgs\bin\gsdll32.dll -l psv.wx.lua -p psv_view.ps -sINPUT=%1 %2 \ No newline at end of file
diff --git a/Master/tlpkg/tlpsv/psv.desktop b/Master/tlpkg/tlpsv/psv.desktop
new file mode 100644
index 00000000000..d9e16d5ce5b
--- /dev/null
+++ b/Master/tlpkg/tlpsv/psv.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Encoding=UTF-8
+Version=4.97
+Name=PS_View PostScript viewer
+Name[pl]=Przeglądarka PS_View
+Comment=Viewer of PostScript and PDF files
+Comment[pl]=Przeglądarka plików postscriptowych i PDF-ów
+Exec=psv %F
+Icon=psv
+Terminal=false
+Type=Application
+Categories=Graphics;2DGraphics;
+MimeType=application/postscript;application/pdf;
diff --git a/Master/tlpkg/tlpsv/psv.exe b/Master/tlpkg/tlpsv/psv.exe
new file mode 100755
index 00000000000..33e632ab554
--- /dev/null
+++ b/Master/tlpkg/tlpsv/psv.exe
Binary files differ
diff --git a/Master/tlpkg/tlpsv/psv.wx.lua b/Master/tlpkg/tlpsv/psv.wx.lua
new file mode 100644
index 00000000000..4c8461f8735
--- /dev/null
+++ b/Master/tlpkg/tlpsv/psv.wx.lua
@@ -0,0 +1,2181 @@
+--[[----------------------------------------------------------------------------
+-- PS_View -- previewing utility for Ghostscript interpreter
+-- Authors: P. Strzelczyk, P. Pianowski. Created: 15.06.1993; Lua part 26.10.2007
+-- Address: BOP s.c. Gen. T. Bora-Komorowskiego 24, 80-377 Gda\'nsk, Poland
+-- bop@bop.com.pl
+-- Copyright: (c) 2008 BOP s.c.
+-- Licence: GPL
+-- Current version: 5.05; 26.04.2008
+--
+-- 4.95 -- first working version of Lua engine
+-- 4.96 -- mouse interface added (and many other changes)
+-- 4.97 -- file search, open dialog, first approach of refresh, and icons
+-- 4.98 -- new callbacks added: CONSOLE, CONFIG, INFO, console is now always
+-- available (maybe hidden), more file search changes
+-- 5.00 -- files renamed, refresh added, all dialogs active
+-- 5.01 -- `namespaces': gsobj, gswin, gsargs, gsstat added, internal timer
+-- functions rebuild, mouse pane and scroll functionality implemented
+-- refresh/update functionality fully implemented
+-- 5.02 -- erase_event neutralised, DSC events isolated, RETURN = next page
+-- 5.03 -- first attempt of localisation, grids on separate `layer'
+-- 5.04 -- DSC reading corrected, `layer' and updating image corrected
+-- 5.05 -- post-Pingwinaria release, 'layer' and printing bug corrected
+-- 5.06 -- BachoTeX release
+------------------------------------------------------------------------------]]
+
+local PS_VIEW_NAME="PS_View"
+local PS_VIEW_VERSION=5.06
+local PS_VIEW_VERSION_STRING -- defined later, after locale loading
+local PSV_GsPars = {"-dNOPAUSE","-dDELAYBIND","-dNOEPS"}
+
+local frame, console = nil, nil
+
+local gsobj={
+ instancechecker = nil,
+ gsdll = nil,
+ config = nil,
+ locale = nil,
+ ghostscript = nil,
+ image = nil,
+ gstimer = nil,
+ dscthread = nil,
+ dialog = nil,
+ menu = nil,
+ SBsty = {},
+ SBall = {},
+ overlay = nil,
+ bbmp = nil,
+ obmp = nil,
+}
+
+local gswin={
+ gswindow = nil,
+ logwindow = nil,
+ editwindow = nil,
+ menuBar = nil,
+ statusBar = nil,
+ dialog = nil,
+}
+
+local gsargs = {
+ args= {}, -- arguments to ghostscript (wihout paths)
+ dllloc= "", -- localisation of DLL (passed to wxGhostscript)
+ libloc = "", -- search path for Postscript files (passed to wxGhostscript,
+ -- mounted from gslib, libs and psvlib)
+ fontloc = "", -- search path for fonts (passed to wxGhostscript)
+ libs= {}, -- list of paths setted by -i option
+ gslib= "", -- path to GS init files (from config file or discovered from dllloc)
+ psvlib= "", -- path to PS_View files (from config file or discovered from
+ -- paths in progs or path to this program -- arg[0])
+ progs = {}, -- PostScript program to run during init (added at the end of args)
+ dftpars = PSV_GsPars, -- default GS arguments (can be overriden by config file,
+ -- added ath the begin of args)
+ psf_dir = "", -- directory with the curently opened file
+ psf_name = "", -- name of the curently opened file
+}
+local psvpars = {
+ cmd_pars = "",
+ language = "",
+}
+local gsstat = {
+ refr_int = 0,
+ refresh = 0,
+ update = 0,
+ working = false,
+ ready = false,
+ inoverlay= false,
+ drawoverlay= false,
+}
+
+function MakeIcons()
+ local psvimg_xpm = {
+ "48 48 3 1",
+ "@ c black",
+ ". c yellow",
+ " c None",
+ " @@@@@@ ",
+ " @....@@@ ",
+ " @.......@ ",
+ " @........@@ ",
+ " @..........@ ",
+ " @...........@ ",
+ " @............@ ",
+ " @..............@ ",
+ " @...............@ ",
+ " @................@ ",
+ " @..................@ ",
+ " @....................@ ",
+ " @......................@ ",
+ " @........................@ ",
+ " @..........................@ ",
+ " @............................@@ ",
+ " @...............................@@ ",
+ " @..................................@@@@@@",
+ " @........................................@",
+ " @.........................................@",
+ " @......@@@@@@@@@....@@@@@..@@@@..@@@@@.....@",
+ " @.......@@@@@@@@@@..@@@@@@@.@@@@..@@@@@.....@",
+ " @........@@@@@@@@@@@.@@@..@@.@@@@..@@@@@.....@",
+ " @..........@@@...@@@.@@@@.....@@....@@@.....@ ",
+ " @...........@@@....@@..@@@@@...@@...@@@......@ ",
+ "@@...........@@@....@@....@@@@..@@@.@@@......@ ",
+ "@............@@@...@@@.@@..@@@...@@@@@.......@ ",
+ "@............@@@@@@@@..@@@@@@@...@@@@.......@ ",
+ "@............@@@@@@@....@@@@@.....@@.......@ ",
+ "@............@@@..........................@ ",
+ "@@@@@@......@@@@@........................@ ",
+ " @@....@@@@@.......................@ ",
+ " @@..@@@@@......................@ ",
+ " @...........................@ ",
+ " @.........................@ ",
+ " @.......................@ ",
+ " @.....................@ ",
+ " @...................@ ",
+ " @.................@ ",
+ " @...............@ ",
+ " @...............@ ",
+ " @.............@ ",
+ " @............@ ",
+ " @..........@ ",
+ " @@........@ ",
+ " @.......@ ",
+ " @@.....@ ",
+ " @@@@@@ "
+ };
+
+ local psvimg_xpm32 = {
+ "32 32 3 1",
+ "@ c black",
+ ". c yellow",
+ " c None",
+ " @@@@@ ",
+ " @....@@ ",
+ " @......@ ",
+ " @.......@ ",
+ " @.........@ ",
+ " @..........@ ",
+ " @............@ ",
+ " @..............@ ",
+ " @................@ ",
+ " @..................@ ",
+ " @....................@@ ",
+ " @.......................@@@@",
+ " @...........................@",
+ " @....@@@@@@...@@@@.@@@..@@@..@",
+ " @.....@@@@@@@.@@..@.@@@..@@@..@",
+ " @......@@..@@.@@@....@...@@...@",
+ "@.......@@..@@..@@@@..@@.@@...@ ",
+ "@.......@@.@@@.@...@@.@@@@...@ ",
+ "@.......@@@@@..@@@@@@..@@...@ ",
+ "@.......@@......@@@@...@@..@ ",
+ "@@@....@@@@...............@ ",
+ " @@..@@@@..............@ ",
+ " @..................@ ",
+ " @@...............@ ",
+ " @.............@ ",
+ " @...........@ ",
+ " @..........@ ",
+ " @........@ ",
+ " @.......@ ",
+ " @......@ ",
+ " @@....@ ",
+ " @@@@@ "
+ };
+
+ local psvimg_xpm16 = {
+ "16 16 3 1",
+ "@ c black",
+ ". c yellow",
+ " c None",
+ " @@@ ",
+ " @..@ ",
+ " @...@ ",
+ " @.....@ ",
+ " @.......@ ",
+ " @.........@ ",
+ " @...........@@",
+ " @..@@@.@@@@.@.@",
+ "@...@.@.@@.@.@.@",
+ "@...@@@@@@.@@..@",
+ "@@@.@.........@ ",
+ " @.........@ ",
+ " @.......@ ",
+ " @.....@ ",
+ " @...@ ",
+ " @@@@ "
+ };
+
+ local psvtxt_xpm = {unpack(psvimg_xpm)}
+ psvtxt_xpm[3]=". c green"
+
+ local psvtxt_xpm32 = {unpack(psvimg_xpm32)}
+ psvtxt_xpm32[3]=". c green"
+
+ local psvtxt_xpm16 = {unpack(psvimg_xpm16)}
+ psvtxt_xpm16[3]=". c green"
+
+ local bmpi,iconi,iconimg,icontxt
+
+ iconi = wx.wxIcon()
+ bmpi = wx.wxBitmap(psvimg_xpm)
+ iconi:CopyFromBitmap(bmpi)
+ iconimg = wx.wxIconBundle(iconi)
+ bmpi = wx.wxBitmap(psvimg_xpm32)
+ iconi:CopyFromBitmap(bmpi)
+ iconimg:AddIcon(iconi)
+ bmpi = wx.wxBitmap(psvimg_xpm16)
+ iconi:CopyFromBitmap(bmpi)
+ iconimg:AddIcon(iconi)
+
+ bmpi = wx.wxBitmap(psvtxt_xpm)
+ iconi:CopyFromBitmap(bmpi)
+ icontxt = wx.wxIconBundle(iconi)
+ bmpi = wx.wxBitmap(psvtxt_xpm32)
+ iconi:CopyFromBitmap(bmpi)
+ icontxt:AddIcon(iconi)
+ bmpi = wx.wxBitmap(psvtxt_xpm16)
+ iconi:CopyFromBitmap(bmpi)
+ icontxt:AddIcon(iconi)
+
+ return iconimg,icontxt
+end
+
+
+function PrepareKeyNames()
+
+ -- wxMOD-s should be defined in wxLua
+ wx.wxMOD_NONE=0
+ wx.wxMOD_ALT=1 wx.wxMOD_CONTROL=2
+ wx.wxMOD_SHIFT=4 wx.wxMOD_META=8
+
+ wx.wxMOD_MORE_THAN_SHIFT=wx.wxMOD_ALT+wx.wxMOD_META+wx.wxMOD_CONTROL
+
+ mod_text={
+ [wx.wxMOD_NONE]="NORM",
+ [wx.wxMOD_SHIFT]="SHIFT",
+ [wx.wxMOD_CONTROL]="CTRL",
+ [wx.wxMOD_CONTROL+wx.wxMOD_SHIFT]="SHIFTCTRL",
+ [wx.wxMOD_ALT]="ALT",
+ [wx.wxMOD_ALT+wx.wxMOD_SHIFT]="SHIFTALT",
+ [wx.wxMOD_ALT+wx.wxMOD_CONTROL]="CTRLALT",
+ [wx.wxMOD_ALT+wx.wxMOD_CONTROL+wx.wxMOD_SHIFT]="SHIFTCTRLALT",
+ --
+ [wx.wxMOD_META]="META",
+ [wx.wxMOD_SHIFT+wx.wxMOD_META]="SHIFTMETA",
+ [wx.wxMOD_CONTROL+wx.wxMOD_META]="CTRLMETA",
+ [wx.wxMOD_CONTROL+wx.wxMOD_SHIFT+wx.wxMOD_META]="SHIFTCTRLMETA",
+ [wx.wxMOD_ALT+wx.wxMOD_META]="ALTMETA",
+ [wx.wxMOD_ALT+wx.wxMOD_SHIFT+wx.wxMOD_META]="SHIFTALTMETA",
+ [wx.wxMOD_ALT+wx.wxMOD_CONTROL+wx.wxMOD_META]="CTRLALTMETA",
+ [wx.wxMOD_ALT+wx.wxMOD_CONTROL+wx.wxMOD_SHIFT+wx.wxMOD_META]="SHIFTCTRLALTMETA",
+ }
+
+ key_text={
+ [wx.WXK_INSERT]="INS",
+ [wx.WXK_DELETE]="DEL",
+ [wx.WXK_HOME]="HOME",
+ [wx.WXK_END]="END",
+ [wx.WXK_PAGEUP]="PAGE_UP",
+ [wx.WXK_PAGEDOWN]="PAGE_DOWN",
+ [wx.WXK_UP]="UP_ARR",
+ [wx.WXK_DOWN]="DOWN_ARR",
+ [wx.WXK_LEFT]="LEFT_ARR",
+ [wx.WXK_RIGHT]="RIGHT_ARR",
+ [wx.WXK_TAB]="TAB",
+ [wx.WXK_ESCAPE]="ESC",
+ --
+ [wx.WXK_NUMPAD_INSERT]="INS",
+ [wx.WXK_NUMPAD_DELETE]="DEL",
+ [wx.WXK_NUMPAD_HOME]="HOME",
+ [wx.WXK_NUMPAD_END]="END",
+ [wx.WXK_NUMPAD_PAGEUP]="PAGE_UP",
+ [wx.WXK_NUMPAD_PAGEDOWN]="PAGE_DOWN",
+ [wx.WXK_NUMPAD_UP]="UP_ARR",
+ [wx.WXK_NUMPAD_DOWN]="DOWN_ARR",
+ [wx.WXK_NUMPAD_LEFT]="LEFT_ARR",
+ [wx.WXK_NUMPAD_RIGHT]="RIGHT_ARR",
+ [wx.WXK_NUMPAD_DIVIDE]="DIVIDE",
+ [wx.WXK_NUMPAD_MULTIPLY]="MULTIPLY",
+ [wx.WXK_NUMPAD_SUBTRACT]="SUBSTRACT",
+ [wx.WXK_NUMPAD_ADD]="ADD",
+ [wx.WXK_NUMPAD_ENTER]="RETURN",
+ [wx.WXK_NUMPAD_EQUAL]="EQUAL",
+ [wx.WXK_NUMPAD_BEGIN]="BEGIN",
+ --[wx.WXK_NUMPAD_DECIMAL]="",
+ --[wx.WXK_NUMPAD_SEPARATOR]="",
+ }
+ for i = 1, 24 do s=string.format("F%d",i) key_text[wx["WXK_" .. s]]=s end
+ for i = 0, 9 do s=string.format("%d",i) key_text[wx["WXK_NUMPAD" .. s]]=s end
+
+ char_text={
+ [wx.WXK_RETURN]="RETURN",
+ [wx.WXK_BACK]="BACK",
+ [string.byte("`")]="GRAVE",
+ [string.byte("-")]="MINUS",
+ [string.byte("=")]="EQUAL",
+ [string.byte("\\")]="BACKSLASH",
+ [string.byte("[")]="BRACKETL",
+ [string.byte("]")]="BRACKETR",
+ [string.byte(";")]="SEMICOLON",
+ [string.byte("'")]="ACUTE",
+ [string.byte(",")]="COMMA",
+ [string.byte(".")]="PERIOD",
+ [string.byte("/")]="SLASH",
+ }
+ for i = string.byte("0"), string.byte("9") do
+ char_text[i]=string.format("%c",i) end
+ for i = string.byte("A"), string.byte("Z") do
+ char_text[i]=string.format("%c",i) end
+
+ char_shift_text={
+ [string.byte(">")]="GREATER",
+ [string.byte("<")]="LESS",
+ }
+end
+
+function MakeQueue()
+ return { b=0; t=0;
+ add = function(s,str) s.t=s.t+1 s[s.t]=str end;
+ insert = function(s,str)
+ for i=1,s.t do s[i+1]=s[i] end
+ s[1]=str s.t=s.t+1
+ end;
+ get = function(s)
+ s.b=s.b+1 local str=s[s.b]
+ if s.b>=s.t then s.b=0 s.t=0 end
+ return str
+ end;
+ getMax = function(s)
+ s.b=s.b+1 local str=s[s.b]
+ while s.b<s.t and str:len()<30000 do
+ s.b=s.b+1 str=str.."\n"..s[s.b]
+ end
+ if s.b>=s.t then s.b=0 s.t=0 end
+ return str
+ end;
+ peek = function(s) return s[s.b+1] end;
+ isEmpty = function(s) return s.t==0 end;
+ }
+end
+
+function MakeIdList()
+ return {
+ newId = function(s,str)
+ local id="ID_"..str
+ s[id]=wx.wxNewId()
+--or if not s[id] then s[id]=wx.wxNewId() end
+ s["NAM_"..s[id]]=str
+ return s[id]
+ end;
+ newObj = function(s,str,creator)
+ local id="OBJ_"..str
+ s[id]=creator
+--or if not s[id] then s[id]=creator end
+ return s[id]
+ end;
+ newCtrl = function(s,id,type)
+ table.insert(s,{id=id,type=type})
+ end;
+ getId = function(s,str) return s["ID_"..str] end;
+ getObj = function(s,str) return s["OBJ_"..str] end;
+ getName = function(s,id) return s["NAM_"..id] end;
+ }
+end
+
+local iconimg, icontxt = MakeIcons()
+gsobj.menu = MakeIdList()
+local RunPScode, RunDSCcode = MakeQueue(), MakeQueue()
+local StdInCode = MakeQueue()
+
+local Mouse = { Cnone=0, Czoom=1, Cpane=2, Cmeasure=3, Cscroll=4,
+ Cendmeas=5, Cdblclick=6;
+ cursorHand=wx.wxCursor(wx.wxCURSOR_HAND),
+ cursorMag=wx.wxCursor(wx.wxCURSOR_MAGNIFIER),
+ cursorCross=wx.wxCursor(wx.wxCURSOR_BLANK); -- wxCURSOR_CROSS, wx.wxCURSOR_BULLSEYE
+ penRed=wx.wxPen("RED",1,wx.wxSOLID), penBlue=wx.wxPen("BLUE",1,wx.wxSOLID);
+ bx=0, by=0, ex=0, ey=0, scroln=0, CMD=0, mod=0, timer=0,}
+
+local Dobject = { n=0, id={},
+Oline=1, Orect=2, Ocros=3, }
+Dobject.pens={ [-1] = wx.wxTRANSPARENT_PEN, [0] =
+wx.wxBLACK_PEN, wx.wxPen("BLUE",1,wx.wxSOLID),
+wx.wxGREEN_PEN, wx.wxCYAN_PEN,
+wx.wxRED_PEN, wx.wxPen("MAGENTA",1,wx.wxSOLID),
+wx.wxPen("YELLOW",1,wx.wxSOLID), wx.wxWHITE_PEN,
+wx.wxPen("BLACK",3,wx.wxSOLID), wx.wxPen("BLUE",3,wx.wxSOLID),
+wx.wxPen("GREEN",3,wx.wxSOLID), wx.wxPen("CYAN",3,wx.wxSOLID),
+wx.wxPen("RED",3,wx.wxSOLID), wx.wxPen("MAGENTA",3,wx.wxSOLID),
+wx.wxPen("YELLOW",3,wx.wxSOLID), wx.wxPen("WHITE",3,wx.wxSOLID),
+}
+Dobject.brushess={ [-1] = wx.wxTRANSPARENT_BRUSH, [0] =
+wxBLACK_BRUSH, wx.wxBLUE_BRUSH,
+wxGREEN_BRUSH, wxCYAN_BRUSH,
+wxRED_BRUSH, wx.wxBrush("MAGENTA",wx.wxSOLID),
+wx.wxBrush("YELLOW",wx.wxSOLID), wxWHITE_BRUSH,
+wxGREY_BRUSH
+}
+
+
+local v_quiet,v_normal,v_verbose=2,6,10
+local verbose=v_normal
+
+function print_debug(...)
+ if verbose>v_normal then print(...) end
+end
+
+function print_message(...)
+ if verbose>v_quiet then print(...) end
+end
+
+function SendEventCommand (c,s,...)
+ RunPScode:add(string.format(s,...) .. " /" .. c .. " EVENTCOMMAND")
+end
+
+function SendDSCEventCommand (c,s,...)
+ RunDSCcode:add(string.format(s,...) .. " /" .. c .. " EVENTCOMMAND")
+end
+
+function SendMenuCommand (m,s)
+ RunInputString()
+ RunPScode:add("/" .. m .. " /" .. s .. " MENUCOMMAND")
+end
+
+function SendKeyCommand (k,s)
+ RunInputString()
+ RunPScode:add("/" .. k .. " /" .. s .. " KEYCOMMAND")
+end
+
+function SendMouseCommand (xa,ya,xb,yb,c,s)
+ RunPScode:add(string.format("%d %d %d %d /%s /%s MOUSECOMMAND",xa,ya,xb,yb,c,s))
+end
+
+function SendMouseCommandWithStatus(mouse,cmd)
+ SendMouseCommand (mouse.bx,mouse.by,mouse.ex,mouse.ey,cmd,mod_text[mouse.mod])
+end
+
+function CallPSVhook (str)
+ local b=str:find(": ")
+ local c,l=str:sub(1,b-1),str:sub(b+2,-1)
+ local f,s=l:sub(1,1),l:sub(2,2)
+ local p={} for w in l:gmatch("{([^}]*)}") do table.insert(p,w) end
+ print_debug(_T("PSVhook>>") .. str .."\n")
+ if c=="FINDDSC" then
+ StartDSCthread(p[1])
+ elseif c=="DIALOG" then
+ MakeFileDialogBox(f,p[1],p[2],p[3],p[4])
+ elseif c=="DLGBOX" then
+ MakeDialogBox(f,p[1],p[2],p[3],p[4])
+ elseif c=="MESSAGEBOX" then
+ MakeMessageBox(f,p[1])
+ elseif c=="MENU" then
+ MakeMenu(f,s,p[1],p[2],p[3])
+ elseif c=="STATUS" then
+ MakeStatusLine(f,s,p[1],p[2])
+ elseif c=="REFRESH" then
+ MakeRefreshEvent(p[1])
+ elseif c=="DRAW" then
+ DrawObjectEvent(f,s,p[1],p[2],p[3])
+ elseif c=="HOOK" then
+ -- reserved entry for debugging
+ elseif c=="CONFIG" then
+ MakeConfigFile(f,p[1],p[2],p[3])
+ elseif c=="CONSOLE" then
+ MakeConsole(f,p[1])
+ elseif c=="INFO" then
+ SendInfoEvent()
+ elseif c=="LOCALE" then
+ SendLocaleEvent(f,p[1])
+ elseif c=="LUA" then
+ RunLuaCode(f,p[1])
+ else
+ error(_T("Unrecognized !PSV callback: ") .. str)
+ end
+end
+
+function MakeRefreshEvent(fname)
+ SetPSFile(PSFName(fname))
+end
+
+function MakeConfigFile(l,a,b,c)
+ if gsobj.config then
+ gsobj.config:SetPath("/" .. a)
+ if l=="S" then
+ gsobj.config:Write(b,c)
+ elseif l=="G" then
+ local _,r=gsobj.config:Read(b,c)
+ if not _ then r=c end
+ local n=tonumber(r) if not n then n=0 end
+ SendEventCommand ("CONFIG","(%s) %d /%s",r,n,a.."_"..b)
+ end
+ end
+end
+
+function MakeConsole(l,a)
+ if not console then
+ -- it is now not used -- console can be hidden but always is defined
+ if l=="S" then
+ local wtitle=PS_VIEW_NAME .. _T(" Console")
+ if gsargs.psf_name~="" then wtitle=gsargs.psf_name .. " -- " .. wtitle end
+ console = wx.wxFrame( wx.NULL, wx.wxID_ANY, wtitle,
+ wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxDEFAULT_FRAME_STYLE)
+ gswin.logwindow = wx.wxTextCtrl(console, wx.wxID_ANY, "",
+ wx.wxDefaultPosition, wx.wxDefaultSize,
+ wx.wxTE_MULTILINE + wx.wxTE_READONLY + wx.wxTE_RICH)
+ console:Connect(wx.wxEVT_CLOSE_WINDOW, function (event) console:Hide() end)
+ InitializeConsole()
+ ConfigRestoreFramePosition(console, "ConsoleWindow")
+ console:SetIcons(icontxt)
+ function print(...)
+ local str=""
+ for i,v in ipairs{...} do str=str..tostring(v) end
+ gswin.logwindow:AppendText(str)
+ end
+ console:Show()
+ end
+ elseif l=="S" then
+ console:Show()
+ console:Iconize(false)
+ elseif l=="H" then
+ console:Hide()
+ elseif l=="P" then
+ gswin.logwindow:AppendText(a)
+ elseif l=="A" then
+ gswin.editwindow:WriteText(a)
+ end
+end
+
+function SendInfoEvent()
+ local info,infodict="","<<"
+ infodict=infodict.."/ProgramName (" .. PS_VIEW_NAME ..") "
+ info=info.. _T("This is ") .. PS_VIEW_NAME ..", "
+ infodict=infodict.."/ProgramVersion " .. PS_VIEW_VERSION .." "
+ info=info.. _T("version ") .. PS_VIEW_VERSION .."\n"
+ infodict=infodict.."/wxLuaName (" .. wxlua.wxLUA_VERSION_STRING ..") "
+ info=info.. _T("built with ") .. wxlua.wxLUA_VERSION_STRING .." "
+ infodict=infodict.."/LuaName (" .. _VERSION ..") "
+ info=info.."(" .. _VERSION ..") "
+ infodict=infodict.."/wxWidgetsName (" .. wx.wxVERSION_STRING ..") "
+ info=info.. _T("and ") .. wx.wxVERSION_STRING .."\n"
+ if gsobj.gsdll then
+ infodict=infodict.."/GhostscriptVersion " .. gsobj.gsdll:GetVersion() .." "
+ info=info.. _T("linked with Ghostscript ") .. gsobj.gsdll:GetVersion() .."\n" end
+ infodict=infodict.."/OSDescription (" .. wx.wxGetOsDescription() ..") "
+ info=info.. _T("running under ") .. wx.wxGetOsDescription() .."\n"
+--
+ if gsargs.psf_name~="" then
+ infodict=infodict.."/OpenedFile (" .. gsargs.psf_name ..") "
+ info=info.. _T("started on ") .. gsargs.psf_name .." "
+ infodict=infodict.."/OpenedDir (" .. gsargs.psf_dir ..") "
+ info=info.. _T("in ") .. gsargs.psf_dir .."\n"
+ end
+ infodict=infodict.."/GSDLL (" .. gsargs.dllloc ..") "
+ infodict=infodict.."/GSLIB (" .. gsargs.libloc ..") "
+ infodict=infodict.."/GSFONT (" .. gsargs.fontloc ..") "
+ infodict=infodict.."/XGSLIB (" .. gsargs.gslib ..") "
+ infodict=infodict.."/PSVLIB (" .. gsargs.psvlib ..") "
+ infodict=infodict..">>"
+ SendEventCommand ("INFO","(%s) %s 0",info,infodict)
+end
+
+function SendLocaleEvent(f,a)
+ if f=="T" then
+ local l=wx.wxGetTranslation(a)
+ if l~=a then
+ SendEventCommand ("LOCALE","(%s) (%s) 1",a,l)
+ else
+ SendEventCommand ("LOCALE","(%s) (%s) -1",a,a)
+ end
+ elseif f=="I" then
+ SendEventCommand ("LOCALE","(%s) %d 0", gsobj.locale:GetLocale(), gsobj.locale:GetLanguage())
+ elseif f=="S" then
+ local lang=gsobj.locale.FindLanguageInfo(a)
+ SetLocale(lang.Language)
+ end
+end
+
+function RunLuaCode(l,a)
+ if l=="R" then
+ local torun=loadstring(a)
+ if torun then torun() end
+ end
+end
+
+function StartDSCthread(fname)
+ if gsobj.dscthread then return end
+ gsobj.dscthread=coroutine.wrap(ReadDSCcomments)
+ local res=gsobj.dscthread(fname)
+ if res==1 then -- thread created succesfuly
+ elseif res==0 then -- --''-- and finished
+ gsobj.dscthread=function() return 0 end
+ else
+ error(_T("Unexpected error during creating DSC thread."))
+ end
+end
+
+function ReadDSCcomments(fname)
+ local psf_dir, psf_name = PSFName(fname)
+ local ffname = psf_dir..psf_name
+ local psfile,err=io.open(ffname,"rb")
+ if not psfile then
+ SendDSCEventCommand ("ENDDSC","(%s) %d %d",err,0,1)
+ SetPSFile("","")
+ return 0
+ end
+ SetPSFile(psf_dir, psf_name)
+ local pstr=psfile:read(4)
+ local pslen=psfile:seek("end")
+ local psbeg,psend=0,pslen
+ if pstr=="%PDF" then
+ SendDSCEventCommand ("PDFFOUND","(%s) %d %d",ffname,0,pslen)
+ else
+ coroutine.yield(1)
+ if pstr==string.char(0xC5,0xD0,0xD3,0xC6) then
+ psfile:seek("set",4) pstr=psfile:read(8)
+ local b={pstr:byte(1,4)} psbeg=b[1]+(b[2]+(b[3]+b[4]*256)*256)*256
+ b={pstr:byte(5,8)} psend=psbeg+b[1]+(b[2]+(b[3]+b[4]*256)*256)*256
+ if psend>pslen then
+ print_message(_T("Improper preview information -- ignoring\n"))
+ psbeg=0 psend=pslen
+ end
+ end
+ SendDSCEventCommand ("FILEFOUND","(%s) %d %d",ffname,psbeg,psend)
+ local pp=psfile:seek("set",psbeg)
+ pstr=psfile:read("*l")
+ local pn=psfile:seek()
+ if pstr:match("^%%!PS") then
+ SendDSCComment(pstr,pp,pn) -- %!PS Adobe
+ coroutine.yield(1)
+ local pstrec="\n"
+ local psb,pse,pseb,psee,comm
+ while pn<psend do
+ if pstrec=="" and pstr:sub(-1):match("[\n\r%%]") then
+ pstrec=pstr:sub(-3) end
+ pstr=psfile:read(60000)-- -/+ 2^16
+ pp,pn=pn,psfile:seek()
+ if pstrec~="" then
+ pstr=pstrec..pstr pp=pp-pstrec:len() pstrec="" end
+ pse=1
+ while true do
+ psb,pse = pstr:find("%%",pse,true)
+ if psb then
+ if pstr:sub(psb-1,pse):match("[\n\r]%%[%%D!]") then
+ pseb,psee = pstr:find("[\n\r]+",pse)
+ if pseb then
+ pse=psee
+ SendDSCComment(pstr:sub(psb,pseb-1),pp+psb,pp+pse)
+ elseif pn==psend then
+ pse=pstr:len()
+ SendDSCComment(pstr:sub(psb,pse),pp+psb,pp+pse)
+ elseif psb+1024<pn then
+ pse=psb+255
+ SendDSCComment(pstr:sub(psb,pse),pp+psb,pp+pse)
+ else
+ pse=pstr:len() pstrec=pstr:sub(psb-1)
+ end
+ end
+ else break end
+ end
+ coroutine.yield(pn)
+ end
+--[[
+-- for pstr in psfile:lines() do
+-- if pstr:match("^%%[%%!D]") then
+-- SendDSCEventCommand ("DSCCOMMENT","(%s) %d %d",pstr,pp,pn)
+-- coroutine.yield(pp)
+-- end
+-- end
+--]]
+ end
+ end
+ SendDSCEventCommand ("ENDDSC","(%s) %d %d",ffname,0,0)
+ psfile:close()
+ return 0
+end
+
+function SendDSCComment(comm,begc,endc)
+-- comm=comm:gsub("[\128-\255]","#")
+ comm=comm:gsub("([\\%(%)])","\\%1")
+ SendDSCEventCommand ("DSCCOMMENT","(%s) %d %d",comm,begc,endc)
+end
+
+function MakeStatusLine(l,m,a,b)
+ if not gswin.statusBar then
+ if l=="C" then gswin.statusBar=frame:CreateStatusBar() end
+ elseif l=="D" then
+ gswin.statusBar:Show(m~="F")
+ elseif l=="P" then
+ gsobj.SBsty,gsobj.SBall={},{} local wid={}
+ for wi,al,ap in a:gmatch("([0-9]+)([lcr]?)([tbn]?)") do
+ wi=tonumber(wi) if wi==0 then wi=-1 end table.insert(wid,wi)
+ if al=="l" then al=2 elseif al=="r" then al=1 else al=3 end
+ table.insert(gsobj.SBall,al)
+ if ap=="t" then ap=wx.wxSB_RAISED elseif ap=="b" then ap=wx.wxSB_NORMAL
+ else ap=wx.wxSB_FLAT end table.insert(gsobj.SBsty,ap)
+ end
+ gswin.statusBar:SetFieldsCount(#wid)
+ gswin.statusBar:SetStatusWidths(wid)
+ gswin.statusBar:SetStatusStyles(gsobj.SBsty)
+ elseif l=="T" then
+ local i,al,ap=a:match("([0-9]+)([lcr]?)([tbn]?)")
+ i=tonumber(i)
+ if al=="l" then al=2 elseif al=="r" then al=1 elseif al=="c" then al=3 end
+ if ap=="t" then ap=wx.wxSB_RAISED elseif ap=="n" then ap=wx.wxSB_FLAT
+ elseif ap=="b" then ap=wx.wxSB_NORMAL end
+ if not b then b="" end
+ gswin.statusBar:SetStatusText(_T(b),i-1)
+ if ap~="" then gsobj.SBsty[i]=ap end
+ gswin.statusBar:SetStatusStyles(gsobj.SBsty)
+ elseif l=="M" then
+ local i=0
+ for t in a:gmatch("([^|]+)|") do
+ if t~="" then gswin.statusBar:SetStatusText(_T(t),i) end i=i+1
+ end
+ end
+end
+
+function MakeMessageBox(kind, text)
+ local style=wx.wxOK+wx.wxICON_INFORMATION
+ if kind=="2" then style=style+wx.wxCANCEL end
+ if kind=="3" then style=wx.wxYES_NO+wx.wxCANCEL+wx.wxICON_QUESTION end
+ if kind=="4" then style=wx.wxYES_NO+wx.wxICON_QUESTION end
+ -- local dialog=wx.wxMessageDialog(frame, title, PS_VIEW_NAME, style)
+ -- local res=dialog:ShowModal()
+ local res=wx.wxMessageBox(_T(text), PS_VIEW_NAME, style, frame)
+ local restr="() 0 /UNKNOWN"
+ if res==wx.wxOK then restr="() 1 /OK" end
+ if res==wx.wxYES then restr="() 1 /YES" end
+ if res==wx.wxNO then restr="() 2 /NO" end
+ if res==wx.wxCANCEL then restr="() 3 /CANCEL" end
+ SendEventCommand("MESSAGEBOX",restr)
+end
+
+function MakeFileDialogBox(kind, filter,file,ext,title)
+ filter:gsub("||$","",1)
+ local dialog
+ if kind=="D" then
+ local dir,title=filter,file
+ if dir=="|" then dir=gsargs.psf_dir
+ elseif dir=="|P" then dir=gsargs.psvlib
+ elseif dir=="|G" then dir=gsargs.gslib end
+ dialog=wx.wxDirDialog(frame, _T(title), dir)
+ else
+ local dir,style=gsargs.psf_dir,wx.wxFD_OPEN+wx.wxFD_FILE_MUST_EXIST
+ if kind=="O" then
+ if file=="|" then file=gsargs.psf_name end
+ elseif kind=="S" then
+ style=wx.wxFD_SAVE+wx.wxFD_OVERWRITE_PROMPT
+ elseif kind=="L" then
+ if file=="|" then file=gsargs.dllloc end
+ local fname=wx.wxFileName(file)
+ dir=fname:GetPath(wx.wxPATH_GET_VOLUME)
+ file=fname:GetFullName()
+ end
+ dialog=wx.wxFileDialog(frame, _T(title), dir, file, _T(filter), style)
+ end
+--
+ local res=dialog:ShowModal()
+ if res==wx.wxID_OK then
+ local resfull=dialog:GetPath()
+ local resdir, resfn, fnoff = PSFName(resfull)
+ resfull:gsub("\\","\\\\") resfull:gsub("%(","\\(") resfull:gsub("%)","\\)")
+ if kind=="L" then
+ SendEventCommand("LIBDIALOG", "(%s) (%s) 0", resdir..resfn, resfull)
+ elseif kind=="D" then
+ SendEventCommand("DIRDIALOG", "(%s) (%s) 0", resdir, resfull)
+ elseif kind=="O" then
+ local wild=dialog:GetFilterIndex()
+ SendEventCommand("OPENDIALOG", "(%s) %d %d", resdir..resfn, fnoff, wild)
+ elseif kind=="S" then
+ SendEventCommand("SAVEDIALOG", "(%s) %d 0", resdir..resfn, fnoff)
+ end
+ end
+ dialog:Destroy()
+end
+
+function MakeDialogBox(l, a,b,c,d)
+ local function topixels(v) return math.ceil(2.5*tonumber(v)) end
+ local dialog, objlst = gswin.dialog, gsobj.dialog
+ local pos=wx.wxDefaultPosition
+ local size=wx.wxDefaultSize
+ local id,title="","Untitled"
+ local type,state=a:sub(1,1),a:sub(2)
+ if c then
+ local x,y,w,h=c:match("([0-9]+),([0-9]+),([0-9]+),([0-9]+)")
+ if x then
+ pos=wx.wxPoint(topixels(x),topixels(y))
+ size=wx.wxSize(topixels(w),topixels(h))
+ end
+ if b then id=b end
+ if d then title=d end
+ else
+ local w,h=a:match("([0-9]+),([0-9]+)")
+ if w then
+ if wx.__WXMSW__ then h=h+10 end -- titlebar correction
+ size=wx.wxSize(topixels(w),topixels(h))
+ end
+ if b then title=b end
+ end
+--
+ if l=="I" then -- dialog box init
+ gswin.dialog=wx.wxDialog(frame,wx.wxID_ANY,_T(title),pos,size)
+ gsobj.dialog=MakeIdList()
+ return
+ else
+ if dialog==nil then error("Operation on uninitialized DLGBOX.") end
+ end
+ if l=="B" then -- add push button
+ if type=="O" then
+ objlst:newObj(id,wx.wxButton(dialog,wx.wxID_OK,_T(title),pos,size))
+ elseif type=="C" then
+ objlst:newObj(id,wx.wxButton(dialog,wx.wxID_CANCEL,_T(title),pos,size))
+ elseif type=="P" then
+ local obj=objlst:newObj(id,wx.wxButton(dialog,wx.wxID_ANY,_T(title),pos,size))
+ obj:Connect(wx.wxEVT_COMMAND_BUTTON_CLICKED, function (event)
+ SendEventCommand("DIALOG", "() /%s /CLICKED",id) end )
+ elseif type=="G" then
+ objlst:newObj(id,wx.wxStaticBox(dialog,wx.wxID_ANY,_T(title),pos,size))
+ end
+ elseif l=="K" then -- add check button
+ local obj
+ if type=="K" then
+ obj=objlst:newObj(id,wx.wxCheckBox(dialog,wx.wxID_ANY,_T(title),pos,size,wx.wxCHK_2STATE))
+ elseif type=="3" then
+ obj=objlst:newObj(id,wx.wxCheckBox(dialog,wx.wxID_ANY,_T(title),pos,size,wx.wxCHK_3STATE))
+ elseif type=="S" then
+ obj=objlst:newObj(id,wx.wxRadioButton(dialog,wx.wxID_ANY,_T(title),pos,size,wx.wxRB_GROUP))
+ elseif type=="R" then
+ obj=objlst:newObj(id,wx.wxRadioButton(dialog,wx.wxID_ANY,_T(title),pos,size,0))
+ end
+ if type=="3" then objlst:newCtrl(id,"CHECK3") else objlst:newCtrl(id,"CHECK") end
+ if state=="C" or state=="+" then obj:SetValue(true)
+ elseif state=="U" or state=="-" then obj:SetValue(false)
+ elseif state=="N" or state=="0" then
+ obj:Set3StateValue(wx.wxCHK_UNDETERMINED)
+ end
+ elseif l=="E" then -- add edit box
+ local style,valid=wx.wxTE_LEFT,wx.wxDefaultValidator
+ if type=="N" then
+ elseif type=="P" then style=style+wx.wxTE_PASSWORD
+ elseif type=="M" then style=style+wx.wxTE_MULTILINE
+ elseif type=="D" then valid=wx.wxTextValidator(wx.wxFILTER_NUMERIC)
+ end
+ objlst:newObj(id,wx.wxTextCtrl(dialog,wx.wxID_ANY,_T(state),pos,size,style,valid))
+ objlst:newCtrl(id,"EDIT")
+ elseif l=="T" then -- add static (text)
+ local style,text,border=wx.wxALIGN_CENTER,true,false
+ if type=="C" then
+ elseif type=="L" then style=wx.wxALIGN_LEFT
+ elseif type=="R" then style=wx.wxALIGN_RIGHT
+ elseif type=="D" then border=true
+ elseif type=="U" then border=true
+ elseif type=="W" then border=true text=false
+ elseif type=="B" then border=true text=false
+ end
+ if border then
+ objlst:newObj(id.."F",wx.wxStaticBox(dialog,wx.wxID_ANY,"",pos,size))
+ end
+ if text then
+ local obj = objlst:newObj(id,
+ wx.wxStaticText(dialog,wx.wxID_ANY,_T(title),pos,wx.wxDefaultSize,style))
+ local nsize=obj:GetSize()
+ pos=wx.wxPoint(pos.x+2,pos.y+(size:GetHeight()-nsize:GetHeight())/2+4)
+ size:DecBy(4,4) obj:Move(pos) obj:SetSize(size)
+ end
+ elseif l=="L" then -- add list box
+ local style,list,ini=wx.wxLB_SINGLE,{},nil
+ if type=="M" then style=wx.wxLB_MULTIPLE end
+ for v in state:gmatch("([^|]*)|") do if ini then table.insert(list,_T(v)) else ini=v end end
+ local obj=objlst:newObj(id,wx.wxListBox(dialog,wx.wxID_ANY,pos,size,list,style))
+ objlst:newCtrl(id,"LIST")
+ if ini~="" then obj:SetSelection(tonumber(ini)) end
+ elseif l=="C" then -- add combo (edit+list) box
+ local style,list,ini=wx.wxCB_DROPDOWN,{},nil
+ if type=="L" then style=wx.wxCB_SIMPLE end
+ for v in state:gmatch("([^|]*)|") do if ini then table.insert(list,_T(v)) else ini=v end end
+ local obj=objlst:newObj(id,wx.wxComboBox(dialog,wx.wxID_ANY,_T(title),pos,size,list,style))
+ objlst:newCtrl(id,"COMBO")
+ if ini~="" then obj:SetSelection(tonumber(ini)) end
+ elseif l=="S" then -- dialog box start (show and process)
+ ShowDialogBox()
+ gswin.dialog:Destroy()
+ gswin.dialog=nil gsobj.dialog=nil
+ end
+end
+
+function ShowDialogBox()
+ local result=gswin.dialog:ShowModal()
+ if result==wx.wxID_OK then result="OK"
+ for i,v in ipairs(gsobj.dialog) do
+ local type, obj, res = v.type, gsobj.dialog:getObj(v.id), ""
+ if type=="CHECK" then
+ type="UNCHECKED"
+ if obj:GetValue() then type="CHECKED" end
+ elseif type=="CHECK3" then
+ type="UNCHECKED"
+ if obj:Get3StateValue()==wx.wxCHK_UNDETERMINED then type="INDETERMINATE"
+ elseif obj:Get3StateValue()==wx.wxCHK_CHECKED then type="CHECKED" end
+ elseif type=="EDIT" then
+ res=obj:GetValue()
+ elseif type=="LIST" then
+ for i=0,obj:GetCount()-1 do
+ if obj:IsSelected(i) then res=res.."1" else res=res.."0" end
+ end
+ elseif type=="COMBO" then
+ res=obj:GetValue()
+ else
+ error(_T("Unknown type of control in ShowDialog -- can't happen."))
+ end
+ SendEventCommand("DIALOG", "(%s) /%s /%s", res, v.id, type)
+ end
+ elseif result==wx.wxID_CANCEL then result="CANCEL"
+ else result="UNDEFINED" end
+ SendEventCommand("DIALOG", "() /%s /ENDDIALOG", result)
+end
+
+function MakeMenu(l,m,a,b,c)
+ local objlst=gsobj.menu
+ if not gswin.menuBar then
+ gswin.menuBar=wx.wxMenuBar()
+ objlst:newObj("MAIN",gswin.menuBar)
+ frame:SetMenuBar(gswin.menuBar)
+ end
+ if l=="I" then
+ local pare=objlst:getObj(a)
+ if not pare then return false end
+ if m=="C" then -- extra option required by wxWidgets
+ pare:AppendCheckItem(objlst:newId(b),_T(c))
+ else
+ pare:Append(objlst:newId(b),_T(c))
+ end
+ elseif l=="S" then
+ local pare=objlst:getObj(a)
+ local menu=objlst:newObj(b,wx.wxMenu())
+ if not pare or not menu then return false end
+ if a=="MAIN" then
+ pare:Append(menu,_T(c))
+ else
+ pare:Append(objlst:newId(b),_T(c),menu)
+ end
+ elseif l=="H" then
+ local pare=objlst:getObj(a)
+ if pare then pare:AppendSeparator() else return false end
+ elseif l=="C" then
+ local item=gswin.menuBar:FindItem(objlst:getId(a))
+ if item then item:SetText(_T(b)) else return false end
+ elseif l=="U" then
+ local item=gswin.menuBar:FindItem(objlst:getId(a))
+ if not item then return false end
+ item:Enable(m=="N" or m=="C")
+ item:Check(m=="C" or m=="B")
+ elseif l=="D" then
+ gswin.menuBar:Show(m~="F")
+ if m=="R" then gswin.menuBar:Refresh() end
+ end
+end
+
+function DrawObjectEvent(f,s,id,dim,pen)
+ if f=="O" then
+ if s=="C" then CreateOverlay()
+ elseif s=="D" then DestroyOverlay()
+ elseif s=="T" then ToggleOverlay() end
+ elseif f=="D" then
+ if s=="A" then AddDrawObject(id,dim,pen)
+ elseif s=="M" then MoveDrawObject(id,dim,pen)
+ elseif s=="D" then DeleteDrawObject(id)
+ elseif s=="M" then ClearDrawObjects() end
+ end
+end
+
+function CreateOverlay()
+ local w, h = gsobj.image.w, gsobj.image.h
+ if not gsobj.bbmp then gsobj.bbmp=wx.wxBitmap(w,h) end
+ if not gsobj.obmp then gsobj.obmp=wx.wxBitmap(w,h) end
+ local bdc=wx.wxMemoryDC()
+ bdc:SelectObject(gsobj.bbmp)
+ gsobj.image:CopyOnto(bdc,0,0,w,h,0,0)
+ bdc:delete()
+ if Dobject.n==0 then
+ gswin.gswindow:Connect(wx.wxEVT_PAINT, OnPaintExtra)
+ end
+ gsstat.inoverlay=true
+ gsstat.drawoverlay=true
+end
+
+function ToggleOverlay()
+ gsstat.drawoverlay = not gsstat.drawoverlay
+end
+
+function DestroyOverlay()
+ if gsstat.inoverlay then
+ gsstat.inoverlay=false
+ if gsstat.drawoverlay then
+ gsobj.image=gsobj.overlay
+ gswin.gswindow:SetGsImage(gsobj.image)
+ gsstat.drawoverlay=false
+ end
+ gsobj.overlay=nil
+ if gsobj.bbmp then gsobj.obmp:delete() gsobj.obmp=nil end
+ if gsobj.obmp then gsobj.bbmp:delete() gsobj.bbmp=nil end
+ end
+ if Dobject.n==0 then
+ gswin.gswindow:Disconnect(wx.wxEVT_PAINT)
+ end
+end
+
+function OnPaintExtra(event)
+ local dc=wx.wxPaintDC(gswin.gswindow)
+ local xd, yd, w, h, xs, ys = 0, 0, gsobj.image.w, gsobj.image.h, 0, 0
+ local sdc
+ if gsstat.inoverlay then
+ if gsstat.drawoverlay then
+ dc:DrawBitmap(gsobj.bbmp,0,0,false)
+ else
+ -- if gsobj.image.r then
+ sdc=wx.wxMemoryDC() sdc:SelectObject(gsobj.bbmp)
+ gsobj.image:CopyOnto(sdc,xd,yd,w,h,xs,ys)
+ sdc:delete()
+ gsobj.image:CopyOnto(dc,xd,yd,w,h,xs,ys)
+ end
+ if gsobj.overlay then
+ sdc=wx.wxMemoryDC() sdc:SelectObject(gsobj.obmp)
+ if gsstat.drawoverlay and gsobj.overlay.r then
+ gsobj.overlay.r=false
+ gsobj.overlay:CopyOnto(sdc,xd,yd,w,h,xs,ys)
+ sdc:delete()
+ local omask=wx.wxMask(gsobj.obmp,wx.wxWHITE)
+ gsobj.obmp:SetMask(omask)
+ sdc=wx.wxMemoryDC() sdc:SelectObject(gsobj.obmp)
+ end
+ -- dc:Blit(xd,yd,w,h,sdc,xs,ys,wx.wxEQUIV) --EQUIV
+ dc:Blit(xd,yd,w,h,sdc,xs,ys,wx.wxCOPY,true)
+ sdc:delete()
+ end
+ else
+ gsobj.image:CopyOnto(dc,xd,yd,w,h,xs,ys)
+ end
+ if Dobject.n>0 then
+ -- draw objects
+ end
+ dc:delete()
+end
+
+function AddDrawObject(id,dim,pen)
+ if Dobject.n==0 then CreateDrawObjects() end
+ if not Dobject.id[id] then
+ Dobject.n=Dobject.n+1 Dobject.id[id]=Dobject.n
+ Dobject[Dobject.n]={id = id, xb = xb, yb = yb, xe = xe, ye = ye,
+ pe = pe, br = br}
+ else
+ MoveDrawObject(id,dim,pen)
+ end
+end
+
+function MoveDrawObject(id,dim,pen)
+ if Dobject.id[id] then
+ Dobject[Dobject.id[id]]={id = id, xb = xb, yb = yb, xe = xe, ye = ye,
+ pe = pe, br = br}
+ end
+end
+
+function DeleteDrawObject(id)
+ if Dobject.id[id] then
+ local k=Dobject.id[id]
+ Dobject.id[id]=nil
+ Dobject.n=Dobject.n-1
+ for i=k,Dobject.n do
+ Dobject[i]=Dobject[i+1]
+ Dobject.id[Dobject[i].id]=i
+ end
+ Dobject[Dobject.n+1]=nil
+ end
+ if Dobject.n==0 then ClearDrawObjects() end
+end
+
+function CreateDrawObjects()
+ if not gsstat.inoverlay then
+ gswin.gswindow:Connect(wx.wxEVT_PAINT, OnPaintExtra)
+ end
+end
+
+function ClearDrawObjects()
+ if Dobject.n>0 then
+ for i=1,Dobject.n do Dobject[i]=nil end
+ Dobject.n=0 Dobject.id={}
+ if not gsstat.inoverlay then
+ gswin.gswindow:Disconnect(wx.wxEVT_PAINT)
+ end
+ -- gswin.gswindow:Refresh()
+ end
+end
+
+
+function MouseButtonEvent(event)
+ local mod=wx.wxMOD_NONE
+ if event:AltDown() then mod=mod+wx.wxMOD_ALT end
+ if event:ControlDown() then mod=mod+wx.wxMOD_CONTROL end
+ if event:ShiftDown() then mod=mod+wx.wxMOD_SHIFT end
+ Mouse.mod=mod
+ if event:ButtonDown() then
+ Mouse.bx,Mouse.by=event:GetPositionXY()
+ Mouse.ex,Mouse.ey=Mouse.bx,Mouse.by
+ if Mouse.CMD==Mouse.Cnone and event:LeftDown() then
+ if wx.wxGetKeyState(32) then
+ Mouse.CMD=Mouse.Cpane
+ else
+ Mouse.CMD=Mouse.Czoom
+ end
+ elseif Mouse.CMD==Mouse.Cnone and event:RightDown() then
+ if not event:ControlDown() then
+ Mouse.CMD=Mouse.Cmeasure
+ else
+ -- Mouse.CMD=Mouse.Cendmeas
+ SendMouseCommandWithStatus(Mouse,"MEAS")
+ end
+ end
+ if Mouse.CMD~=Mouse.Cnone then
+ local cursor=wx.wxNullCursor
+ if Mouse.CMD==Mouse.Cpane then cursor=Mouse.cursorHand end
+ if Mouse.CMD==Mouse.Czoom then cursor=Mouse.cursorMag end
+ if Mouse.CMD==Mouse.Cmeasure then cursor=Mouse.cursorCross end
+ gswin.gswindow:SetCursor(cursor)
+ gswin.gswindow:CaptureMouse()
+ DrawMouseRules()
+ end
+ elseif event:ButtonDClick() then
+ Mouse.bx,Mouse.by=event:GetPositionXY()
+ Mouse.ex,Mouse.ey=Mouse.bx,Mouse.by
+ if event:LeftDClick() then
+ -- Mouse.CMD=Mouse.Cdblclick
+ SendMouseCommandWithStatus(Mouse,"LDBLCLICK")
+ end
+ elseif event:ButtonUp() then
+ if Mouse.CMD~=Mouse.Cnone then
+ DrawMouseRules()
+ Mouse.ex,Mouse.ey=event:GetPositionXY()
+ gswin.gswindow:ReleaseMouse()
+ gswin.gswindow:SetCursor(wx.wxNullCursor)
+ if Mouse.CMD==Mouse.Czoom then
+ if math.abs(Mouse.ex-Mouse.bx)>1 or math.abs(Mouse.ey-Mouse.by)>1 then
+ SendMouseCommandWithStatus(Mouse,"ZOOM") end
+ elseif Mouse.CMD==Mouse.Cpane then
+ if math.abs(Mouse.ex-Mouse.bx)>1 or math.abs(Mouse.ey-Mouse.by)>1 then
+ SendMouseCommandWithStatus(Mouse,"MOVE") end
+ elseif Mouse.CMD==Mouse.Cmeasure then
+ SendMouseCommandWithStatus(Mouse,"MEAS")
+ end
+ Mouse.CMD=Mouse.Cnone
+ end
+ end
+ event:Skip()
+end
+
+function SendWheelEvent()
+ SendMouseCommand (Mouse.scroln,0,0,0,"SCROLL",mod_text[Mouse.mod])
+ Mouse.CMD=Mouse.Cnone Mouse.scroln=0
+end
+
+function MouseWheelEvent(event)
+ if Mouse.timer~=0 then ResetDelayedDo(Mouse.timer) Mouse.timer=0 end
+ Mouse.CMD=Mouse.Cscroll Mouse.scroln=Mouse.scroln+event:GetWheelRotation()
+ Mouse.bx,Mouse.by=0,0
+ if event:ControlDown() or wx.wxGetKeyState(32) then
+ Mouse.ex,Mouse.ey,Mouse.mod=Mouse.scroln/1200*gsobj.image.w,0,wx.wxMOD_CONTROL
+ else
+ Mouse.ex,Mouse.ey,Mouse.mod=0,Mouse.scroln/1200*gsobj.image.h,wx.wxMOD_NONE
+ end
+ DrawMouseRules()
+ if Mouse.scroln~=0 then
+ Mouse.timer=SetDelayedDo(200,function() SendWheelEvent() Mouse.timer=0 end)
+ end
+ event:Skip()
+end
+
+function MouseMotionEvent(event)
+ if Mouse.CMD~=Mouse.Cnone and Mouse.CMD~=Mouse.Cscroll then
+ DrawMouseRules()
+ Mouse.ex,Mouse.ey=event:GetPositionXY()
+ DrawMouseRules()
+ end
+ event:Skip()
+end
+
+function DrawMouseRules()
+ local dc=wx.wxClientDC(gswin.gswindow)
+ if Mouse.CMD==Mouse.Czoom then
+ dc:SetLogicalFunction(wx.wxEQUIV)
+ dc:SetBrush(wx.wxTRANSPARENT_BRUSH)
+ dc:SetPen(Mouse.penRed)
+ dc:DrawRectangle(Mouse.bx,Mouse.by,Mouse.ex-Mouse.bx,Mouse.ey-Mouse.by)
+ elseif Mouse.CMD==Mouse.Cmeasure then
+ dc:SetLogicalFunction(wx.wxEQUIV)
+ dc:SetPen(Mouse.penBlue)
+ dc:CrossHair(Mouse.ex,Mouse.ey)
+ elseif Mouse.CMD==Mouse.Cpane or Mouse.CMD==Mouse.Cscroll then
+ dc:SetLogicalFunction(wx.wxCOPY)
+ dc:SetBrush(wx.wxLIGHT_GREY_BRUSH)
+ dc:SetPen(wx.wxTRANSPARENT_PEN)
+ local xs, ys, w, h = 0, 0, gsobj.image.w, gsobj.image.h
+ local xd, yd = Mouse.ex-Mouse.bx , Mouse.ey-Mouse.by
+ if xd<0 then
+ xs,xd=-xd,0 dc:DrawRectangle(w-xs,0,xs,h)
+ else
+ w=w-xd dc:DrawRectangle(0,0,xd,h)
+ end
+ if yd<0 then
+ ys,yd=-yd,0 dc:DrawRectangle(0,h-ys,w+xd,ys)
+ else
+ h=h-yd dc:DrawRectangle(0,0,w+xd,yd)
+ end
+ gsobj.image:CopyOnto(dc,xd,yd,w,h,xs,ys)
+ end
+ dc:delete()
+end
+
+do local resize = { timer=0, pw=0, ph = 0}
+
+function SendResizeEvent(w,h)
+ if w~=resize.pw or h~=resize.ph then
+ if w*h>resize.pw*resize.ph*2 or w*h*2<resize.pw*resize.ph then
+ gsstat.refr_int=0 -- update refresh timer to new image size
+ gsstat.refresh=0
+ end
+ SendEventCommand ("RESIZE","() %d %d",w,h)
+ resize.pw=w resize.ph=h
+ end
+end
+
+function ProcessResizeEvent(w,h)
+ if resize.timer~=0 then ResetDelayedDo(resize.timer) resize.timer=0 end
+ if h~=0 and w~=0 then
+ resize.timer=SetDelayedDo(140,function() SendResizeEvent(w,h) resize.timer=0 end)
+ end
+end
+
+end -- resize
+
+function SendKeyEvent(code,modif,down)
+ if not down then return false end
+ print_debug("Key pressed: ", code, modif, "\n")
+ if key_text[code] then
+ SendKeyCommand (key_text[code],mod_text[modif])
+ elseif char_text[code] and bit.band(modif,wx.wxMOD_MORE_THAN_SHIFT)>0 then
+ SendKeyCommand (char_text[code],mod_text[modif])
+ else
+ return false
+ end
+ return true
+end
+
+do local inputstr = ""
+
+function SendCharEvent(event)
+ local code=event:GetKeyCode()
+ if char_shift_text[code] then
+ SendKeyCommand (char_shift_text[code],"SHIFT")
+ return false
+ else
+ return EditInputLine(code)
+ end
+end
+
+function EditInputLine(code)
+ if console then inputstr=gswin.editwindow:GetValue()end
+ if code==wx.WXK_RETURN then
+ if inputstr=="" then RunPScode:add("/RETURN /NORM KEYCOMMAND") end
+ RunInputString()
+ elseif code==wx.WXK_BACK then
+ inputstr=inputstr:sub(1,-2)
+ if console then
+ local pos=gswin.editwindow:GetInsertionPoint()
+ gswin.editwindow:Remove(pos-1, pos)
+ end
+ elseif code > 31 and code < 127 then
+ local char=string.char(code)
+ inputstr=inputstr .. char
+ if console then gswin.editwindow:WriteText(char) end
+ else
+ return false
+ end
+ return true
+end
+
+function RunInputString()
+ if console then inputstr=gswin.editwindow:GetValue()end
+ if inputstr~="" then
+ RunPScode:add("{" .. inputstr .. "} stopped {handleerror} if")
+ end
+ inputstr="" if console then gswin.editwindow:Clear() end
+end
+
+end -- inputstr
+
+function StartCheckUpdate ()
+ if gsstat.update~=0 then return end
+ gsstat.update=SetDelayedDo(300,CheckUpdate)
+end
+function StopCheckUpdate ()
+ if gsstat.update~=0 then ResetDelayedDo(gsstat.update) gsstat.update=0 end
+end
+function CheckUpdate ()
+ gsstat.update=0
+ if gsstat.working then return end
+ if gsobj.instancechecker:IsLockUpdated() then
+ SendEventCommand ("REFRESH","(%s) 1 /THISFILE",gsargs.psf_dir..gsargs.psf_name)
+ else
+ StartCheckUpdate ()
+ end
+end
+
+function InitializeGS ()
+
+ gsobj.gsdll = wxghost.wxGsDll(gsargs.dllloc, gsargs.libloc, gsargs.fontloc)
+
+ if (not gsobj.gsdll:isOK()) then
+ ExitPSV_init() error(_T("Failed to link to Ghostscript library"),1)
+ end
+
+ gsobj.ghostscript = wxghost.wxLuaGhostscript()
+
+ gswin.gswindow = wxghost.wxGsWindowX(frame,wx.wxID_ANY)
+
+ local stdoutstr = ""
+ gsobj.ghostscript.OnStdout = function(self, GsOut)
+ stdoutstr=stdoutstr..GsOut
+ local line,rest=stdoutstr:match("^(.*\n)([^\n]*)$")
+ if line then
+ stdoutstr=rest
+ local _m,_p = line:match("^(!PSV_)(.*)$")
+ if _m then
+ CallPSVhook(_p)
+ else
+ print_message(line)
+ end
+ end
+ if gsstat.ready and wxapp:Pending() then
+ gsobj.ghostscript:Suspend()
+ end
+ end
+
+ gsobj.ghostscript.OnStderr = function(self, GsOut)
+ print(GsOut)
+ if gsstat.ready and wxapp:Pending() then
+ gsobj.ghostscript:Suspend()
+ end
+ end
+
+ gsobj.ghostscript.OnStdin = function(self)
+ print_debug("!!!StdIn (PS_View?)\n")
+ if gsstat.ready then
+ gsobj.ghostscript:Suspend()
+ if not StdInCode:isEmpty() then
+ return StdInCode:get() .. "\n"
+ else
+ return "\n"
+ end
+ else
+ return ""
+ end
+ end
+
+ -- gsobj.ghostscript.OnPoll = function(self)
+ -- print_debug("!!!Poll callback\n")
+ -- return 0
+ -- end
+
+ gsobj.ghostscript.OnDisplayOpen = function(self, Image)
+ print_debug("!Display_Open", Image, "\n")
+ if gsstat.ready and wxapp:Pending() then
+ gsobj.ghostscript:Suspend()
+ end
+ return 0
+ end
+
+ -- gsobj.ghostscript.OnDisplayPreSize = function(self, Image) return 0 end
+ gsobj.ghostscript.OnDisplaySize = function(self, Image)
+ print_debug("!Display_Size (image ready)", Image, "\n")
+ if gsstat.drawoverlay then
+ gsobj.overlay=Image
+ gsobj.overlay.w=Image:GetWidth() gsobj.overlay.h=Image:GetHeight()
+ gsobj.overlay.r=false
+ else
+ gsobj.image=Image
+ gsobj.image.w=Image:GetWidth() gsobj.image.h=Image:GetHeight()
+ gswin.gswindow:SetGsImage(gsobj.image) gsobj.image.r=false
+ end
+ if gsstat.ready and wxapp:Pending() then
+ gsobj.ghostscript:Suspend()
+ end
+ return 0
+ end
+
+ gsobj.ghostscript.OnDisplaySync = function(self, Image)
+ print_debug("!Display_Sync", Image, "\n")
+ if gsstat.drawoverlay and gsobj.overlay.r or gsobj.image.r then
+ gswin.gswindow:Refresh()
+ end
+ if gsstat.drawoverlay then gsobj.overlay.r=true else gsobj.image.r=true end
+ if gsstat.ready and wxapp:Pending() then
+ gsobj.ghostscript:Suspend()
+ end
+ return 0
+ end
+
+ gsobj.ghostscript.OnDisplayPage = function(self, Image, copies, flush)
+ print_debug("!!!Display_Page (PS_View?)\n")
+ if gsstat.ready then
+ gsobj.ghostscript:Suspend()
+ gswin.gswindow:Refresh()
+ gsstat.working=false
+ end
+ return 0
+ end
+
+ local rect,mul=nil,0
+ -- OnDisplayUpdate is called on every graphic object (it is too frequent to update window)
+ gsobj.ghostscript.OnDisplayUpdate = function(self, Image, Rect)
+ if gsstat.ready then
+ -- if rect then rect=rect:Union(Rect) else rect=wx.wxRect(Rect) end
+ if gsstat.refresh==0 then
+ gsstat.refresh=SetTimer(gsstat.refr_int)
+ elseif CheckTimer(gsstat.refresh) then
+ if gsstat.drawoverlay then gsobj.overlay.r=true else gsobj.image.r=true end
+ gswin.gswindow:Refresh()
+ -- gswin.gswindow:Refresh(false,rect)
+ if gsstat.refr_int==0 then
+ local sw=wx.wxStopWatch()
+ -- gswin.gswindow:Refresh()
+ gswin.gswindow:Update()
+ gsstat.refr_int=5*sw:Time()
+ print_debug(_T("Update Interval: ") .. gsstat.refr_int .. " ms\n")
+ end
+ gsstat.refresh=SetTimer(gsstat.refr_int)
+ end
+ if wxapp:Pending() then
+ gsobj.ghostscript:Suspend()
+ end
+ end
+ return 0
+ end
+
+ -- gsobj.ghostscript.OnDisplayPreClose = function(self, Image) return 0 end
+ gsobj.ghostscript.OnDisplayClose = function(self, Image)
+ print_debug("!Display_Close (image delete)", Image, "\n")
+ -- close may be called more than one time, so delay window destroy
+ return 0
+ end
+
+ return true
+end
+
+function StartGS ()
+
+ gsobj.ghostscript:Create(gsobj.gsdll, gsargs.args, wxghost.wxGhostscript.colour) -- greyscale)
+
+ local err=gsobj.ghostscript:GetExitCode()
+ if err==wxghost.e_Info then return false end
+ if err==wxghost.e_Quit then return false end
+ if (gsobj.ghostscript:isReady()) then
+ gsstat.ready=true
+ else
+ ExitPSV_init() error(_T("Failed to start Ghostscript"),1)
+ end
+
+ RunPScode:insert("start")
+
+ return true
+end
+
+function PushRunGS ()
+ local torun, isdsc = RunPScode, gsobj.dscthread
+ if isdsc then
+ if not wx.wxIsBusy() then wx.wxBeginBusyCursor() end
+ torun=RunDSCcode
+ if gsobj.dscthread()==0 then
+ if torun:isEmpty() then gsobj.dscthread=nil
+ else gsobj.dscthread=function() return 0 end end
+ end
+ end
+ if gsstat.working then
+ if gsobj.ghostscript:isSuspended() then
+ gsobj.ghostscript:Resume()
+ return true
+ elseif gsobj.ghostscript:isReady() then
+ if not isdsc then
+ if gsstat.drawoverlay then gsobj.overlay.r=true else gsobj.image.r=true end
+ gswin.gswindow:Refresh()
+ end
+ gsstat.working=false
+ end
+ end
+ if not gsstat.working then
+ if torun:isEmpty() then
+ if isdsc then return true -- read more DSC
+ else
+ if wx.wxIsBusy() then wx.wxEndBusyCursor() end
+ StartCheckUpdate()
+ return false -- nothing to do
+ end
+ elseif gsobj.ghostscript:isReady() then
+ if not wx.wxIsBusy() then wx.wxBeginBusyCursor() end
+ StopCheckUpdate()
+ gsstat.working=true gsstat.refresh=0
+ local code=torun:getMax()
+ print_debug(_T("RunPS>>") .. code .."\n")
+ gsobj.ghostscript:RunString(code)
+ return true
+ end
+ end
+ return not IsGSerror()
+end
+
+function ClosePSV ()
+-- print_debug(wxlua.GetGCUserdataInfo(true))
+-- print_debug(wxlua.GetTrackedObjectInfo(true)) -- !!
+ if gsstat.ready then
+ if gsstat.update~=0 then ResetDelayedDo(gsstat.update) end
+ gsobj.gstimer:Stop()
+ gsstat.ready=false
+ print_debug(_T("Close, quit\n"))
+ gsobj.ghostscript:Terminate(wxghost.e_Quit)
+ end
+ if trans then trans:close() end -- for locale text extraction
+ if wx.wxIsBusy() then wx.wxEndBusyCursor() end
+ if gswin.gswindow then gswin.gswindow:Destroy() gswin.gswindow=nil end
+ if gsobj.instancechecker then gsobj.instancechecker:Destroy() end
+ -- ConfigSavePaths(gsargs)
+ ConfigSaveFramePosition(frame, "MainWindow")
+ if console then
+ ConfigSaveFramePosition(console, "ConsoleWindow")
+ console:Destroy()
+ console=nil
+ end
+ gsobj.config:Flush()
+ frame:Destroy()
+end
+
+function IsGSerror()
+ if gsobj.ghostscript:isSuspended() or gsobj.ghostscript:isReady() then
+ return false
+ end
+ ExitPSV(gsobj.ghostscript:GetExitCode())
+ return true
+end
+
+function ExitPSV (err_code)
+ if err_code==0 then frame:Close() return end
+ if gsstat.ready then
+ if gsstat.update~=0 then ResetDelayedDo(gsstat.update) end
+ gsobj.gstimer:Stop()
+ gsstat.ready=false
+ gsobj.ghostscript:Terminate(err_code)
+ end
+ if wx.wxIsBusy() then wx.wxEndBusyCursor() end
+ if gsobj.instancechecker then gsobj.instancechecker:Destroy() end
+ if console then
+ console:Show() frame:Hide()
+ console:Connect(wx.wxEVT_CLOSE_WINDOW, function (event)
+ console:Destroy() frame:Destroy() end)
+ else
+ frame:Destroy()
+ end
+end
+
+function ExitPSV_init ()
+ if gsstat.ready then
+ gsstat.ready=false
+ gsobj.ghostscript:Terminate(gsobj.ghostscript:GetExitCode())
+ end
+ if wx.wxIsBusy() then wx.wxEndBusyCursor() end
+ if gsobj.instancechecker then gsobj.instancechecker:Destroy() end
+ if console then wxapp:SetTopWindow(console) end
+ if frame then frame:Destroy() end
+end
+
+do local time, todo = 0, {}
+
+function TimerTick()
+ time=time+1
+ if todo[time] then
+ todo[time]() todo[time]=nil
+ wx.wxWakeUpIdle()
+ end
+end
+function GetCurrTime() return time end
+function SetTimer(delta) return time+math.ceil(delta/20) end
+function CheckTimer(fin) return time>=fin end
+function SetDelayedDo(delta,run)
+ local fin=SetTimer(delta)
+ while todo[fin] do fin=fin+1 end
+ todo[fin]=run
+ return fin
+end
+function ResetDelayedDo(fin) todo[fin]=nil end
+
+end
+
+function ConnectEvents ()
+
+ gsobj.gstimer = wx.wxTimer(frame)
+ frame:Connect(wx.wxEVT_TIMER, TimerTick)
+ gsobj.gstimer:Start(20)
+
+ local in_iddle = false
+ frame:Connect(wx.wxEVT_IDLE, function (event)
+ if in_iddle then return end in_iddle=true
+ if PushRunGS() then event:RequestMore() end
+ in_iddle=false end)
+
+ frame:Connect(wx.wxEVT_CLOSE_WINDOW, function (event)
+ ClosePSV() event:Skip() end)
+
+ frame:Connect(wx.wxEVT_COMMAND_MENU_SELECTED, function (event)
+ SendMenuCommand(gsobj.menu:getName(event:GetId()),"NORM")
+ end )
+
+ -- gswin.gswindow:Connect(wx.wxEVT_ERASE_BACKGROUND, function (event) end)
+ gswin.gswindow:SetBackgroundStyle(wx.wxBG_STYLE_CUSTOM)
+
+ gswin.gswindow:Connect(wx.wxEVT_SIZE, function (event)
+ local size = event:GetSize()
+ ProcessResizeEvent(size:GetWidth(),size:GetHeight())
+ event:Skip()
+ end )
+
+ gswin.gswindow:Connect(wx.wxEVT_LEFT_DOWN, MouseButtonEvent)
+ gswin.gswindow:Connect(wx.wxEVT_LEFT_UP, MouseButtonEvent)
+ gswin.gswindow:Connect(wx.wxEVT_LEFT_DCLICK, MouseButtonEvent)
+ gswin.gswindow:Connect(wx.wxEVT_RIGHT_DOWN, MouseButtonEvent)
+ gswin.gswindow:Connect(wx.wxEVT_RIGHT_UP, MouseButtonEvent)
+ gswin.gswindow:Connect(wx.wxEVT_RIGHT_DCLICK, MouseButtonEvent)
+ gswin.gswindow:Connect(wx.wxEVT_MOUSEWHEEL, MouseWheelEvent)
+ gswin.gswindow:Connect(wx.wxEVT_MOTION, MouseMotionEvent)
+
+
+ PrepareKeyNames()
+
+ gswin.gswindow:Connect(wx.wxEVT_KEY_DOWN, function (event)
+ if not SendKeyEvent(event:GetKeyCode(),event:GetModifiers(),true) then event:Skip() end
+ end )
+ gswin.gswindow:Connect(wx.wxEVT_KEY_UP, function (event)
+ if not SendKeyEvent(event:GetKeyCode(),event:GetModifiers(),false) then event:Skip() end
+ end )
+ gswin.gswindow:Connect(wx.wxEVT_CHAR, function (event)
+ if not SendCharEvent(event) then event:Skip() end
+ end )
+
+end
+
+function InitializeConsole()
+ console=console:DynamicCast("wxFrame")
+ -- assume that console frame has one child, and this is TextCtrl !
+ gswin.logwindow = console:GetChildren():Item(0):GetData():DynamicCast("wxTextCtrl")
+ gswin.editwindow = wx.wxTextCtrl(console, wx.wxID_ANY, "",
+ wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxTE_PROCESS_ENTER)
+ consolesizer=wx.wxBoxSizer(wx.wxVERTICAL)
+ consolesizer:Add(gswin.logwindow,1,wx.wxEXPAND)
+ consolesizer:AddSpacer(2)
+ consolesizer:Add(gswin.editwindow,0,wx.wxEXPAND)
+ console:SetSizerAndFit(consolesizer)
+ gswin.editwindow:SetFocus()
+
+ gswin.logwindow:Connect(wx.wxEVT_CHAR, function (event)
+ if event:GetKeyCode()==wx.WXK_RETURN then RunInputString()
+ else gswin.editwindow:EmulateKeyPress(event) end event:Skip()
+ end )
+ gswin.editwindow:Connect(wx.wxEVT_COMMAND_TEXT_ENTER, function (event)
+ RunInputString()
+ end )
+end
+
+function PSFName(name)
+ if not name or name=="" then return "","",0 end
+ local fname=wx.wxFileName(name)
+ fname:Normalize()
+ local resdir=fname:GetVolume() .. fname.GetVolumeSeparator() ..
+ fname:GetPath(wx.wxPATH_GET_SEPARATOR,wx.wxPATH_UNIX)
+ local resfn=fname:GetFullName(wx.wxPATH_UNIX)
+ return resdir,resfn,#resdir
+end
+
+function SetPSFile(fdir,fname)
+ gsargs.psf_dir, gsargs.psf_name = fdir,fname
+ SetPSTitle(fname)
+ if gsobj.instancechecker then gsobj.instancechecker:Destroy() end
+ gsobj.instancechecker = CreateInstanceChecker()
+ gsobj.instancechecker:IsAnotherInstance()
+end
+
+function SetPSTitle(fname)
+ local wtitle=PS_VIEW_NAME
+ if fname~="" then wtitle=fname .. " -- " .. wtitle end
+ frame:SetTitle(wtitle)
+ if console then console:SetTitle(wtitle .. _T(" Console")) end
+end
+
+function PrintUsageInfo(appname,luaname)
+ print(_T("This is ") .. PS_VIEW_VERSION_STRING .. _T(" working on wxLuaGhostscript;\n"))
+ print(_T("built with ") .. wxlua.wxLUA_VERSION_STRING .. _T(" and ") .. wx.wxVERSION_STRING)
+ if gsobj.gsdll then
+ print(_T(";\nlinked with Ghostscript ") ..string.format("%g",gsobj.gsdll:GetVersion())) end
+ print(_T(".\n\nUsage: ") .. appname .. _T(" [-h|--help] [-c|--console] [-l|--lua] ")
+ .. luaname .. _T(" [options] [-p|--ps] PS_View.ps [-- [more options]]\n"))
+ print(_T(" -h, --help help on command line arguments;\n"))
+ print(_T(" -c, --console show message console;\n"))
+ print(_T(" -l, --lua wxLua script to construct application;\n"))
+ print(_T(" -p, --ps PostScript program to run;\n"))
+ print(_T(" -q, --quiet turn off most of messages;\n"))
+ print(_T(" -v, --verbose turn on verbose/debug mode and console;\n"))
+ print(_T(" -n, --new open new window for document;\n"))
+ print(_T(" -w, --watch watch for document changes;\n"))
+ print(_T(" -g, --gsdll path to Ghostscript .dll/.so file;\n"))
+ print(_T(" -i, --gslib paths to Ghostscript init files;\n"))
+ print(_T(" -s, --gsset ghostscript parameter (-s equivalent);\n"))
+ print(_T(" -d, --gsdef ghostscript parameter (-d equivalent);\n"))
+ print(_T(" -- all following argument will be directly passed to\n"))
+ print(_T(" Ghostscript before the PostScript (-p) program name;\n"))
+ if console then console:Show() end
+end
+
+function GetParameter(argt,i,short,long)
+ assert(argt[i],"Assertion falied -- parameter number out of range")
+ local _m,_p = argt[i]:match("^(%-"..short..")(.*)$")
+ if not _m then _m,_p = argt[i]:match("^(%-%-"..long..")(.*)$") end
+ if not _m then return false end
+ if _p=="" then return true
+ else
+ error(_T("Option: ") .. _m .. _T(" has a unexpected value: ") .. _p ..
+ _T("\nUse -h or --help option for usage.\n"))
+ end
+end
+
+function GetParameterValue(argt,i,short,long)
+ assert(argt[i],"Assertion falied -- parameter number out of range")
+ local _m,_p = argt[i]:match("^(%-"..short..")(.*)$")
+ if not _m then _m,_p = argt[i]:match("^(%-%-"..long..")(.*)$") end
+ if not _m then return false,0 end
+ if _p=="" then
+ local _n=argt[i+1]
+ if _n and _n:sub(1,1)~="-" then return _n,1
+ else
+ error(_T("Option: ") .. _m .. _T(" must have a value.") ..
+ _T("\nUse -h or --help option for usage.\n"))
+ end
+ else
+ return _p,0
+ end
+end
+
+function ParseCommandLine(argt)
+ if argt then
+ local function addgsarg(v) table.insert(gsargs.args, v) end
+ -- arguments pushed into wxLua are
+ -- [C++ app and it's args][lua prog at 0][args for lua start at 1]
+ local n,to_gs,psf_name = 0,false,nil
+ while argt[n-1] do n = n - 1 end
+
+ -- n == exe program name
+ local i,_v,_i=n+1
+ repeat
+ print_debug("args: ", i, argt[i], "\n")
+ _v,_i=false,0
+ -- 0 == this program name
+ if i==0 then _v=true end
+ if to_gs then
+ _v=argt[i] addgsarg(_v)
+ end
+ if argt[i]=="--" then
+ to_gs=true
+ _v=true
+ assert(i>0,"Assert failed -- parameter passing error")
+ end
+ if not _v then
+ _v = GetParameter(argt,i,"h","help")
+ if _v then
+ PrintUsageInfo(arg[n],arg[0])
+ return false
+ end
+ end
+ if not _v then
+ _v = GetParameter(argt,i,"c","console")
+ -- console parameter already processed
+ end
+ if not _v then
+ _v = GetParameter(argt,i,"q","quiet")
+ if _v then verbose=v_quiet
+ addgsarg("-q") -- -q implies also quiet Ghostscript
+ end
+ end
+ if not _v then
+ _v = GetParameter(argt,i,"v","verbose")
+ if _v then verbose=v_verbose
+ if console then console:Show() end -- -v implies -c
+ end
+ end
+ if not _v then
+ _v,_i = GetParameterValue(argt,i,"l","lua")
+ -- lua parameter already processed -- check only for bad usage
+ if _v then
+ if i>0 then
+ error(_T("Only one wxLua script can be run -- superfluous: ") .. arg[i]
+ .. _T(" parameter.") ..
+ _T("\nUse -h or --help option for usage.\n"))
+ end
+ assert(i==-1,"Assert failed -- parameter passing error")
+ end
+ end
+ if not _v then
+ _v = GetParameter(argt,i,"n","new")
+ if _v then force_open=true end
+ end
+ if not _v then
+ _v,_i = GetParameterValue(argt,i,"g","gsdll")
+ if _v then
+ if gsargs.dllloc~="" then
+ print_message(_T("Warning -- parameter: ") .. argt[i] .. _T(" overrides previous value.\n"))
+ end
+ gsargs.dllloc=_v
+ end
+ end
+ if not _v then
+ _v,_i = GetParameterValue(argt,i,"i","gslib")
+ if _v then table.insert(gsargs.libs,_v) end
+ end
+ if not _v then
+ _v,_i = GetParameterValue(argt,i,"s","gsset")
+ if _v then addgsarg("-s".._v)
+ if _v:find("INPUT[=#]") then psf_name=_v:match("INPUT[=#](.+)") end
+ end
+ end
+ if not _v then
+ _v,_i = GetParameterValue(argt,i,"d","gsdef")
+ if _v then addgsarg("-d".._v) end
+ end
+ if not _v then
+ _v,_i = GetParameterValue(argt,i,"p","ps")
+ if _v then table.insert(gsargs.progs,_v) end
+ end
+ if not _v then
+ if not argt[i]:match("^%-") then
+ _v=argt[i] table.insert(gsargs.progs, _v)
+ end
+ end
+ if not _v then
+ error(_T("Unrecognized option: ") .. argt[i] ..
+ _T("\nUse -h or --help option for usage.\n"))
+ end
+ i=i+1+_i
+ until i > #argt
+ -- and try to find name of file to be opened
+ -- (it is used for window title, and refresh mechanism
+ if psf_name then gsargs.psf_dir, gsargs.psf_name = PSFName(psf_name) end
+ end
+ return true
+end
+
+function FixGSPaths(gsargs)
+ local libloc, gslib, psvlib = gsargs.libloc, gsargs.gslib, gsargs.psvlib
+ local libstr, sep, fname = "", ":", wx.wxFileName()
+ if wx.__WXMSW__ or wx.__WXOS2__ then sep=";"
+ elseif wx.__WXMAC__ then sep="," end
+
+ if gsargs.dllloc=="" and os.getenv("GS_DLL") then
+ gsargs.dllloc=os.getenv("GS_DLL") end
+ if gsargs.fontloc=="" and os.getenv("GS_FONTS") then
+ gsargs.fontloc=os.getenv("GS_FONTS") end
+
+ if gslib=="" then
+ if gsargs.dllloc~="" then
+ fname:Assign(gsargs.dllloc)
+ fname:RemoveDir(fname:GetDirCount()-1) fname:AppendDir("lib")
+ fname:SetName("gs_init") fname:SetExt("ps")
+ if fname:FileExists() then gslib = PSFName(fname:GetFullPath()) end
+ end
+ end
+
+ if psvlib=="" then
+ for i,v in ipairs(gsargs.progs) do
+ fname:Assign(v)
+ if fname:FileExists() then
+ if fname:IsAbsolute() then psvlib = PSFName(fname:GetFullPath()) end
+ else
+ fname:Assign(wx.wxFileName(arg[0]):GetPath(wx.wxPATH_GET_VOLUME),v)
+ if fname:FileExists() then psvlib = PSFName(fname:GetFullPath()) end
+ end
+ end
+ end
+
+ for i,v in ipairs(gsargs.libs) do
+ if libstr~="" then libstr=libstr..sep..v else libstr=v end
+ end
+ if libstr=="" and libloc~="" then libstr=gslibloc end
+
+ if gslib~="" and not libstr:find(gslib,1,true) then
+ if libstr~="" then libstr=gslib..sep..libstr else libstr=gslib end
+ end
+ if psvlib~="" and not libstr:find(psvlib,1,true) then
+ if libstr~="" then libstr=libstr..sep..psvlib else libstr=psvlib end
+ end
+
+ if libstr=="" and os.getenv("GS_LIB") then libstr=os.getenv("GS_LIB") end
+
+ gsargs.libloc, gsargs.gslib, gsargs.psvlib = libstr, gslib, psvlib
+
+ -- add default parameters at begining
+ for i,v in ipairs(gsargs.dftpars) do table.insert(gsargs.args,i,v) end
+ -- and PS programs at the end
+ for i,v in ipairs(gsargs.progs) do table.insert(gsargs.args,v) end
+end
+
+
+function SetLocale(lang)
+ local progdir=wx.wxFileName(arg[0]):GetPath(wx.wxPATH_GET_VOLUME)
+ if progdir=="" then progdir="." end
+ gsobj.locale=wx.wxLocale(lang)
+ os.setlocale("C","numeric")
+ if gsobj.locale:IsOk() then
+ gsobj.locale.AddCatalogLookupPathPrefix(progdir)
+ gsobj.locale:AddCatalog("psv") -- locale `domain'
+ end
+end
+
+function PrepareLocale()
+ local lang=wx.wxLANGUAGE_DEFAULT
+ if psvpars.language~="" then
+ local langinf=wx.wxLocale.FindLanguageInfo(psvpars.language)
+ if langinf then lang=langinf.Language end
+ end
+ SetLocale(lang)
+-- trans=io.open("trans.txt","a")
+ function _T(str)
+-- trans:write("msgid: \""..str.."\"\n")
+ return wx.wxGetTranslation(str)
+ end
+ PS_VIEW_VERSION_STRING=string.format(_T("%s, version %g"), PS_VIEW_NAME, PS_VIEW_VERSION)
+end
+
+function CreateInstanceChecker()
+ local checker={}
+ function checker:Create()
+ -- wx.wxFileName.GetTempDir() -- not implemented in wxLua
+ -- os.tmpname() -- gives bad result under MSW
+ local fname=wx.wxFileName()
+ fname:AssignTempFileName("." .. PS_VIEW_NAME)
+ if fname:IsOk() then
+ wx.wxRemoveFile(fname:GetFullPath())
+ else return false end
+ fname:AssignDir(fname:GetPath(wx.wxPATH_GET_VOLUME))
+ fname:AppendDir("." .. PS_VIEW_NAME)
+ if not fname:DirExists() then
+ if not fname:Mkdir() then return false end
+ end
+ self.dname=wx.wxFileName(fname)
+ fname:SetName("." .. PS_VIEW_NAME .. MakeNameHash()) fname:SetExt("lock")
+ self.fname=wx.wxFileName(fname)
+ self.created=false self.time=nil
+ end
+--
+ function checker:SetTime()
+ local ok,modtime=self.fname:GetTimes()
+ if ok then self.time=modtime end
+ end
+ function checker:CheckTime()
+ local ok,modtime=self.fname:GetTimes()
+ if modtime:IsLaterThan(self.time) then
+ self.time=modtime return true
+ else return false end
+ end
+ function checker:CreateLock()
+ local file=wx.wxFile(self.fname:GetFullPath(),wx.wxFile.write)
+ if file:IsOpened() then
+ file:Write(tostring(wx.wxGetProcessId())) file:Close()
+ end
+ self:SetTime() self.created=true
+ end
+ function checker:UpdateLock()
+ self.fname:Touch()
+ self:SetTime()
+ end
+--
+ function checker:IsAnotherInstance()
+ if not self.dname or not self.fname then return false end
+ if not self.dname:DirExists() then self.dname:Mkdir() end
+ if self.fname:FileExists() then
+ self:UpdateLock() return true
+ else
+ self:CreateLock() return false
+ end
+ end
+--
+ function checker:IsLockUpdated()
+ if not self.dname or not self.fname then return false end
+ if not self.dname:DirExists() then self.dname:Mkdir() end
+ if self.fname:FileExists() then
+ return self:CheckTime()
+ else
+ self:CreateLock() return true
+ end
+ end
+--
+ function checker:Destroy()
+ if not self.dname or not self.fname then return false end
+ if not self.dname:DirExists() then return false end
+ if self.created and self.fname:FileExists() then
+ wx.wxRemoveFile(self.fname:GetFullPath())
+ end
+ local old,mod=wx.wxDateTime(os.time())
+ old:Subtract(wx.wxDateSpan.Days(7))
+ local dir=wx.wxDir(self.dname:GetPath(wx.wxPATH_GET_VOLUME))
+ local f,filen=dir:GetFirst()
+ local fname=wx.wxFileName(dir:GetName(),filen)
+ while f do
+ ok,mod=fname:GetTimes()
+ if mod:IsEarlierThan(old) then wx.wxRemoveFile(fname:GetFullPath()) end
+ f,filen=dir:GetNext() fname:SetFullName(filen)
+ end
+ if not dir:HasFiles() then wx.wxRmdir(dir:GetName()) end
+ self.dname=nil self.fname=nil self.time=nil
+ return true
+ end
+--
+ checker:Create()
+ return checker
+end
+
+function MakeNameHash()
+ local str = PS_VIEW_NAME .. wx.wxGetUserId() .. gsargs.psf_dir .. gsargs.psf_name
+ local hash,hasht = 231172,{}
+ for i,v in ipairs{str:byte(1,#str)} do hash = hash + 8^(i%13)*v end
+ while hash>1 do table.insert(hasht,65+hash%26%26) hash=math.floor(hash/26) end
+ return string.char(unpack(hasht))
+end
+
+function ConfigGetParameters()
+ gsobj.config:SetPath("/PSV_Parameters")
+ local _, _cmd = gsobj.config:Read("cmdpars", "")
+ local _, _lang = gsobj.config:Read("language", "")
+ if psvpars.cmd_pars=="" and _cmd then psvpars.cmd_pars = _cmd end
+ if psvpars.language=="" and _lang then psvpars.language = _lang end
+end
+
+function ConfigGetPaths(gsargs)
+ gsobj.config:SetPath("/GhostscriptPaths")
+ local _, _gsdll = gsobj.config:Read("dll", "")
+ local _, _gslibs = gsobj.config:Read("libs", "")
+ local _, _gsfont = gsobj.config:Read("font", "")
+ local _, _gslib = gsobj.config:Read("gslib", "")
+ local _, _psvlib = gsobj.config:Read("psvlib", "")
+ if gsargs.dllloc=="" and _gsdll then gsargs.dllloc =_gsdll end
+ if gsargs.libloc=="" and _gslibs then gsargs.libloc =_gslibs end
+ if gsargs.fontloc=="" and _gsfont then gsargs.fontloc=_gsfont end
+ if gsargs.gslib=="" and _gslib then gsargs.gslib =_gslib end
+ if gsargs.psvlib=="" and _psvlib then gsargs.psvlib =_psvlib end
+end
+
+function ConfigSavePaths(gsargs)
+ gsobj.config:SetPath("/GhostscriptPaths")
+ gsobj.config:Write("dll", gsargs.dllloc)
+ gsobj.config:Write("libs", gsargs.libloc)
+ gsobj.config:Write("font", gsargs.fontloc)
+ gsobj.config:Write("gslib", gsargs.gslib)
+ gsobj.config:Write("psvlib", gsargs.psvlib)
+end
+
+function ConfigRestoreFramePosition(window, windowName)
+ gsobj.config:SetPath("/"..windowName)
+ local _, s = gsobj.config:Read("s", -1)
+ local _, x = gsobj.config:Read("x", -1)
+ local _, y = gsobj.config:Read("y", -1)
+ local _, w = gsobj.config:Read("w", -1)
+ local _, h = gsobj.config:Read("h", -1)
+ if s ~= -1 then
+ local cX, cY, cW, cH = wx.wxClientDisplayRect()
+ if x < cX then x = cX end
+ if y < cY then y = cY end
+ if w > cW then w = cW end
+ if h > cH then h = cH end
+ window:SetSize(x, y, w, h)
+ end
+ if s == 1 then window:Maximize(true) end
+end
+
+function ConfigSaveFramePosition(window, windowName)
+ gsobj.config:SetPath("/"..windowName)
+ local s = 0
+ local w, h = window:GetSizeWH()
+ local x, y = window:GetPositionXY()
+
+ if window:IsMaximized() then s = 1
+ elseif window:IsIconized() then s = 2 end
+ gsobj.config:Write("s", s)
+ if s == 0 then
+ gsobj.config:Write("x", x)
+ gsobj.config:Write("y", y)
+ gsobj.config:Write("w", w)
+ gsobj.config:Write("h", h)
+ end
+end
+
+function Main()
+ wxapp = wx.wxGetApp()
+ console=wxapp:GetTopWindow() -- or `nil' if console not created
+ wxapp:SetAppName("psv")
+
+ gsobj.config = wx.wxFileConfig() -- default setting are very nice
+ ConfigGetParameters()
+ PrepareLocale()
+
+ if not ParseCommandLine(arg) then return true end
+
+ if #gsargs.progs==0 then
+ error(_T("No PostScript programe give in commandline, I don't know what to do -- quiting.\n"))
+ end
+
+ gsobj.instancechecker = CreateInstanceChecker()
+ if not gsobj.instancechecker then
+ error(_T("Unable to create instance checker, check lock in temp directory -- quiting.\n"))
+ end
+ if gsobj.instancechecker:IsAnotherInstance() and not force_open then
+ print_message(_T("Another instance of PS_View is running -- quiting.\n"))
+ gsobj.instancechecker:Destroy()
+ return true
+ elseif force_open then gsobj.instancechecker.created=true end
+
+
+ ConfigGetPaths(gsargs)
+
+ -- create the wxFrame window
+ frame = wx.wxFrame( wx.NULL, -- no parent for toplevel windows
+ wx.wxID_ANY, -- don't need a wxWindow ID
+ PS_VIEW_NAME, -- caption on the frame
+ wx.wxDefaultPosition, -- let system place the frame
+ wx.wxDefaultSize, -- set the size of the frame
+ wx.wxDEFAULT_FRAME_STYLE ) -- use default frame styles
+
+ ConfigRestoreFramePosition(frame, "MainWindow")
+ frame:SetIcons(iconimg)
+
+ if console then
+ InitializeConsole()
+ ConfigRestoreFramePosition(console, "ConsoleWindow")
+ console:SetIcons(icontxt)
+ wxapp:SetTopWindow(frame)
+ end
+
+ SetPSTitle(gsargs.psf_name)
+
+ FixGSPaths(gsargs)
+
+ InitializeGS()
+ StartGS()
+
+ ConnectEvents ()
+
+ -- show the frame window
+ frame:Show(true)
+ gswin.gswindow:SetFocus()
+
+ wx.wxWakeUpIdle() -- probably not needed, but inserted for sure
+end
+
+
+Main()
diff --git a/Master/tlpkg/tlpsv/psv_about.ps b/Master/tlpkg/tlpsv/psv_about.ps
new file mode 100644
index 00000000000..03b22a1b7b3
--- /dev/null
+++ b/Master/tlpkg/tlpsv/psv_about.ps
@@ -0,0 +1,1336 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.96 Copyright 2005 Radical Eye Software
+%%Title: psv_about.dvi
+%%CreationDate: Thu Apr 10 15:45:44 2008
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 567 392
+%%DocumentFonts: QuasiSwiss-Regular
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips psv_about.dvi
+%DVIPSParameters: dpi=9000, comments removed
+%DVIPSSource: TeX output 2008.04.10:1545
+%%BeginProcSet: tex.pro 0 0
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: qhv.enc 0 0
+/encqhv[
+/alpha
+/Delta
+/beta
+/delta
+/pi
+/Pi
+/Sigma
+/mu
+/ellipsis
+/f_k
+/Omega
+/ff
+/fi
+/fl
+/ffi
+/ffl
+/dotlessi
+/dotlessj
+/grave
+/acute
+/caron
+/breve
+/macron
+/ring
+/cedilla
+/germandbls
+/ae
+/oe
+/oslash
+/AE
+/OE
+/Oslash
+/space
+/exclam
+/quotedblright
+/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
+/exclamdown
+/equal
+/questiondown
+/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
+/quotedblleft
+/bracketright
+/circumflex
+/dotaccent
+/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
+/hungarumlaut
+/tilde
+/dieresis
+/Euro
+/Aogonek
+/Cacute
+/greater
+/greaterequal
+/approxequal
+/Eogonek
+/Iogonek
+/less
+/lessequal
+/Lslash
+/Nacute
+/asciitilde
+/asciicircum
+/ell
+/dagger
+/daggerdbl
+/Sacute
+/Scaron
+/Scommaaccent
+/degree
+/Tcommaaccent
+/ogonek
+/Uogonek
+/Ydieresis
+/Zacute
+/Zcaron
+/Zdotaccent
+/.notdef
+/braceleft
+/braceright
+/section
+/.notdef
+/aogonek
+/cacute
+/registered
+/copyright
+/divide
+/eogonek
+/iogonek
+/minus
+/multiply
+/lslash
+/nacute
+/plusminus
+/infinity
+/guillemotleft
+/guillemotright
+/paragraph
+/sacute
+/scaron
+/scommaaccent
+/bullet
+/tcommaaccent
+/.notdef
+/uogonek
+/ydieresis
+/zacute
+/zcaron
+/zdotaccent
+/.notdef
+/periodcentered
+/quotedbl
+/quotesingle
+/Agrave
+/Aacute
+/Acircumflex
+/Atilde
+/Adieresis
+/Aring
+/backslash
+/Ccedilla
+/Egrave
+/Eacute
+/Ecircumflex
+/Edieresis
+/Igrave
+/Iacute
+/Icircumflex
+/Idieresis
+/Eth
+/Ntilde
+/Ograve
+/Oacute
+/Ocircumflex
+/Otilde
+/Odieresis
+/currency
+/perthousand
+/Ugrave
+/Uacute
+/Ucircumflex
+/Udieresis
+/Yacute
+/Thorn
+/bar
+/agrave
+/aacute
+/acircumflex
+/atilde
+/adieresis
+/aring
+/underscore
+/ccedilla
+/egrave
+/eacute
+/ecircumflex
+/edieresis
+/igrave
+/iacute
+/icircumflex
+/idieresis
+/eth
+/ntilde
+/ograve
+/oacute
+/ocircumflex
+/otilde
+/odieresis
+/anglearc
+/diameter
+/ugrave
+/uacute
+/ucircumflex
+/udieresis
+/yacute
+/thorn
+/quotedblbase
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro 0 0
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
+@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
+newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
+closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
+/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
+currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
+N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
+neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
+rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
+scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
+lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
+ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
+/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
+pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
+restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
+/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
+setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
+moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
+matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
+savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ userdict begin /ori_setcmykcolor where {pop} {/ori_setcmykcolor /setcmykcolor
+load def} ifelse /ori_setrgbcolor where {pop} {/ori_setrgbcolor /setrgbcolor
+load def} ifelse /ori_setgray where {pop} {/ori_setgray /setgray load
+def} ifelse /ori_colorimage where {pop} {/ori_colorimage /colorimage
+load def} ifelse /ori_image where {pop} {/ori_image /image load def}
+ifelse /ori_imagemask where {pop} {/ori_imagemask /imagemask load def}
+ifelse /ori_fill where {pop} {/ori_fill /fill load def} ifelse /ori_eofill
+where {pop} {/ori_eofill /eofill load def} ifelse /ori_stroke where
+{pop} {/ori_stroke /stroke load def} ifelse /ori_show where {pop} {/ori_show
+/show load def} ifelse /ori_grestore where {pop} {/ori_grestore /grestore
+load def} ifelse /ori_gsave where {pop} {/ori_gsave /gsave load def}
+ifelse /hax_setcmykcolor /ori_setcmykcolor load def /maybe_black {
+4 copy 1 sub abs epsilon le exch 0 sub abs epsilon le and exch 0 sub
+abs epsilon le and exch 0 sub abs epsilon le and /if_delblack exch
+def } def /my_fill {userdict begin if_delblack {newpath} {ori_fill}
+ifelse end} def /my_eofill {userdict begin if_delblack {newpath} {ori_eofill}
+ifelse end} def /my_stroke {userdict begin if_delblack {newpath} {ori_stroke}
+ifelse end} def /my_show {userdict begin if_delblack {false charpath
+currentpoint newpath moveto} {ori_show} ifelse end} def /my_gsave {c_
+m_ y_ k_ ori_setcmykcolor ori_gsave c_ m_ y_ k_ setcmykcolor} def /my_grestore
+{ori_grestore currentcmykcolor setcmykcolor} def /eofill {userdict
+begin my_eofill end} def /fill {userdict begin my_fill end} def /stroke
+{userdict begin my_stroke end} def /show {userdict begin my_show end}
+def /gsave {userdict begin my_gsave end} def /grestore {userdict begin
+my_grestore end} def /setcmykcolor {userdict begin /k_ exch def /y_
+exch def /m_ exch def /c_ exch def c_ m_ y_ k_ hax_setcmykcolor end}
+def /setgray {ori_setgray currentcmykcolor setcmykcolor} def /setrgbcolor
+{ori_setrgbcolor currentcmykcolor setcmykcolor} def /hax_image { dup
+type cvlit /dicttype eq { /ImageDict exch def currentcolorspace dup
+length 1 eq ImageDict /ImageType get 1 eq and {0 get dup /DeviceRGB
+eq {/ncomp 3 def} if dup /DeviceGray eq {/ncomp 1 def} if /DeviceCMYK
+eq {/ncomp 4 def} if ImageDict /BitsPerComponent get 8 ne ncomp 1 ne
+and {/ncomp 0 def} if } {pop /ncomp 0 def} ifelse } { false 1 makeimagedict
+} ifelse ncomp 0 eq {ImageDict ori_image} {hax_image_} ifelse } def
+/hax_colorimage { makeimagedict hax_image_ } def /makeimagedict { dup
+/ncomp exch def dup 4 eq {/DeviceCMYK setcolorspace} if dup 3 eq {/DeviceRGB
+setcolorspace} if 1 eq {/DeviceGray setcolorspace} if /ImageDict 7
+dict def ImageDict begin {/MultipleDataSources true def ncomp array
+astore} if /DataSource exch def /ImageMatrix exch def /BitsPerComponent
+exch def /Height exch def /Width exch def /Decode [ncomp {0 1} repeat]
+def /ImageType 1 def end } def /data_str 65532 string def /data_str_
+8192 string def /merge_multi4 { ImageDict /DataSource get aload pop
+dup type cvlit /filetype eq { /fdatsrck exch def /fdatsrcy exch def
+/fdatsrcm exch def /fdatsrcc exch def /datasrck {fdatsrck data_str_
+readstring pop} def /datasrcy {fdatsrcy data_str_ readstring pop} def
+/datasrcm {fdatsrcm data_str_ readstring pop} def /datasrcc {fdatsrcc
+data_str_ readstring pop} def } { /datasrck exch def /datasrcy exch
+def /datasrcm exch def /datasrcc exch def } ifelse ImageDict /DataSource
+{ data_str 0 datasrcc {3 copy put pop 4 add} forall pop 1 datasrcm
+{3 copy put pop 4 add} forall pop 2 datasrcy {3 copy put pop 4 add}
+forall pop 3 datasrck {3 copy put pop 4 add} forall 3 sub 0 exch getinterval
+} put } def /merge_multi3 { ImageDict /DataSource get aload pop dup
+type cvlit /filetype eq { /fdatsrcb exch def /fdatsrcg exch def /fdatsrcr
+exch def /datasrcb {fdatsrcb data_str_ readstring pop} def /datasrcg
+{fdatsrcg data_str_ readstring pop} def /datasrcr {fdatsrcr data_str_
+readstring pop} def } { /datasrcb exch def /datasrcg exch def /datasrcr
+exch def } ifelse ImageDict /DataSource { data_str 0 datasrcr {3 copy
+put pop 3 add} forall pop 1 datasrcg {3 copy put pop 3 add} forall
+pop 2 datasrcb {3 copy put pop 3 add} forall 2 sub 0 exch getinterval
+} put } def /i_Str 3 string def /O_Str 4 string def /UCR {0.5 mul}
+def /BG {0.7 mul} def /min {1 index 1 index le {pop} {exch pop} ifelse}
+def /max {1 index 1 index ge {pop} {exch pop} ifelse} def /RGBtoCMYK
+{dup 0 get R_scale mul R_shift add /c_i exch def dup 1 get G_scale
+mul G_shift add /m_i exch def 2 get B_scale mul B_shift add /y_i exch
+def /k_i c_i m_i y_i min min def O_Str dup 0 255 0 c_i k_i UCR sub
+cvi max min put dup 1 255 0 m_i k_i UCR sub cvi max min put dup 2 255
+0 y_i k_i UCR sub cvi max min put dup 3 255 0 k_i BG cvi max min put
+} def /RGBtoCMYKfilter { ImageDict /Decode get aload pop 2 copy sub
+/B_scale exch def pop 255 mul 255 exch sub /B_shift exch def 2 copy
+sub /G_scale exch def pop 255 mul 255 exch sub /G_shift exch def 2
+copy sub /R_scale exch def pop 255 mul 255 exch sub /R_shift exch def
+/rtc_file ImageDict /DataSource get def ImageDict /DataSource {rtc_file
+i_Str readstring {RGBtoCMYK} if} 0 () /SubFileDecode filter put /DeviceCMYK
+setcolorspace /ncomp 4 def ImageDict /Decode [0 1 0 1 0 1 0 1] put
+} def /sep_str 8192 string def /SEP_CMYK { 0 hax_sep 4 3 index length
+1 sub { 2 index exch get 3 copy put pop 1 add } for dup 0 ne {0 exch
+getinterval}{pop pop ()} ifelse } def /SEPfilters { ncomp 4 eq { useDeviceN
+{ ImageDict begin /Decode [ Decode aload pop 4 {exch 8 2 roll} repeat
+] def end [ /DeviceN [/XCyan /XMagenta /XYellow /XBlack ] /DeviceGray
+hax_sep 0 eq {{pop pop pop}} if hax_sep 1 eq {{pop pop exch pop}} if
+hax_sep 2 eq {{pop 3 1 roll pop pop}} if hax_sep 3 eq {{4 1 roll pop
+pop pop}} if hax_sep 3 gt {{pop pop pop}} if ] setcolorspace } { hax_sep
+3 le { /sepproc /SEP_CMYK load def ImageDict begin /Decode [ Decode
+hax_sep 2 mul 1 add get Decode hax_sep 2 mul get ] def end } { /sepproc
+{dup length 4 idiv 0 exch getinterval} def } ifelse /sep_file ImageDict
+/DataSource get def ImageDict /DataSource {sep_file sep_str readstring
+pop sepproc} 0 () /SubFileDecode filter put /DeviceGray setcolorspace
+} ifelse } {hax_sep 3 ne {ImageDict /Decode [ 1 1 ] put} if } ifelse
+hax_sep 4 eq {ImageDict /Decode [ 1 1 ] put} if hax_sep 5 eq {ImageDict
+/Decode [ 0 0 ] put} if } def /change_str 12288 string def /CHANGEfilter
+{ /change_file ImageDict /DataSource get def ImageDict /DataSource
+{ change_file change_str readstring pop 0 ncomp 2 index length ncomp
+sub { 1 index exch 2 copy ncomp getinterval changebits putinterval
+} for } 0 () /SubFileDecode filter put } def /hax_image_ { ImageDict
+/MultipleDataSources known { ImageDict /MultipleDataSources get { ImageDict
+/MultipleDataSources false put ImageDict /DataSource get length dup
+4 eq {merge_multi4} if dup 3 eq {merge_multi3} if 1 eq {ImageDict begin
+/DataSource DataSource aload pop def end} if } if } if ImageDict begin
+/DataSource dup load Width BitsPerComponent mul 7 add 8 idiv Height
+ncomp mul mul () /SubFileDecode filter def end to_change_bitmap {CHANGEfilter}
+if ncomp 3 eq to_convert_bitmap and {RGBtoCMYKfilter} if ncomp 3 ne
+to_sep_bitmap and {SEPfilters} if ImageDict ori_image } def /zero_data_str
+65532 string def /hax_imagemask { if_delblack { dup type cvlit /dicttype
+eq { /ImageDict exch def } { /ImageDict 7 dict def ImageDict begin
+/DataSource exch def /ImageMatrix exch def /Decode exch {[1 0]} {[0
+1]} ifelse def /Height exch def /Width exch def /BitsPerComponent 1
+def /ImageType 1 def end } ifelse ImageDict begin /DataSource load
+Width 7 add 8 idiv Height mul () /SubFileDecode filter end /mask_file
+exch def ImageDict /DataSource { zero_data_str 0 mask_file data_str
+readstring pop length getinterval } 0 () /SubFileDecode filter put
+ImageDict /Decode [1 0] put ImageDict ori_imagemask } {ori_imagemask}
+ifelse } def /truebp {0 matrix defaultmatrix matrix currentmatrix matrix
+invertmatrix matrix concatmatrix dtransform dup mul exch dup mul add
+sqrt} def /truein {72 mul truebp} def /truept {72.27 div truein} def
+/truesp {65536 div truept} def /truedd {1238 mul 1157 div truept} def
+/truecc {12 mul truedd} def /truemm {25.4 div truein} def /truecm {10
+mul truemm} def /epsilon 0.005 def /if_delblack false def /to_change_bitmap
+false def /to_convert_bitmap false def /to_sep_bitmap false def currentcmykcolor
+setcmykcolor end
+
+ userdict begin /useDeviceN true def end
+
+ userdict begin /scaledpoint {65536 div 72.27 div 72 mul} def /setsuperblack
+{1 1 1 1 setcmykcolor} def /cropdist 932339 scaledpoint def /cropsize
+932339 scaledpoint def /cropthick 9323 scaledpoint def /croplin {gsave
+cropthick setlinewidth 0 setlinecap setsuperblack newpath cropdist
+0.5 cropsize mul add dup 0.3 cropsize mul 0 360 arc closepath stroke
+newpath cropdist 0.5 cropsize mul add cropdist moveto 0 cropsize rlineto
+stroke newpath cropdist cropdist 0.5 cropsize mul add moveto cropsize
+0 rlineto stroke newpath 0 cropdist moveto 0 cropsize rlineto stroke
+newpath cropdist 0 moveto cropsize 0 rlineto stroke grestore} def /cropmark
+{gsave cropthick setlinewidth 0 setlinecap setsuperblack newpath 0
+0 0.3 cropsize mul 0 360 arc closepath stroke newpath -0.5 cropsize
+mul 0 moveto cropsize 0 rlineto stroke newpath 0 -0.5 cropsize mul
+moveto 0 cropsize rlineto stroke grestore} def /lin {gsave cropthick
+setlinewidth 0 setlinecap setsuperblack newpath cropdist 0 moveto cropsize
+0 rlineto stroke grestore} def end
+
+ userdict begin /scaledpoint {65536 div 72.27 div 72 mul} def /setcyan
+{1 0 0 0 setcmykcolor} def /setmagenta {0 1 0 0 setcmykcolor} def /setyellow
+{0 0 1 0 setcmykcolor} def /setblack {0 0 0 1 setcmykcolor} def /setsuperblack
+{1 1 1 1 setcmykcolor} def /cmyksize 372935 scaledpoint def /cmykthick
+9323 scaledpoint def /cmykhalf cmyksize 0.5 mul def /cmykquarter cmyksize
+0.25 mul def /cmykcropmark {gsave cmykthick setlinewidth 0 setlinecap
+newpath setsuperblack cmykquarter neg 0 moveto cmykhalf 0 rlineto stroke
+setsuperblack 0 cmykquarter neg moveto 0 cmykhalf rlineto stroke setblack
+cmyksize neg cmykhalf moveto cmykhalf neg 0 rlineto stroke setcyan
+0 cmykhalf moveto cmyksize neg 0 rlineto stroke setmagenta 0 cmykhalf
+moveto cmyksize 0 rlineto stroke setyellow cmyksize cmykhalf moveto
+cmykhalf 0 rlineto stroke setcyan cmyksize neg cmykhalf neg moveto
+cmykhalf neg 0 rlineto stroke setyellow 0 cmykhalf neg moveto cmyksize
+neg 0 rlineto stroke setblack 0 cmykhalf neg moveto cmyksize 0 rlineto
+stroke setmagenta cmyksize cmykhalf neg moveto cmykhalf 0 rlineto stroke
+setblack cmykhalf neg cmyksize neg moveto 0 cmykhalf neg rlineto stroke
+setyellow cmykhalf neg 0 moveto 0 cmyksize neg rlineto stroke setcyan
+cmykhalf neg 0 moveto 0 cmyksize rlineto stroke setmagenta cmykhalf
+neg cmyksize moveto 0 cmykhalf rlineto stroke setcyan cmykhalf cmyksize
+neg moveto 0 cmykhalf neg rlineto stroke setblack cmykhalf 0 moveto
+0 cmyksize neg rlineto stroke setmagenta cmykhalf 0 moveto 0 cmyksize
+rlineto stroke setyellow cmykhalf cmyksize moveto 0 cmykhalf rlineto
+stroke grestore} def end
+
+@fedspecial end
+%%BeginFont: QuasiSwiss-Regular
+%!PS-AdobeFont-1.0: QuasiSwiss-Regular 1.07
+%%CreationDate: 12.01.2002
+% Generated by MetaPost
+% QX extension by JNS Team (see www.GUST.org.pl).
+% ADL: 729 216 55
+%%EndComments
+FontDirectory/QuasiSwiss-Regular known{/QuasiSwiss-Regular findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 9 dict dup begin
+/version(1.07)readonly def
+/Notice(QX extension by JNS Team (see www.GUST.org.pl).)readonly def
+/FullName(QuasiSwiss-Regular)readonly def
+/FamilyName(QuasiSwiss)readonly def
+/Weight(Regular)readonly def
+/isFixedPitch false def
+/ItalicAngle 0 def
+/UnderlinePosition -127 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /QuasiSwiss-Regular def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+%/UniqueID 0 def
+/FontBBox{-174 -285 1000 959}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
+1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
+B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
+4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
+DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
+2AD360A28616CB4A0670C1BF13E5D071F743ACDAD8F4F97A172F977C3F97E343
+F4A3478877F53C5499AB64462D95993B13D9EB1E1A87443B4DAD1A424334C7C3
+93173E4450DA2568A0AA892EB87B078CC6BDBD48C5E71AD224DD23027CFCC6FA
+BB2E3882A14C0F81CB92941A12D4CEF33D758ABC67EEA7452F0DD040612A5F91
+A8D8F9866DF37EA9CEC4814906E05F8C143BB09E42B8A1688B764C00AFA45552
+5B4CEAC2AB9BA06075FAD345C12F4CFC2FF0DA615C8A70FFDAFF248BC9227175
+7AD37A2C3A05FBB1397D2D628B47356F58A71E702F3D716C0A6512ADEE8E89ED
+0F29D27B15CD4306D7251D63B2F3A3B5AAFF55ABAE0C1DFA37661A21901AE7DE
+B920CCD9BEB91A16D9D568D7DC6376C15CD364FE2A7C9DB648C631D5724D9FE8
+ECBB8011CD6F52BAB95C31A693E9C6307CE602E1E9B116FE182AA9D0218DA75F
+255BCAEBAA3E8468B33C6AE1B7BD61A39CA97413A76A4A2E35415C9F1CB7DDCA
+DCE96CB612572BEA8C3D6CDB9F07B6A46EEE24CC417E10395C3237955CF72507
+B964AB83D8F330AC17FAA8048A02A45866C6C06A96A49BB4F54CEA3EEDD26E0F
+D545B3833FAE346DB0966D1F1396C81A21F533B9CF4CCE756EE50C6CB606FAF4
+C43CBA4F43920EC2C963C3E41CF192346273D4C72BA71A8083BD014F9AD09552
+AF4BF9B85CF949C754D36757E004FF3F5C9E4C5A6C689B024CE59B977FC47974
+D0A731D84DE0F8334C876E74256A3F9F1958140ED4F7C537C04BF4B9F56EA434
+B58C5000DACFEF4CF42647EE674510EF2CE12F4012B73A9B4DFB3A8B2373232C
+E5CA1AA372C6C92C815DC4D1641A9A92DF9A094EB9F801823AFFED8180480699
+E77641283457413BB6AA20E5946B0BB383C416678EDCAD2D3C9858A1A64A8A1C
+79842AA9E78DB2A52DFEB85CB1831774222E92C6A3B13DFEFAC48E5414911439
+D351CF9EB086BC1CBF53DEEF1FE81188A169292DBDA6C5441F953DA19A6AB424
+DA29964EFD2FE8D0E5EE627772619ED54F5CA3A14911F452C33ABE95D7230E14
+439D973158CC58ECB307F0D372DDCB8CAFF30FE0843CB33249EDBE568910A40F
+1A19008FCC92C461BF5463C5A1C471B6B22586FDC33C0B57B8121A58AB758A95
+CF9695F43FA3575F7FAF092943B9666224238D328C48F6D8A346D64697546C06
+A9125A3B90CE131DBCDBAD35A6388CFBC335D2BE90B5C581D1E84F9E76CF920B
+7BEC2E3679ECCA31C5DD602964AF4533BA8AD4CB58532AF7191B77CA3737E477
+4F66DF77395FB0F96D19115C60E652EF743F21C40B43782C5D4E00A09F155B0E
+B96CFE9312BA2A0CC2777CE3821A3028E09B840E807E6F6740A7B21EB035C42C
+067B0934BE534D76E035D858CE3BF07CB1E30764FAFF860CA83C4658577EC9AC
+F7E71468888D5C6807B4D7F645E55D8BC8B24E3652596FAD4BB9E1AEE8FEDC9E
+A5F7B931673B3FFABDD2146CE8A13E32380F1F0526611190E892D8A6FD185CFA
+65DF3DB858BCF75E95321A7131547E0C82D586DBA09EF291CC2E8D8CB438052A
+C2992420B6F580E30C865DC98E53B30FC4E51D0C7138D32D57A4E8D3A2AB2BE8
+86D9D9022750E9D46D72135AC23A90B50712C0A17D7C03E1B8B8B2F95468CD1E
+C3FEEC03870155AE380DEC3842F59CC7D52396D3FDA6AB2FFB67061A23953331
+DF4BE8804458E1BC7D2172AFE837B7F041CBBDC5EACF25EEE5F4B02C0B505EE6
+258A20D9E32E174288D9295618DFB99CA7E44B6EFF6BA0F2F5D28683C25BC570
+15FADC64B543BFCC1524D09BD30E36B339866B13AC10BBFEADFC6D39A5B942EF
+C9431F72C3B8FDD9F568AF9875BF047EEB6D0BEE5087694C55852F241EF6F397
+24098ACB22EEA72138CE45B8F982E1A068E9C61EA876F4FEA72D9EC46EDBDF4F
+C7DE2392905875FC28D07872F48FED6ECA640B08B8D586177DB014AB4D745196
+AAF73F063E19565F1D434F1B0B6E1EE0AD2510D6B21D5E44574DA49A861E14FB
+8153C749EF0DE6EC83878CE9C39699E9EB129DEB430557CC188BD4B33DF5177C
+D3C15B71A5F1AD15C37D3EB3C5988F62C7650922F21520BC937BEED880699EC0
+893EEEAE8EF961E3CDB118837785D4C45BDB6321EA9F687628C6A20A7385CFA7
+C60DBB1875E59CD940B469AFBC921EDB4F97F8D526EB04914F97FBB51A5EE854
+0731E514802AB4764D876CA8ABD8B00E1A916BF519D9CBFD8F80DC6E930A018F
+967B999ED1F74082531B743058E2AC36E2DCF5B92AC4336C801C993E7AB10201
+69E66140ED1D26630B3EECDF552294F3AEAF6C9E9E997BDAE4EF14F9E60E4875
+17C8ECCA81ED1DCF653026358C95735248E06086D041BFFB9514E5B8248E84F4
+647D674AEEC41A3E496FDEC2C0A1F90C1F4FF62C9DEF4189B84A339700CD6E74
+F3BF89884DF1DBD216D1F0D417A96E86F969D73892D142F1F8795AA0E5472451
+4A96DCFC689A963DDFB35C8A0EECF092834CE115EBFF2995FCC1C424B7A487A4
+8EA5B567B07AA8D634C702038C70BE76D6D8075439786166B52DC7B2F9986B12
+970D0A930DD5C1ACAFFD41A9EE2157586990AEC0D5C3C68A43316470CE9FB8C5
+36B3DBE12752652F55A217D4897A2610171178618ADFFCF55AEA0E7CBEA3CA49
+CE5A53B73A1FA96E4895DC65CF0A519FB5A109CA9D14EB30F6F4C1B85C7C52B7
+38C87A9DACF56D583486E8DD0357E35E1805174931A799EAA496770AD10820A2
+51ED7BA1AFC4C0016C663FC5BD8C4F0B6AB3CB42145B7D11D07BFE56FD1D6ECD
+3C782B934B18C7E3704CDAD37EFD1C45B0472BA247C79BBBDB66CE1C1A441383
+D6329EB999707A229E2E3A6DCCF9C3C6511065173609630B8F967D8DDA377CE6
+736A5C39A6E22F1B5117C49C6AC5B8EBC8C27117B48C7EF4D09DCA5CCDA000EA
+7EACBDB836A8F7E7C40116907887D292FA2338E978F80268BD269E4CA2A78E19
+2E9D8B601DB8C3A3A57DA502905FA897BB4B1B8853AC015252171C713B12582F
+6D29ADDB80A225B38E611B76777B2EF6EC79522E8C2A743A530180BDB4D9CF4B
+F25C74D22A61BA69857F80B88995F6F36A36F8BEDD6767403F244060F6227466
+EF360755DFBF795B50D4CEE445EBC7F8251ECD7BB67468D0B7F04516FFE5E27E
+777DAED707339191E22C609DD2720E8BB3A13941A65F73AED95051BD333C988C
+2585BBD1019B4562A5EDC245455943A3DFE5422C5E45E5D0CD32FC75B781EF29
+8DBA6CB1758D22EE8A7680B01DAC1009FD90460372E170BB98B788972C8F3727
+7FC53686C62E535AE8846FE4D215EACFCA31EF7C8024B69909D596AB101FCDF3
+D861AB13943E2688F91FE5C975AE766B4CA8DE3C3AD0B07BF20CAE78A2CAE6E0
+FC453B90FEA4A634ED3B57657BE4BADBA11C521BDF32BD695F1A4F06D0D9C011
+6BBA79ED097430BE3DB02DB4584FEF6233377076ABF616AE15C8F2FD7DA721CE
+97E1FD9A0EFE937656C78D3EEF3837812E90CDE56A783BD5E0935B9A6068E6C8
+C17EF1545EEE457EA1679F2B7C58BE9909CBFCD273EF5617183CFA647579B2F6
+413BA4DEB76CE1B7C8CFD866C961BF468F25AFF9376ACCAEF050EC35C66E0846
+EF04E8EFF318AFBA650A3D42317C507CDB27EA8A1472D4E8D917E62C98DFB04F
+FA48EE3B46B2150DE67F616FBA22F823AFAC1A9A796FCC9D816852D5C351BF14
+56B1AF4BA063CE6B333D2FE7174BA0E2792D227EDD82ABDD138A2812AC5E2FF4
+164D9AF89DBBE3B49616C51E8265379ED8DE9A5CBC721C8F989103E4F6F8A25A
+31E864651CDCFEE7A97C607CA2BD6EDA120F1EABAF82C0383256CB36700DD929
+7237758B75F5ECCDF503383715F45158FEBE4C9CF4C2DD17352573C90177484F
+7E742B00B7C92F1B9292C0E353FB1785CF9CB67C88AF752C2A0DAB50960D67CE
+7B6B5CCD4A00A4866D2F89FB374260E9C0DB773FAAFBF6CC8A06C726F257E997
+2CEB41F0D2509AC371EBFB43D84299D336736B15B05591122AE51D1DC1F9D073
+E5CD3EFE666EFBA5B908D599DBE8BF9DF8C869274F0071E0DE691DF9ECBDA9EF
+89EA374D4220DA9D43B74459BD85FDA5ECA024BFD70FD472BFACF8DDC37F35F2
+9CF3FAEECABD5306CE4B824F02383FA663231350953FACECFD82FBD821919E35
+42B33690D4AB41F53EFF9021D9D4C491F26BE8F54C61165CAD77953F451A4DCF
+54441D2E2D5B38F8D4FF1997C652460BDDC872F75A1B652F87AF1E35CE918A42
+0AB2971AF800C6370ED44F61E2E7C76E185C68F2639AB7AC8B0A65849E12A64D
+B779813079E361ECCCAECFE637A6D013CC924647328C0A87C90F9973859BB9AB
+E6F35F9313B2DC48966D23638B056F85792F8A82BE4377D74D6A514BD8BFB0D9
+3439074CA0D2EEB74486707DC381F9F7E652409B57CC2F8E3ACEBBF5D67DFCCF
+B21BE0F4EB852EBC821046FEB892140AB4E0A69A3A4EDA731772094CC2E98F8A
+EADA8E29FF69C52006358FF414CEE22878912B6D9C211717CEB233C5E8E129DC
+B2FF190C521826F962ED9AF186977BF25D98599B9FBFF3D28EE90CC398694300
+B125E9FCDC8CDB3E8629F7EB5BB7EA4DEA72BBABDDA3E7C8884917AF2EC6E7A2
+F1923A3939A2DDC00040CD674226F91F6359D99A554AF98C4428587BFFA94E27
+DF9E2F855D1E1336D31C234467A64A0B46F216FA8140D43669F1DEE0959C0188
+CADA78EB30EA5D781ADDF0880B1CD099FC9A8F3A054CC38634A78BF0B05AD946
+C0989F5E89D560C1A1D2C45692C7F8CE9582FA66EB304B211D49A5395D14005D
+847CD584C276DA981BCA15E3D2BBBE8D70C469579C3D281E338A368797E93DD6
+5D504F2E85BE54F862DD77DE647D11AC4264ABD7EB458C8C185A95C95DCAD47B
+5DF744FAE4C541F7316B651A4F39056E1F07335515E51D9B1B6EA66CA3DB34D5
+82F9B3E4388B0BD6D579327DE0BF047566CE98ACE7F8A4CB9C0609774D6088BE
+C1EB7ED1FC5B459A6AA035978541E503109132FB020BB1386FB78785104B1B51
+5AB24A664EAD15BB9E17B1C2DFDAD70B2908CE0FBDCF08ACA9426BBEEAAD5CFD
+4925E34FF852181D1C2ABA71CF4038443267AAF501A133CF7ADFD281430F4320
+9DB56E95C1D1353B820CF46EBF499206A33A1F6C724A435B996178A53AD5D9D2
+0562309C8864FC6ED851CB0F552D8204919CC43C45F41D2EFEC1C8DA3557E611
+F141D580D87FF11A5ACF38ED3D5DA4DD37FB31FFC9EFE4965411F7413DEA25F6
+CEDFB70BB310424BE9E4056CAF9906539D06A9892AACCF1E7C972E507E27C978
+E3ED06C2CC580967BCF3EB4C9304CFC42B01FB3B663FE51F4A75B27E0CE8B43A
+8E22D8374366BDC6C192963A4CB98AA6171313DB9DC511B39105F2F02CB07FC4
+61F1F55B1FC7D57896A8E0FA9243F9A8B15474F9801327E0398670C841821BEF
+A38DF64AE7A86E2E8406F0133DA80CE6A9C4BA8934FB404337D53C368707B167
+12F4434B55B219E653DB4FE3716BE654EC5AA25ECFA62380908D14AA927C52DA
+A3A8BCC53B5403ED919FE7E582EE5564C93C758382FDC76B859425438C4057FC
+4AB027AA33ADE0768E2A6AFE6E5C86197B4C15A94BC6DC6317052D4760DFBE92
+9FECA15365E643E7CACD173F5A11A8D479CAF5F9C5009D41C91364D2F03DB246
+7FA612556C5852360E2EEE598EA790F6F9D686EC7239254D6CB8BBCF7A43A7C6
+964EEDB9DD506DF8663AB6CB54D094219215024F90EE470C1754AF5B1F349A72
+BDA716A464C84C6CE27F713296336E3213B389281B7BF93D8674EB12AAC94C97
+D5974EEF817A3B0F0EA74B18AC02C57A82344F676958CB14F60D014C2363C3A0
+DAD1EAF20C74CA65571E9141F4137292F3F66001816BE879DD407A1B5F10F857
+6515512C74A5A4B61F570247A2929EA1CA915D79203F4CC9757E067CBC24071B
+59D5C067FC70DE0B05B1159897E6B962B946D56AF4DB0E0BFA4FDFD2600F36C6
+6F59237284DAA29EA131D482990C36EE577CB6EC387F91AE4713436B05B4FAA9
+2F54062EEDF901A4FD374B35A7B0E2018183509565A8CAC9EDCF0056E38D6C86
+C480EEEE1DB28D45C191A7B8E1837E3DA29A3A4117DD1D167704A55F7F61BBE1
+0D1106070A6F0C10C99D5582084520A360CD68C62D63F564DEB0A5A43CEE22CA
+9F74E05B3CD1074503AFBBC27EBB51D6AF3DD4E33E2BB1EE72DE883E5DF500C7
+1F8640F134D7C6550DC03AA271C4D4C1B7AC1890AACD29ED0ADD11F687AA6A1F
+A145DBB65A3283D52E21FB229C222646AE26DE2ABCABAE3A02BC101ED1FBF565
+4332FE1DD559FEE3EE48F7DE5C87EDCD25AA567933A1035BD4E5AC41B8FFEC3D
+408382BAC17727677BC9DE1E6B6316EB0B27715D7F3FB1542E4898BBD96830A1
+17E28430A204DA5DF4A1E25783E9C7F9F8F1210C9BC025E0CFDDBE02AC126720
+D3D7D0F43A7DA214E1E3C703A99AE5B79F1CDBC5D8059D795BFAA137BC18225E
+734A23D785079F6741C0E5CD8DD4FC46BDA02B22F8C85EE58BCD3A84BF1AECEF
+F2365586FE92A63482FB1DF741BCBCC0DF5424750CEA579D03675F60F3D0C3E3
+B5F021EF5377650E879CFCA3E342265AA8A69025B122744FC55D961F392F7157
+EAD8DCAF0BB6262EB73196552F0155819D306870005668650175985DEF6773FF
+6D8D050FC83ED66E5A22B56F79FEF730DD2360A75C7691B72AD442BD2A88328C
+E9540C4588B612B4A1D428273310DBAD205CA3EB1CD9E1252CD6D7C126BCF9E6
+F727CFC1EE3A84CDEDC21012099E8515DE0D0483A8487E3C64FBE07975CA1019
+3D83364239F1F59372DCC9947F32A030112A15A681DF891DF490B9AD448695E9
+8FE0D20C9687358465519CDD53AB422538E9D1CA63CF0C5095F6798C062F0430
+53B7D441675C32A956E9D383343CB8D59DD8B58BC29AB4F9F0BEB9F3189F41F9
+FE05CF14F606B403F1E87CC67D20E51721CD8F141B118B0D0451FA5C0CF71254
+8B9D164B87B1EA7FBFE5F4636FC8CC7D99C4240559220CDCB7F94E6BA6381BFE
+705ABF5E9B9FF1CFB5A1EC59C1EE22C779037835F04CEEB8E6D424E7E5F45E1B
+B35E06612F9E69A3B8E2E4C005A38969935BE76BDCEBA951B61B4C33A576A419
+0133420407851FB04E1E5747BD78F49E68F1F38DC5A1CFCE20C7B9AB708C0CF6
+8EB0D4D1A250610F5510B2279ECF72E1EC79A059E0EDCFCDD753C5E11137C66F
+3708A768EC3EF2D420F2BA3ED3D0E329F13EDF85F74E343454CCE4B9FE136C27
+D89486C546A7EF8540D94827AF3EA1B20150CD44991EC954B803C19DD409423D
+84DFA9DD1D4CE39A4F5252DF58B24D96BAEAD5E746ED83F259BC121E98AE511A
+E8B1110F207AE3F5D3A5062ADC5E9A9FFD534CD2D4A49D0B6C781867EC9CE37E
+9BFA532307E649B55DACCD4D825EC52303678EAA8D76427BEE386E1ECEB15C27
+B5B1DF6959C779DCEB897B16A52472748DD1C09730B8EE14AE8BD323700B08CE
+E62BC7B07D6138D21B9C36C03CC4D176110217957C036A24553D84F5E52E063B
+ED3E498F833DA65A908E1E9E3FF3FA05D502526EAD49B60063FDCE90E2507080
+CD303FB677696BFD2F98540C6F7EE37D911D04CB503E41BBFEF2F01946619777
+0EAE5274C223DF459A714DA462A121B979EBD844943D7B2A86B7EBE267D98AB1
+360DCA2CBB56B322A028D05FB45FB76C05AEF5C836B07E96779EF0B80D002600
+C16CC2CF3619F053193274DE717BB73FB3C7CFAE7B2C1B97F807E5AB84C0E637
+8D4022A99E04D65149FBC85EA632F544082BBDC9B77C55B4D4E68066D9BF3D50
+225DAA397A7BB4C82A4F1EA6C7682F1CA89CECD655F08D120BD216209890529F
+BB3D24651664E84B70EDA3987B118F9C0019B318CD3A83CB0A1E8891BE5F6A0F
+221697722398093CBD222B559CF79371B1A4373E71607E9BB1D7893DF52D57BD
+6C1A6B744024CFC65AAF320081867B127AC16AC1E93981A46D9C5A80A51C7A5F
+8A0E38CB653F2F1B3EF5109D65A6C9D4B82A5F53C3EF91EEB3C51C3B43EF10E7
+021CBE099ECF330F033AC321D463A27632AC5B49AF8652D3E337FEF91B42E092
+0025F331304BBF3C4BB3AF62CA5E1EE5BBA27EEB1C13D43BCC0D8F8C0400CB5F
+7CB4982A85E0AE675D2144DBE77CCFFF9E9C6663FD84A9093C5992FF518D80F2
+19AB3240985451766FD0A241E0F2C7528A840FE39FB96D98361BD49238F368AE
+2182FBB631E375E903ED9EFD0FAA7FB0583016699A3FDC333B26080381352B13
+A323C70C0E1F94F3955700C92CB435D3CC0690B1AAE543C7DE699F482833B697
+25F53363FA3896798939057C62230972FBD42AEA82D51BF9669126F15AAEB8C9
+58779284E86E27A3F7EDF39DCE1847EF238D8CF906C0A64B35026673B01736FA
+CC46BF19AB92E7415CC9C82BAB0E6612900D7699E573E26B49D2D6FE8D61D18C
+921CF6538D1BB294F9C1EC78CEFA0D1248EF4FDC65105BF8CC8675D67ABA995B
+1EACA97992016AE68E31049847E75EB38309F79B4E98495C38C46A383A2774F2
+83EC58C1CAD7D198E97E824D4D37593459264EC29BB1F7C9D2774B244FBBC13E
+C5B3101E12DE774C78A0BAF5850C2E53334AFBF076DA9AE832E0D1F9F1E4A013
+5C64145D44C0D9BDB91E3921943F78C79FFE0303AF1B0861C65D9EE861F61D00
+903019CE0362D355933650EC8C92E3CD1667F35F9666BF2C13F7ECB7224FC5E7
+E4377C6E1F717DD65F6A274994CC473AA60A32F061B87B6C7379BBF8DF0C3F7F
+289A4F90A083D0B93CE6FEB1DB4D034DB520DECB48E83E303A3BDD4A66F984B8
+AF61BD0E65A986BCE87AE614447BEF6022536829527A871675F9850715E93B75
+A6480A4DA327E16D18B38255968D194E6270D9E61C66D263D2EFA54028A03E51
+1BB1F67305D3A25282405EC89DC62C37DB28EBBFF38FB8E3E3EC7F842E7158B6
+F27653A4D9D6A7E2A9CF125554BD85A37B1F3D63ECFC9C885D638355D76EA013
+056DFFCB3BBC4F26EE89E4F31CCC0872C502A1C8B0CDD52DE4FD7C40DE0224F6
+1857D6D1EDF135A35A8E10E17D68A62B3BB61D4A23A2E4D3B9E95EF8F6A52DD0
+8E26B38224BC114C5641CDFBB6F9CD18B256B2C43B27E28B9EA54CBF2A115403
+A2E98751715251D4CF99D8DB478D5A5FE47828E4D277E12829BC46062E20AEAD
+38E593EFE8DB971259D760D7B237396F4CAECF5225E537266DF9E2729F08033A
+0EB87FE3614FE749C250054EC8417ADAF656C36CD37915CD4CEBB3F216B9E2A4
+F81351DFCB8F5D551B239CB078F707C87462B67509FC8442D4B1A04F16826F1B
+260B56E53B9BDEF27BC2D40F8D2E3D08E78B943B79CBA4AE4A777008ED58227D
+E9CE0DC9AE2432245A580C41D1E97FCAAF1A9A30EF490AEF0E5AAEEAA17B3941
+88BAF4F489B0195430270121D844262D01ACFE1A26E6C7F496EF2D2E5A6DE689
+11EAE1F6F100AA4CB2620D7426E840B622D84DC07F548982B9F458DB653ADCF0
+AB475E90A19BF4C8D45C0245867A1CB7898997F29583153161234BE32E7E9ADE
+EA0B9E5EA173F9D1378BF62DAEE46BE44AC00B724110B2616D47505084C89A04
+226A664D1638AFDAFBEF79999598E574F3BF8C8B9E1332AB2B3F1CEF022F842C
+EF7E98904F052A50EF8400445BA0112B7313CDBA87FF1A77E4149F59630B7E2C
+502FF323730A45E5AC47BD7CF1C622D98AA8F6A94E6B34F8E2714AAEEA37F536
+328D804806BFF46BA33ABF4567E5B753069D72B130A06A2B1656B1A2B6604365
+0E2AB4D127550D154016A66263E9C69F79D5EA24B56278BC2D0286768655F1D9
+D7949DE79B10B867AF262130A97FAFA521BF2B3F7DFD961F8BBE00F766D4AD1A
+09F0585BFBA744231CFFAEED26C0DFDB77549B168C0D0C437AE9E5BC18618B9F
+3093AE7614981A0678BB2138077169420D84325C8585E1328C2E5D8942C2A174
+C3E0F92DC9B92729D9EF97FBB722BA1D047EC4B4C2426B358A2CD7ADD6466D3D
+6C69AD01F280B1B40F31D3FF1D608F98FC3D68A4BD9F35AD2BCD99966BC2BDA6
+175C40160D7E76F26528BF1E14AF2AE4145E8452F245829380B2CF498091B494
+E11CFC4F632B421A4E8F51656FE92C42E085C3F897F0D4218E7F9EB70ECBE2D9
+F50EAE0F9FE4B170F7E809030BA42F27F376846EFE92AC50AC95E8DE84CCD8A4
+C2991F8F9083DDC054116481A9E9041366FBBF6069437E54E98551416DFF0DBA
+692CCE81F748496C01857B58D478B06605A887FA606E34E448E74AF6E42DAA9F
+D649C183FD3060D9BDED530B4732B681886F1D23D50270DFC3964532CD68FB79
+A9748F609614131EEA9A4B81135AADA27DF822F4A6D8DAD57AE50C103CC3911F
+18E2D1620081235885548E422A51C542F5A5A4ED49A41B69AABB77A627CF262E
+C2C8BBF80B98C1AC61E33D0814372129C973CFACD5D14CD69A54C820CA759CE9
+4E7F41BC51A55BD8848C3BD8951D850068F7215B9DD4CBFC054C5CC65BE70172
+B5613523BE4127C18990279551F55B60A644FD6FA1C1E22CEE541D785F94F1F0
+86F89CE8530FE68CE3AE5EA070CF5782073114B463E11C4262F3ABBFB15E0E38
+DA9634A2583EA6CDED5CE763A9575FD4A04AA9B8C4BD004547C597D6F979F142
+66AA59E12EC32B699FA5DB2016470B7D99576F3F1FD41D0CA005CF11B8D45B9B
+115E0E7846CFE40DA67E12C652E0E0B18927C48A930218B19A482D4DA1D83ECD
+6F51CABAAF6F0F96D52E75A0195527F56D31DE14326B005F40BCCC6580590696
+D085991A6C416769DB43E3E7451BDB6FC877CA1E3D73F76BE7F745E3EC30B431
+51503A386A76418CEB13106D05DA6A1AC717A55A8798D118DD8B6EFE900D5F2B
+4EC6E473D409C3EAA3FAF5773DAF259E6D1B25F2F7F723453226A643182228D1
+DA1BDFEE52B0C480AA4A7B45D4504A2197B17892BC11A0EA782DF82089D3D1F1
+EB2FBA737CCF61B65397BB77E24110173ED24B619AC64BB3D89479F0DC69C1FC
+D5E2A38A107E59E41DEC5D2E2F71460E79CDEFE304A5C96C29805C8AA5C4F683
+9C02FC46A4D773DE08F3C5B178142FC8CE1D373C1A0C2C974C08933EEBEB2838
+DE41F2A87B54BB834F2AB8F692854DC3E88A01DC5A4EA9642497A859F1902DC7
+3B876B9E2E828CE3E5F12B330FBD9AA37FC553F28C748B2BB56FDBD62A2E8459
+DCCF8A4A39D358AB51495D1B1BF8D403FE44FDEF1D763F4E1BA316DE28A424DE
+20F66A774F9A99ECDC9BADC4C365A0B86391583E378108057698CECCC0C157D6
+D2103886D04078D3E305830B3128CBDDBA5BF6ADC9C3FAB63FC92DE5F6A8221E
+E23C2EE4880BBBD0AF57E36CCD11432419B925629B9785483AA94A271796A400
+06DF9BE38361D1319CF4B7FFAA98722947AEC01A5A206D943E02D651650EA9CD
+A067967A43B33ACA30281B32E7829B8B84358C92618C5BED21A826EC20ACE10D
+309DE1647AE05E2432640B8C35DA72998D2D5AD9D6E23FDD9FC0F2ED1B94CB58
+5DA8EFA897377604B5AF1DCEB070831C12A52AAE64EB825F494989E0C52D5E2D
+AB72621BC845C8BA36E6854BC5C32BED06FB6F7DF40AF966849C6BF5E1A76392
+13A989F4DD41B5A1D6B86F8B288C440A9CAA523BE8CFB5F90E7AF79BB0014712
+2DFE26A8DBCD7DF0E331DAB7BFBA69EC606CA3B05DCC7C25A0F6590E38097E65
+4E52CEAFF93AFD65B61E245C8B03ED7F0120F1D1E1462A71D0E5B18357B3FD17
+DAA5C09B566830F8146EC371140C306589B8F3964C88A29A162A8BFA18C8DFBC
+220B3780C4A0F0CE82192393C682B739EBEF4ADB7DF26A7D24D8B3F065B19A10
+C7ECC9B2EBB2EDE5273CFF0752672827D5CA14C7B0E960A6A1CDBC740FC4EBA1
+C8499DFB3B1DBCE807F244E4E86205121EDDC4C0B074D86F539E0029A4586F26
+1221831DABFB5D491FDD2B8B9E50C52190534AF7728B1F49C218CF405FDE3DDD
+D36280FD4C6CFA906A256026C8CADC6E6AFF767A648609335C8E106C736F35AC
+E143F116347F64F20D228310DE313B9A1D56DABD0537BE86CC3C9DB7E9E9D235
+71481D44682DBDAC07831E41FEC9CC383DB682D1FD454F90F2952B8B9F573A1A
+7EA901923B49B1D4116E150B9EF466DB4DFD9F5353005D9A0ECA447415C2284F
+20BDCDFB423845F2679089EB374AC2FE503742218BC097F5E477F4EED15A61D0
+179CE83D6568692EC2A5F4F20058E804F86BAAABEAAEBA3597DD6640CAA6F371
+B101678719DD1E9045FF964A5415BC25F744CE7F3A67AC060BB2524B7E7C6D6E
+0829DC573D3655D869009E80375F9979B2F0DD91265B080C02BDE5B844183436
+7142AB90E62AB993DCFBD8A29C7244AE01255BFA1A42649E6C3F23B1A03A17B8
+0E5E7D17612FD6FE8559CA2CC8BAA35BDA09977C4458410D5E82F5D6E5B0DBBF
+C4769146642EB805AD7C007D4236C6EB713DAD1183E2CF0725F3C8A7EA434D13
+BCA55457009F34D819880B40D82603118E66AA7945EFE28DE82CDF025FE679BF
+3F253A443E624921BCE0F9E760C6F74688BE250E13DE43146AE4E04FA740D839
+3F7C2FC501AC97C50C9900FDF973884AC3084F4C85E8C448607546FFF5A4F08F
+9057BAA6C4B74C7D8359002429BF0F4812E989F4B33C6CF48D3AABD7138CA380
+4EC08649FADB181FA52D5431089059CBA897F61EF31347E7BA6F509D98682ADB
+7C7743A5C5033CF5E68E769C806B3AF27BA91782C51130EAB4FCEA21FB89065E
+D948C08DA53BA66F5D7FD3FD8E0DF8B55902AAD890D09C06893105BDEDCF40FD
+47EFC432B8D774B8A235D811FAA68202F001F4FC7346DB8C01600211D7BCA0FC
+1094ED960259613E473E38C0C97980CDA9B30D443EE661E5665AD4A264DB121F
+A189DD20B664B3EBAC3E9325B5397B725456BF9DB0CF8E3814786554A7122375
+5E838DEC0F43E01FE78AF6EAA720F9777F7E2063BB251D52F76E7867A5D125C3
+98E049FC951FF24A24F07D76CD181D63C6E6696124C4BD635C96683A11D43DA0
+B933E2FC2293E645DD9AA346B82EF9A7886969D17E57EA7809240D2AF03C9C9A
+2A8AFFB94F7EC596D2EA2BF7995852A542E45AA1D4E9D68D5F65A25D3D30F138
+1408E896BC3D10C95D1284C3069801F11DFF5E5640742CB1FF5079EC08957D1E
+08DDA16B44A3BFDC2D6F88AC87FB32D8FF6677DCD4DFBAD00B2A501B0FD897D1
+932E308E4E2368FEAF9502338DFCB56D73324ABE10C9A4B24DC6202687EC7972
+3CB4404A0193254C5E6A81D01837917E77AF0994F796041195D4E7126EEAEF09
+C24B24F782527F0FE54A353A704C683E6C590BF2358D5C45DE6FFEACFFD76B0C
+70A4D37CBCEF265C6E9DA2452E0BAA0519CB647B01793E4A272BE519E790C422
+DEE2AA612BBF80F4BD0A762AB1DF5046630B2CEA7EDBE5D4FC4303B003F88D68
+139F4B954EDF9C217524018D3A0B21ED5A083F7C67FF41826E90BB23B20FF243
+FE740F817EE8001FDBB4C35720C810A5D1FFC55750FE18CA99F845579CB977DF
+05B17FFBAEB442F6760B25322A79122111CAEDCDEE49D88E04998CDFE07CC40C
+D9A60AEBBA3FAD461AFD02F202077005F65D9459317C140354B6033501B31C56
+31D5F720C23EE07241BC87478FA8B45F43FFEE11F0B0316E068D237E40CC3C30
+53E1468F984E8786C8A961F57134842D4B45F9745FF357209B8D9C0F7C5D55C1
+9989EC6A037029A807988870C008851FA3F09B9A719D6269649C388B54928896
+96FDBC9466A8AF2FAEC2758F1FCCFDD5610E049B398514B1996E98DB45FB426B
+94E1DBC7B169A0113F4E483377E29068F9E4B2E310D4840342236D7FC3FE77E0
+55C39C7117160E28DE473A19B43A4F31EC88565DA039581CFD59BEFFCFAC0B50
+51E812A633DAAB5567371FC1CCEA4F73B671F41CCF87C5BB627D82A8156223FE
+5D0AF2EA6C21F039173A98507B22BA03312781DBCA5D23BE01699D420E4DA0A9
+439EF2411403AF4AEDEFEFA5327BBF67C696C9502E4D52DB71106B9DF7A5AAC2
+5C5D4556A541368CCB3A0F9E8C2C0EC8B94A18C58BBB1CB1EBBED2E83BE7DD6C
+8EC5B0BC9093F802BF35DBB2CFFCFA318E7759E15FD1573820ED05FF8D1AFE8F
+1A9FF2989B623BD3F16D2EE8031BD7326AE12B896F41BEB7A360ABAE6B6A1372
+2200F23FE1B328053915C4E46E7FDC3979D12425C5688B4852AFE7988F796E58
+CFAA12A2B325E668E7D1F046E3B5BD5BCD013F0E687D2F502F605A29C2E3B377
+7B725BEC23126B3EE1500C321BF626807ACF7D86BF240F1445EA0BD90A150DA6
+DAE2E4D3143CD80830123653AF04B65FF2275C9604BAE2B9344955167370E038
+31426893DBF9E9A6E5065198993A8C7100DDBAFA847EC07121ED344C85DFAE8B
+88CF1D7A2EC263EDDE354AA0239C0C1C242B0A8FEF709620C8F1CBD0D8DEEBB8
+9AA5607BC159A84882BF9D8781F6DA92C8E30DD77678CDCEBDAA72C394FB6984
+3EE21D9BD24B48E474F597644D0144CEFCB46546522A8088454DC39C9C964687
+1EC69E35C87D579633CF0052ED33D1B85BC937FE3E6561143211A5BC3DB14C73
+9CE6A3597AC61880B999D021B7BAA0612D55BA2F7D6997E83FE912372F3AEF86
+FC33D60CB043542046AB01E7FED93620AC6FC337AE85B4EC8FE75FE0FD7FB7F7
+9FE1377F544FCC9B89F6FAB7BF52FB25F5480DB09875C5037B6B85299553EF51
+8F1C53473F50418A8C6537570114D9FA8121C03449499C4BA76FBEBA75004203
+93ED813BE136B1178D5AD71BBEF500AB5148843A0ED7439BAD9D2487360C2809
+A867B935B01896BA529030E92FCF07A520CD2931D431275C7B7E11D501B84AD1
+6ADA392DE30B34834AEB4DAFA1D9F0B71B33FEB4B8DD2F0B8D82752D43918464
+AF150E3D71D153AA53232B2855B26C274F8ABBB57E7698738460841ADD060AA6
+28A58A1A8E84F5B24BF848B86F821331F8C5B85F14B87EFF696F4895E043F02B
+39F48375A7D7E00D0CC67F3F3E4B6CBEB4470DD44B9B38F3C9DEB836B567D2F4
+CB5B7F29AF9380502D591A590AE15DD8F0D976963C3C3206A411EC1EA9A8DBD6
+E29DD977F33E7FD099D190601375780BEE618ADAE54BAEF9F1F14566CCBC7521
+1C1269471E99EB418CFC906580886BE845F91128384B5C05E8AD8D9EF2AB7E83
+516022927DC2C87E8F0B57D4A8C0D33A2B94D12114F6EE02923A6C1787F8710D
+C5B0DECB81215F4AA2ED4E09E32A489A3B5088A49E6494C581233D6C80BD4C21
+3423A1CC0F104FF59C4D26AFD23B7460E78166CEE05CA5A4AB7AB0AFDC6941DE
+E9568C4E32FD07552816D5C7BA682E4A1F429A3F7FD0F065DE96B4921A6FD818
+4B78527D905396C52D0B8309B1A83C94E29184356099A24755D395147D04D4AD
+6B65712F40579E1B1CFE99C98903A6F3F70E57AAB7FD69549E9E4EFEFEC6DFFB
+3F8086075CAFAAFDD807D4363A790BE5F165F5DA56B67D0152A936EC2840F94D
+BEC973CECA3C02C3EF41240C6972FEC4E4E8803B5AE5B63976543868FDB5A32C
+69B5E4BD5F9DE7884D1B0206C9642BBDF5AEFED613ADFE7A85C75B7243B0D828
+08340941218F890CA6507A662A30F1D996EC0C8B8C32EEEFE9BF03AF9D84DD2A
+50CFC367F1FE80CF42C8140777F37511DF44363473DE27C09074A51C312F0F09
+E42770769139C9C938F2DBED9BFAFBBF4F00A24C6C8CE26DD91D892B21C90AA8
+AA3507E2752BD527026D57E5E0A4FB5A646B434AEA92EDCD2063A98911DE7F8C
+18FE9E1CA691871FD2DB274D4ABB0F423B9958C73D306B2B7D8AD5478B33635F
+E39DBFA7F3D413B1D7CC834FC0098A28D96CED3E348B9E8067B860F8FDA8AB80
+007D549C7E18661FA203AE3415AEEACBA8DD159A2F81E24982B7E8A9D3625C4B
+301E339CF6D41278B68A120DE1A2B39046CAC95877885279E1879A0F859C3C58
+A0D213607AA6990FC70CAF87B149B862B72FFA7E7B56D973AC45C602DFC7ACB5
+BA28C06A95C3C4638E909742C2D0D00FE1E2206BA3D78F671E5D2134B764C252
+1F9AB5BBFA9DF7455E0CCD23062F4A521BD9F996CFC4CD7108B8FE31DD8D12B9
+11BBF015D4182CD9357DF6AAB87E5F975D123798647B686AF551C47D7622F579
+83A373F648FF798E667D9D8E417D46D1D0882DEA04C5034C2EC3923287209FF1
+F2047B10E6B3EA8A2251F0DA0CFF27912B5D814D41E63D6B82DD2CB315FE8557
+2680508A33C4E84D465FE6417A146742969F0FAB4F43F4D9FFD42949D5B5C1C5
+3C311C915583440DFD30282E874202B6135693C47155B9ACDE8232F42C435A1A
+30FDF8AF8C9245924A9E0AAB01A1AAD8D430053E1D13253708702293AB17E31B
+58C15CC48D4BB820228F1B996C71ABA6CA37420F1D10B1E3891B8D33F437B696
+23A7CC0D276048FBD35EE0696F29936F2C5992DDA6E89C4549F01A2B0BF9F6DA
+95B9850891DF300EB60D28B25FFD03B1046DED11219C437AF3577077B73FF4E7
+187DA3366E1CC7B92F9DBEEBD88D7F555EBDE6C3F955120F39A43CE7E0EB1AD2
+BBD562840B7F2CD73B2436FF70FC5CFCBB367492401466CDA153027210EB6B73
+A36E3885CA039FF5617619C6FEDAAF618DA7B5D00433BF18F0CE103B2A556503
+083B641DA5C3598D91BB77155F3402636809641F3D562A16C31FECD15FB41981
+503A2F6FA9F75B18908742BD3F54207853961B13757598E7AE2CCDDBE8581F0F
+5D94103D8B70B7979BF7A3FE66ACE026B9E0DEFC43F858ECAB3912FD9D82E63D
+DF976800E0A3149575FEB0C6B62158609229D4F23F098B2BFE37F38CCF7B7994
+5FA5B28D52552FC310CDE45EB877FDA79E8ADA694F68B334D196D534A1D73EE0
+3E1C6A9EFB7EC70DC6060A5CF40943D54DEB3E783275F78665FDE836ACC5D10D
+BE8702D44178FCDCAE6FDDB6CABB760D630D685331124726EDCA812E4CEA2467
+727892F206130B55005C90C8DB47503CB12254E554F46286EFE6BB6B09B0DDB7
+5518DFB99CA7E44B6EC3AEF99BBF1ED2145CE8C917C0F38F36BAE7B3F37AB1E5
+24E006BD5B1F1E2C999A404E1AA9D8F6BEC4F4A1185EBF6843F290243480D831
+722AF4C0486F753F84F4C01F6FB70DC13B8F6F66A614EFAF9FE9185001637D85
+218D37A88AC788CF9C438D5F8A9DB47D4ECC5DE1745E800BCA9F63D89551A426
+FB8FCA992FA59F61F868D1618FB3602E5B0D04BFC14C773B5DCCF4E296A7EC16
+E543F61C85FD08D121B4297244B91F559C23A917386C58639D2700B4D3EC1203
+6F6ACD0653EA18ECCDFAE5ED6295B38B1335014D267585D44FD8862100453333
+CCA952AA953127E598297864C29754072C50DA8EE3EC5957F5F20916E04B4B91
+497650DD817B40A1F3A86C456DD85C012264284BAE440158636E15B800C75A86
+6509B1E07EB9F6F0DBB1460612F182B849535AD5DF8ED43F0323459E3EEFD1BF
+B4336DB593A2DE147ECDC46E00AF90262E5454EA1FAB3A3AE82D90AF28E8FF70
+7C55BB3148058C81BA391790137B03BB222125B2D8595D589B8FE4A7E8672F58
+3CBA2446378C410924928B85889E79E3837BF48219AB8B3F5731D515A06170C6
+DF3FD95B97222D3CD603AEA8BCB4A54C8A014B22F9838C21E580F44131E5AB56
+27AD75CB9FFF3E3F1DCF9CA04FA8E90A1980964F78DA64DD5CDAC7CE969F08F9
+AF326F201D889FF8A511E984E4174D0EF050BA2D95F1698F9D9E76ADC9D60DBD
+4EFA271872017E531C334E8C0A198858A2C07998171CA9BF709FE2D9AF529752
+497C763501E40F6A97F385BBDECDD32680E8D2EB515936A535AA382C74C6C742
+38C182E189F64A7318A9CF66804C98D812C8C5B10E1287D6848B3A5DCC887095
+6858EF62BADC94D621F31DCB3E021976C958E8AB6FDFB34C2F256FB2B7EE0834
+6D9F2188C5C30C2C404257B5B91B4FC1FBDE71A46C7AF4BF9E227749556B2137
+DF00E98CD3FEE2467B320BF1A569DB93466D43E02166EA71E28CD468B05D7210
+E35AA6C04088FF291D1F12FBD77E84A55B8CAAF550B087383D4D89EF665851E1
+B94FA0EF75487AF991EE6533D78A68140B6F0FE558593B36C661B39FDE013450
+5583485BC1C8DEBE958EAA440599E09FBD85D69E25CB2C0BB3B0BB580DCB6614
+B20CEA0F1695F2D21C470885928A2939E05D9E5542B02255C9BD5231BAF2CD72
+D708202C698AB39B218E7C52E1B7D1EB2E5A49E158F5D5DBC730C41E59A49941
+EFB050B9EC0A6DEAF4ED33BB8F562F230A6B1F36226C4BF4595C30E2DFE57ACD
+F0E7A4343F415DBCB40AD87A29F1884E7C4BBE4072CB638CCA60BF36538959BE
+633F3A2FAFADD77998E0393F996793A789D3D753526C037067157A2F7CD55A6E
+B5D03325CD9DA22121D800D1FB1034F8648893F4DBF16648A6EB4E7CA147569C
+09A7E600C10BC19EF1AB2C58029E46F4F340E05FB7ABB80B3D7654DA4C47377B
+9E94BB00F0736C9AB03F51C272813A6BAA4F7CF2CCF5E8C1527209F2F1C4E982
+A83379FD278A2CCBB0DCBCE1E16FBCC8C7075F4B865C98543F4A28C0BC1FBFE5
+B9F29728E0A832032968F39282D0236E0983D9E93B77D18BD8C2A189E6BE4575
+3FDDB9EE80A170AA0BE77185AE237E6366A0B1B03CF388611041F329E292B862
+2AD737D670C54B52C487E20D48614E1F82BDA56669879C7BB7B834AB13031737
+9F3974EA99A047430EFC2DD483669A7C0B93937B8AD270101201AE80B736CCF4
+41AD617A49B90B22D918C8DC39A8BA5BB12472AF22F98DC93DFB0698463ADFE0
+C7AD81C088C91DF0CD9EFAA4CAB9B8BDD7C53C7201F801926EFA03DB5A92D288
+89ABAC4D87A6452C092484FA6FAA13FB0107BF1D33B9E037AFF4133F401D97C5
+C8503E9F28F47301ECF88C4733FA4D354C60A325F73867110D0AB0255C527828
+E5E203F389A93B2CB86F436AAE4B04C45D83D8480B66E5F2F5A1E759E440C8D8
+C8186A4FF9B3ECAE2B31D6AD076E6163D99E6F0CBF5E8ED425B395C44F55FB17
+E6776856AD5621F2191373A7E03F415011B710759883D078D9AFF5F853AE609D
+F7330A51408D7AD729252F320C845FAA3046063568C58672A63A77BCB24D2D2A
+89334A2D216E921B211924DB0E28F2770D3A385F64C7748B53E81B00974DFBF4
+EAFEA8679DCB7D2970392C6FD53D35E3B0911073216C8B7FE46E311EC33E6EA3
+8E926EBBAB3C0D9314FC4E5BB54C36ABF02D3A45C77C68D84BE2F9D6864F5F56
+DCBC56BF7B8A73583D5FE7E0BB62BF9FB12D2F72A5F4B8FDE73FB3177AADC29C
+431C9075E6CA04DDAF00BC39DA2116DC675662842977EAF575C97D7453273C66
+126640C41F2A5552E02ADED03D85EB63F28781AF1635C11F06DC9838F3777745
+AEB998245347B1238E7D072CEE580FA9A7ED0225487A55D6093B80F7F0E36C6C
+7B5693376D2A1FF63649850CD9DB945D1AF32E8A9586A546DC8859E7BD24B203
+91C688713C7F03BCBCD562759CBE94274944BEB0E638E7A0FD766D78C0E99409
+EE6588CFABC492F2D5A0E56AE71177537869694D7B76BA6DB851B00B7EC1A9C2
+6FE9E81D49A554DE0BCC95E3F15B154B0CE70D783976E2799D009FBB134002FB
+4F5589D627DF9CA124E5DCE497EB9974847668CE13F2FD55A503C0AC1655E159
+DF46DC84406D6085C7
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+TeXDict begin 37293595 25732579 1000 9000 9000 (psv_about.dvi)
+@start /Fa 12[1037 12[1037 18[1453 23[934 1[934 7[934
+5[1037 570 3[1037 3[934 1037 5[1141 1[1141 7[1246 5[1349
+1171 3[1246 3[1349 1246 5[1037 934 934 934 1349 934 1037
+519 934 622 1037 1037 1037 1037 1556 415 934 415 519
+1037 1037 519 1037 1037 934 1037 1037 6[1141 1246 1246
+1763 1246 1349 1141 1246 1349 1453 1246 1453 1349 1556
+1037 1246 934 519 1349 1453 1141 1246 1349 1349 1246
+1246 1896 2[1046 1[519 519 1037 1037 1037 1037 1037 1037
+1037 1037 1037 1037 1[519 622 519 1046 1[622 622 413
+1246 4[519 33[{encqhv ReEncodeFont}95 1868 /QuasiSwiss-Regular
+rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 9000dpi
+TeXDict begin
+statusdict /setpageparams known { hsize vsize 0 1 statusdict begin {
+setpageparams } stopped end } { true } ifelse { statusdict /setpage known
+{ hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop -9000 -9000 a
+ /TeX_matrix [[72 Resolution div 0 0 72 VResolution div 0 0] {dup dup round sub abs 0.00001 lt {round} if} forall] def /unit {0 TeX_matrix matrix invertmatrix dtransform dup mul exch dup mul add sqrt} def /trueunit {0 matrix defaultmatrix matrix currentmatrix matrix invertmatrix matrix concatmatrix dtransform dup mul exch dup mul add sqrt} def /mm {25.4 div 72 mul unit} def /v{/Ry exch def/Rx exch def V} def /V{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto closepath fill grestore} def /fshow{gsave 72 TeXDict /Resolution get div -72 TeXDict /VResolution get div scale 1 DVImag div dup scale get cvx exec show grestore}def /TIFFDirectory (bop/) def /EPSDirectory (bop/) def /EPSSDirectory (epss/) def
+ -9000 -9000 a -9000
+-9000 a
+ currentpoint /OO_y exch def /OO_x exch def
+ -9000 -9000 a 26433 -9000 a
+ currentpoint /OO_y exch def /OO_x exch def
+ 26433 -9000 a -9000
+-9000 a
+ gsave
+ -9000 -9000 a -10772 -10772 a
+ currentpoint /OO_y exch def /OO_x exch def
+ -10772 -10772 a
+-10772 -10772 a
+ currentpoint /p1_y exch def /p1_x exch def
+ -10772 -10772 a -10772 41669 a
+ currentpoint /OO_y exch def /OO_x exch def
+ -10772
+41669 a -10772 41669 a
+ currentpoint /p2_y exch def /p2_x exch def
+ -10772 41669 a 63638 41669 a
+ currentpoint /OO_y exch def /OO_x exch def
+ 63638
+41669 a 63638 41669 a
+ currentpoint /p3_y exch def /p3_x exch def
+ 63638 41669 a 63638 -10772 a
+ currentpoint /OO_y exch def /OO_x exch def
+ 63638
+-10772 a 63638 -10772 a
+ currentpoint /p4_y exch def /p4_x exch def
+ 63638 -10772 a -9000 39898 a
+ newpath p1_x p1_y moveto p2_x p2_y lineto p3_x p3_y lineto p4_x p4_y lineto closepath clip newpath
+
+-9000 39898 a -9000 -9000 a
+ currentpoint /OO_y exch def /OO_x exch def
+ -9000 -9000 a -9000 -9000
+a
+ currentpoint /OO_y exch def /OO_x exch def
+ -9000 -9000 a White 1362 x Fa(ABCD)o(EF)q(GHIJKLMN)o(O)q(PQRS)-56
+b(TUV)o(W)q(XYZabcd)o(efghijkl)o(m)q(n)o(opq)o(r)10 b(s)-10
+b(t)q(u)o(vwxyz)p Black -9000 -9000 a
+ currentpoint /OO_y exch def /OO_x exch def
+ -9000 -9000 a White
+1765 x Fa(\201\202\206\212\213\323\221\231\233\241\242\246\252\253)o
+(\363\261\271\273012)o(345)o(6789)o(,)q(.;:)q(')o(\(\)!)q(+-=)p
+Black 26433 15449 a
+ currentpoint /OO_y exch def /OO_x exch def
+ 26433 15449 a 8717 -2268 a
+ /SItps save N /isls false N statusdict begin /setpageparams {pop pop pop pop} def /setpage {pop pop pop} def end userdict begin /bop-hook {} def /setpagedevice {pop} def /a0 {} def /a1 {} def /a2 {} def /a3 {} def /a4 {} def /a5 {} def /a6 {} def /a7 {} def /a8 {} def /a9 {} def /a10 {} def /b0 {} def /b1 {} def /b2 {} def /b3 {} def /b4 {} def /b5 {} def /letter {} def /note {} def /legal {} def /halfletter {} def /11x17 {} def /ledger {} def /flsa {} def /flse {} def end
+ 8717 -2268
+a 35433 x @beginspecial 12.104000 @llx 4.715000 @lly
+450.476013 @urx 443.085999 @ury 2834.638672 @rwi @setspecial
+%%BeginDocument: psv_logo.eps
+/GSexport 100 dict def GSexport begin
+/h {closepath} def
+/m {moveto} def
+/c {curveto} def
+/l {lineto} def
+/k {setcmykcolor} def
+/K {setcmykcolor} def
+/*u {/oper_kind -1 def} def
+/*U {*U*f *U*d *U*c} def
+/f {/oper_kind 0 def} def
+/*U*f {0 oper_kind eq {eofill} if} def
+/s {closepath /oper_kind 1 def} def
+/S {/oper_kind 1 def} def
+/*U*d {1 oper_kind eq {stroke} if} def
+/W {} def
+/n {/oper_kind 2 def} def
+/*U*c {2 oper_kind eq {eoclip newpath} if} def
+/w {setlinewidth} def
+/j {setlinejoin} def
+/J {setlinecap} def
+/M {setmiterlimit} def
+/d {setdash} def
+/setcmykcolor where {pop}
+ {/setcmykcolor {1 sub /mf exch def
+ 3 {mf add neg dup 0 lt {pop 0} if 3 1 roll} repeat
+ setrgbcolor} def} ifelse
+/q {gsave} def
+/Q {grestore} def
+q
+*u
+6.262 w 0 j 0 J 2.613 M
+[] 0 d
+0.2 0.1 0 0 K
+448.91 282.219 m
+330.511 261.475 291.37 462.656 172.971 441.912 c
+193.911 323.317 -7.27 284.177 13.67 165.581 c
+132.069 186.717 171.21 -14.464 289.609 6.28 c
+268.669 124.875 469.85 164.016 448.91 282.219 c
+s
+*U
+*u
+0.2 0.1 0 0 k
+128.378 169.016 m
+118.01 169.326 l
+119.248 142.554 l
+133.485 144.875 147.412 147.042 161.649 147.661 c
+162.578 166.385 l
+139.52 167.933 l
+140.139 196.897 l
+149.888 190.242 157.316 183.562 169.696 183.253 c
+194.92 182.634 205.443 212.681 205.443 232.953 c
+205.443 254.618 189.968 266.688 171.553 265.141 c
+157.316 264.057 147.722 255.856 139.211 248.583 c
+139.83 266.688 l
+129.926 262.51 120.176 260.653 109.344 260.343 c
+106.868 241.928 l
+128.069 240.071 l
+128.378 169.016 l
+f
+140.449 215.002 m
+140.139 222.275 l
+140.139 232.334 155.614 240.071 170.315 241 c
+180.993 241.928 190.897 235.893 190.897 223.823 c
+190.897 213.3 186.409 205.408 172.482 205.408 c
+160.721 205.717 150.198 208.348 144.627 212.371 c
+140.449 215.002 l
+f
+*U
+*u
+0.2 0.1 0 0 k
+245.832 265.76 m
+228.036 266.379 216.275 253.689 215.347 235.584 c
+215.037 224.751 224.941 220.109 235.619 217.788 c
+250.01 214.693 l
+255.736 213.609 266.104 213.3 266.104 209.895 c
+266.104 204.17 256.046 202.003 244.285 201.694 c
+233.452 202.003 221.072 204.17 216.275 206.027 c
+211.323 193.337 l
+220.763 186.374 232.524 183.253 247.38 182.944 c
+264.247 182.324 281.734 192.409 282.043 209.276 c
+282.353 222.894 267.652 225.061 255.427 227.692 c
+242.273 230.786 l
+236.392 232.025 229.738 234.346 229.274 239.298 c
+228.965 245.642 237.94 247.654 246.451 247.654 c
+253.415 247.654 259.45 246.416 260.379 245.642 c
+259.45 244.095 259.14 242.238 258.831 240.381 c
+259.14 235.584 263.628 232.334 269.045 232.643 c
+275.08 232.953 278.794 237.75 278.794 243.476 c
+278.794 253.07 269.045 265.141 245.832 265.76 c
+f
+*U
+*u
+0.2 0.1 0 0 k
+377.833 264.986 m
+338.527 262.2 l
+339.765 241.619 l
+350.133 241.619 l
+337.289 211.443 l
+323.516 211.443 l
+315.005 240.69 l
+326.766 240.071 l
+326.766 248.273 327.385 256.475 328.623 264.676 c
+289.317 261.582 l
+287.46 241.619 l
+297.518 241.309 l
+306.184 221.966 314.386 202.622 321.35 182.634 c
+340.074 183.562 l
+347.038 203.551 355.858 222.585 366.691 241 c
+375.821 240.381 l
+375.821 249.821 376.285 253.999 377.833 264.986 c
+f
+*U
+Q
+end
+showpage
+
+%%EndDocument
+ @endspecial 8717 33165 a
+ SItps restore
+ 8717 33165 a 26433 15449 a
+ currentpoint /OO_y exch def /OO_x exch def
+
+26433 15449 a Blue 19346 1780 a
+gsave currentpoint 185.01277 100 div div exch 185.01277 100 div div exch currentpoint neg 185.01277 100 div mul exch neg 185.01277 100 div mul exch translate 185.01277 100 div 185.01277 100 div scale translate
+ 19346 1780 a Fa(PS\346Vie)-19
+b(w)27007 1780 y
+grestore
+ 27007 1780 a Black 8717 5422 a
+gsave currentpoint 140.91505 100 div div exch 140.91505 100 div div exch currentpoint neg 140.91505 100 div mul exch neg 140.91505 100 div mul exch translate 140.91505 100 div 140.91505 100 div scale translate
+ 8717
+5422 a Fa(p)o(r)h(e)-29 b(vi)q(e)-19 b(w)g(e)o(r)622
+b({)g(P)-46 b(o)o(s)-9 b(t)-18 b(S)o(cr)q(ip)-10 b(t)623
+b(&)f(P)o(DF)33862 5422 y
+grestore
+ 33862 5422 a 6369 8224 a
+gsave currentpoint 140.91505 100 div div exch 140.91505 100 div div exch currentpoint neg 140.91505 100 div mul exch neg 140.91505 100 div mul exch translate 140.91505 100 div 140.91505 100 div scale translate
+ 6369
+8224 a Fa(g)o(r)-9 b(aph)o(i)q(ca)o(l)622 b(int)-28 b(er)47
+b(f)-19 b(ace)622 b(f)-19 b(or)622 b(G)q(h)o(os)-9 b(tscrip)g(t)34846
+8224 y
+grestore
+ 34846 8224 a 8717 31637 a
+gsave currentpoint 78.37602 100 div div exch 78.37602 100 div div exch currentpoint neg 78.37602 100 div mul exch neg 78.37602 100 div mul exch translate 78.37602 100 div 78.37602 100 div scale translate
+ 8717 31637 a Blue -22416
+x Fa(V)-103 b(er)9 b(sion:)p Black 19329 9221 a
+ PS_VIEW show
+ 19329
+9221 a Blue 8717 12023 a Fa(A)-19 b(ut)-9 b(h)o(or)9
+b(s:)p Black 3681 w(B)o(.)623 b(Jac)9 b(k)-37 b(o)-19
+b(w)-10 b(ski,)623 b(P)-253 b(.)623 b(Pian)o(o)-19 b(w)-9
+b(ski,)622 b(P)-252 b(.)623 b(S)-10 b(tr)19 b(zelczyk)p
+Blue 8717 14825 a(A)-19 b(dd)o(r)h(e)o(ss:)p Black 3285
+w(B)-10 b(OP)622 b(s.)150 b(c.)19329 17627 y(Gen)o(.)623
+b(T)-187 b(.)622 b(Bor)-9 b(a-K)-56 b(o)o(mor)-9 b(o)-19
+b(w)-10 b(skiego)622 b(2)o(4)19329 20429 y(8)o(0)149
+b(-)h(37)o(7)622 b(Gda\253sk,)g(P)-47 b(ola)o(nd)19329
+23231 y(b)o(op@b)o(op.com.pl)p Blue 8717 28835 a(Gho)o(s)-9
+b(tscri)q(p)f(t)-56 b(:)p Black 19329 28835 a
+ revision 100 div val_str cvs show
+ 19329 28835
+a Blue 8717 31637 a Fa(L)o(i)q(b)o(r)-9 b(aries:)p Black
+19329 31637 a
+ /INFO_dict where {pop INFO_dict /LuaName known {INFO_dict /LuaName get show (, ) show} if INFO_dict /wxLuaName known {INFO_dict /wxLuaName get show (, ) show} if INFO_dict /wxWidgetsName known {INFO_dict /wxWidgetsName get show} if }{pop} ifelse
+ 19329 31637 a 53926 31637 a
+grestore
+ 53926 31637
+a -9000 39898 a
+ grestore
+ -9000 39898 a eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/tlpkg/tlpsv/psv_about_pl.ps b/Master/tlpkg/tlpsv/psv_about_pl.ps
new file mode 100644
index 00000000000..2dd3eb2922a
--- /dev/null
+++ b/Master/tlpkg/tlpsv/psv_about_pl.ps
@@ -0,0 +1,1330 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.96 Copyright 2005 Radical Eye Software
+%%Title: psv_about_pl.dvi
+%%CreationDate: Thu Apr 10 15:48:39 2008
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 567 392
+%%DocumentFonts: QuasiSwiss-Regular
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips psv_about_pl.dvi
+%DVIPSParameters: dpi=9000, comments removed
+%DVIPSSource: TeX output 2008.04.10:1548
+%%BeginProcSet: tex.pro 0 0
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: qhv.enc 0 0
+/encqhv[
+/alpha
+/Delta
+/beta
+/delta
+/pi
+/Pi
+/Sigma
+/mu
+/ellipsis
+/f_k
+/Omega
+/ff
+/fi
+/fl
+/ffi
+/ffl
+/dotlessi
+/dotlessj
+/grave
+/acute
+/caron
+/breve
+/macron
+/ring
+/cedilla
+/germandbls
+/ae
+/oe
+/oslash
+/AE
+/OE
+/Oslash
+/space
+/exclam
+/quotedblright
+/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
+/exclamdown
+/equal
+/questiondown
+/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
+/quotedblleft
+/bracketright
+/circumflex
+/dotaccent
+/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
+/hungarumlaut
+/tilde
+/dieresis
+/Euro
+/Aogonek
+/Cacute
+/greater
+/greaterequal
+/approxequal
+/Eogonek
+/Iogonek
+/less
+/lessequal
+/Lslash
+/Nacute
+/asciitilde
+/asciicircum
+/ell
+/dagger
+/daggerdbl
+/Sacute
+/Scaron
+/Scommaaccent
+/degree
+/Tcommaaccent
+/ogonek
+/Uogonek
+/Ydieresis
+/Zacute
+/Zcaron
+/Zdotaccent
+/.notdef
+/braceleft
+/braceright
+/section
+/.notdef
+/aogonek
+/cacute
+/registered
+/copyright
+/divide
+/eogonek
+/iogonek
+/minus
+/multiply
+/lslash
+/nacute
+/plusminus
+/infinity
+/guillemotleft
+/guillemotright
+/paragraph
+/sacute
+/scaron
+/scommaaccent
+/bullet
+/tcommaaccent
+/.notdef
+/uogonek
+/ydieresis
+/zacute
+/zcaron
+/zdotaccent
+/.notdef
+/periodcentered
+/quotedbl
+/quotesingle
+/Agrave
+/Aacute
+/Acircumflex
+/Atilde
+/Adieresis
+/Aring
+/backslash
+/Ccedilla
+/Egrave
+/Eacute
+/Ecircumflex
+/Edieresis
+/Igrave
+/Iacute
+/Icircumflex
+/Idieresis
+/Eth
+/Ntilde
+/Ograve
+/Oacute
+/Ocircumflex
+/Otilde
+/Odieresis
+/currency
+/perthousand
+/Ugrave
+/Uacute
+/Ucircumflex
+/Udieresis
+/Yacute
+/Thorn
+/bar
+/agrave
+/aacute
+/acircumflex
+/atilde
+/adieresis
+/aring
+/underscore
+/ccedilla
+/egrave
+/eacute
+/ecircumflex
+/edieresis
+/igrave
+/iacute
+/icircumflex
+/idieresis
+/eth
+/ntilde
+/ograve
+/oacute
+/ocircumflex
+/otilde
+/odieresis
+/anglearc
+/diameter
+/ugrave
+/uacute
+/ucircumflex
+/udieresis
+/yacute
+/thorn
+/quotedblbase
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro 0 0
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
+@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
+newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
+closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
+/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
+currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
+N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
+neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
+rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
+scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
+lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
+ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
+/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
+pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
+restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
+/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
+setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
+moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
+matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
+savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ userdict begin /ori_setcmykcolor where {pop} {/ori_setcmykcolor /setcmykcolor
+load def} ifelse /ori_setrgbcolor where {pop} {/ori_setrgbcolor /setrgbcolor
+load def} ifelse /ori_setgray where {pop} {/ori_setgray /setgray load
+def} ifelse /ori_colorimage where {pop} {/ori_colorimage /colorimage
+load def} ifelse /ori_image where {pop} {/ori_image /image load def}
+ifelse /ori_imagemask where {pop} {/ori_imagemask /imagemask load def}
+ifelse /ori_fill where {pop} {/ori_fill /fill load def} ifelse /ori_eofill
+where {pop} {/ori_eofill /eofill load def} ifelse /ori_stroke where
+{pop} {/ori_stroke /stroke load def} ifelse /ori_show where {pop} {/ori_show
+/show load def} ifelse /ori_grestore where {pop} {/ori_grestore /grestore
+load def} ifelse /ori_gsave where {pop} {/ori_gsave /gsave load def}
+ifelse /hax_setcmykcolor /ori_setcmykcolor load def /maybe_black {
+4 copy 1 sub abs epsilon le exch 0 sub abs epsilon le and exch 0 sub
+abs epsilon le and exch 0 sub abs epsilon le and /if_delblack exch
+def } def /my_fill {userdict begin if_delblack {newpath} {ori_fill}
+ifelse end} def /my_eofill {userdict begin if_delblack {newpath} {ori_eofill}
+ifelse end} def /my_stroke {userdict begin if_delblack {newpath} {ori_stroke}
+ifelse end} def /my_show {userdict begin if_delblack {false charpath
+currentpoint newpath moveto} {ori_show} ifelse end} def /my_gsave {c_
+m_ y_ k_ ori_setcmykcolor ori_gsave c_ m_ y_ k_ setcmykcolor} def /my_grestore
+{ori_grestore currentcmykcolor setcmykcolor} def /eofill {userdict
+begin my_eofill end} def /fill {userdict begin my_fill end} def /stroke
+{userdict begin my_stroke end} def /show {userdict begin my_show end}
+def /gsave {userdict begin my_gsave end} def /grestore {userdict begin
+my_grestore end} def /setcmykcolor {userdict begin /k_ exch def /y_
+exch def /m_ exch def /c_ exch def c_ m_ y_ k_ hax_setcmykcolor end}
+def /setgray {ori_setgray currentcmykcolor setcmykcolor} def /setrgbcolor
+{ori_setrgbcolor currentcmykcolor setcmykcolor} def /hax_image { dup
+type cvlit /dicttype eq { /ImageDict exch def currentcolorspace dup
+length 1 eq ImageDict /ImageType get 1 eq and {0 get dup /DeviceRGB
+eq {/ncomp 3 def} if dup /DeviceGray eq {/ncomp 1 def} if /DeviceCMYK
+eq {/ncomp 4 def} if ImageDict /BitsPerComponent get 8 ne ncomp 1 ne
+and {/ncomp 0 def} if } {pop /ncomp 0 def} ifelse } { false 1 makeimagedict
+} ifelse ncomp 0 eq {ImageDict ori_image} {hax_image_} ifelse } def
+/hax_colorimage { makeimagedict hax_image_ } def /makeimagedict { dup
+/ncomp exch def dup 4 eq {/DeviceCMYK setcolorspace} if dup 3 eq {/DeviceRGB
+setcolorspace} if 1 eq {/DeviceGray setcolorspace} if /ImageDict 7
+dict def ImageDict begin {/MultipleDataSources true def ncomp array
+astore} if /DataSource exch def /ImageMatrix exch def /BitsPerComponent
+exch def /Height exch def /Width exch def /Decode [ncomp {0 1} repeat]
+def /ImageType 1 def end } def /data_str 65532 string def /data_str_
+8192 string def /merge_multi4 { ImageDict /DataSource get aload pop
+dup type cvlit /filetype eq { /fdatsrck exch def /fdatsrcy exch def
+/fdatsrcm exch def /fdatsrcc exch def /datasrck {fdatsrck data_str_
+readstring pop} def /datasrcy {fdatsrcy data_str_ readstring pop} def
+/datasrcm {fdatsrcm data_str_ readstring pop} def /datasrcc {fdatsrcc
+data_str_ readstring pop} def } { /datasrck exch def /datasrcy exch
+def /datasrcm exch def /datasrcc exch def } ifelse ImageDict /DataSource
+{ data_str 0 datasrcc {3 copy put pop 4 add} forall pop 1 datasrcm
+{3 copy put pop 4 add} forall pop 2 datasrcy {3 copy put pop 4 add}
+forall pop 3 datasrck {3 copy put pop 4 add} forall 3 sub 0 exch getinterval
+} put } def /merge_multi3 { ImageDict /DataSource get aload pop dup
+type cvlit /filetype eq { /fdatsrcb exch def /fdatsrcg exch def /fdatsrcr
+exch def /datasrcb {fdatsrcb data_str_ readstring pop} def /datasrcg
+{fdatsrcg data_str_ readstring pop} def /datasrcr {fdatsrcr data_str_
+readstring pop} def } { /datasrcb exch def /datasrcg exch def /datasrcr
+exch def } ifelse ImageDict /DataSource { data_str 0 datasrcr {3 copy
+put pop 3 add} forall pop 1 datasrcg {3 copy put pop 3 add} forall
+pop 2 datasrcb {3 copy put pop 3 add} forall 2 sub 0 exch getinterval
+} put } def /i_Str 3 string def /O_Str 4 string def /UCR {0.5 mul}
+def /BG {0.7 mul} def /min {1 index 1 index le {pop} {exch pop} ifelse}
+def /max {1 index 1 index ge {pop} {exch pop} ifelse} def /RGBtoCMYK
+{dup 0 get R_scale mul R_shift add /c_i exch def dup 1 get G_scale
+mul G_shift add /m_i exch def 2 get B_scale mul B_shift add /y_i exch
+def /k_i c_i m_i y_i min min def O_Str dup 0 255 0 c_i k_i UCR sub
+cvi max min put dup 1 255 0 m_i k_i UCR sub cvi max min put dup 2 255
+0 y_i k_i UCR sub cvi max min put dup 3 255 0 k_i BG cvi max min put
+} def /RGBtoCMYKfilter { ImageDict /Decode get aload pop 2 copy sub
+/B_scale exch def pop 255 mul 255 exch sub /B_shift exch def 2 copy
+sub /G_scale exch def pop 255 mul 255 exch sub /G_shift exch def 2
+copy sub /R_scale exch def pop 255 mul 255 exch sub /R_shift exch def
+/rtc_file ImageDict /DataSource get def ImageDict /DataSource {rtc_file
+i_Str readstring {RGBtoCMYK} if} 0 () /SubFileDecode filter put /DeviceCMYK
+setcolorspace /ncomp 4 def ImageDict /Decode [0 1 0 1 0 1 0 1] put
+} def /sep_str 8192 string def /SEP_CMYK { 0 hax_sep 4 3 index length
+1 sub { 2 index exch get 3 copy put pop 1 add } for dup 0 ne {0 exch
+getinterval}{pop pop ()} ifelse } def /SEPfilters { ncomp 4 eq { useDeviceN
+{ ImageDict begin /Decode [ Decode aload pop 4 {exch 8 2 roll} repeat
+] def end [ /DeviceN [/XCyan /XMagenta /XYellow /XBlack ] /DeviceGray
+hax_sep 0 eq {{pop pop pop}} if hax_sep 1 eq {{pop pop exch pop}} if
+hax_sep 2 eq {{pop 3 1 roll pop pop}} if hax_sep 3 eq {{4 1 roll pop
+pop pop}} if hax_sep 3 gt {{pop pop pop}} if ] setcolorspace } { hax_sep
+3 le { /sepproc /SEP_CMYK load def ImageDict begin /Decode [ Decode
+hax_sep 2 mul 1 add get Decode hax_sep 2 mul get ] def end } { /sepproc
+{dup length 4 idiv 0 exch getinterval} def } ifelse /sep_file ImageDict
+/DataSource get def ImageDict /DataSource {sep_file sep_str readstring
+pop sepproc} 0 () /SubFileDecode filter put /DeviceGray setcolorspace
+} ifelse } {hax_sep 3 ne {ImageDict /Decode [ 1 1 ] put} if } ifelse
+hax_sep 4 eq {ImageDict /Decode [ 1 1 ] put} if hax_sep 5 eq {ImageDict
+/Decode [ 0 0 ] put} if } def /change_str 12288 string def /CHANGEfilter
+{ /change_file ImageDict /DataSource get def ImageDict /DataSource
+{ change_file change_str readstring pop 0 ncomp 2 index length ncomp
+sub { 1 index exch 2 copy ncomp getinterval changebits putinterval
+} for } 0 () /SubFileDecode filter put } def /hax_image_ { ImageDict
+/MultipleDataSources known { ImageDict /MultipleDataSources get { ImageDict
+/MultipleDataSources false put ImageDict /DataSource get length dup
+4 eq {merge_multi4} if dup 3 eq {merge_multi3} if 1 eq {ImageDict begin
+/DataSource DataSource aload pop def end} if } if } if ImageDict begin
+/DataSource dup load Width BitsPerComponent mul 7 add 8 idiv Height
+ncomp mul mul () /SubFileDecode filter def end to_change_bitmap {CHANGEfilter}
+if ncomp 3 eq to_convert_bitmap and {RGBtoCMYKfilter} if ncomp 3 ne
+to_sep_bitmap and {SEPfilters} if ImageDict ori_image } def /zero_data_str
+65532 string def /hax_imagemask { if_delblack { dup type cvlit /dicttype
+eq { /ImageDict exch def } { /ImageDict 7 dict def ImageDict begin
+/DataSource exch def /ImageMatrix exch def /Decode exch {[1 0]} {[0
+1]} ifelse def /Height exch def /Width exch def /BitsPerComponent 1
+def /ImageType 1 def end } ifelse ImageDict begin /DataSource load
+Width 7 add 8 idiv Height mul () /SubFileDecode filter end /mask_file
+exch def ImageDict /DataSource { zero_data_str 0 mask_file data_str
+readstring pop length getinterval } 0 () /SubFileDecode filter put
+ImageDict /Decode [1 0] put ImageDict ori_imagemask } {ori_imagemask}
+ifelse } def /truebp {0 matrix defaultmatrix matrix currentmatrix matrix
+invertmatrix matrix concatmatrix dtransform dup mul exch dup mul add
+sqrt} def /truein {72 mul truebp} def /truept {72.27 div truein} def
+/truesp {65536 div truept} def /truedd {1238 mul 1157 div truept} def
+/truecc {12 mul truedd} def /truemm {25.4 div truein} def /truecm {10
+mul truemm} def /epsilon 0.005 def /if_delblack false def /to_change_bitmap
+false def /to_convert_bitmap false def /to_sep_bitmap false def currentcmykcolor
+setcmykcolor end
+
+ userdict begin /useDeviceN true def end
+
+ userdict begin /scaledpoint {65536 div 72.27 div 72 mul} def /setsuperblack
+{1 1 1 1 setcmykcolor} def /cropdist 932339 scaledpoint def /cropsize
+932339 scaledpoint def /cropthick 9323 scaledpoint def /croplin {gsave
+cropthick setlinewidth 0 setlinecap setsuperblack newpath cropdist
+0.5 cropsize mul add dup 0.3 cropsize mul 0 360 arc closepath stroke
+newpath cropdist 0.5 cropsize mul add cropdist moveto 0 cropsize rlineto
+stroke newpath cropdist cropdist 0.5 cropsize mul add moveto cropsize
+0 rlineto stroke newpath 0 cropdist moveto 0 cropsize rlineto stroke
+newpath cropdist 0 moveto cropsize 0 rlineto stroke grestore} def /cropmark
+{gsave cropthick setlinewidth 0 setlinecap setsuperblack newpath 0
+0 0.3 cropsize mul 0 360 arc closepath stroke newpath -0.5 cropsize
+mul 0 moveto cropsize 0 rlineto stroke newpath 0 -0.5 cropsize mul
+moveto 0 cropsize rlineto stroke grestore} def /lin {gsave cropthick
+setlinewidth 0 setlinecap setsuperblack newpath cropdist 0 moveto cropsize
+0 rlineto stroke grestore} def end
+
+ userdict begin /scaledpoint {65536 div 72.27 div 72 mul} def /setcyan
+{1 0 0 0 setcmykcolor} def /setmagenta {0 1 0 0 setcmykcolor} def /setyellow
+{0 0 1 0 setcmykcolor} def /setblack {0 0 0 1 setcmykcolor} def /setsuperblack
+{1 1 1 1 setcmykcolor} def /cmyksize 372935 scaledpoint def /cmykthick
+9323 scaledpoint def /cmykhalf cmyksize 0.5 mul def /cmykquarter cmyksize
+0.25 mul def /cmykcropmark {gsave cmykthick setlinewidth 0 setlinecap
+newpath setsuperblack cmykquarter neg 0 moveto cmykhalf 0 rlineto stroke
+setsuperblack 0 cmykquarter neg moveto 0 cmykhalf rlineto stroke setblack
+cmyksize neg cmykhalf moveto cmykhalf neg 0 rlineto stroke setcyan
+0 cmykhalf moveto cmyksize neg 0 rlineto stroke setmagenta 0 cmykhalf
+moveto cmyksize 0 rlineto stroke setyellow cmyksize cmykhalf moveto
+cmykhalf 0 rlineto stroke setcyan cmyksize neg cmykhalf neg moveto
+cmykhalf neg 0 rlineto stroke setyellow 0 cmykhalf neg moveto cmyksize
+neg 0 rlineto stroke setblack 0 cmykhalf neg moveto cmyksize 0 rlineto
+stroke setmagenta cmyksize cmykhalf neg moveto cmykhalf 0 rlineto stroke
+setblack cmykhalf neg cmyksize neg moveto 0 cmykhalf neg rlineto stroke
+setyellow cmykhalf neg 0 moveto 0 cmyksize neg rlineto stroke setcyan
+cmykhalf neg 0 moveto 0 cmyksize rlineto stroke setmagenta cmykhalf
+neg cmyksize moveto 0 cmykhalf rlineto stroke setcyan cmykhalf cmyksize
+neg moveto 0 cmykhalf neg rlineto stroke setblack cmykhalf 0 moveto
+0 cmyksize neg rlineto stroke setmagenta cmykhalf 0 moveto 0 cmyksize
+rlineto stroke setyellow cmykhalf cmyksize moveto 0 cmykhalf rlineto
+stroke grestore} def end
+
+@fedspecial end
+%%BeginFont: QuasiSwiss-Regular
+%!PS-AdobeFont-1.0: QuasiSwiss-Regular 1.07
+%%CreationDate: 12.01.2002
+% Generated by MetaPost
+% QX extension by JNS Team (see www.GUST.org.pl).
+% ADL: 729 216 55
+%%EndComments
+FontDirectory/QuasiSwiss-Regular known{/QuasiSwiss-Regular findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 9 dict dup begin
+/version(1.07)readonly def
+/Notice(QX extension by JNS Team (see www.GUST.org.pl).)readonly def
+/FullName(QuasiSwiss-Regular)readonly def
+/FamilyName(QuasiSwiss)readonly def
+/Weight(Regular)readonly def
+/isFixedPitch false def
+/ItalicAngle 0 def
+/UnderlinePosition -127 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /QuasiSwiss-Regular def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+%/UniqueID 0 def
+/FontBBox{-174 -285 1000 959}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
+1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
+B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
+4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
+DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
+2AD360A28616CB4A0670C1BF13E5D071F743ACDAD8F4F97A172F977C3F97E343
+F4A3478877F53C5499AB64462D95993B13D9EB1E1A87443B4DAD1A424334C7C3
+93173E4450DA2568A0AA892EB87B078CC6BDBD48C5E71AD224DD23027CFCC6FA
+BB2E3882A14C0F81CB92941A12D4CEF33D758ABC67EEA7452F0DD040612A5F91
+A8D8F9866DF37EA9CEC4814906E05F8C143BB09E42B8A1688B764C00AFA45552
+5B4CEAC2AB9BA06075FAD345C12F4CFC2FF0DA615C8A70FFDAFF248BC9227175
+7AD37A2C3A05FBB1397D2D628B47356F58A71E702F3D716C0A6512ADEE8E89ED
+0F29D27B15CD4306D7251D63B2F3A3B5AAFF55ABAE0C1DFA37661A21901AE7DE
+B920CCD9BEB91A16D9D568D7DC6376C15CD364FE2A7C9DB648C631D5724D9FE8
+ECBB8011CD6F52BAB95C31A693E9C6307CE602E1E9B116FE182AA9D0218DA75F
+255BCAEBAA3E8468B33C6AE1B7BD61A39CA97413A76A4A2E35415C9F1CB7DDCA
+DCE96CB612572BEA8C3D6CDB9F07B6A46EEE24CC417E10395C3237955CF72507
+B964AB83D8F330AC17FAA8048A02A45866C6C06A96A49BB4F54CEA3EEDD26E0F
+D545B3833FAE346DB0966D1F1396C81A21F533B9CF4CCE756EE50C6CB606FAF4
+C43CBA4F43920EC2C963C3E41CF192346273D4C72BA71A8083BD014F9AD09552
+AF4BF9B85CF949C754D36757E004FF3F5C9E4C5A6C689B024CE59B977FC47974
+D0A731D84DE0F8334C876E74256A3F9F1958140ED4F7C537C04BF4B9F56EA434
+B58C5000DACFEF4CF42647EE674510EF2CE12F4012B73A9B4DFB3A8B2373232C
+E5CA1AA372C6C92C815DC4D1641A9A92DF9A094EB9F801823AFFED8180480699
+E77641283457413BB6AA20E5946B0BB383C416678EDCAD2D3C9858A1A64A8A1C
+79842AA9E78DB2A52DFEB85CB1831774222E92C6A3B13DFEFAC48E5414911439
+D351CF9EB086BC1CBF53DEEF1FE81188A169292DBDA6C5441F953DA19A6AB424
+DA29964EFD2FE8D0E5EE627772619ED54F5CA3A14911F452C33ABE95D7230E14
+439D973158CC58ECB307F0D372DDCB8CAFF30FE0843CB33249EDBE568910A40F
+1A19008FCC92C461BF5463C5A1C471B6B22586FDC33C0B57B8121A58AB758A95
+CF9695F43FA3575F7FAF092943B9666224238D328C48F6D8A346D64697546C06
+A9125A3B90CE131DBCDBAD35A6388CFBC335D2BE90B5C581D1E84F9E76CF920B
+7BEC2E3679ECCA31C5DD602964AF4533BA8AD4CB58532AF7191B77CA3737E477
+4F66DF77395FB0F96D19115C60E652EF743F21C40B43782C5D4E00A09F155B0E
+B96CFE9312BA2A0CC2777CE3821A3028E09B840E807E6F6740A7B21EB035C42C
+067B0934BE534D76E035D858CE3BF07CB1E30764FAFF860CA83C4658577EC9AC
+F7E71468888D5C6807B4D7F645E55D8BC8B24E3652596FAD4BB9E1AEE8FEDC9E
+A5F7B931673B3FFABDD2146CE8A13E32380F1F0526611190E892D8A6FD185CFA
+65DF3DB858BCF75E95321A7131547E0C82D586DBA09EF291CC2E8D8CB438052A
+C2992420B6F580E30C865DC98E53B30FC4E51D0C7138D32D57A4E8D3A2AB2BE8
+86D9D9022750E9D46D72135AC23A90B50712C0A17D7C03E1B8B8B2F95468CD1E
+C3FEEC03870155AE380DEC3842F59CC7D52396D3FDA6AB2FFB67061A23953331
+DF4BE8804458E1BC7D2172AFE837B7F041CBBDC5EACF25EEE5F4B02C0B505EE6
+258A20D9E32E174288D9295618DFB99CA7E44B6EFF6BA0F2F5D28683C25BC570
+15FADC64B543BFCC1524D09BD30E36B339866B13AC10BBFEADFC6D39A5B942EF
+C9431F72C3B8FDD9F568AF9875BF047EEB6D0BEE5087694C55852F241EF6F397
+24098ACB22EEA72138CE45B8F982E1A068E9C61EA876F4FEA72D9EC46EDBDF4F
+C7DE2392905875FC28D07872F48FED6ECA640B08B8D586177DB014AB4D745196
+AAF73F063E19565F1D434F1B0B6E1EE0AD2510D6B21D5E44574DA49A861E14FB
+8153C749EF0DE6EC83878CE9C39699E9EB129DEB430557CC188BD4B33DF5177C
+D3C15B71A5F1AD15C37D3EB3C5988F62C7650922F21520BC937BEED880699EC0
+893EEEAE8EF961E3CDB118837785D4C45BDB6321EA9F687628C6A20A7385CFA7
+C60DBB1875E59CD940B469AFBC921EDB4F97F8D526EB04914F97FBB51A5EE854
+0731E514802AB4764D876CA8ABD8B00E1A916BF519D9CBFD8F80DC6E930A018F
+967B999ED1F74082531B743058E2AC36E2DCF5B92AC4336C801C993E7AB10201
+69E66140ED1D26630B3EECDF552294F3AEAF6C9E9E997BDAE4EF14F9E60E4875
+17C8ECCA81ED1DCF653026358C95735248E06086D041BFFB9514E5B8248E84F4
+647D674AEEC41A3E496FDEC2C0A1F90C1F4FF62C9DEF4189B84A339700CD6E74
+F3BF89884DF1DBD216D1F0D417A96E86F969D73892D142F1F8795AA0E5472451
+4A96DCFC689A963DDFB35C8A0EECF092834CE115EBFF2995FCC1C424B7A487A4
+8EA5B567B07AA8D634C702038C70BE76D293489BB97B6DF215204753DE7C4A3F
+E2B2C41723415C912EF1F70CC3895F4598A5BB79E23DDA5E752BC018EDE986D0
+0D3F68C0CBC50521346A87A21C453B7609E685C1A00D822718BBEF12CBB30F43
+04FBC6242A65EC78BC20D377D68BED977CDF4E50C83465D5F54B3850227D2F6D
+538FEEBDD697C394F6F3B8BAD129A2AF57286E78D8BB50306EAF109D2A2F0C56
+DB55B7367C34B4D511EB02457653F21C3EF5CDD1A9D6C65077A8D7AD7FAE19BE
+FC003C953DC913183B2BE2ADBC6EBBF762FFDA5CEA3F4B5016D167EA1DC84751
+924466FA4727C8709EECEDE5688308EB0C4B651E83B1CBB3FDB77D17D0D9A611
+2BF0D1484EA741D84587FD648451F061DCC9970506D4A778672A022D1935DC96
+85BBA74AA02ADFAB59DE70F679945611D8CCB8AC705E666737708255E193225B
+C60051CC6163A409D01F631F6DD59BC538502D18ECA4CAE179C9CD6222EFAB73
+101B470A6263805542515AA19B5E0E9FA83A47EBD11FC8E9A6787E86813FAA0C
+5F1ED2BC24B77548F1E28993887A7DD57398AA416BC7BF96029477CAB30ACCE5
+C281463B9D81A24C67758887D672CBCA219D2B5841538FE1B0FE8490E26354A0
+D16CDDB671CC59BE6D8B935D1A346C5B78CDC74FCCA8483943FEFD671409BBB2
+769C8ABD0E1D2974099BFD6576ACF2CDF306EEE9E7630EABC9D0D925689B2548
+AA66104BF95D06AA66A717B9867BFA591A9DFE626DDBD34AC593EF6F484665C1
+BCB05D38FCDECDE4198AE87BBAC475BA70CDB2554B68523C96EB31C4E7E46A23
+CA45788D29E169FC2CB91D21CD482B38FB22FC0DBA9B138EE3B234AFF7BB6C18
+6722FD5E0535978D0A53F47166DFB2C258B6D20C96B78BD1D5A73E157AECB9F3
+F59C0D7369467349C5CCEF5353BCA7EF8CE6151D158AA7D6F4DBE64EF67CD5D9
+39DE9ADB1786283CCEC1FE1442037773349DE530D70160C55FDEB881EF521213
+3C9FD7C7BBC8675CE5704DC1AC809046B1B84CC242CDBE481A01700C992CDDC2
+A821504F45CAA0E02507D032876D84FF8E0AF8A0ABC2E44EA400455954433066
+8C1AFB2FDD4A72EEEE8CA2121FF7288C9ED1C9D6B0EA1CC70460A406C10DEEF8
+330355C85FBB37E90D825A61B6714D5788BE542A21A93B495391EF6C45BE6D1F
+B3F56C8F84A7A13CCCA4C70D1087CD690D714452D9A6EF9AC68D884E15ACA3BC
+C07FCC0D05E6118D5435576BC9871384F13CDA0B6035883C113C2E7A8DF0AB9C
+9B35E71B0BE1A3A7054F874D9930B9E0544CA6AB5B87D0824E4A4E81527F6D4D
+1AFA10C69AD5034FC9856112429267999EA3548B45715104C19AD63F2DA95091
+108D36C8086072F20A661BB4E92AF0B9183F250A60A7950B3939DD77097DF439
+B3350F8194910480F0F209BB65AAE476588E972125C7D97A289538A8BFB71342
+EE3899DE4C4D47058A4C0BAC128B7D4D61C2AA87093F0D9188350856B847C04A
+D5F17FCD1E87796B6F6721ACE5F11E54305CA36FD3A7F768D29951166E7842CC
+737495F33CA41CC7435C59250E09A0722970B560097CA8B45C55E1B6382C643D
+94A36B2FC74B53A9E929C04FAFAA990BFD6BAEFB56A44965744053106BD5B5E9
+9175BBC27E4B5C72435BF4F490AAEF2FBA46A4A07CD5622A67C4FEDEB4DAB92A
+E722C326065E48F4EC7FBF2E1158F0590DC36E01531B89D35C673FA22203C7DC
+7E116FAF1E90C76924A1DE4063F0A652307DB8258563C5E4BFF09BA5328C3A4F
+97A55DB7F1F0792D0090825F89367279B2FBB99A9FC636680D5CAA716D2A6873
+9CB256236C6930BCABA147AEEC2AF7FE306AEF01BD11763D0FFBDAB02B7DE8AE
+E88E5E00EF34D0D654AAE015921FE10869B894C6B510EB3D191260D99508A036
+55C72145D790D081FFE4C2702FBAA1063F79583D1C38DC137F621D95A42999BB
+C5CE732427DB6C2002A3127695843FD9CF8D6B1839952BBDA76A07F74A89A9C2
+A9568CDCC98A2CCD6ADEC0C68E1DA32F0AF9732853AB792D6D2E80AF718CD013
+DA3760F1C2B453DF87A9D12A37D5E42E666B766F572C29D17CF6CBD01BF5092B
+4AA982DDE38C63986A9150B875458A6B9BA2550FD4FAB87B8CD93EDDB564B91F
+0C9E83055EBD211EDE43613759B68D1D1127E3FCA3BF15B974CC4C85B9D94CAE
+74F5ED35D9D8C9F785E9E29A050604B43BB5B08AD35B1B69E2C60F4745A14BBB
+EF8C1D28E7A655E47600BC3D4D6D79229920248DA11B67D1E11A39EB43FF31E0
+6E104877F2A09C91350A6FB59CFF4395B700640249548484B071A3D497740011
+2BE30A09AC796391363CEF947BE3E1E98F5CB30278D9DE3389988DDE36D70129
+F70E2D3060B9F358732590FBEA695AF14F70ABC8F9F74EC969440E0BAED3CB96
+CF2171FDE3F5E1B7E83E58346C85A168F9F4CA22285CBD02613510CDEA8BE937
+2AB5A86518BDDF0D6280B7684BEDB2BEFAD21EDC45759D2B79EE6C0C3AB3FF57
+A5A9E1E9713A6C0CF69BE688A8261B412A64C71141A5E99DC83340C4715086A0
+E9DF17D51C2390D04A11A038A4AD642CE7AE9ECE8C92FAAB641F234181DFB26E
+BA8AB37B5C35D070FC7C7F6B3318F249226450F8F29E75146AC6435A1FEC35A3
+ED53E7EDB5DC9884E29D59DFB9DBE6ACE43E4E01343B863924E7411A82A94FCA
+0751A45E527FB2556B76719D73756CB21363010636F51877911BCC40ED2910C6
+6D6FB986FE051D33623F1880D27C0F7D73D847BF996FBD60B43E26DB782CE4EB
+AC4280780BEC2196C3DF8C08F90FE1DA0180F12C0BC09A1426CFFE7174ABDF42
+3E8A12A310FA0F7FCA87A42D4B43CF2D5C2AE3C1BC64D3E91B09E7B1F043D2D7
+16D5A89356F39EC3901F468D4292BDEFFD8BDA9162555573F911233036067C94
+57115014F2ED0B5B45545E3EAC33A374427FC7F59A62E4650ED4D1AD0F2804F0
+A896DDBD93F18F7043AD73D11F3CD3E23E725CABF73E2B9B985C15AF76C8C79B
+30EA5D28A67FAB358F787743E30DB5D0B278EFB6CC3DD32C371EBCADBF50C733
+48101C43C2713CD85EA28A191C6CDC5B03C24BD096121AE0341DA0549AB84C47
+AC3DFD1CDF897E3DAD4B19BE217A19498FBB486DD13E243F98F09DC3AFCD98A8
+E57BB0622476A2E82592B61495605454F612C02DD4C626D1537AAC7F194377AD
+4768FBEBDF4FCD5588917D37411A5F818F9B8644F47D601182354BB695989D4F
+3E0C98D8650716C407F37CFC4C3F522589457A86704940493D12D00A7772EAFB
+B7A09C3359B13BFCC9ED0D80E9E7270A850F10BD63018AF998507C1319AD1432
+30DD314C86669C9EAEBF7A505504DBF0492BE03195976C57DC4B7603038D6E1A
+8D6E18DBE26DE76469479963481F3CC7002DA66BB9C229D4912968140D09C807
+52AC1B7CEA7AFAE9CA64662ACAC62D30A1D58C1D469B3255CA09AB30BF17C0D4
+6A0A238F9084F88DEC3349742D3A5CA29304FD2100E8D78F0C177F552BDC9BB6
+99D358E164D88B56E6F9CEAE61FBB850C398377A8B3B9EA3B80D5E1634E789A5
+C10BC16906F773AA9AE5ACAA60224313E7A7EA9EBEDD1438CFE2274E20B1A09B
+43006109A4EEB8674748ECA9B963B9A7D9A212FAF69822883FD8A04665A4E907
+9C507260CAB18398026DBF5B3449C3EA414C478A26FC474AFBAA0D9E9C080B00
+AF65D3D53D3F14A66F649146B51391834051BB7F373CA27402E66EF15DD9FCA2
+58EC2712972324D5A77681C05F556D49755397F8585F94082D17FEC5FD6C7CA8
+27EA89D97F39906F11D2A5524944B2B17E895A9862CA1C8CBB06210D13C35A95
+B63056A0EDCE2220DD1538C8EA9FCB588B2B69A5F301D2C1605E1994394B796A
+C5855DC626F5D275BBDA29C174204C5B8FA6E3FB1E9D8BACFD215ECB6538B9B1
+6FCDF2D7564365DC4D2AD99FE4F2704C327E35FB77CEB56827B7AA0064C5EF7B
+5FA8C59615DF7C1626D4D72F4F840CB0000EECCE21AF50B4F56F7ADB9A97B9DD
+0E8048A1C140BA2646555A6F2136C79F30FA2B86701FFA3F843FDAA9983B4C98
+90AB2D91759900FAA504183820DC51231F1E800A77266A0DAD1A2FA1F4E8CC69
+69A74E7E8D6945ED4A730B66F160F2D6A31E66A7422277F7C1017B3D43535AB5
+B4AF0484E6DF1B4E66A9C02F3E36EFB19E67AA90FDF9816F57DDC16F36CD44BC
+E818957208D11E44B24B528B33F387679BBDFED7B002F72FA5709AF605F5D980
+FDEA576082AC09407067F4E6D9031F874A34B00F984B0A04B00E1CC1D1195529
+597114171D4EDE72C8F335740101A1DBB37A5C13352DC2D684FDBB2E568A8A66
+2A76A9DA05E5CC1AE4E45219E35560F6867A14C1FDEFA22FA46796FC11DB84CB
+395E28A8FBD5962941267FAAE6B6C251730C2CE1611EEE096CA86E90321D114D
+A574A0F73BF7D7896982B59B46EF5402167EB664417D48F904F8395EE139472E
+5A809C8264BDFB0302D351B7AC1FC6D95A96B04205C9F5DD453B1D3838591BD4
+A0179BDDE6524D9D95FADCA29EA131D482990CB64C201664D2D13D77755531B7
+A96044A7951CD66900878543F72A38975C647A35ACC4B06E44A64CD3F802FA9D
+5CAA4F225413B37AB512CB9320FDAF5194D1C327D8E4484D4AAA68D237A7CF0F
+DCCEF54CABA501638D44322502D57810A8F8B31E42EB75884AEA8AB961A906CC
+1BB915B5C86EA5C13A68D1840431D9F50D25E5E2F3A4A4518E8EDCC7A0D86083
+1567FDD5B3BA69332561D97F5FE37C2175060C63575145F35637733A3DD5B172
+C0C46743CC30671F1E78A3CF7238B26D39F7F7CA8C5839AD92BB913FB3DB6B7A
+CB32CA6E4F4D631669F1155DFF6BCEC22ED9A83BB5B575C0E0B4F1F6D302CFE4
+41B15E09DF12E5B2CF95CCA40329F132AC6FA258E50AA17E220D38CA3AAD6F44
+C43FE6DE425C2F627DF6974820DEE106B69D795DB3D6A4EB2B056CE667531E61
+84C8BDCCFE4808479B0585FC154A5C951EF7F37F9F8FFC57CCE1063AB7AFFEAD
+7F2B6BD949559B420DD055671475905983E84F59480C3CF6B087345119C91AB9
+5CFDC80021A81461071CABDF469D47559F9369249A7291322B31F4313155493B
+C317F89A8948EF2F0491D505A649104701906566B2B573D2DB31C36E4B7FBC29
+DC35B47DF241FF1F0EE3AA414661EC2C6D6906330D09823546BE4329B97EF8ED
+3141DB3FBFED8F1CDA2D49D7B29738143C4753897F76AC37B954F6F8DCF195CC
+E025B489628E6026A0996E3A4F48E1DADD69B75783B268400BC9CF61EB191D06
+41C7768CB7980ADC1E65591E8CAC11A84DFE3F09633B0FDA064321595E0E6B9F
+49A908F0C231A396B14B2C655BE5952539F63838566674263F62D3E6D262F980
+CD3240CACFB36B9EC5EEDF01F3110239048BE84817BC6C82C18B54D4DE7D685D
+842B8AE52AF23E1144C8A2FA7EC9D9675B2F7E4F64F23CCCD6BBCD792189A12F
+C9366BA7134EFD67A22B492D1E05C5591EEDC1B75251BFF8576F1C9CC5C0E521
+3FD3C8C76C78B96BC2C4563C7D8040455AD7816B4B511197F2594E435DE24A04
+89F11B804FADB4B528DA589E59FD355EA0AEC6FF05BE3D25C16354255FBDA135
+71652593CE33FC4F4DC959CB0F63DA3476CCE84832BD5D6AE3BFF5869EC2F4C0
+3173B54416E29DB5478012A34AA27FE29F4CDE76712A4948AEF95DBA69A99157
+ADE417810A48AA5E4D4401B68F4AC27654F4BE0E1384A66A426995B622537DAF
+6E00C3B210F7C0C72181F53E38EA5C69B29620BEBF01FD780E0983100AB715FA
+4C7B132A46B866F4C7596B3D3867CBE5B6409D4903CF346568E0B4BFBE38C798
+66BCD14C2C92449525BD879F6DB3504797F850EF6DA9ABC92C2CC6DAC817EEAF
+C6E54F9A3094DA6FFA490EDBEEC662169655F6D78125EE549F1C0ABC1D51771F
+4B609B835A626F14DCFCBEEF11050F177D3B00BEF87D9A7CC4AC66E01E05621D
+C5716823B95E547476FE504CB17DF5014B1776F4698615BCD0E6CFFE0797BA49
+D18B10E395C2547AF00819BA9D2E365DC76CF93472D032259D584E020CB5105D
+D5ED2D86E5FDE14D338069168B633CBFFA98F68EEAF4EB1D64698863848A5E82
+F7C77CDDC773B7854DC225ED97DF0AB8B7A26FF50CEE9982927DF994271B1F39
+BB29575F0D72916AF4B387EEF5A0BA0AB57A17600467ADC64D600AD4CB66D8C6
+4E1ECA3CD2D68EC6563CA73B0BF0D53BC5CC5DE889C15E6EAEF2259E1A12F791
+CF64CF7BD79623962FB0309E6B7E416A6EA773D06645E292CED6B53805D9798A
+83E2D68FA40E64F2A87F902F283615BA37673DFAF9E0D2ECB0F792E510239973
+E0142B0C8663E7FD58921A558DFD2E0215B0503D0E1069DCA336EFA158884F62
+0636C6F8828C78A09BF1DCA721854E8AC1825FEB89945AD1D5EB23E400AF53E9
+7A59D84E23AAF73B5F5E50D52C60CEB32E0A5992CD2DAC4E5575DAE435F65451
+AEECAB50A684882F5AFAE74E7DCFD3BCACC80C2E63255BDEA45EDC30D7185614
+5AC70F1A5B6C282CD2B7284B83AFD2E33DEA0218424B2EE4AF884491251E9099
+681293009DFDDBF03E92CB257C196613FB795FC468D39CB8F3E469F9D141FCA2
+1790E0434B8BAE54E259EB9FC3E60E9CD490BADA01FFD3DC893044FE10C8FBA1
+7B28C44C54C6929CA9C20B62EF8CD578BAE6679AA5D0433A8473690787DF0166
+3308A8FA9226A095CBFADB12AA96D16B63ECEFE3B1B4635C41AA9C920DBFBA64
+279BC875BFB6F5D0D336C9BDF01077572B7FB2D4365582E4B187B3231DE29AEA
+B7DA0D48A6C4415632D8E1A81CFBD2DF7A37B6A3A620BE149E1D79D921B0F316
+057E69DA6CEBD01779B2F97004EEDF96D353F451D9A5027FB887045C3BF765EA
+4F48CC2268D2CEDE02799D369A7A5AC8E7190739C34179235E3DF6001C746B45
+CED68C7E9ECF4FE40725E871B1BD379B921472ECF6A74E4F91ACD9CA3A9E377E
+70135504B1C171007C9CFC745B2C46F3E15C7DD67030DAFE514560FF7862337B
+B4A22BA435193EB49683217275294A0B16A23DB561072D7D4C2EF6631C96C0DE
+B80748DF16C13594C6D7ECB98DD505E87E35F63F513AFE5016F3FBBDFC5A6938
+1395A9E7D07FB25E02D7DC4613C87A3AAAA92C5C6FBCC443D87497AE766C9F05
+2D6C66D3FA7961E7B1A7BDAC4EE519E790C41494877E55DFCA7FAFF1EA78D007
+EAAFA4954F44DDF7918BB3F6B6B856CC86DF5B5582C0CD88D50392E3F3272F5E
+687FDBE89691396B57B61D2C57193B96590305825029001090C0EDB104A0E748
+4304B888D65C7C412A1A27D68EDB9EC6582ABD4B675FA4D815BAD6DD503BA1D9
+649854613E24EB20D6B275C4417AF4EA64AA7184265572F12336B615B0AD617A
+2223E12779F87E724D9FF82AE1D16267478F4ABEEB0664AF27A689E842C2F7F8
+2AA941FF4E9BA785702A1AEABE8922F81D9E086BAB620D397E5C42190679A0BA
+481F72989DF07A60B0C482E8429908F6A9C0604FD17B2A2F43E93283E8D6FF36
+49860B5EC963CD87604C4DD89EDD03764A660E86D83DA4E8BE6467563A45F789
+8047382BE1B7891A84579138E8AAF6F32486DE20D92C7FAF62F97DC462201000
+06B8E50404FD719E27AA87C293C6E6EFB659DB36D61764C1E303794668CC451C
+3EBFF06B5B02D2FC02738AA6468C079C442B588269A8D2C38628FFD0CCBD9A51
+E485CC0CDA51C133AE8F1C5CF65F8C5F1523606B7876DBEDDDEF185DAA5D3888
+7CB0DC1A6FE07267032C099253ABC5AC75E590AF5B35BED16594E25586E7B98A
+3E13EB8B6A0E7CA310A5437173AC76EC655990538AECFA4051D9E241F7071374
+D40ECE71ACDEA8BE6861AFF305CA637DC38B7EB2649E796BEB195E5FB218CCB9
+C10464938CB3AA629D4D49C99155A682B0A13DF6D9902F43CD8C28BC594109D2
+3E750E30B80E5245E3A091F0F891FE5131D2722563C06FB2A91D4028A4A537FF
+6F107D76956FB4730DC10D97A98B4BECC91396A2CD8A2972A0D601F7ABB88974
+0C3F9B894AA104ACCA2736471284E03D692B02A2B0E42A381D60CE29CCFBA20A
+CE54C81CD5A6FCFEF31486D4AD59B1E837720F18450123119BFECBFE815C0C97
+74C776292C904D50C70E452DF2EAE4FC86BD94A954849E486B6E0275178896CD
+04D70AACCB0222AAC36137C2137DE0D73AFFC610A27927BC8CF8EB3F63F01323
+1CE32EAD910271E3ECD64AA68081D14CE458B6DE53C72A44B219295FFDADDD72
+D95ECD77136CB5A177D5082DF5D28ABE23D65B3DE156A1292F72051FCB4BD48C
+9DFA27A8BC8B0BF48551C8F6F2966FBCBB36B4B1996C062458695F470F033482
+EE0FFA09BD8B7D76BD36CA1E1667EF85B3D9CB8F0B53D5E87608598371BDE98F
+03D513592EBB50CA4213CDB948F8E3A264B603B2BCB230C99EC2190102DD3AC1
+4CA97C307FB762C72EA7F84FDD76FB430786A0A068D9F4AA70640A44AC944737
+7991F46F78A0550865D40B4B8B30395FA7A78F5B436CF00051A7EABB2EF87305
+A619F7D918222F60A45BEF07D8D96E62374AF20C8A82C7154DDD600623D633D9
+D4CF9DF28DB02659F2B387F84CDD3DFB183F06D8E16980486DF39F9A43FA77A1
+BCEC0604C6327C84FAB6CFE80C0D5A3744C22690AFC6FB99699361757536A48F
+C7AD5F3BBBC8D7C0121642E5AD72570EB997373F9C309734C0E6DA511D0839EA
+287D4BC528E8E540B9A4BF68D54798C670AB32D7F63D5AD191705B8733E0FC09
+2B08F518C099A01BB32583C7B080B556422058A60960F4CE00E97D489D0CE420
+8359A20656B15C1628E8F2E322E5CE5DC809D210BED16B92712DE0B6503A04EE
+113C6758D18E97AE7D7F47C540603DCBE9F955FDF77235B6EF687D9D2854BC40
+29033BD9C333C710AAAB6D3256CA67DC46DAD4731B34295B65DE11E42818FB31
+D405FDD09D1495E8B3DF1A906030EAFF0ADFB41465B2BC0429162B0B44523F86
+E2038330066A40555FAC01776CFD06CC2C60C82DDB02ECFDBD4E1A10BFDE45FB
+EBC562A283D176C2426A0E022D07C5411C261D467F6D6F7E326DF8E434035463
+1F0DD6EA5649814A1753ECC480625D7DB1E6E0B999D052CC5E1FA6179B18C9EC
+EBA908D8B33A71B2FC416ED0D731AB3ECB9C3E04E202788BBE6F95E387D0FD9F
+5661DFF7279A43AB7E06E6790D59CD86BE75DD721DEF363B65AB018F0E80083A
+E0E197BACDF1722D07DA7A0980D5A90C7ACCEA5FE56648F7884BDC75746DF93C
+7C022A65891222D774E52C64A89056516CDBA73589E0295D094335BDF906ABE3
+1DEBAE0E7407297BF2B08A8087DFB90C2D8494D04AE9BD820A69D43617848500
+B284B3CA2F0DCC9F896093AAC5FBFA8250FBD9925BB0CDC58E6C4A95E10272CD
+A2834070E16FCF3F16AF3F377307A335B99D116357AF029C77A3FDE6C6679AFA
+5511FBF5B55AC342A0BC3F8039DA4D5C86FBBD53961A30530175FD6229D69AF9
+E7F73BFDEDC8BF5AF598B33E6562C051A7DA9625BBDE0EE1CA3380A99AA49F2E
+C50576E2FA17E35F6F65BCF2443D62DD18057156C241AB36F5A122B3500875A7
+2D62567F91F5F20D556E95CEBF8924CDE1772E1D87FC35CE3F8E68C6535A4263
+6F534F2BD89994F71F907CC0FE5935DE56924451F1B89B131186782ED21A2D33
+425207FD220FF8D57E14A5202536F19C2CC0D7B2E173A95E9EE353A147377ECA
+1DDFC28DB8188D9763B56BEF902FED3716282A7291BFED44D52F0E4DDC23CC86
+3B60A376686C8A807077DC006AB26A2B905FB8E06013E63CD8F5D497DF9A9CE9
+BA01607F38A3CC5D0893049E66FF9CE344990D8E705B0452706550222C18938B
+3324E67788D14CF556D962B2A81D741C264899FBF33E71CDB1947C7FF473482E
+1556DE6B1BFE5D0B10531F43E279F20A53BA89852596C94CFCCE02504338F87B
+A8C4D2EE794DA8383323EAB15F922F16ABF363DB46D8B83B7D5EB6EC0B7A2BFF
+2B65251F0F8502C316FAC47C6962F6AB572706C15B2B2527DCB67AF41E300FE5
+D1CB74142FD626EC320CB09335EFA6C27E102F7D897BF719F9E643602340FECD
+F6B3C16C59F1D9D70FD0D67FD60C7A5518285B43469FA034A4C64F2E4A41D023
+E3F25AC321871F52475C7ABFE4195F6BBB6BD5830088A987D37F9C0FEEFCEEEE
+0DB5DD9161CC190082428C87977CABA0594CC16500F32996B6853EBC86FCDF0B
+6F716820F58DF2FF1D61A3392B13C2BA6A0ECB2CF5EE5828E4421C005F19759F
+98EF37B20F2874A6699DD58ED03ABEF65ED35C6D8E31162027D0323CDF097FCB
+2F76E77E58302009E1562F8E32A604AE1C675B70AB442171D5159F38A0A6C8F8
+F7A04E5EFE6D776DFDDF7F4A622B5776F16F9FA70436132F426CE2475789409B
+EB8EBE659BD30264922B6FEA7E3457CFADC42D36530C02DBF384B2CEA9A96BB2
+8DF671C04475C008057117D7453C7DB2DFD0E9D287B4EFE6812FE904C01F50D4
+B44B492983387FC983F93925E52BA3288847E9D3DC879377A13C5D1140277DC5
+9725D08DCA7CE4A45C8D030E1377B7C366F5ABAB710C58FA391D042D52E341B9
+59C772D14F8FDD306B66B9355EFDDBD92B5B2C8BD2B147638251FB4F2F2FCFF8
+56FA5F4239BBC29E9F0206897C141E48F88D2F6FA0F5384D3F7372E4EE273540
+A203863364F5D436327336723DCC73885E36FB783A63D4FB67A0B92ABEAC19D7
+EEC0531218335DBDAB5AD9620CE3174B5807DB44AB398F6A3EFC4D1B22C38296
+00D740133F78E6C81A45767C2A1A984FCE6D7295751A7594C98E3D1312A13CFC
+C32D47FCA51779B32DC3532B327C0DE8D4ED727C0CB9DDF26FB36F78B0050ED9
+7A98343E6E02F6FEB5F20986CE5D41669EC9868001714941B3C101FE8267D366
+E0D1D8FE563927109796B6B6116F641E24AF5CED9394078493EF9DD5062FA35E
+484B935E2B5212A0EAF11CBC0F5B6434549FE1ABE58BC629BCEA0D4F53C358E9
+25723B2CEF85B6202D50FC9A12719EDC0A4AD9AEDC6137B01CBA38B1B9AA763F
+56FFFFE91045AC392FAFA6688275BBDFEEBF909ECD2AA7A6549E644174B2F4C1
+8573604636DAB68601260E0E1B33EA757947EBA9176295DA5025B248CADAD666
+DF7FDD0B1B9744576F8060FA1BEC6A15BAADBA7D7E2BD6B59BB268A2D9A540AE
+C96309977435FF4CF4C58F860B36EF5BBFBE2EC76FE4105DB69A802E485DC81A
+FDF3F629F796EC6EEC36092A58F3601DAD0A96C32C6BAB645EC570D1BA11ACAF
+1E658DEA873E7A5DF4D51373A7F89587D9E18F28EF1EE41253F9DBA834AFB924
+7997A7B8EFFC66CDF5EF31CD28FE731360E35AD600E780F5CA27BEC44AA46EF7
+B54F4F3686834EB15A74B25E1EFFEC3CE27669CCC7F6C101ED307A41567EADA5
+673C30B5F0576958708842B99AAAD15D7354EF49D4868F7C0683486C295AB5E3
+D4DFA02DFD82868B8933D255EB9458C0FC2A55052826C02D25636DA14E3A1B45
+E8AE6D170D9540CC9B3506B72E4058927524DD84CA1F2C7334EC54FD146C4940
+0E920E11541B269B233AD706A423032BBF20220FBF6C69E8A42AA3BCB8853F94
+4F6FE5BA604EFD53F690B204AF3BA47542BE949E42F993DC9366C7527CCE5687
+C9AE5A6E135AAEC9795FAA4C5A988AFAB9798FA5F2A5252AAED5514FA652562C
+35E9EE68138905DB1BA7852E2E84E37D0C10BA631AB52E0342919F3E5F934958
+5D85022C568E1A16273A120AECD83E413878069D1BB6CA69719A7B4F1D7B6BD5
+45B14181FD05B0C61FA1A45D1F2C43320D6F2405E0D24823A9A002B5C6D83925
+D535CE10B5C021D9FB4FC017A53872B355CB6AE44F26BB0EF4E04401B753D616
+35E3448837C604B8F512BBD119A3369BF6041F6AE86053E97FF0745EB5A17549
+F575C4DC2999A5D1A7DF5BA3F693B837829AC574149005FDDBA400C1F2CBD4DE
+CFFBBDBB2A1D3C6EC0061B1BEDD25F036E9955CC9D6B0EDABC80FCD8853E7AB4
+2E7226D32F8EEC3AA1C1C4226460B7A3D7DBC350960F9117F420C72F0B3D48E1
+41E505FFB17E532131FC8A1617833FD9EB0695776DAEA282ECB0BAEA811B8395
+A964843BE5E3C1457FFBEC293837EE80647128C43C41431E38C9B6D2CBCC12B9
+137A4DE0BEB24BC44C76C7F0B8CA2DEE6CB227E2660F3875FD0A225F1A7A8EDA
+B46F6A737D4FBCD88EB7944E32B0A303DA6F12CF347E45D9579CE4A191FCD3CD
+D81BC376F478DDE17636120884EDCF1B1A95EFA5C0C94082C4A1AE75171E69EE
+B0324FECEE089DFFA1A972F69197712648E6C388973D91296285A3B72564F31D
+A2D5B0A4242948D2D952A3BFAC095E44500D9C7AFF006B7AEBA806A545D83B58
+60E7F6DC4C77564D209C352E4CAB34FD2C9D59A285660E95F62F2F43DB8F4811
+6812A62467DE394E8E3456631FCDBBBB7083F39FB5363AA96D5659257F3932F2
+B095AD79B5DE34DFCB85622F1DAD06C433AD91CA2B178670851991393A3A8203
+199717AB70BF7CC4BF719020E0621837BC3AC5F82B6FC9E762657E318918866A
+BFB486EF167098BA106443DEB15401C8CB7855656FE78C56DCCD9615A8C92197
+F3357934D24A3E928418103BEAA03E2E9643705CCA47BD27A310AC3BE12DAF79
+4EF3B2C291CB618CAF8A6343A942087EBFFB2CC4CD1AA45B89B9BB0B1A394310
+6CD014EC877BF43C2E4D0282E75ADEC14A745EE9AB56C97850EBAB4D991A8412
+521008AEFF2E2B23D911C1FBF14D6E107525BD8A376F3D86CB257B67B1227434
+6D1DE15473704A782196D0CBE8D7CFB7D6F02517545256F4A90211A8C9A7146F
+0055DB669659BB95928A40B5FC6961E5FDA18277D79134B68DB6071F9B3999F2
+F0BFA6F41936CD7E93BE0FC79862FD0B2CF646302809C47B3CD006AC6EFCDE7C
+1AB612B98F6CD141DA7C79F4D2F6D04C8E64073CAEF9E11A889D152DBA3FA18D
+B51372A672C801D3444E2ED2B29EBE4422963640311A598DF8D7D37CFA4C7301
+60BC878BB6FAE9C82653239604935262C83D527E33A93A8A008311FA7676C21F
+F1674316A9B7DB057574FA98A5DB9F7B13878D8946242B339880F6D46C46814C
+FE9DF5825ABA3CC43CDB48A3ECCC88D7B0A37A3F92935F82649520B9B3DD116E
+2EFCCAC781E76F4145CE5A7D76CCF23085F7ED4D85603D63E9AD8F4B8A822C1C
+9F935C70F9E792F0DF7B112A0DE95DA8AAE4A6F8B04E8E08635C9AA453F65322
+89E5F4B6ADB99EC1E77B46197F30B2BD1FE09C3A301E224398CDA58178E2E346
+171058EC30D7D0A17462849CEBEEA56D753DC683FC85E9A3F9E0E3F25728A225
+458C1ABF4AA42649375B491D3C9AE6C0B064E26148D195AC07FD58A0049564BD
+3D59A9F29FBD1880851612DE9B87EBF992EF7A92590B4EC384EE15D1756CFD54
+770E2A8D7DD42741863834D03D391D441E9669F0D2474206A65033AE02A41649
+08FEF8FD537FF0A2606ED858F72344938879E4FC21E22161DD56B0E9A28DFAF1
+627799589A8FC997026C3E13015807439564E661C3BEF56C8477AE145CB18CBC
+0F98392E04960295B947C70588C7D15A649733618571BDAA74BA5E2BAB26561B
+CBD5BB14CF4BC98CD1F079CFD32F185FE3A5EAB659A5567C949AA049FA759179
+8B71364835612211B148B0E029ACA90605F9BAB601BDDBB454BF6D52FC5F3113
+775C3BF8AF2056A481DE8644F4B419E3C27DF177A6DB72F39C5017613D262E75
+469402FB98B3B36E7F74DAC174AC22F76F89FE1F96D392C37071268B4115C63B
+389B364BA61F98EE2B0B7B1CC369DBBEA3BE6EC5B55402C00A0C32532A5ED906
+68FF86A9BE37530C48D9D0DB526F2D4997CFD03858FD9AAC67E4CCA49038D6A1
+62C7484508D886B4A066F3CAC16EE015C407604849E52C909CA6550CCC574DBF
+432CB3FF3A11E68FF29AE826DAEB627558C418C9CA736D871EAFCD13CDDF2D0F
+E92FE27A5725E6C36813C9AC74E09D13D1A1E1D0DD53284C7388D89FD0A02A70
+766F4D95DBBC06B09398C0F3933FB65DB2A759A368CC7D771320B9628F4572D2
+8E7C7BE5C2C2644707AA59D1DC1331C37E78F9D37DCD871E239C4EEDE9D9D551
+7CEE810EC16A4B2B13BCB9AD383CE38A960BCC38DD418107EC3316E9F3793E8E
+B67E711AB2B74D99FFAA7D09EF28A0378642CD349A853770C1CF80E0B2B07B42
+73C793472011B35E44FD7F6BA7615716BAFF220BC8AE103BE72EFDF2C065D5EF
+25138FFFCDA99679C865F0DF9CF3C9374A73FCBDAA143130A5D418DE025AD7BE
+5D99FD2AE376EB1C85D14FB1867C8B7AAE57050FB00084079E9317B79512AD50
+45C512814117B44F254AF09F210A23EB3C8830F91345BEBA6ACB55E935E401E5
+BCBF66B3ACA2E3A9CDAB1A75C32D604217F3CE1F17AF086E5E60B76722D3BA46
+72682E18686989C52B018E46EBE68892CDF39F5880095595BA3037FF0DAF6A2A
+DB4AF7B04C9CB77DC37CCAD24E5A539C048DA79A6748951871970204587A65D4
+2ADDB6A84F77C3DFADFA809023A458102CCDDA88C577EB525075139740C5B099
+E01650A8C56B1B595522ABE6C43A29AE4AD4C770A5020D3D8C0C65B678F7B282
+8F0F80A494E8C65BEC46E90464C112F562B749D660ADA5BB3698EB295DF2CA85
+DC5D1A8D8E6B62FCFF1AF448CEDD2E1FB69385ECA9374927D6B010F258E70664
+E01B3C9349CF8B1216979D69DF9EC4A31E684B668F6A0D2925B37E761C4D7620
+3C99165226C5F88956CD672CEF3714E5512A11484398B81A9F30DB91FB13363B
+2D6C640F46E6B36550BB2491F907E631C828888A95AAE488DD94B83CEEEC310C
+D028A2D5B9144F2DF5D8B6F386E82AD588103538FFD763759AA08AF60EF9549B
+7CC26816F1C40E085A20CC7F89D171202ACF3BEC7C65FA78DC9D7CE7C73184DD
+4E68C9FF3E9EF0846FF31E9C0DB810DD5BE9EB36BC05E2A1757FFFFC510E14A2
+D9828A043911BC13E3FEDCA69E8A5A97235FC92C0A5A6F5FBE3A6F64F763C0CB
+CFAEE6688D096C2FB1F4394F3FB8464EFF7FA4A15CE567EB5D580DC54F353F8C
+914146CA6BAFE2E72BDADB776E61A83E511F89F178A38E254A6DA6D7202B2520
+CC6C43A6953A5CEDB453EA329C707746305CF9228D845D011C112F16BF51E25F
+DEDE601ECD5329234DE75DB1ECEF6A076E0CFC46B55DB7F0AF05366F680309CF
+B41178743D21FFAB5A0ED8B1807873D047539C85FCDCDF92DDA992FA3FBF4999
+537B579CD7904CD911BC80B0411D47AC65A61C6EBD9668C1371EE357ADB5BC92
+617B741E502DC50E23357D0FC8B5B9580468E486DB5D57149BE6DB583C2C812E
+B3276C300A58BA92E46FA85D65DBCD4C2D41AEE3E8C04794B0128AEFF3E158E4
+4A603D5E719762A007D77BFB4DE93A1A348E5434CBCC3A9F88B0D63E91615F18
+1F7C83D306417335258468530DE3BB1C06E55055CD8330C4611B33767D29B328
+913E29B809C400A3F8F7E97F05C017F9A07EFFE9A56022F366750C3454C0AB53
+7E7E2EC75E533B94C6320CFBACB6A1135EA1DD8AED05C1D5CF3F3B41624B02E1
+F9C93AE270A58B3B24362B4FCD827D213A02D39E2C8D9A95E87D4E464B49306C
+6914E6A032D80690B40448A2A620CB786D43C6DC5541992E1177B2B876D285BF
+77854AF5BE55FD22570339BC5DBA1C7EEE0BF66C825425F6FF46752857D4E41B
+D46844A3EC975792296003861CFB5A6F74407C3621F59B7CDA2E1AA7E973D814
+1A2397F448C46BA1640EF30FB527675D0480C9F1A027AC87714DF92F169587CB
+3BA16BA8C69BD4C5FCCCBED54044D45F004DB1B548800C31CFC10919672B6067
+11423149D9F332F2ADB1F6716A1371BEC1611204CB5ADCBE4D70DB49E29EA986
+1CE3FCF5AEF203AC75A6E0DBDA625F48D342A6ADE40B06DA1BFCBC00360DF254
+22E18EA7E283243B90A575B9D5844608BE810327D24532C52B8167BB908C5654
+9F2127589BBB42C9C0E26F55782BBE59E6FD5F1E58960A7B5BD37B74576AB9F4
+2ED0391BDC6ACF5CDC8A222C81426CDBE3A51B874204E40E030247AD29D105E9
+75D41BCB0DE2760A85BF2595017BFB4C902AF3C0E2A273505F1E27D3FE8CBB25
+636FEE611049D67B1A9E6993612B8DCE3D0058A1C8C7F6888872AB81CEC8069E
+EDA6452B61200C81BFFE3611A339B60B88490B3A656582CB60AE0DFBC18F652D
+E012D8F58891B6ECF156BF3256D5C92155081C9EF16EA92C56E4E8434A60149D
+5A0619C2ADF812C2B81F5992BE6783A7FE49E9112D76231B6DB57B18D0D20C5B
+76C8C51691B33EB6B247B21AD15C24F843BD1D2150DA4998890AA693113186AA
+A4D644CA8735A4E964F500346C8A6270F5F2F2879C6FA9FEF0CE861B5DFC1910
+F9D173D5D10984E3064D8AB8AB28ABFA3596B447A329A54F5A6E66BAE16BA776
+910F3AC93A90B2D73DBD5E52B06FF4D4E79DD2436134596D480C8AFC82342868
+4730AE9E72FF0FAC3CFBE5A94D81E581CE97DF06830FC4222B79D9FF068F1138
+39C41C93C633C2D97E236411720234F07A9071D760C19BE468111EC8ED34A0F3
+ACD8CF4DCE9FB90C3AC9AD11247CC85D808ECA806E037BFE3ADB92059D975651
+51BCF21C5B4A6BDB0F25BA0C963846728B5C7B4B596CB8688CBC444FD4F2881A
+14C31669CAFD966BC3E50BD2F2AC46DDD82C75AD5AFE06541B9B83B4C9C1B995
+B9BD7CC2D4B4986DD203C2D40D60CD36A9B51A1D4A2946B9B0FA6181716DAEF1
+BF275F17F1031165DE34627A615399D9227B8C136F865D81D5078AC722B54219
+5F80DA71A2CCDC7D36DDF0B363F81D3D160D09734D50262AB32273AB7F77D507
+52B88FEEB908F5A34A2C33AB4270BADE70637939687359B42F80F37CCBFDE1C7
+29667FADF2C55EDBAEE7703993CE0974490D9DC116A6B7172F12045AD6
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+TeXDict begin 37293595 25732579 1000 9000 9000 (psv_about_pl.dvi)
+@start /Fa 12[1037 12[1037 18[1453 23[934 1[934 7[934
+5[1037 570 3[1037 3[934 1037 5[1141 1[1141 7[1246 5[1349
+1171 3[1246 3[1349 1246 6[934 934 934 1349 934 1037 519
+934 622 1037 1037 1037 1037 1556 415 934 415 519 1037
+1037 519 1037 1037 934 1037 1037 6[1141 1246 1246 1763
+1246 1349 1141 1246 1349 1453 1246 1453 1349 1556 1037
+1246 934 519 1349 1453 1141 1246 1349 1349 1246 1246
+1896 2[1046 1[519 519 1037 1037 1037 1037 1037 1037 1037
+1037 1037 1037 1[519 622 519 1046 1[622 622 413 5[519
+20[1046 12[{encqhv ReEncodeFont}94 1868 /QuasiSwiss-Regular
+rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 9000dpi
+TeXDict begin
+statusdict /setpageparams known { hsize vsize 0 1 statusdict begin {
+setpageparams } stopped end } { true } ifelse { statusdict /setpage known
+{ hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop -9000 -9000 a
+ /TeX_matrix [[72 Resolution div 0 0 72 VResolution div 0 0] {dup dup round sub abs 0.00001 lt {round} if} forall] def /unit {0 TeX_matrix matrix invertmatrix dtransform dup mul exch dup mul add sqrt} def /trueunit {0 matrix defaultmatrix matrix currentmatrix matrix invertmatrix matrix concatmatrix dtransform dup mul exch dup mul add sqrt} def /mm {25.4 div 72 mul unit} def /v{/Ry exch def/Rx exch def V} def /V{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto closepath fill grestore} def /fshow{gsave 72 TeXDict /Resolution get div -72 TeXDict /VResolution get div scale 1 DVImag div dup scale get cvx exec show grestore}def /TIFFDirectory (bop/) def /EPSDirectory (bop/) def /EPSSDirectory (epss/) def
+ -9000 -9000 a -9000
+-9000 a
+ currentpoint /OO_y exch def /OO_x exch def
+ -9000 -9000 a 26433 -9000 a
+ currentpoint /OO_y exch def /OO_x exch def
+ 26433 -9000 a -9000
+-9000 a
+ gsave
+ -9000 -9000 a -10772 -10772 a
+ currentpoint /OO_y exch def /OO_x exch def
+ -10772 -10772 a
+-10772 -10772 a
+ currentpoint /p1_y exch def /p1_x exch def
+ -10772 -10772 a -10772 41669 a
+ currentpoint /OO_y exch def /OO_x exch def
+ -10772
+41669 a -10772 41669 a
+ currentpoint /p2_y exch def /p2_x exch def
+ -10772 41669 a 63638 41669 a
+ currentpoint /OO_y exch def /OO_x exch def
+ 63638
+41669 a 63638 41669 a
+ currentpoint /p3_y exch def /p3_x exch def
+ 63638 41669 a 63638 -10772 a
+ currentpoint /OO_y exch def /OO_x exch def
+ 63638
+-10772 a 63638 -10772 a
+ currentpoint /p4_y exch def /p4_x exch def
+ 63638 -10772 a -9000 39898 a
+ newpath p1_x p1_y moveto p2_x p2_y lineto p3_x p3_y lineto p4_x p4_y lineto closepath clip newpath
+
+-9000 39898 a -9000 -9000 a
+ currentpoint /OO_y exch def /OO_x exch def
+ -9000 -9000 a -9000 -9000
+a
+ currentpoint /OO_y exch def /OO_x exch def
+ -9000 -9000 a White 1362 x Fa(ABCD)o(EF)q(GHIJKLMN)o(O)q(PQRS)-56
+b(TUV)o(W)q(XYZabcd)o(efghijkl)o(m)q(n)o(opq)o(r)10 b(s)-10
+b(t)q(u)o(vwxyz)p Black -9000 -9000 a
+ currentpoint /OO_y exch def /OO_x exch def
+ -9000 -9000 a White
+1765 x Fa(\201\202\206\212\213\323\221\231\233\241\242\246\252\253)o
+(\363\261\271\273012)o(345)o(6789)o(,)q(.;:)q(')o(\(\)!)q(+-=)p
+Black 26433 15449 a
+ currentpoint /OO_y exch def /OO_x exch def
+ 26433 15449 a 8717 -2268 a
+ /SItps save N /isls false N statusdict begin /setpageparams {pop pop pop pop} def /setpage {pop pop pop} def end userdict begin /bop-hook {} def /setpagedevice {pop} def /a0 {} def /a1 {} def /a2 {} def /a3 {} def /a4 {} def /a5 {} def /a6 {} def /a7 {} def /a8 {} def /a9 {} def /a10 {} def /b0 {} def /b1 {} def /b2 {} def /b3 {} def /b4 {} def /b5 {} def /letter {} def /note {} def /legal {} def /halfletter {} def /11x17 {} def /ledger {} def /flsa {} def /flse {} def end
+ 8717 -2268
+a 35433 x @beginspecial 12.104000 @llx 4.715000 @lly
+450.476013 @urx 443.085999 @ury 2834.638672 @rwi @setspecial
+%%BeginDocument: psv_logo.eps
+/GSexport 100 dict def GSexport begin
+/h {closepath} def
+/m {moveto} def
+/c {curveto} def
+/l {lineto} def
+/k {setcmykcolor} def
+/K {setcmykcolor} def
+/*u {/oper_kind -1 def} def
+/*U {*U*f *U*d *U*c} def
+/f {/oper_kind 0 def} def
+/*U*f {0 oper_kind eq {eofill} if} def
+/s {closepath /oper_kind 1 def} def
+/S {/oper_kind 1 def} def
+/*U*d {1 oper_kind eq {stroke} if} def
+/W {} def
+/n {/oper_kind 2 def} def
+/*U*c {2 oper_kind eq {eoclip newpath} if} def
+/w {setlinewidth} def
+/j {setlinejoin} def
+/J {setlinecap} def
+/M {setmiterlimit} def
+/d {setdash} def
+/setcmykcolor where {pop}
+ {/setcmykcolor {1 sub /mf exch def
+ 3 {mf add neg dup 0 lt {pop 0} if 3 1 roll} repeat
+ setrgbcolor} def} ifelse
+/q {gsave} def
+/Q {grestore} def
+q
+*u
+6.262 w 0 j 0 J 2.613 M
+[] 0 d
+0.2 0.1 0 0 K
+448.91 282.219 m
+330.511 261.475 291.37 462.656 172.971 441.912 c
+193.911 323.317 -7.27 284.177 13.67 165.581 c
+132.069 186.717 171.21 -14.464 289.609 6.28 c
+268.669 124.875 469.85 164.016 448.91 282.219 c
+s
+*U
+*u
+0.2 0.1 0 0 k
+128.378 169.016 m
+118.01 169.326 l
+119.248 142.554 l
+133.485 144.875 147.412 147.042 161.649 147.661 c
+162.578 166.385 l
+139.52 167.933 l
+140.139 196.897 l
+149.888 190.242 157.316 183.562 169.696 183.253 c
+194.92 182.634 205.443 212.681 205.443 232.953 c
+205.443 254.618 189.968 266.688 171.553 265.141 c
+157.316 264.057 147.722 255.856 139.211 248.583 c
+139.83 266.688 l
+129.926 262.51 120.176 260.653 109.344 260.343 c
+106.868 241.928 l
+128.069 240.071 l
+128.378 169.016 l
+f
+140.449 215.002 m
+140.139 222.275 l
+140.139 232.334 155.614 240.071 170.315 241 c
+180.993 241.928 190.897 235.893 190.897 223.823 c
+190.897 213.3 186.409 205.408 172.482 205.408 c
+160.721 205.717 150.198 208.348 144.627 212.371 c
+140.449 215.002 l
+f
+*U
+*u
+0.2 0.1 0 0 k
+245.832 265.76 m
+228.036 266.379 216.275 253.689 215.347 235.584 c
+215.037 224.751 224.941 220.109 235.619 217.788 c
+250.01 214.693 l
+255.736 213.609 266.104 213.3 266.104 209.895 c
+266.104 204.17 256.046 202.003 244.285 201.694 c
+233.452 202.003 221.072 204.17 216.275 206.027 c
+211.323 193.337 l
+220.763 186.374 232.524 183.253 247.38 182.944 c
+264.247 182.324 281.734 192.409 282.043 209.276 c
+282.353 222.894 267.652 225.061 255.427 227.692 c
+242.273 230.786 l
+236.392 232.025 229.738 234.346 229.274 239.298 c
+228.965 245.642 237.94 247.654 246.451 247.654 c
+253.415 247.654 259.45 246.416 260.379 245.642 c
+259.45 244.095 259.14 242.238 258.831 240.381 c
+259.14 235.584 263.628 232.334 269.045 232.643 c
+275.08 232.953 278.794 237.75 278.794 243.476 c
+278.794 253.07 269.045 265.141 245.832 265.76 c
+f
+*U
+*u
+0.2 0.1 0 0 k
+377.833 264.986 m
+338.527 262.2 l
+339.765 241.619 l
+350.133 241.619 l
+337.289 211.443 l
+323.516 211.443 l
+315.005 240.69 l
+326.766 240.071 l
+326.766 248.273 327.385 256.475 328.623 264.676 c
+289.317 261.582 l
+287.46 241.619 l
+297.518 241.309 l
+306.184 221.966 314.386 202.622 321.35 182.634 c
+340.074 183.562 l
+347.038 203.551 355.858 222.585 366.691 241 c
+375.821 240.381 l
+375.821 249.821 376.285 253.999 377.833 264.986 c
+f
+*U
+Q
+end
+showpage
+
+%%EndDocument
+ @endspecial 8717 33165 a
+ SItps restore
+ 8717 33165 a 26433 15449 a
+ currentpoint /OO_y exch def /OO_x exch def
+
+26433 15449 a Blue 19346 1820 a
+gsave currentpoint 185.01277 100 div div exch 185.01277 100 div div exch currentpoint neg 185.01277 100 div mul exch neg 185.01277 100 div mul exch translate 185.01277 100 div 185.01277 100 div scale translate
+ 19346 1820 a Fa(PS\346Vie)-19
+b(w)27007 1820 y
+grestore
+ 27007 1820 a Black 8717 5462 a
+gsave currentpoint 121.36823 100 div div exch 121.36823 100 div div exch currentpoint neg 121.36823 100 div mul exch neg 121.36823 100 div mul exch translate 121.36823 100 div 121.36823 100 div scale translate
+ 8717
+5462 a Fa(p)o(r)19 b(zeg)o(l\241da)o(r)10 b(ka)621 b(do)h(P)-47
+b(os)-9 b(t)-19 b(Scrip)-9 b(tu)622 b(i)g(PDF)37911 5462
+y
+grestore
+ 37911 5462 a 8350 8264 a
+gsave currentpoint 121.36823 100 div div exch 121.36823 100 div div exch currentpoint neg 121.36823 100 div mul exch neg 121.36823 100 div mul exch translate 121.36823 100 div 121.36823 100 div scale translate
+ 8350 8264 a Fa(nak\252a)o(dka)g(gr)-10
+b(a\014czna)621 b(do)h(Ghos)-10 b(t)q(scrip)g(t)q(a)38148
+8264 y
+grestore
+ 38148 8264 a 8717 31597 a
+gsave currentpoint 78.37602 100 div div exch 78.37602 100 div div exch currentpoint neg 78.37602 100 div mul exch neg 78.37602 100 div mul exch translate 78.37602 100 div 78.37602 100 div scale translate
+ 8717 31597 a Blue -22416
+x Fa(W)-56 b(erj)o(sa:)p Black 19329 9181 a
+ PS_VIEW show
+ 19329 9181
+a Blue 8717 11983 a Fa(A)-19 b(ut)g(or)19 b(zy)-47 b(:)p
+Black 3830 w(B)o(.)623 b(Jac)9 b(k)-37 b(o)-19 b(w)-10
+b(ski,)623 b(P)-253 b(.)623 b(Pian)o(o)-19 b(w)-9 b(ski,)622
+b(P)-252 b(.)623 b(S)-10 b(tr)19 b(zelczyk)p Blue 8717
+14785 a(A)-19 b(dr)g(es:)p Black 5255 w(B)-10 b(OP)622
+b(s.)150 b(c.)19329 17587 y(u)o(l.)622 b(G)q(e)o(n.)g(T)-186
+b(.)622 b(Bor)-9 b(a)o(-K)-56 b(omor)-10 b(o)-19 b(w)-9
+b(skiego)621 b(24)19329 20389 y(8)o(0)149 b(-)h(37)o(7)622
+b(Gda\253sk,)g(P)-47 b(olska)19329 23191 y(b)o(op@b)o(op.com.pl)p
+Blue 8717 28795 a(Gho)o(s)-9 b(tscri)q(p)f(t)-56 b(:)p
+Black 19329 28795 a
+ revision 100 div val_str cvs show
+ 19329 28795 a Blue 8717 31597 a Fa(Bibl)o(i)q(o)-19
+b(t)-28 b(eki:)p Black 19329 31597 a
+ /INFO_dict where {pop INFO_dict /LuaName known {INFO_dict /LuaName get show (, ) show} if INFO_dict /wxLuaName known {INFO_dict /wxLuaName get show (, ) show} if INFO_dict /wxWidgetsName known {INFO_dict /wxWidgetsName get show} if }{pop} ifelse
+ 19329 31597 a 53926
+31597 a
+grestore
+ 53926 31597 a -9000 39898 a
+ grestore
+ -9000 39898 a eop
+end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/tlpkg/tlpsv/psv_usage.pdf b/Master/tlpkg/tlpsv/psv_usage.pdf
new file mode 100644
index 00000000000..7c1a2a52497
--- /dev/null
+++ b/Master/tlpkg/tlpsv/psv_usage.pdf
Binary files differ
diff --git a/Master/tlpkg/tlpsv/psv_usage_pl.pdf b/Master/tlpkg/tlpsv/psv_usage_pl.pdf
new file mode 100644
index 00000000000..5b316e6012a
--- /dev/null
+++ b/Master/tlpkg/tlpsv/psv_usage_pl.pdf
Binary files differ
diff --git a/Master/tlpkg/tlpsv/psv_view.ps b/Master/tlpkg/tlpsv/psv_view.ps
new file mode 100644
index 00000000000..9bc2ac68b1f
--- /dev/null
+++ b/Master/tlpkg/tlpsv/psv_view.ps
@@ -0,0 +1,3988 @@
+%% PS_View -- previewing utility for Ghostscript interpreter
+%% Authors: P. Pianowski, P. Strzelczyk, B. Jackowski
+%% Address: BOP s.c. Gen. T. Bora-Komorowskiego, 80-377 Gda\'nsk, Poland
+%% bop@bop.com.pl
+%% Copyright: (c) 2008 BOP s.c.
+%% Licence: GPL
+%% History:
+%% Creation date: Friday, January 15th, 1993
+%% Version: 1.00, 28 III 1995
+%% Version: 1.99, 29 IV 1998
+%% Version: 2.01, 3 VI 1998
+%% Version: 2.02, 17.VI.1999 (handleerror)
+%% [...]
+%% Version: 2.06, 5.II.2002 (help once more)
+%% Version: 3.00, 12.03.2002 (new PS file search scheme -- by PERL)
+%% Version: 3.99, 2003 (Windows version)
+%% 09.07.2003 (DocumentMedia comment processed)
+%% 05.09.2003 (Printing touched)
+%% 11.02.2004 (Printing touched (new defs of /showpage and /copypage))
+%% 02.03.2004 (Bug in zoom_in & zoom_out fixed, it apeared when parameters were present)
+%% 18.06.2004 (IdiomRecognition turned off)
+%% Version: 4.9x, 2007 (multiplatform version)
+%% 21.03.2008 (small adjustments to new [gswxlua] stub: /start command and status line)
+%% 24.03.2008 (small adjustments cont.: /z_conv, psv_flush)
+%% 01.04.2008 (new !PSV callbacks added: CONSOLE, CONFIG, INFO and apprioprate
+% changes in menu)
+%% 03.04.2008 (DLGBOX modified)
+%% Version: 5.01, 07.04.2008 (files renamed, RESIZE calls corrected)
+%% Version: 5.02, 08.04.2008 (some shortcuts added)
+%% Version: 5.03, 14.04.2008 (localisation, grids on separate `layer')
+%% Version: 5.04, 17.04.2008 (optional command parameters, and `layer' drawing corrected)
+%% Version: 5.05, 26.04.2008 (post-Pingwinaria release, 'layer' and printing bug corrected)
+%% Version: 5.06, 28.04.2008 (BachoTeX release)
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+userdict /view_dict 300 dict put
+view_dict begin
+/PS_VIEW (PSView 5.06) def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+userdict begin
+
+ /get_page_size {userdict begin /psv_VS exch def /psv_HS exch def end} def
+ /put_page_size {userdict begin psv_HS psv_VS end} def
+
+ /letter {612 792 get_page_size} def /note /letter load def
+ /legal {612 1008 get_page_size} def
+ /a0 {2380 3368 get_page_size} def
+ /a1 {1684 2380 get_page_size} def
+ /a2 {1190 1684 get_page_size} def
+ /a3 {842 1190 get_page_size} def
+ /a4 {595 842 get_page_size} def
+ /a5 {421 595 get_page_size} def
+ /a6 {297 421 get_page_size} def
+ /a7 {210 297 get_page_size} def
+ /a8 {148 210 get_page_size} def
+ /a9 {105 148 get_page_size} def
+ /a10 {74 105 get_page_size} def
+ /b0 {2836 4008 get_page_size} def
+ /b1 {2004 2836 get_page_size} def
+ /b2 {1418 2004 get_page_size} def
+ /b3 {1002 1418 get_page_size} def
+ /b4 {709 1002 get_page_size} def
+ /b5 {501 709 get_page_size} def
+ /flsa {612 936 get_page_size} def
+ /flse {612 936 get_page_size} def
+ /halfletter {396 612 get_page_size} def
+ /11x17 {792 1224 get_page_size} def
+ /ledger {1224 792 get_page_size} def
+
+ /ori_setpagedevice /setpagedevice load def
+ /setpagedevice {/setpagedevice_dict XD
+ setpagedevice_dict /PageSize known {
+ setpagedevice_dict /PageSize get aload pop
+ PDF_file not {
+ setpagedevice_dict /Orientation known {
+ setpagedevice_dict /Orientation get
+ dup 1 eq exch 3 eq or {exch} if
+ } if
+ } if
+ get_page_size
+ } if
+ } def
+
+end % userdict
+
+statusdict begin
+
+ /setpageparams {exch pop 1 ne {exch} if get_page_size} def
+ /setpage {1 ne {exch} if get_page_size} def
+
+end % statusdict
+
+/BD {bind def} def
+/XD {exch def} def
+/LD {load def} def
+
+/BP {1 mul} def
+/PT {72 72.27 div mul} def
+/MM {72 25.4 div mul} def
+/CM {72 2.54 div mul} def
+/IN {72 mul} def
+/DD {72 72.27 div 1238 mul 1157 div mul} def
+/PC {12 PT mul} def
+/CC {12 DD mul} def
+
+/set_psv_unit {
+ /orig_x orig_x psv_unit mul def
+ /orig_y orig_y psv_unit mul def
+ cross1 begin
+ /cross_x cross_x psv_unit mul def
+ /cross_y cross_y psv_unit mul def
+ end
+ cross2 begin
+ /cross_x cross_x psv_unit mul def
+ /cross_y cross_y psv_unit mul def
+ end
+ /multi_dist multi_dist psv_unit mul def
+ /vf_shift vf_shift psv_unit mul def
+ %
+ /psv_unit_name_secondary XD
+ /psv_unit_name XD
+ /psv_unit_factor XD
+ /psv_unit XD
+ /orig_x orig_x psv_unit div def
+ /orig_y orig_y psv_unit div def
+ cross1 begin
+ /cross_x cross_x psv_unit div def
+ /cross_y cross_y psv_unit div def
+ end
+ cross2 begin
+ /cross_x cross_x psv_unit div def
+ /cross_y cross_y psv_unit div def
+ end
+ /multi_dist multi_dist psv_unit div def
+ /vf_shift vf_shift psv_unit div def
+ menu_on {
+ psv_unit_name (cm) eq {(CM_SET_psv_unit) check_SET_psv_unit} if
+ psv_unit_name (mm) eq {(MM_SET_psv_unit) check_SET_psv_unit} if
+ psv_unit_name (in) eq {(IN_SET_psv_unit) check_SET_psv_unit} if
+ psv_unit_name (pt) eq {(PT_SET_psv_unit) check_SET_psv_unit} if
+ psv_unit_name (dd) eq {(DD_SET_psv_unit) check_SET_psv_unit} if
+ psv_unit_name (bp) eq {(BP_SET_psv_unit) check_SET_psv_unit} if
+ } if
+ psv_unit_name psv_unit meas
+} def
+
+/ht_rel_conv {window_ht grid_ht div magnification div psv_unit div mul} def
+/wd_rel_conv {window_wd grid_wd div magnification div psv_unit div mul} def
+%
+/z_conv {
+ angle 0 eq {vflip {screen_H exch sub} if exch hflip {screen_W exch sub} if exch} if
+ angle 90 eq {vflip not {screen_H exch sub} if exch hflip {screen_W exch sub} if screen_H screen_W sub add} if
+ angle 180 eq {vflip not {screen_H exch sub} if exch hflip not {screen_W exch sub} if exch} if
+ angle 270 eq {vflip {screen_H exch sub} if exch hflip not {screen_W exch sub} if screen_H screen_W sub add} if
+ %
+ default_matrix itransform
+ %
+ magnification div psv_unit div exch
+ magnification div psv_unit div exch
+} def
+
+/ori_cleardictstack /cleardictstack LD
+/ori_setmatrix /setmatrix LD
+/ori_initmatrix /initmatrix LD
+/ori_initgraphics /initgraphics LD
+/ori_showpage /showpage LD
+/ori_copypage /copypage LD
+/ori_defaultmatrix /defaultmatrix LD
+/ori_erasepage /erasepage LD
+
+/erasepage {bb_wd 0 gt bb_ht 0 gt and background and {
+ gsave 0.7 setgray clippath fill grestore
+ } {ori_erasepage} ifelse
+} def
+
+/cleardictstack {clear_dict_stack} def
+/showpage {} def
+/copypage {} def
+/initgraphics {view_matrix ori_setmatrix
+ newpath initclip 0 setgray 1 setlinewidth 0 setlinecap 0 setlinejoin
+ 10 setmiterlimit [] 0 setdash} def
+/defaultmatrix {pop view_matrix} def
+/initmatrix {view_matrix ori_setmatrix} def
+/rectclip {pop pop pop pop} def %!!!
+%/initclip {} def %!!!
+
+pdfdict /pdfopen undef
+/pdfopen { % redefined to allow UseCIEcolors toggle in PDF
+ pdfopenfile begin
+ pdfopencache
+ currentdict end
+} def
+
+/clear_dict_stack {ori_cleardictstack view_dict begin} def
+
+
+<</IdiomRecognition false>> setuserparams
+DELAYBIND {.bindnow /bind /.bind load .bind def} if
+
+/val_str 20 string def
+/val_str2 20 string def
+/val_str3 20 string def
+
+/G {currentdevice getdeviceprops] pstack pop} def
+/As {abcdefghijklmnopqrstuvwxyz} def
+/Ab {ABCDEFGHIJKLMNOPQRSTUVWXYZ} def
+
+/get_screen_&_set_pos {
+ /old_window_wd window_wd def
+ /old_window_ht window_ht def
+ get_screen
+ bb_wd 0 gt bb_ht 0 gt and {
+ /orig_x orig_x
+ window_wd old_window_wd sub
+ 0.5 mul magnification div psv_unit div sub
+ angle 90 eq angle 270 eq or {
+ window_wd window_ht sub old_window_wd old_window_ht sub sub 0.5 mul
+ magnification div
+ psv_unit div add
+ } if def
+ /orig_y orig_y
+ window_ht old_window_ht sub
+ 0.5 mul magnification div psv_unit div sub
+ angle 90 eq angle 270 eq or {
+ window_wd window_ht sub old_window_wd old_window_ht sub sub 0.5 mul
+ magnification div
+ psv_unit div sub
+ } if def
+ } if
+} def
+
+/set_media {
+ /page_name XD
+ /page_H XD /page_W XD
+ get_screen_&_set_pos
+ menu_on {
+ page_name (A4) eq {(A4_SET_MEDIA) check_SET_MEDIA} if
+ page_name (A4 Landscape) eq {(A4L_SET_MEDIA) check_SET_MEDIA} if
+ page_name (A3) eq {(A3_SET_MEDIA) check_SET_MEDIA} if
+ page_name (A3 Landscape) eq {(A3L_SET_MEDIA) check_SET_MEDIA} if
+ page_name (BB) eq {(BB_SET_MEDIA) check_SET_MEDIA} if
+ } if
+} def
+
+/screen_res_corr {
+ screen_H page_H 72.0 div resolution_H mul div
+ screen_W page_W 72.0 div resolution_W mul div minimum dup
+ matrix scale matrix ori_defaultmatrix matrix concatmatrix
+ /default_matrix XD} def
+/set_window_size {newpath clippath pathbbox
+ /window_uy XD /window_ux XD /window_ly XD /window_lx XD
+ window_uy window_ly sub /window_ht XD
+ window_ux window_lx sub /window_wd XD} def
+/get_screen {
+ currentdevice getdeviceprops counttomark 2 idiv
+ dup dict /screen_dict exch def
+ screen_dict begin {def} repeat pop end
+ %
+ /screen_name screen_dict /Name get def
+ screen_dict /HWSize get aload pop
+ /screen_H exch def /screen_W exch def
+ screen_dict /HWResolution get aload pop
+ /resolution_H exch def /resolution_W exch def
+ %
+ screen_res_corr
+ /screen_dev currentdevice def
+ /font_size 11000 screen_H div def
+ gsave default_matrix ori_setmatrix set_window_size grestore
+} def
+
+/call_for_DSC {
+ flush
+ (!PSV_FINDDSC: {) print
+ file_name print
+ (}\n) print flush
+} def
+
+/match {DSC_line exch anchorsearch
+ {pop pop true} {pop false} ifelse} def
+
+/read_DSC {
+ in_page {
+ (%%BeginDocument) match {b_inclusion} if
+ (%%EndDocument) match {e_inclusion} if
+ } if
+ in_inclusion 0 eq {
+ (%%DocumentMedia:) match {bb_wd 0 eq bb_ht 0 eq or {read_media} if} if
+ (%%BoundingBox:) match {bb_wd 0 eq bb_ht 0 eq or {read_bb} if} if
+ (%%HiResBoundingBox:) match {read_bb} if
+% (%%EndComments) match {b_document} if
+ (%%BeginProlog) match {b_prolog} if
+% (%%EndProlog) match {} if
+% (%%BeginResource) match {} if
+% (%%EndResource) match {} if
+% (%%BeginProcSet) match {} if
+% (%%EndProcSet) match {} if
+% (%%BeginSetup) match {b_setup} if
+ (%%BeginSetup) match {b_prolog} if
+% (%%EndSetup) match {} if
+ (%DVIPSBeginSection) match {b_setup} if
+ (%DVIPSEndSection) match {b_prolog} if
+ (%DVIPSSectionPage:) match {b_page} if
+ (%%Page:) match {b_page} if
+ (%% Page:) match {b_page} if
+% (%%Trailer) match {} if
+ (%%EOF) match {e_document} if
+ } if
+} def
+
+/in_document false def
+/in_prolog false def
+/in_setup false def
+/in_page false def
+
+/DSC_err {print} def
+
+/b_inclusion {
+ /in_inclusion in_inclusion 1 add def
+} def
+
+/e_inclusion {
+ in_inclusion 0 gt {/in_inclusion in_inclusion 1 sub def} if
+} def
+
+/b_document {
+ in_document not {
+ /doc_beg DSC_addr def
+ /in_document true def
+% (Qq) print doc_beg val_str cvs print (qQ) print
+ } if
+} def
+
+/e_document {
+ in_document {
+ in_prolog {e_prolog} if
+ in_setup {e_setup} if
+ in_page {e_page} if
+ /doc_end DSC_addr def
+ /in_document false def
+% (Qq) print doc_end val_str cvs print (qQ) print
+ } if
+} def
+
+/b_prolog {
+ in_setup {e_setup} if
+ in_page {e_page} if
+ in_prolog not {
+ /prolog_addr DSC_addr def
+ /in_prolog true def
+ } if
+} def
+
+/e_prolog {
+ prolog_count 0 ge prolog_count max_pages lt and {
+ /prolog_count prolog_count 1 add def
+ prolog_arr prolog_count prolog_addr put
+ prolog_len prolog_count DSC_addr prolog_addr sub put
+ /overfull false def} {pop pop /overfull true def} ifelse
+ /in_prolog false def
+} def
+
+/b_setup {
+ in_prolog {e_prolog} if
+ in_page {e_page} if
+ in_setup not {
+ /setup_addr DSC_addr def
+ /in_setup true def
+ } if
+} def
+
+/e_setup {
+ setup_count 0 ge setup_count max_pages lt and {
+ /setup_count setup_count 1 add def
+ setup_arr setup_count setup_addr put
+ setup_len setup_count DSC_addr setup_addr sub put
+ /overfull false def} {pop pop /overfull true def} ifelse
+ /in_setup false def
+} def
+
+/b_page {
+ in_prolog {e_prolog} if
+ in_setup {e_setup} if
+ in_page {e_page} if
+ /page_addr DSC_addr def
+ /in_page true def
+} def
+
+/e_page {
+ page_count 0 ge page_count max_pages lt and {
+ /page_count page_count 1 add def
+ page_arr page_count page_addr put
+ page_len page_count DSC_addr page_addr sub put
+ /overfull false def} {pop pop /overfull true def} ifelse
+ /in_page false def
+} def
+
+/read_bb {
+ DSC_line (:) search {pop pop
+ token {/dl_x XD token {/dl_y XD
+ token {/ur_x XD token {/ur_y XD pop
+ /bb_wd ur_x dl_x sub def
+ /bb_ht ur_y dl_y sub def
+ bb_wd 0 gt bb_ht 0 gt and to_center and {
+ dl_x dl_y multi_wd multi_ht center_rect
+ /to_center false def
+ } if
+ } if} if} if} if
+ }{pop} ifelse
+} def
+
+/read_media {
+ DSC_line (:) search {pop pop
+ token {/media_name XD token {/bb_wd XD
+ token {/bb_ht XD pop
+ /dl_x 0 def /ur_x bb_wd def
+ /dl_y 0 def /ur_y bb_ht def
+ bb_wd 0 gt bb_ht 0 gt and to_center and {
+ dl_x dl_y multi_wd multi_ht center_rect
+ /to_center false def
+ } if
+ } if} if} if
+ }{pop} ifelse
+} def
+
+/precision 3 def
+/psv_accuracy 10 precision neg exp def
+/psv_accuracy_mask (00000000000000000000000000000000000000000000000)
+ 0 precision 1 add getinterval def
+
+/psv_print_rounded {view_dict begin
+ dup abs 0.000001 lt {pop (0) psv_print} {psv_accuracy div round
+ dup abs 16#7FFFFFFF gt {pop (INTEGER OUT of RANGE!\n) print quit} if
+ cvi
+ /minus_sign false def dup 0 lt {neg /minus_sign true def} if
+ %
+ dup /int_to_pull exch def /dig_to_pull 0 def
+ {int_to_pull 0 eq {exit} if
+ /mod_to_pull int_to_pull 10 mod def
+ mod_to_pull 0 eq {/dig_to_pull dig_to_pull 1 add def
+ /int_to_pull int_to_pull 10 idiv def} {exit} ifelse} loop
+ %
+ /fractional_dig precision dig_to_pull sub 0 max def
+% minus_sign {<96> psv_print} if
+ minus_sign {(-) psv_print} if
+ val_str cvs dup length precision le {
+ /leading_zeros precision 1 add string def
+ leading_zeros 0 psv_accuracy_mask putinterval leading_zeros exch
+ dup length precision 1 add exch sub exch putinterval leading_zeros
+ } if
+ dup dup length precision sub 0 exch getinterval psv_print
+ fractional_dig 0 eq {pop} {(.) psv_print
+ dup length precision sub fractional_dig getinterval
+ psv_print} ifelse} ifelse end} def
+
+/psv_normal_print_rounded {view_dict begin
+ dup abs 0.000001 lt {pop (0) print} {psv_accuracy div round
+ dup abs 16#7FFFFFFF gt {pop (INTEGER OUT of RANGE!\n) print quit} if
+ cvi
+ /minus_sign false def dup 0 lt {neg /minus_sign true def} if
+ %
+ dup /int_to_pull exch def /dig_to_pull 0 def
+ {int_to_pull 0 eq {exit} if
+ /mod_to_pull int_to_pull 10 mod def
+ mod_to_pull 0 eq {/dig_to_pull dig_to_pull 1 add def
+ /int_to_pull int_to_pull 10 idiv def} {exit} ifelse} loop
+ %
+ /fractional_dig precision dig_to_pull sub 0 max def
+% minus_sign {<96> print} if
+ minus_sign {(--) print} if
+ val_str cvs dup length precision le {
+ /leading_zeros precision 1 add string def
+ leading_zeros 0 psv_accuracy_mask putinterval leading_zeros exch
+ dup length precision 1 add exch sub exch putinterval leading_zeros
+ } if
+ dup dup length precision sub 0 exch getinterval print
+ fractional_dig 0 eq {pop} {(.) print
+ dup length precision sub fractional_dig getinterval
+ print} ifelse} ifelse end} def
+
+/print_buf 256 string def
+/print_count 0 def
+%/clear_rect {
+% gsave
+% newpath
+% 0 window_ht font_size sub 0.2 font_size mul sub translate
+% 0 0 moveto window_wd 0 lineto window_wd font_size 1.2 mul lineto
+% 0 font_size 1.2 mul lineto
+% closepath 0 0 0 0 setcmykcolor fill
+% grestore} def
+/psv_print {view_dict begin
+ print_buf print_count 2 index putinterval
+ length print_count add /print_count XD
+ end} def
+/psv_init_print {view_dict begin /print_count 0 def end} def
+
+%/ori_prompt /prompt LD % gswxlua DOESN'T use prompt!
+%/prompt {view_dict begin psv_flush %psv_init_print psv_prompt
+% flush ori_prompt end} def
+
+/psv_prompt {
+ flush
+ (!PSV_STATUS: T ) print
+ was_error {({1bc}{ER}\n)} {({1tc}{OK}\n)} ifelse print flush
+} def
+/psv_clear_prompt {
+ flush
+ (!PSV_STATUS: T {1bc}{}\n) print flush
+ view_dict /was_error false put
+} def
+/psv_flush {
+ view_dict begin print_count 0 gt {
+ flush
+ (!PSV_STATUS: T {6}{) print
+ print_buf 0 print_count getinterval print
+ (}\n) print flush
+ (!PSV_CONSOLE: P {) print
+ print_buf 0 print_count getinterval print
+ (\n}\n) print flush
+ } {flush (!PSV_STATUS: T {6}{}\n) print flush} ifelse end
+} def
+/psv_sh_pn {
+ flush
+ (!PSV_STATUS: T {2}{) print
+ (Page: ) transl print
+ print
+ (/) print
+ print
+ (}\n) print flush
+} def
+/psv_sh_no_pn {flush (!PSV_STATUS: T {2}{ }\n) print flush} def
+/psv_sh_pnr {
+ flush
+ (!PSV_STATUS: T {2}{) print
+ (Pages: ) transl print
+ print
+ (-) print
+ print
+ (/) print
+ print
+ (}\n) print flush
+} def
+/psv_sh_angle {
+ flush
+ (!PSV_STATUS: T {3}{) print
+ (Angle: ) transl print
+ print
+ (}\n) print flush
+} def
+/psv_sh_no_angle {flush (!PSV_STATUS: T {3}{ }\n) print flush} def
+/psv_sh_flip {
+ flush
+ (!PSV_STATUS: T {4}{) print
+ (Flip: ) transl print
+ print
+ (}\n) print flush
+} def
+/psv_sh_no_flip {flush (!PSV_STATUS: T {4}{ }\n) print flush} def
+/psv_sh_zoom {
+ flush
+ (!PSV_STATUS: T {5}{) print
+ (Zoom: ) transl print
+ print
+ (}\n) print flush
+} def
+/psv_sh_no_zoom {flush (!PSV_STATUS: T {5}{ }\n) print flush} def
+%/psv_sh_unit {
+% flush
+% (!PSV_STATUS: T {6}{Unit: ) print
+% print
+% (}\n) print flush
+%} def
+%/psv_sh_no_unit {flush (!PSV_STATUS: T {6}{ }\n) print flush} def
+/psv_menu_status {
+ %
+ psv_clear_prompt
+ multi_z 1 eq {page_count val_str cvs curr_page val_str2 cvs psv_sh_pn} if
+ multi_z 1 gt {page_count val_str cvs
+ curr_page multi_z add 1 sub val_str3 cvs
+ curr_page val_str2 cvs psv_sh_pnr} if
+ angle val_str cvs psv_sh_angle
+ hflip not vflip not and {(None) transl psv_sh_flip} if
+ hflip vflip not and {(Horizontal) transl psv_sh_flip} if
+ hflip not vflip and {(Vertical) transl psv_sh_flip} if
+ hflip vflip and {(Both) transl psv_sh_flip} if
+ magnification val_str cvs psv_sh_zoom
+% psv_unit_name psv_sh_unit
+} def
+
+/psv_clear_menu_status {
+ psv_clear_prompt
+ psv_sh_no_pn
+ psv_sh_no_angle
+ psv_sh_no_flip
+ psv_sh_no_zoom
+% psv_sh_no_unit
+} def
+
+/transl {
+ transl_dict exch 2 copy known
+ {get} {exch pop} ifelse
+} def
+/do_transl{
+ flush (!PSV_LOCALE: T {) print
+ print
+ (}\n) print flush
+} def
+/prepare_locale {
+ /transl_dict 20 dict def
+ (Page: ) do_transl
+ (Pages: ) do_transl
+ (Angle: ) do_transl
+ (Flip: ) do_transl
+ (Zoom: ) do_transl
+ (None) do_transl
+ (Horizontal) do_transl
+ (Vertical) do_transl
+ (Both) do_transl
+} def
+
+/preview_toggle {
+ /ciecolor ciecolor not def
+ /alphabits ciecolor {4}{1} ifelse def
+ CIEcolor_set
+ AlphaBits_set
+ run_file
+ psv_init_print
+ ciecolor {(Final view \(CIE colors & antialiasing\))}
+ {(Quick view \(no CIE colors & no antialiasing\))} ifelse
+ psv_print psv_flush
+} def
+
+/CIEcolor_set {
+ ciecolor {(CI&E Color off) (CIECOLOR_TOGGLE) change_item}
+ {(CI&E Color on) (CIECOLOR_TOGGLE) change_item} ifelse
+ refresh_menu overlay_drawim
+ <</UseCIEColor ciecolor>> ori_setpagedevice
+} def
+
+/AlphaBits_set {
+ alphabits 1 gt {(&Antialiasing off) (ALPHABITS_TOGGLE) change_item}
+ {(&Antialiasing on) (ALPHABITS_TOGGLE) change_item} ifelse
+ refresh_menu overlay_drawim
+ <</GraphicsAlphaBits alphabits /TextAlphaBits alphabits>> ori_setpagedevice
+} def
+
+/ori_handleerror /handleerror LD
+
+/handleerror {
+ psv_clear_prompt
+ psv_init_print
+ (Error: ) psv_print
+ $error /errorname get 80 string cvs psv_print
+ ( in ) psv_print
+ $error /command get 80 string cvs psv_print
+% (\n) psv_print psv_flush
+ psv_flush
+ ori_handleerror
+ view_dict /was_error true put
+} def
+
+
+%errordict /handleerror /handleerror load put
+
+/view_stopped {stopped $error /newerror get and
+% {view_dict /handleerror get cvx exec false} {true} ifelse} def
+% {view_dict /handleerror get cvx exec} if} def
+ {handleerror} if} def
+
+/maximum {/x_2 XD /x_1 XD
+ x_1 x_2 ge {x_1}{x_2} ifelse} def
+
+/minimum {/x_2 XD /x_1 XD
+ x_1 x_2 le {x_1}{x_2} ifelse} def
+
+/view_transform {
+ run_matrix ori_setmatrix
+ magnification dup scale
+ orig_x psv_unit mul neg
+ orig_y psv_unit mul neg translate
+ hflip {[-1 0 0 1 window_wd magnification div orig_x psv_unit mul 2 mul add 0] concat} if
+ vflip {[1 0 0 -1 0 window_ht magnification div orig_y psv_unit mul 2 mul add] concat} if
+ angle rotate
+ angle 0 eq {0 0} if
+ angle 90 eq {
+ orig_y orig_x sub psv_unit mul
+ window_wd magnification div
+ orig_x orig_y add psv_unit mul add neg
+ } if
+ angle 180 eq {
+ window_wd magnification div
+ 2 orig_x mul psv_unit mul add neg
+ window_ht magnification div
+ 2 orig_y mul psv_unit mul add neg
+ } if
+ angle 270 eq {
+ window_ht magnification div
+ orig_x orig_y add psv_unit mul add neg
+ orig_x orig_y sub psv_unit mul
+ } if
+ translate
+ } def
+
+%/xtra_transform {
+% angle 90 eq angle 270 eq or {
+% window_wd window_ht sub 0.5 mul magnification div neg
+% window_wd window_ht sub 0.5 mul magnification div
+% translate
+% } if
+%} def
+
+/do_run_file {/run_matrix XD
+ page_arr curr_page get /curr_pos XD
+ %
+ gsave
+ bb_wd 0 gt bb_ht 0 gt and background and {fill_bb} if
+ grestore
+ %
+ view_transform
+ /view_matrix matrix currentmatrix def
+ %
+ PDF_file {
+ GS_PDF_ProcSet begin pdfdict begin PDF_dict begin
+ {curr_page pdfgetpage
+ dup get_PDF_params
+ dup /Page exch store
+ pdfshowpage_setpage
+ pdfshowpage_finish
+ } view_dict /view_stopped get cvx exec
+ end end end
+ } {
+ ONEPAGE {
+ /view_save save def
+ view_dict begin
+ opened_file doc_beg setfileposition
+ opened_file
+ doc_end doc_beg sub () end
+ /SubFileDecode filter cvx
+ view_dict /view_stopped get cvx exec
+ clear
+ view_dict /view_save get restore
+ } {
+ first_time {
+ 1 1 prolog_count {view_dict begin /cnt XD
+ opened_file prolog_arr cnt get setfileposition
+ opened_file
+ prolog_len cnt get () end
+ /SubFileDecode filter cvx
+ view_dict /view_stopped get cvx exec
+ } for
+ clear
+ view_dict /document_dicts countdictstack array dictstack put
+ view_dict /document_dicts
+ view_dict /document_dicts get dup length 3 sub 3 exch getinterval put
+% (document_dicts length = ) print
+% view_dict /document_dicts get length =
+ view_dict /first_time false put
+ } {
+ document_dicts dup type cvlit /arraytype eq
+ {{begin} forall} {pop} ifelse
+ } ifelse
+ %
+ userdict/PStoPSmatrix matrix currentmatrix put % uk/lon w kierunku /PStoPS
+ %
+ 1 1 setup_count {view_dict begin /cnt XD
+ opened_file
+ setup_arr cnt get
+ dup curr_pos lt {
+ setfileposition
+ opened_file
+ setup_len cnt get () end
+ /SubFileDecode filter cvx
+ view_dict /view_stopped get cvx exec
+ } {pop pop end exit} ifelse
+ } for
+ clear
+ %
+ page_count 0 gt {
+ opened_file curr_pos setfileposition
+ opened_file
+ page_len curr_page get ()
+ /SubFileDecode filter cvx
+ view_dict /view_stopped get cvx exec
+ } {view_dict /first_time true put} ifelse
+ %
+ } ifelse
+ } ifelse
+ clear clear_dict_stack
+ /picture_on true def
+} def
+
+/multi_run {/multi_proc XD
+ /ori_orig_x orig_x def
+ /ori_orig_y orig_y def
+ /ori_curr_page curr_page def
+ /loc_page 0 def
+ checked_permut /null ne {checked_permut get_permut} if
+ /orig_y orig_y
+ bb_ht psv_unit div multi_y 1 sub mul sub
+ multi_dist multi_y 1 sub mul dup 0 gt {sub} {pop} ifelse
+ def
+ 0 1 multi_y 1 sub {/multi_y_cnt XD
+ 0 1 multi_x 1 sub {/multi_x_cnt XD
+ /curr_page ori_curr_page multi_permut loc_page get 1 sub add def
+ multi_proc
+ /orig_x orig_x bb_wd psv_unit div sub multi_dist sub def
+ /loc_page loc_page 1 add def
+ } for
+ /orig_y orig_y bb_ht psv_unit div add multi_dist add def
+ /orig_x ori_orig_x def
+ } for
+ in_print {1 true .outputpage} if
+ /orig_x ori_orig_x def
+ /orig_y ori_orig_y def
+ /curr_page ori_curr_page def
+} def
+
+/run_file {psv_clear_prompt INPUT /RUN get_PS_file} def
+
+/cont_run_file {
+ DSC_finished {
+ vf_set
+ psv_menu_status
+ psv_init_print psv_flush
+ curr_page page_count gt {/curr_page page_count def} if
+ curr_page multi_z neg 2 add lt {/curr_page multi_z neg 2 add def} if
+ in_print {
+ psv_init_print (Printing...) psv_print psv_flush
+ }{
+ overlay_drawim
+ } ifelse
+ initgraphics erasepage
+ file_name (r) file /opened_file XD
+ {
+ /run_curr_page curr_page def
+ multi_cycle {
+ curr_page 1 lt curr_page 1 multi_z sub gt and {
+ /curr_page page_count curr_page add def
+ } if
+ curr_page page_count gt curr_page page_count multi_z add lt and {
+ /curr_page curr_page page_count sub def
+ } if
+ } if
+ curr_page 1 ge curr_page page_count le and {default_matrix do_run_file} if
+ /curr_page run_curr_page def
+ } multi_run
+ vf_unset
+ in_print not {
+ cross1 /visible get {cross1 show_cross} if
+ cross2 /visible get {cross2 show_cross} if
+ overlay_checktransform
+ } if
+ opened_file closefile
+ psv_prompt
+ } if
+} def
+
+/check_integer {
+ count 1 eq not {
+ exch dup type /integertype eq {exch pop}{exch}ifelse
+ } if
+} def
+
+/check_number {
+ count 1 eq not {
+ exch dup type dup /integertype eq exch /realtype eq or
+ {exch pop}{exch}ifelse
+ } if
+} def
+
+/grid_x_color {1 1 0 0} def
+/grid_y_color {0 1 1 0} def
+/do_grid {/new_y_psv_unit XD /new_x_psv_unit XD
+ /x_psv_unit_frac psv_unit new_x_psv_unit div def
+ /y_psv_unit_frac psv_unit new_y_psv_unit div def
+ save
+ %
+ view_transform
+ %
+ 0 setlinewidth
+ new_x_psv_unit new_y_psv_unit scale
+ set_window_size
+ %
+ /grid_x_ori grid_x_ori_set grid_factor mul def
+ /grid_y_ori grid_y_ori_set grid_factor mul def
+ /grid_x_num grid_x_num_set grid_factor mul def
+ /grid_y_num grid_y_num_set grid_factor mul def
+ %
+ grid_x_color setcmykcolor
+ newpath grid_x_ori grid_factor sub dup window_wd add grid_factor add 1 exch
+ {grid_y_ori grid_factor sub moveto 0 window_ht grid_factor add rlineto} for stroke
+ %
+ grid_y_color setcmykcolor
+ newpath grid_y_ori grid_factor sub dup window_ht add grid_factor add 1 exch
+ {grid_x_ori grid_factor sub exch moveto window_wd grid_factor add 0 rlineto} for stroke
+ restore
+ } def
+/show_number {gsave
+ run_matrix ori_setmatrix
+ magnification dup scale
+ new_x_psv_unit new_y_psv_unit scale
+ currentpoint translate
+ 0 0 moveto
+ dup stringwidth pop -0.5 mul -0.15 rmoveto
+ gsave
+ 0.01 0 0 0 setcmykcolor
+ dup stringwidth pop 1.2 mul /stwx XD 0.45 /stwy XD
+ stwx -0.1 mul -0.05 rmoveto
+ stwx 0 rlineto 0 stwy rlineto
+ stwx neg 0 rlineto closepath fill
+ grestore
+% gsave 0 0 0 0 setcmykcolor 0.2 setlinewidth 1 setlinejoin dup
+% true charpath stroke grestore
+ show grestore} def
+/exchange {
+ /aux_lite exch def
+ /aux_body aux_lite load def
+ dup aux_lite exch load def
+ /aux_body load def
+ } def
+/do_numbers {/new_y_psv_unit XD /new_x_psv_unit XD
+ /x_psv_unit_frac psv_unit new_x_psv_unit div def
+ /y_psv_unit_frac psv_unit new_y_psv_unit div def
+ %
+ save
+ view_transform
+ gsave
+ new_x_psv_unit new_y_psv_unit scale
+ set_window_size
+ %
+ /FuturaCondLight
+ findfont 0.5 scalefont setfont
+ window_ht 2 ge {window_ht 40 le {
+ %
+ /grid_x_ori grid_x_ori_set grid_factor mul def
+ /grid_y_ori grid_y_ori_set grid_factor mul def
+ /grid_x_num grid_x_num_set grid_factor mul def
+ /grid_y_num grid_y_num_set grid_factor mul def
+ newpath
+ gsave
+ grid_x_ori grid_factor sub 1 sub grid_y_ori 0.5 add moveto
+ grid_x_num grid_factor sub dup 1 exch window_wd ceiling add grid_factor add
+ {cvi /num XD 1 0 rmoveto gsave
+ grid_x_color setcmykcolor
+ num val_str cvs show_number
+ grestore} for
+ grestore
+ gsave
+ grid_x_ori 0.5 add grid_y_ori grid_factor sub 1 sub moveto
+ grid_y_num grid_factor sub dup 1 exch window_ht ceiling add grid_factor add
+ {cvi /num XD 0 1 rmoveto gsave
+ grid_y_color setcmykcolor
+ num val_str cvs show_number
+ grestore} for
+ } if} if
+ grestore
+ %
+ restore} def
+/gg {picture_on {
+ /gg overlay_drawov
+ /grid_factor 1 def psv_unit dup dup dup do_grid do_numbers
+ %
+ psv_init_print
+ ( Grid unit: ) psv_print
+ psv_unit_name psv_print
+ psv_flush
+ }if} def
+/ggg {picture_on {
+ /ggg overlay_drawov
+ psv_unit_factor 1 lt {gg} if
+ save
+ /grid_x_color {1 0.25 0 0} def /grid_y_color {0 1 0 0} def
+ /orig_x orig_x psv_unit mul def /orig_y orig_y psv_unit mul def
+ /psv_unit psv_unit psv_unit_factor div def
+ /orig_x orig_x psv_unit div def /orig_y orig_y psv_unit div def
+ gg
+ restore
+ psv_unit_factor 1 gt {gg} if
+ %
+ psv_init_print
+ ( Grid units: ) psv_print
+ psv_unit_name psv_print
+ (, ) psv_print
+ psv_unit_name_secondary psv_print
+ psv_flush
+ }if} def
+/igg {
+ count 0 eq {0 0} if count 1 eq {dup} if
+ /new_grid_y XD /new_grid_x XD
+ /grid_x_update grid_x_update new_grid_x neg add def
+ /grid_y_update grid_y_update new_grid_y neg add def
+ /grid_x_ori_set {orig_x epsilon add floor grid_x_update neg dup epsilon add floor sub add} def
+ /grid_y_ori_set {orig_y epsilon add floor grid_y_update neg dup epsilon add floor sub add} def
+ /grid_x_num_set {orig_x epsilon add floor grid_x_update add epsilon sub ceiling} def
+ /grid_y_num_set {orig_y epsilon add floor grid_y_update add epsilon sub ceiling} def
+ run_file
+ gg
+ } def
+/wgg {
+ /grid_x_update 0 def
+ /grid_y_update 0 def
+ orig_x orig_y igg
+ } def
+/default_gg {
+ /grid_x_color {1 1 0 0} def /grid_y_color {0 1 1 0} def
+ /grid_x_update 0 def
+ /grid_y_update 0 def
+ /grid_x_ori_set {orig_x epsilon sub ceiling} def /grid_y_ori_set {orig_y epsilon sub ceiling} def
+ /grid_x_num_set {orig_x epsilon sub ceiling} def /grid_y_num_set {orig_y epsilon sub ceiling} def
+ } def
+/dgg {
+ default_gg
+ run_file gg
+ } def
+/cgg {overlay_erase} def
+
+/cross1 3 dict def
+/cross2 3 dict def
+
+/init_cross {begin
+ /visible false def
+ /cross_x 0 def
+ /cross_y 0 def
+end} def
+
+cross1 init_cross
+cross2 init_cross
+
+/show_cross {view_dict begin
+ /curr_cross XD
+ overlay_drawim
+ save
+ initmatrix view_transform
+ set_window_size
+ %
+ 0 setlinewidth
+ 1 1 0 0 setcmykcolor
+ newpath curr_cross /cross_x get psv_unit mul window_ly moveto
+ curr_cross /cross_x get psv_unit mul window_uy lineto stroke
+ newpath window_lx curr_cross /cross_y get psv_unit mul moveto
+ window_ux curr_cross /cross_y get psv_unit mul lineto stroke
+ %
+ restore
+ end
+} def
+
+/freeze_cross {view_dict begin
+ /curr_cross XD
+ curr_cross begin
+ /cross_y XD /cross_x XD
+ /visible true def
+ end
+ curr_cross show_cross
+ end
+} def
+
+/hide_crosses {
+ cross1 init_cross
+ cross2 init_cross
+ run_file
+} def
+
+/meas {view_dict begin
+ /new_psv_unit XD
+ /new_psv_unit_name XD
+ psv_init_print
+ cross1 /visible get cross2 /visible get and {
+ /meas_x1 cross1 /cross_x get psv_unit mul new_psv_unit div def
+ /meas_y1 cross1 /cross_y get psv_unit mul new_psv_unit div def
+ /meas_x2 cross2 /cross_x get psv_unit mul new_psv_unit div def
+ /meas_y2 cross2 /cross_y get psv_unit mul new_psv_unit div def
+ /xdist meas_x2 meas_x1 sub abs def
+ /ydist meas_y2 meas_y1 sub abs def
+ /zdist xdist dup mul ydist dup mul add sqrt def
+ xdist abs ydist abs add 0 eq {/alpha 0 def /beta 0 def}
+ {/alpha ydist xdist atan def /beta 90 alpha sub def} ifelse
+ %
+ ( dx=) psv_print xdist psv_print_rounded
+ ( dy=) psv_print ydist psv_print_rounded
+ ( dz=) psv_print zdist psv_print_rounded
+ ( ) psv_print new_psv_unit_name psv_print
+ ( alpha=) psv_print alpha psv_print_rounded
+ ( beta=) psv_print beta psv_print_rounded
+ } {
+ cross1 /visible get {
+ /meas_x1 cross1 /cross_x get psv_unit mul new_psv_unit div def
+ /meas_y1 cross1 /cross_y get psv_unit mul new_psv_unit div def
+ %
+ ( x=) psv_print meas_x1 psv_print_rounded
+ ( y=) psv_print meas_y1 psv_print_rounded
+ ( ) psv_print new_psv_unit_name psv_print
+ } if
+ cross2 /visible get {
+ /meas_x2 cross2 /cross_x get psv_unit mul new_psv_unit div def
+ /meas_y2 cross2 /cross_y get psv_unit mul new_psv_unit div def
+ %
+ ( x=) psv_print meas_x2 psv_print_rounded
+ ( y=) psv_print meas_y2 psv_print_rounded
+ ( ) psv_print new_psv_unit_name psv_print
+ } if
+ } ifelse
+ psv_flush
+ end
+} def
+
+/sh_pos {view_dict begin
+ z_conv orig_y add exch orig_x add exch
+ psv_unit_name psv_unit
+ %
+ /new_psv_unit XD
+ /new_psv_unit_name XD
+ psv_init_print
+ psv_unit mul new_psv_unit div /sh_y XD
+ psv_unit mul new_psv_unit div /sh_x XD
+ cross1 /visible get {
+ /meas_x1 cross1 /cross_x get psv_unit mul new_psv_unit div def
+ /meas_y1 cross1 /cross_y get psv_unit mul new_psv_unit div def
+ /xdist sh_x meas_x1 sub abs def
+ /ydist sh_y meas_y1 sub abs def
+ /zdist xdist dup mul ydist dup mul add sqrt def
+ /alpha ydist xdist atan def
+ %
+ ( dx=) psv_print xdist psv_print_rounded
+ ( dy=) psv_print ydist psv_print_rounded
+ ( dz=) psv_print zdist psv_print_rounded
+ ( ) psv_print new_psv_unit_name psv_print
+ ( alpha=) psv_print alpha psv_print_rounded
+ ( beta=) psv_print 90 alpha sub psv_print_rounded
+ } {
+ ( x=) psv_print sh_x psv_print_rounded
+ ( y=) psv_print sh_y psv_print_rounded
+ ( ) psv_print new_psv_unit_name psv_print
+ } ifelse
+ pop pop
+ psv_flush
+ end
+} def
+
+/sh_meas {z_conv orig_y add exch orig_x add exch
+ cross1 /visible get {
+ cross2 /visible get {pop pop pop pop hide_crosses}
+ {cross2 freeze_cross pop pop psv_unit_name psv_unit meas} ifelse
+ } {cross1 freeze_cross pop pop psv_unit_name psv_unit meas} ifelse
+} def
+
+
+/overlay_on {inoverlay not {
+ (!PSV_DRAW: OC\n) print flush
+ /imagedevice currentdevice def
+ imagedevice copydevice setdevice
+ <</GraphicsAlphaBits 1>> ori_setpagedevice
+ /overlaydevice currentdevice def
+ /inoverlay true def
+ /drawoverlay true def
+ } if
+} def
+
+/overlay_toggle {inoverlay {
+ flushpage
+ (!PSV_DRAW: OT\n) print flush
+ /drawoverlay drawoverlay not def
+ drawoverlay {overlaydevice}{imagedevice} ifelse setdevice
+ } if
+} def
+
+/overlay_off {inoverlay {
+ (!PSV_DRAW: OD\n) print flush
+ /inoverlay false def
+ } if
+} def
+
+/overlay_todrawdict 10 dict def
+
+/overlay_erase {
+ overlay_todrawdict {pop overlay_todrawdict exch undef} forall
+ inoverlay {
+ drawoverlay {
+% ori_erasepage
+ overlay_toggle
+ } if
+ overlay_off
+ }{
+ run_file
+ } ifelse
+} def
+
+/overlay_drawim {inoverlay {
+ drawoverlay {overlay_toggle} if
+ } if
+} def
+
+/overlay_drawov {
+ overlay_todrawdict exch dup dup where {exch get} if put
+ inoverlay {
+ drawoverlay not {overlay_toggle} if
+ }{
+ overlay_on
+ } ifelse
+ /overlay_matrix view_matrix def
+% gsave 0 setgray clippath fill grestore
+} def
+
+/overlay_checktransform {inoverlay {
+ /ov_matrixchange false def
+ 0 1 5 {
+ dup overlay_matrix exch get exch view_matrix exch get
+ ne {/ov_matrixchange true def} if
+ } for
+ ov_matrixchange overlay_todrawdict length 0 gt and {
+ drawoverlay not {overlay_toggle} if ori_erasepage
+ overlay_todrawdict {exec pop} forall
+ } if
+ } if
+} def
+
+/start_refresh {
+ prepare_state /refresh_state XD
+ INPUT /REFRESH get_PS_file
+} def
+
+/cont_refresh {
+ DSC_finished {
+ refresh_state restore_state
+ run_file
+ } if
+} def
+
+/vertical_tape {
+% v_tape multi_z 1 eq or {
+ true {
+ view_dict begin
+ angle 0 eq angle 180 eq or {window_ht} {window_wd} ifelse
+ magnification div /w_size XD
+ bb_ht multi_dist psv_unit mul add /p_size XD
+ orig_y psv_unit mul /orig_yu XD
+ orig_yu multi_dist psv_unit mul sub /orig_ydu XD
+ v_tape {
+ w_size orig_yu add dup 0 lt {
+ neg
+ p_size div ceiling cvi /vf_corr XD
+ curr_page vf_corr add page_count sub dup 0 gt {
+ vf_corr exch sub /vf_corr XD
+ } if
+ vf_corr curr_page add /curr_page XD
+ vf_corr p_size mul orig_yu add psv_unit div /orig_y XD
+ } {pop} ifelse
+ orig_yu p_size sub dup 0 gt {
+ p_size div ceiling cvi /vf_corr XD
+ vf_corr curr_page sub 1 add dup 0 gt {
+ vf_corr exch sub /vf_corr XD
+ } if
+ curr_page vf_corr sub /curr_page XD
+ orig_yu vf_corr p_size mul sub psv_unit div /orig_y XD
+ } {pop} ifelse
+ } if
+ /vf_curr_page curr_page def
+ 1 1 multipage_nc
+ w_size p_size orig_yu sub sub
+ dup 0 gt {
+ p_size div ceiling cvi /upper_chunk XD
+ } {pop /upper_chunk 0 def} ifelse
+ orig_yu dup 0 lt {
+ neg p_size div ceiling cvi /down_chunk XD
+ } {pop /down_chunk 0 def} ifelse
+ upper_chunk down_chunk add 1 add /total_chunk XD
+ down_chunk p_size mul psv_unit div /vf_shift XD
+ /v_tape true def
+ end
+ 1 total_chunk multipage_nc
+ run_file
+ } if
+} def
+
+/vf_set {
+ v_tape {
+ /curr_page vf_curr_page upper_chunk sub def
+ /orig_y orig_y vf_shift add def
+ } if
+} def
+
+/vf_unset {
+ v_tape {
+ /curr_page vf_curr_page def
+ /orig_y orig_y vf_shift sub def
+ } if
+} def
+
+/multipage {save_state
+ dup type cvlit /arraytype eq {
+ /checked_permut /null def /multi_permut XD} {
+ dup type cvlit /nametype eq {get_permut} {
+ /checked_permut /PERM_1 def
+ /multi_permut [] def
+ } ifelse
+ } ifelse
+ /multi_y XD /multi_x XD
+ /multi_z multi_x multi_y mul def
+ multi_permut length multi_z ne {[1 1 multi_z {} for] /multi_permut XD} if
+% multi_z 1 eq {(ONE_PAGE) check_SET_MULTIPAGE} {
+% multi_x 2 eq multi_y 1 eq and {(TWO_ONE_PAGE) check_SET_MULTIPAGE} {
+% multi_x 1 eq multi_y 2 eq and {(ONE_TWO_PAGE) check_SET_MULTIPAGE} {
+% (M_N_PAGE) check_SET_MULTIPAGE
+% } ifelse
+% } ifelse
+% } ifelse
+ /v_tape false def
+ dl_x dl_y multi_wd multi_ht center_rect
+ run_file
+} def
+
+/multipage_nc {
+ dup type cvlit /arraytype eq {
+ /checked_permut /null def /multi_permut XD} {
+ dup type cvlit /nametype eq {get_permut} {
+ /checked_permut /PERM_1 def
+ /multi_permut [] def
+ } ifelse
+ } ifelse
+ /multi_y XD /multi_x XD
+ /multi_z multi_x multi_y mul def
+ multi_permut length multi_z ne {[1 1 multi_z {} for] /multi_permut XD} if
+} def
+
+/frame_squ{/vs XD /hs XD
+ newpath
+ 0 0 moveto hs 0 lineto hs vs lineto 0 vs lineto
+ closepath stroke} def
+
+/do_frame {%/do_frame overlay_drawov
+ gsave
+ default_matrix ori_setmatrix
+ 0 setlinewidth
+ 0 1 0 0 setcmykcolor
+ %
+% gsave 210 MM 297 MM frame_squ stroke grestore
+% gsave 6 MM 6 MM translate 198 MM 285 MM frame_squ stroke grestore
+ window_wd page_W sub 0.5 mul window_ht page_H sub 0.5 mul translate
+ gsave page_W page_H frame_squ stroke grestore
+ gsave 6 MM 6 MM translate
+ page_W 6 MM 2 mul sub page_H 6 MM 2 mul sub frame_squ stroke grestore
+ grestore
+} def
+
+/fill_page {gsave default_matrix ori_setmatrix
+ view_transform
+ 1 setgray
+ newpath
+ 0 0 moveto psv_HS 0 lineto psv_HS psv_VS lineto 0 psv_VS lineto
+ closepath fill
+ grestore
+} def
+
+/sh_page {picture_on {
+ gsave default_matrix ori_setmatrix
+ view_transform
+ 0 setlinewidth
+ 0 1 1 0 setcmykcolor
+ %
+ newpath
+ 0 0 moveto psv_HS 0 lineto psv_HS psv_VS lineto 0 psv_VS lineto
+ closepath stroke
+ grestore
+ %
+ psv_init_print
+ ( Page size: ) psv_print
+ psv_HS psv_unit div psv_print_rounded
+ ( x ) psv_print
+ psv_VS psv_unit div psv_print_rounded
+ ( ) psv_print
+ psv_unit_name psv_print
+ psv_flush
+}if} def
+
+/fill_bb {gsave default_matrix ori_setmatrix
+ view_transform
+ 1 setgray
+ %
+ newpath
+ dl_x dl_y moveto ur_x dl_y lineto ur_x ur_y lineto
+ dl_x ur_y lineto closepath fill
+ grestore
+} def
+
+/sh_bb {picture_on {
+ gsave default_matrix ori_setmatrix
+ view_transform
+ 0 setlinewidth
+ 1 1 0 0 setcmykcolor
+ %
+ newpath
+ dl_x dl_y moveto ur_x dl_y lineto ur_x ur_y lineto
+ dl_x ur_y lineto closepath stroke
+ grestore
+ %
+ psv_init_print
+ ( BoundingBox size: ) psv_print
+ bb_wd psv_unit div psv_print_rounded
+ ( x ) psv_print
+ bb_ht psv_unit div psv_print_rounded
+ ( ) psv_print
+ psv_unit_name psv_print
+ psv_flush
+}if} def
+
+/get_PS_file {/context XD /file_name XD
+% file_name status {/new_file_date XD pop /new_file_length XD pop
+ file_name status {pop /new_file_date XD /new_file_length XD pop
+ new_file_date file_date ne new_file_length file_length ne or
+ {new_PS_file} {context /RUN eq {cont_run_file} if} ifelse
+ } {
+ psv_init_print
+ ( File not opened ) psv_print psv_flush
+ } ifelse
+} def
+
+/new_PS_file {%
+ psv_clear_menu_status
+ /file_date new_file_date def
+ /file_length new_file_length def
+ /picture_on false def
+ /DSC_finished false def
+ /DSC_found false def
+% init_undo
+% addr_name findlibfile {closefile run} {pop} ifelse
+ psv_init_print (Reading DSC) psv_print psv_flush
+ call_for_DSC
+} def
+
+/init_file_found {%
+ view_dict begin
+ /prolog_count 0 def /setup_count 0 def
+ /page_count 0 def /curr_pos 0 def
+ /document_dicts 0 def
+ /first_time true def
+ /in_inclusion 0 def
+ /dl_x 0 def /dl_y 0 def
+ /ur_x 0 def /ur_y 0 def
+ /bb_ht 0 def /bb_wd 0 def
+ /DSC_found true def
+ end
+ userdict begin /psv_HS 0 def /psv_VS 0 def end
+ userdict /bop-hook known {userdict /bop-hook undef} if
+} def
+
+/apply_PS_file {
+ page_count 0 eq {/ONEPAGE true def} if
+ ONEPAGE {/page_count 1 def} if
+ overfull {
+ psv_init_print
+ (To many pages!) psv_print
+ psv_flush
+ } if
+ %
+ context /RUN eq {cont_run_file} if
+ context /REFRESH eq {cont_refresh} if
+} def
+
+/get_PDF_params {
+ dup /MediaBox pget {aload pop
+ view_dict begin /ur_y XD /ur_x XD /dl_y XD /dl_x XD end
+ dup /Rotate pget {90 div cvi 4 mod dup 0 lt {4 add} if
+ dup 1 eq exch 3 eq or {
+ view_dict begin
+% ur_y ur_x /ur_y XD /ur_x XD
+% dl_y dl_x /dl_y XD /dl_x XD
+ end
+ } if
+ } if
+ view_dict begin
+ /bb_wd ur_x dl_x sub abs def
+ /bb_ht ur_y dl_y sub abs def
+ bb_wd bb_ht get_page_size
+ end
+ } if
+ /CropBox pget {aload pop
+ view_dict begin
+ /ur_y XD /ur_x XD /dl_y XD /dl_x XD
+ /bb_wd ur_x dl_x sub abs def /bb_ht ur_y dl_y sub abs def
+ end
+ } if
+ view_dict begin
+ bb_wd 0 gt bb_ht 0 gt and to_center and {
+ dl_x dl_y multi_wd multi_ht center_rect
+ /to_center false def
+ } if
+ end
+} def
+
+/apply_PDF_file {
+ file_name (r) file /opened_file XD /Page null def
+ GS_PDF_ProcSet begin pdfdict begin
+ view_dict /PDF_dict undef
+ {view_dict /PDF_dict opened_file pdfopen put
+ } view_dict /view_stopped get cvx exec
+ view_dict /PDF_dict known {
+ PDF_dict begin
+ /FirstPage where {pop} {view_dict /FirstPage 1 put} ifelse
+ /LastPage where {pop} {/LastPage pdfpagecount def} ifelse
+ view_dict /page_count LastPage FirstPage sub 1 add put
+ FirstPage pdfgetpage get_PDF_params
+ end end end
+ %
+ context /RUN eq {cont_run_file} if
+ context /REFRESH eq {cont_refresh} if
+ }{
+ clear clear_dict_stack
+ /picture_on false def
+ psv_init_print
+ ( Error opening PDF file -- probably incomplete file ) psv_print psv_flush
+ } ifelse
+} def
+
+/rr {count 0 eq {/current_restart restart_name def}
+ {/current_restart XD} ifelse
+ current_restart findlibfile {
+ closefile run
+ /to_center false def
+ } {pop} ifelse
+ run_file
+} def
+
+/pn {count 0 eq {
+ psv_init_print
+ ( page=) psv_print curr_page psv_print_rounded
+ multi_z 1 gt {
+ (-) psv_print
+ curr_page multi_z add 1 sub psv_print_rounded
+ psv_flush
+ } if
+ } {
+ round cvi
+ dup curr_page le {
+ curr_page multi_z add 1 sub sub multi_z idiv
+ } {
+ curr_page sub multi_z idiv
+ } ifelse
+ n
+ } ifelse
+} def
+
+/np /pn LD
+
+/sn { 1 check_integer
+ curr_page add round cvi
+ dup page_count gt {pop page_count} if
+ dup multi_z 1 sub neg le {pop multi_z 2 sub neg} if
+ /prop_page XD
+ prop_page curr_page ne
+ prop_page page_count le and
+ prop_page multi_z add 1 gt and {
+ save_state /curr_page /prop_page LD
+ v_tape {vertical_tape} {run_file} ifelse
+ } if
+} def
+
+/n { 1 check_integer multi_z mul
+ curr_page add round cvi
+ dup page_count gt {page_count 1 add sub multi_z mod
+ page_count add multi_z sub 1 add} if
+ dup multi_z 1 sub neg le {1 sub multi_z mod 1 add} if
+ /prop_page XD
+ prop_page curr_page ne
+ prop_page page_count le and
+ prop_page multi_z add 1 gt and {
+ save_state /curr_page /prop_page LD
+ v_tape {vertical_tape} {run_file} ifelse
+ } if
+} def
+
+/sp {count 0 eq {-1} {neg} ifelse sn} def
+/p {count 0 eq {-1} {neg} ifelse n} def
+/pf {9999 p} def
+/fp /pf LD
+/pl {9999 n} def
+/lp /pl LD
+/spf {9999 sp} def
+/spl {9999 sn} def
+
+/center_rect {% llx lly wid hei
+ /hei XD /wid XD /lly XD /llx XD
+ hei 0 gt wid 0 gt and {
+ /orig_x
+ llx
+ angle 0 eq angle 180 eq or
+ {window_wd} {window_ht} ifelse magnification div
+ wid sub 0.5 mul sub
+ psv_unit div
+ def
+ /orig_y
+ lly
+ angle 0 eq angle 180 eq or
+ {window_ht} {window_wd} ifelse magnification div
+ hei sub 0.5 mul sub
+ psv_unit div
+ def
+ } {/orig_x 0 def /orig_y 0 def} ifelse
+ vf_unset
+} def
+
+/pos_rect {% llx lly wid hei hpos vpos [hpos,vpos=0,.5,1]
+ /vpos XD /hpos XD /hei XD /wid XD /lly XD /llx XD
+ hei 0 gt wid 0 gt and {
+ hpos 0 eq {
+ /orig_x llx psv_unit div def
+ } if
+ hpos 1 eq {
+ /orig_x
+ llx
+ angle 0 eq angle 180 eq or
+ {window_wd} {window_ht} ifelse magnification div
+ wid sub sub
+ psv_unit div def
+ } if
+ vpos 0 eq {
+ /orig_y lly psv_unit div def
+ } if
+ vpos 1 eq {
+ /orig_y
+ lly
+ angle 0 eq angle 180 eq or
+ {window_ht} {window_wd} ifelse magnification div
+ hei sub sub
+ psv_unit div def
+ } if
+ } {/orig_x 0 def /orig_y 0 def} ifelse
+ vf_unset
+} def
+
+/multi_wd {%
+ bb_wd multi_x mul multi_dist psv_unit mul multi_x 1 sub mul add} def
+
+/multi_ht {%
+ bb_ht multi_y mul multi_dist psv_unit mul multi_y 1 sub mul add} def
+
+/i0 {save_state
+ /angle 0 def /hflip false def /vflip false def
+ /orig_x 0 def /orig_y 0 def
+ /magnification 1 def
+ default_gg
+ run_file} def
+/i {save_state
+ /angle 0 def /hflip false def /vflip false def
+ /magnification 1 def
+ default_gg
+ dl_x dl_y multi_wd multi_ht center_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+/w {save_state
+ /magnification 1 def
+ dl_x dl_y multi_wd multi_ht center_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+/wbb {save_state
+ /orig_x dl_x psv_unit div def /orig_y dl_y psv_unit div def
+ /magnification
+ angle 0 eq angle 180 eq or {window_wd} {window_ht} ifelse
+ multi_wd
+ dup 0 ne {div} {pop magnification} ifelse
+ angle 0 eq angle 180 eq or {window_ht} {window_wd} ifelse
+ multi_ht
+ dup 0 ne {div} {pop magnification} ifelse
+ minimum def
+ dl_x dl_y multi_wd multi_ht center_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+/wwd {save_state
+ /orig_x dl_x psv_unit div def
+ /old_magnification magnification def
+ /magnification
+ angle 0 eq angle 180 eq or {window_wd} {window_ht} ifelse
+ multi_wd
+ dup 0 ne {div} {pop magnification} ifelse
+ def
+ /mzoom_factor magnification old_magnification div def
+ /orig_y
+ orig_y window_ht dup mzoom_factor div sub
+ 0.5 mul old_magnification div psv_unit div add
+ angle 90 eq angle 270 eq or {
+ window_wd window_ht sub 0.5 mul
+ 1 mzoom_factor sub mul
+ magnification div
+ psv_unit div sub
+ } if
+ def
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+/wht {save_state
+ /orig_y dl_y psv_unit div def
+ /old_magnification magnification def
+ /magnification
+ angle 0 eq angle 180 eq or {window_ht} {window_wd} ifelse
+ multi_ht
+ dup 0 ne {div} {pop magnification} ifelse
+ def
+ /mzoom_factor magnification old_magnification div def
+ /orig_x orig_x
+ window_wd dup mzoom_factor div sub
+ 0.5 mul old_magnification div psv_unit div add
+ angle 90 eq angle 270 eq or {
+ window_wd window_ht sub 0.5 mul
+ 1 mzoom_factor sub mul
+ magnification div
+ psv_unit div add
+ } if
+ def
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+/cbb {save_state
+ dl_x dl_y multi_wd multi_ht center_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/ldbb {save_state
+ dl_x dl_y multi_wd multi_ht 0 0 pos_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/lobb {save_state
+ dl_x dl_y multi_wd multi_ht 0 0.5 pos_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/lubb {save_state
+ dl_x dl_y multi_wd multi_ht 0 1 pos_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/rdbb {save_state
+ dl_x dl_y multi_wd multi_ht 1 0 pos_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/robb {save_state
+ dl_x dl_y multi_wd multi_ht 1 0.5 pos_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/rubb {save_state
+ dl_x dl_y multi_wd multi_ht 1 1 pos_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/odbb {save_state
+ dl_x dl_y multi_wd multi_ht .5 0 pos_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/oubb {save_state
+ dl_x dl_y multi_wd multi_ht .5 1 pos_rect
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/g {/g overlay_drawov save
+ /grid_factor 1 def
+ /orig_x 0 def /orig_y 0 def
+ angle 0 eq angle 180 eq or
+ {window_wd grid_wd div magnification div
+ window_ht grid_ht div magnification div do_grid
+ window_wd grid_wd div magnification div
+ window_ht grid_ht div magnification div do_numbers}
+ {window_ht grid_ht div magnification div
+ window_wd grid_wd div magnification div do_grid
+ window_ht grid_ht div magnification div
+ window_wd grid_wd div magnification div do_numbers} ifelse
+ restore
+ ( Grid unit: 0.1 screen size) psv_print
+} def
+/fr /do_frame LD
+/pg {%/pg overlay_drawov
+ vf_set {sh_page} multi_run vf_unset} def
+/bb {%/bb overlay_drawov
+ vf_set {sh_bb} multi_run vf_unset} def
+/m {count 0 eq {
+ psv_init_print
+ ( magnification=) psv_print magnification val_str cvs psv_print
+ ( zoom_factor=) psv_print zoom_factor val_str cvs psv_print
+ psv_flush
+ }{
+ dup 0 ne {/zoom_factor XD} {pop} ifelse
+ } ifelse} def
+/s {count 0 eq {
+ psv_init_print
+ ( shift=) psv_print shift val_str cvs psv_print
+ psv_flush}{/shift XD} ifelse
+} def
+/gc {/ht_conv {} def /wd_conv {} def /local false def} def
+/lc {/ht_conv /ht_rel_conv LD /wd_conv /wd_rel_conv LD /local true def} def
+
+/zoom_in {save_state
+ /orig_x orig_x
+ window_wd dup zoom_factor div sub
+ 0.5 mul magnification div psv_unit div add
+ angle 90 eq angle 270 eq or {
+ window_wd window_ht sub 0.5 mul
+ 1 zoom_factor sub mul
+ magnification div zoom_factor div
+ psv_unit div add
+ } if
+ def
+ /orig_y
+ orig_y window_ht dup zoom_factor div sub
+ 0.5 mul magnification div psv_unit div add
+ angle 90 eq angle 270 eq or {
+ window_wd window_ht sub 0.5 mul
+ 1 zoom_factor sub mul
+ magnification div zoom_factor div
+ psv_unit div sub
+ } if
+ def
+% count 0 eq {0 0} {count 1 eq {dup} if} ifelse
+ clear 0 0
+ ht_conv /new_y0 XD
+ wd_conv /new_x0 XD
+ /magnification magnification zoom_factor mul def
+ local {/orig_x orig_x new_x0 add def /orig_y orig_y new_y0 add def}
+ {/orig_x new_x0 def /orig_y new_y0 def} ifelse
+} def
+
+/vu {zoom_in v_tape {vertical_tape} {run_file} ifelse} def
+/v /vu LD
+
+/zoom_out {save_state
+ /orig_x orig_x
+ window_wd dup zoom_factor mul sub
+ 0.5 mul magnification div psv_unit div add
+ angle 90 eq angle 270 eq or {
+ window_wd window_ht sub 0.5 mul
+ 1 1 zoom_factor div sub mul
+ magnification div zoom_factor mul
+ psv_unit div add
+ } if
+ def
+ /orig_y orig_y
+ window_ht dup zoom_factor mul sub
+ 0.5 mul magnification div psv_unit div add
+ angle 90 eq angle 270 eq or {
+ window_wd window_ht sub 0.5 mul
+ 1 1 zoom_factor div sub mul
+ magnification div zoom_factor mul
+ psv_unit div sub
+ } if
+ def
+% count 0 eq {0 0} {count 1 eq {dup} if} ifelse
+ clear 0 0
+ ht_conv /new_y0 XD
+ wd_conv /new_x0 XD
+ /magnification magnification zoom_factor div def
+ local {/orig_x orig_x new_x0 add def /orig_y orig_y new_y0 add def}
+ {/orig_x new_x0 def /orig_y new_y0 def} ifelse
+} def
+
+/vd {zoom_out v_tape {vertical_tape} {run_file} ifelse} def
+
+/rot {save_state
+ 1 check_integer /angle_mul exch round cvi def
+ /angle_mul angle_mul 4 mod dup 0 lt {4 add} if def
+ angle_mul 0 ne {
+ angle_mul 1 eq angle_mul 3 eq or {
+ /orig_x orig_x
+ window_wd window_ht sub 0.5 mul
+ magnification div psv_unit div
+ angle 90 eq angle 270 eq or {sub} {add} ifelse
+ def
+ /orig_y orig_y
+ window_wd window_ht sub 0.5 mul
+ magnification div psv_unit div
+ angle 90 eq angle 270 eq or {add} {sub} ifelse
+ def
+ } if
+ /angle angle 90 angle_mul mul add def
+ angle abs 360 ge {/angle angle 360 sub def} if
+ angle 0 lt {/angle 360 angle add def} if
+ } if
+} def
+
+/ro {rot v_tape {vertical_tape} {run_file} ifelse} def
+
+/hf {save_state /hflip hflip not def run_file} def
+/vf {save_state /vflip vflip not def run_file} def
+
+/l {save_state shift check_number
+ wd_conv
+ angle 0 eq {/orig_x exch hflip not {neg} if orig_x add def} if
+ angle 90 eq {/orig_y exch hflip {neg} if orig_y add def} if
+ angle 180 eq {/orig_x exch hflip {neg} if orig_x add def} if
+ angle 270 eq {/orig_y exch hflip not {neg} if orig_y add def} if
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/r {save_state shift check_number
+ wd_conv
+ angle 0 eq {/orig_x exch hflip {neg} if orig_x add def} if
+ angle 90 eq {/orig_y exch hflip not {neg} if orig_y add def} if
+ angle 180 eq {/orig_x exch hflip not {neg} if orig_x add def} if
+ angle 270 eq {/orig_y exch hflip {neg} if orig_y add def} if
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/u {save_state shift check_number
+ ht_conv
+ angle 0 eq {/orig_y exch vflip {neg} if orig_y add def} if
+ angle 90 eq {/orig_x exch vflip {neg} if orig_x add def} if
+ angle 180 eq {/orig_y exch vflip not {neg} if orig_y add def} if
+ angle 270 eq {/orig_x exch vflip not {neg} if orig_x add def} if
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/d {save_state shift check_number
+ ht_conv
+ angle 0 eq {/orig_y exch vflip not {neg} if orig_y add def} if
+ angle 90 eq {/orig_x exch vflip not {neg} if orig_x add def} if
+ angle 180 eq {/orig_y exch vflip {neg} if orig_y add def} if
+ angle 270 eq {/orig_x exch vflip {neg} if orig_x add def} if
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/mul_l {shift check_number shift_factor mul l} def
+/mul_r {shift check_number shift_factor mul r} def
+/mul_u {shift check_number shift_factor mul u} def
+/mul_d {shift check_number shift_factor mul d} def
+
+%/go {save_state
+% count 0 eq {0 0} if count 1 eq {dup} if
+% /orig_y exch grid_y_update sub def
+% /orig_x exch grid_x_update sub def
+% v_tape {vertical_tape} {run_file} ifelse
+%} def
+
+/go {save_state
+ count 0 eq {
+ /orig_x orig_x
+ window_wd dup zoom_factor div sub
+ 0.5 mul magnification div psv_unit div add
+ angle 90 eq angle 270 eq or {
+ window_wd window_ht sub 0.5 mul
+ 1 zoom_factor sub mul
+ magnification div zoom_factor div
+ psv_unit div add
+ } if
+ def
+ /orig_y
+ orig_y window_ht dup zoom_factor div sub
+ 0.5 mul magnification div psv_unit div add
+ angle 90 eq angle 270 eq or {
+ window_wd window_ht sub 0.5 mul
+ 1 zoom_factor sub mul
+ magnification div zoom_factor div
+ psv_unit div sub
+ } if
+ def
+ 0 0} {count 1 eq {dup} if} ifelse
+ ht_conv /new_y0 XD
+ wd_conv /new_x0 XD
+ local {/orig_x orig_x new_x0 add def /orig_y orig_y new_y0 add def}
+ {/orig_x new_x0 def /orig_y new_y0 def} ifelse
+ v_tape {vertical_tape} {run_file} ifelse
+} def
+
+/c {run_file} def
+
+/pr {count 0 eq {
+ user_printer begin /current_output /printer_output load store end
+ } {/current_output XD} ifelse
+ fr flushpage
+ %
+ /screen_dev currentdevice def
+ /print_save save def
+% /copypage /ori_copypage LD
+% /showpage /ori_showpage LD
+ /showpage {1 .endpage} def
+ /copypage {1 .endpage} def
+ /in_print true def
+ %
+ user_printer begin
+% printer_name selectdevice
+ mark /OutputFile current_output
+ /printer_xy_res where {/printer_xy_res get /HWResolution exch} if
+ /Margins [printer_x_marg printer_y_marg]
+ /.HWMargins [0.0 0.0 0.0 0.0]
+ /PageSize [page_W page_H page_W page_H gt {exch} if]
+% currentdevice putdeviceprops setdevice
+ printer_name finddevice putdeviceprops
+ printer_freq printer_angle {printer_spot} setscreen
+ end
+ dup getdeviceprops >> /OutputFile get () eq {pop} {
+ setdevice
+% currentdevice getdeviceprops ] pstack
+ page_W page_H gt {1 rot page_W page_H div /zoom_factor XD zoom_in} if
+ get_screen_&_set_pos
+ user_printer begin printer_x_corr printer_y_corr matrix translate end
+ default_matrix matrix concatmatrix /default_matrix XD
+ run_file
+ } ifelse
+ print_save restore
+ screen_dev setdevice run_file
+} def
+
+/prs {/user_printer XD} def
+/e {clear view_dict /clear_dict_stack get cvx exec
+% view_dict /view_save known {view_dict /view_save get restore} if
+ } def
+/write_str {restart_file exch writestring} def
+/write_num {val_str cvs write_str} def
+/write_restart {count 0 eq {/current_restart restart_name def}
+ {/current_restart XD} ifelse /restart_file current_restart (w) file def
+ curr_page write_num ( /curr_page XD\15\12) write_str
+ angle write_num ( /angle XD\15\12) write_str
+ hflip {(true)}{(false)} ifelse write_str ( /hflip XD\15\12) write_str
+ vflip {(true)}{(false)} ifelse write_str ( /vflip XD\15\12) write_str
+ magnification write_num ( /magnification XD\15\12) write_str
+ orig_x write_num ( /orig_x XD\15\12) write_str
+ orig_y write_num ( /orig_y XD\15\12) write_str
+ multi_x write_num ( /multi_x XD\15\12) write_str
+ multi_y write_num ( /multi_y XD\15\12) write_str
+ multi_z write_num ( /multi_z XD\15\12) write_str
+ multi_dist write_num ( /multi_dist XD\15\12) write_str
+ multi_cycle {(true)}{(false)} ifelse write_str ( /multi_cycle XD\15\12) write_str
+ checked_permut /null eq {
+ ([ ) write_str multi_permut {write_num ( ) write_str} forall (] /multi_permut XD\15\12) write_str
+ } {
+ (/) write_str checked_permut val_str cvs write_str ( /checked_permut XD\15\12) write_str
+ } ifelse
+ v_tape {(true)}{(false)} ifelse write_str ( /v_tape XD\15\12) write_str
+ v_tape {
+ vf_curr_page write_num ( /vf_curr_page XD\15\12) write_str
+ vf_shift write_num ( /vf_shift XD\15\12) write_str
+ } if
+ zoom_factor write_num ( /zoom_factor XD\15\12) write_str
+ shift write_num ( /shift XD\15\12) write_str
+ psv_unit write_num ( ) write_str psv_unit_factor write_num ( \() write_str psv_unit_name write_str
+ (\) \() write_str psv_unit_name_secondary write_str (\) set_psv_unit\15\12) write_str
+ restart_file flushfile restart_file closefile} def
+/q {write_restart quit} def
+
+/ver {
+ psv_init_print PS_VIEW psv_print psv_flush} def
+/rev {
+ psv_init_print ( Ghostscript revision: ) psv_print
+ revision 100 div val_str cvs psv_print psv_flush} def
+
+%%%%%%%%%%%%%%%
+
+/undo_max 100 def
+
+<<
+ /sta undo_max array
+ /cnt -1
+>> /undo_dict XD
+
+<<
+ /sta undo_max array
+ /cnt -1
+>> /redo_dict XD
+
+/put_state {% <array> <dict> put_state --
+ begin
+ /cnt cnt 1 add def
+ sta cnt undo_max mod 3 -1 roll put
+ end
+} def
+
+/pop_state {% <dict> pop_state <array> true
+ % false
+ begin
+ cnt 0 ge {
+ sta cnt undo_max mod get
+ sta cnt undo_max mod null put
+ dup type cvlit /arraytype eq {true} {pop false} ifelse
+ /cnt cnt 1 sub def
+ } {false} ifelse
+ end
+} def
+
+/prepare_state {% -- prepare_state <array>
+ [curr_page angle hflip vflip magnification orig_x orig_y
+ background multi_x multi_y multi_z multi_dist multi_cycle
+ multi_permut checked_permut
+ v_tape vf_shift vf_curr_page]} def
+
+/save_state {% -- save_state --
+ prepare_state undo_dict put_state
+ view_dict /un_re_toggle true put
+} def
+
+/restore_state {% <array> restore_state --
+ aload pop
+ /vf_curr_page XD /vf_shift XD /v_tape XD
+ /checked_permut XD /multi_permut XD
+ /multi_cycle XD /multi_dist XD /multi_z XD /multi_y XD /multi_x XD
+ /background XD /orig_y XD /orig_x XD
+ /magnification XD /vflip XD /hflip XD
+ /angle XD /curr_page XD
+} def
+
+/un {count 0 eq {1} {dup 0 le {pop 1} if} ifelse
+ round cvi 1 1 3 -1 roll {pop undo_dict pop_state {
+ prepare_state redo_dict put_state
+ restore_state
+ } if} for
+ run_file
+} def
+
+/re {count 0 eq {1} {dup 0 le {pop 1} if} ifelse
+ round cvi 1 1 3 -1 roll {pop redo_dict pop_state {
+ prepare_state undo_dict put_state
+ restore_state
+ } if} for
+ run_file
+} def
+
+/undo_redo {
+ un_re_toggle {un} {re} ifelse
+ /un_re_toggle un_re_toggle not def
+} def
+
+%%%%%%%%%%%%%%%
+
+/wr /write_restart LD
+
+/ori_leave {
+ /CAUSE /LEAVE def
+ flush
+ (!PSV_MESSAGEBOX: 3 {LEAVE: save restart?}\n) print flush
+} def
+/leave /ori_leave LD
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+/get_info {flush
+ (!PSV_INFO: \n) print flush
+} def
+
+/get_config {flush
+ (!PSV_CONFIG: G {PSV_Config}{CIE}{) print
+ ciecolor {(1)}{(0)} ifelse print
+ (}\n) print flush
+ (!PSV_CONFIG: G {PSV_Config}{Alpha}{) print
+ alphabits val_str cvs print
+ (}\n) print flush
+ (!PSV_CONFIG: G {PSV_Parameters}{language}{}\n) print flush
+} def
+
+/show_console {flush
+ (!PSV_CONSOLE: S\n) print flush
+} def
+
+
+/make_menu {flush
+ (&File) (FILE) (MAIN) append_submenu
+ (&Open\tCtrl+O) (OPEN) (FILE) append_item
+ (Re&fresh\tCtrl+R) (FILE_REFRESH) (FILE) append_item
+ (&Restart) (RESTART) (FILE) append_submenu
+ (&Save\tF2) (SAVE_RESTART) (RESTART) append_item
+ (Save &as) (SAVE_AS_RESTART) (RESTART) append_item
+ (&Load\tF3) (LOAD_RESTART) (RESTART) append_item
+ (Load &from) (LOAD_FROM_RESTART) (RESTART) append_item
+ (&Print) (PRINT) (FILE) append_item
+ (&Quit\tEsc, F4) (QUIT) (FILE) append_item
+ (&Edit) (EDIT) (MAIN) append_submenu
+ (&Undo\tDel, NumpadAsterisk) (UNDO) (EDIT) append_item
+ (&Redo\tIns, Shift+NumpadAsterisk) (REDO) (EDIT) append_item
+ (Undo-redo &toggle\tCtrl+Z) (UNDO_REDO_TOGGLE) (EDIT) append_item
+ (Re&draw) (REDRAW) (EDIT) append_item
+ (&Copy image) (COPY_IMAGE) (EDIT) append_item (COPY_IMAGE) gray_item
+ (&View) (TRANSFORM) (MAIN) append_submenu
+ (Zoom &in\tGreater, Ctrl+NumpadPlus) (ZOOM_IN) (TRANSFORM) append_item
+ (Zoom &out\tLess, Ctrl+NumpadMinus) (ZOOM_OUT) (TRANSFORM) append_item
+ (Fit to &BB\tF12) (FIT_BB) (TRANSFORM) append_item
+ (Fit to &width\tCtrl+F12) (FIT_WD) (TRANSFORM) append_item
+ (Fit to &height\tShift+F12) (FIT_HT) (TRANSFORM) append_item
+ (&Move) (KBD_MOVE) (TRANSFORM) append_submenu
+ (&Left\tLeft) (LEFT_KBD_MOVE) (KBD_MOVE) append_item
+ (&Right\tRight) (RIGHT_KBD_MOVE) (KBD_MOVE) append_item
+ (&Up\tUp) (UP_KBD_MOVE) (KBD_MOVE) append_item
+ (&Down\tDown) (DOWN_KBD_MOVE) (KBD_MOVE) append_item
+ (&Align) (ALIGN) (TRANSFORM) append_submenu
+ (&Left edge\tCtrl+4) (LEFT_ALIGN) (ALIGN) append_item
+ (&Right edge\tCtrl+6) (RIGHT_ALIGN) (ALIGN) append_item
+ (&Top edge\tCtrl+8) (UP_ALIGN) (ALIGN) append_item
+ (&Bottom edge\tCtrl+2) (DOWN_ALIGN) (ALIGN) append_item
+ (Left &upper corner\tCtrl+7) (LEFT_UP_ALIGN) (ALIGN) append_item
+ (Right upp&er corner\tCtrl+9) (RIGHT_UP_ALIGN) (ALIGN) append_item
+ (Le&ft bottom corner\tCtrl+1) (LEFT_DOWN_ALIGN) (ALIGN) append_item
+ (Right bottom &corner\tCtrl+3) (RIGHT_DOWN_ALIGN) (ALIGN) append_item
+ (&Rotate) (ROTATE) (TRANSFORM) append_submenu
+ (90 &clockwise) (ROTATE_CLOCKWISE) (ROTATE) append_item
+ (90 &anticlockwise\tCtrl+Tab) (ROTATE_ANTICLOCKWISE) (ROTATE) append_item
+ (180 \(&upsidedown\)) (ROTATE_UPSIDEDOWN) (ROTATE) append_item
+ (&Flip) (FLIP) (TRANSFORM) append_submenu
+ (&Horizontal) (FLIP_HORIZONTAL) (FLIP) append_item
+ (&Vertical) (FLIP_VERTICAL) (FLIP) append_item
+ (&Center\tCtrl+F11) (CENTER) (TRANSFORM) append_item
+ (Reset &zoom && position\tF11) (RESET_ZOOM_&_POSITION) (TRANSFORM) append_item
+ (Reset &transformations\tShift+F11) (RESET_TRANSFORMATIONS) (TRANSFORM) append_item
+ (&Pages) (PAGES) (MAIN) append_submenu
+ (&Next\tPgDn) (NEXT_PAGE) (PAGES) append_item
+ (&Previous\tPgUp) (PREVIOUS_PAGE) (PAGES) append_item
+ (&Specified) (SPECIFIED_PAGE) (PAGES) append_item
+ (&First\tHome) (FIRST_PAGE) (PAGES) append_item
+ (&Last\tEnd) (LAST_PAGE) (PAGES) append_item
+ (&Grids && Frames) (GRIDS) (MAIN) append_submenu
+ (&Bounding Box\tF5) (BB_FRAME) (GRIDS) append_item
+ (&Page\tF6) (PAGE_FRAME) (GRIDS) append_item
+ (&Printer\tF9) (PRINTER_FRAME) (GRIDS) append_item
+ (&Unit grid\tF7) (UNIT_GRID) (GRIDS) append_item
+ (&Fine grid\tF8) (FINE_GRID) (GRIDS) append_item
+ (&Window grid) (WINDOW_GRID) (GRIDS) append_item
+ (&Clear grids\tCtrl+F7) (CLEAR_GRID) (GRIDS) append_item
+ (&Measure\tCtrl+M) (MEASURE) (GRIDS) append_item
+ (&Options) (OPTIONS) (MAIN) append_submenu
+ (Set &unit) (SET_psv_unit) (OPTIONS) append_submenu
+ (&cm) (CM_SET_psv_unit) (SET_psv_unit) append_check_item
+ (&mm) (MM_SET_psv_unit) (SET_psv_unit) append_check_item
+ (&in) (IN_SET_psv_unit) (SET_psv_unit) append_check_item
+ (&pt) (PT_SET_psv_unit) (SET_psv_unit) append_check_item
+ (&dd) (DD_SET_psv_unit) (SET_psv_unit) append_check_item
+ (&bp) (BP_SET_psv_unit) (SET_psv_unit) append_check_item
+ (Set &media) (SET_MEDIA) (OPTIONS) append_submenu
+ (A&4) (A4_SET_MEDIA) (SET_MEDIA) append_check_item
+ (A4 &Landscape) (A4L_SET_MEDIA) (SET_MEDIA) append_check_item
+ (A&3) (A3_SET_MEDIA) (SET_MEDIA) append_check_item
+ (A3 Land&scape) (A3L_SET_MEDIA) (SET_MEDIA) append_check_item
+ (&BoundingBox) (BB_SET_MEDIA) (SET_MEDIA) append_check_item
+ (Set multi&page) (SET_MULTIPAGE) (OPTIONS) append_submenu
+ (&One page) (ONE_PAGE) (SET_MULTIPAGE) append_item
+ (&2 x 1) (TWO_ONE_PAGE) (SET_MULTIPAGE) append_item
+ (2 x 1 &reverse) (TWO_ONE_PAGE_REVERSE) (SET_MULTIPAGE) append_item
+ (&1 x 2) (ONE_TWO_PAGE) (SET_MULTIPAGE) append_item
+ (1 x 2 re&verse) (ONE_TWO_PAGE_REVERSE) (SET_MULTIPAGE) append_item
+ (m x &n) (M_N_PAGE) (SET_MULTIPAGE) append_item
+ (&Vertical tape) (VERTICAL_TAPE) (SET_MULTIPAGE) append_item
+ (&Bundle) (MULTIPAGE_BUNDLE) (SET_MULTIPAGE) append_submenu
+ (Page &up\tShift+PgUp) (MULTIPAGE_BUNDLE_UP) (MULTIPAGE_BUNDLE) append_item
+ (Page &down\tShift+PgDn) (MULTIPAGE_BUNDLE_DOWN) (MULTIPAGE_BUNDLE) append_item
+ (&Home\tShift+Home) (MULTIPAGE_BUNDLE_HOME) (MULTIPAGE_BUNDLE) append_item
+ (&End\tShift+End) (MULTIPAGE_BUNDLE_END) (MULTIPAGE_BUNDLE) append_item
+ (&Permutation) (MULTIPAGE_PERMUT) (SET_MULTIPAGE) append_item
+ multi_cycle {(&Cycle off) (CYCLE_TOGGLE) (SET_MULTIPAGE) append_item}
+ {(&Cycle on) (CYCLE_TOGGLE) (SET_MULTIPAGE) append_item} ifelse
+ (&Distance) (MULTIPAGE_DIST) (SET_MULTIPAGE) append_item
+ (Set &zoom factor) (SET_ZOOM_FACTOR) (OPTIONS) append_item
+ (Set &shift length) (SET_SHIFT_LENGTH) (OPTIONS) append_item
+ background {(&Background off) (BACKGROUND_TOGGLE) (OPTIONS) append_item}
+ {(&Background on) (BACKGROUND_TOGGLE) (OPTIONS) append_item} ifelse
+ ciecolor {(CI&E Color off) (CIECOLOR_TOGGLE) (OPTIONS) append_item}
+ {(CI&E Color on) (CIECOLOR_TOGGLE) (OPTIONS) append_item} ifelse
+ alphabits 1 gt {(&Antialiasing off) (ALPHABITS_TOGGLE) (OPTIONS) append_item}
+ {(&Antialiasing on) (ALPHABITS_TOGGLE) (OPTIONS) append_item} ifelse
+ (&Configuration) (CONFIGURATION) (OPTIONS) append_submenu
+ (Set &paths) (CONF_PATHS) (CONFIGURATION) append_submenu
+ (Set GS_&DLL path) (CONF_PATH_DLL) (CONF_PATHS) append_item
+ (Set GS_&LIB paths) (CONF_PATH_LIB) (CONF_PATHS) append_item
+ (Set &FONTPATH paths) (CONF_PATH_FONT) (CONF_PATHS) append_item
+ (Set &PSV_LIB path) (CONF_PATH_PSVL) (CONF_PATHS) append_item
+ (Set &commandline) (CONF_COMMANDLINE) (CONFIGURATION) append_item
+ (Set &graphics parameters) (CONF_GRAPHICS) (CONFIGURATION) append_item
+ (Set &language) (CONF_LANGUAGE) (CONFIGURATION) append_item
+ (&Show PS console) (SHOW_CONSOLE) (OPTIONS) append_item
+ (&Help) (HELP) (MAIN) append_submenu
+ (&Usage\tF1) (USAGE) (HELP) append_item
+ (&About) (ABOUT) (HELP) append_item
+ (&Close help) (CLOSE_HELP) (HELP) append_item (CLOSE_HELP) gray_item
+% (&Show console) (SHOW_CONSOLE) (HELP) append_item
+ show_menu
+ /menu_on true def
+} def
+
+/append_item {
+ flush
+ (!PSV_MENU: I {) print
+ print
+ (}{) print
+ print
+ (}{) print
+ print
+ (}\n) print flush
+} def
+
+/append_check_item {
+ flush
+ (!PSV_MENU: IC {) print
+ print
+ (}{) print
+ print
+ (}{) print
+ print
+ (}\n) print flush
+} def
+
+/append_submenu {
+ flush
+ (!PSV_MENU: S {) print
+ print
+ (}{) print
+ print
+ (}{) print
+ print
+ (}\n) print flush
+} def
+
+/change_item {
+ flush
+ (!PSV_MENU: C {) print
+ print
+ (}{) print
+ print
+ (}\n) print flush
+} def
+
+/gray_item {
+ flush
+ (!PSV_MENU: UG {) print
+ print
+ (}\n) print flush
+} def
+
+/normal_item {
+ flush
+ (!PSV_MENU: UN {) print
+ print
+ (}\n) print flush
+} def
+
+/check_item {
+ flush
+ (!PSV_MENU: UC {) print
+ print
+ (}\n) print flush
+} def
+
+/show_menu {
+ flush
+ (!PSV_MENU: DT {}\n) print flush
+} def
+
+/refresh_menu {
+ flush
+ (!PSV_MENU: DR {}\n) print flush
+} def
+
+/OPEN_dialog {
+ flush
+ (!PSV_DIALOG: O {) print
+ (All files \(*.*\)|*.*|) print
+ (PostScript \(*.ps;*.prn\)|*.ps;*.prn|) print
+ (Encapsulated PostScript \(*.eps;*.ai;*.1*\)|*.eps;*.ai;*.1*|) print
+ (Portable Document Format \(*.pdf\)|*.pdf|) print
+ (|}{|}{}{Open input file}\n) print flush
+} def
+
+/FINDDLL_dialog {
+ flush
+ (!PSV_DIALOG: L {) print
+ (Dynamic libraries \(*.so;*.dll\)|*.so;*.dll|) print
+ (All files \(*.*\)|*.*||}{) print
+ /INFO_dict where {pop
+ INFO_dict /GSDLL known {INFO_dict /GSDLL get print} if
+ } if
+ (}{}{Find Ghostscript library dll/so}\n) print flush
+} def
+
+/LOAD_FROM_RESTART_dialog {
+ flush
+ (!PSV_DIALOG: O {All files \(*.*\)|*.*||}{) print
+ prev_restart print
+ (}{}{Load restart file}\n) print flush
+} def
+
+/SAVE_AS_RESTART_dialog {
+ flush
+ (!PSV_DIALOG: S {All files \(*.*\)|*.*||}{) print
+ prev_restart print
+ (}{ps}{Save restart file}\n) print flush
+} def
+
+/SPECIFIED_PAGE_dlgbox {
+ flush
+ (!PSV_DLGBOX: I {100,50}{Go to specified page}\n) print flush
+ (!PSV_DLGBOX: E {N) print
+ curr_page val_str cvs print
+ (}{SPEC_PAGE}{24,9,25,11}{}\n) print flush
+ (!PSV_DLGBOX: T {R}{COMMENT}{3,11,18,11}{Page}\n) print flush
+ (!PSV_DLGBOX: T {L}{COMMENT}{53,11,10,11}{of }\n) print flush
+ (!PSV_DLGBOX: T {D}{COMMENT}{64,9,25,11}{) print
+ page_count val_str cvs print
+ (}\n) print flush
+ (!PSV_DLGBOX: B {O}{OK}{10,30,35,12}{OK}\n) print flush
+ (!PSV_DLGBOX: B {C}{CANCEL}{55,30,35,12}{Cancel}\n) print flush
+ (!PSV_DLGBOX: S {}\n) print flush
+} def
+
+/MULTIPAGE_DIST_dlgbox {
+ flush
+ (!PSV_DLGBOX: I {140,50}{Set distance between pages}\n) print flush
+ (!PSV_DLGBOX: E {N) print
+ multi_dist psv_normal_print_rounded
+ (}{MULTI_DIST}{55,9,30,11}{}\n) print flush
+ (!PSV_DLGBOX: T {R}{COMMENT}{3,11,48,11}{Distance =}\n) print flush
+ (!PSV_DLGBOX: T {L}{COMMENT}{90,11,25,11}{) print
+ psv_unit_name print
+ (}\n) print flush
+ (!PSV_DLGBOX: B {O}{OK}{25,30,35,12}{OK}\n) print flush
+ (!PSV_DLGBOX: B {C}{CANCEL}{80,30,35,12}{Cancel}\n) print flush
+ (!PSV_DLGBOX: S {}\n) print flush
+} def
+
+/SET_SHIFT_LENGTH_dlgbox {
+ flush
+ (!PSV_DLGBOX: I {140,50}{Set shift length}\n) print flush
+ (!PSV_DLGBOX: E {N) print
+ shift psv_normal_print_rounded
+ (}{SHIFT_LENGTH}{40,9,30,11}{}\n) print flush
+ (!PSV_DLGBOX: T {R}{COMMENT}{3,11,33,11}{Shift =}\n) print flush
+ (!PSV_DLGBOX: T {L}{COMMENT}{73,11,100,11}{x 0.1 screen size}\n) print flush
+ (!PSV_DLGBOX: B {O}{OK}{25,30,35,12}{OK}\n) print flush
+ (!PSV_DLGBOX: B {C}{CANCEL}{80,30,35,12}{Cancel}\n) print flush
+ (!PSV_DLGBOX: S {}\n) print flush
+} def
+
+/SET_ZOOM_FACTOR_dlgbox {
+ flush
+ (!PSV_DLGBOX: I {140,50}{Set zoom factor}\n) print flush
+ (!PSV_DLGBOX: E {N) print
+ zoom_factor psv_normal_print_rounded
+ (}{ZOOM_FACTOR}{75,9,30,11}{}\n) print flush
+ (!PSV_DLGBOX: T {R}{COMMENT}{23,11,48,11}{Zoom factor =}\n) print flush
+ (!PSV_DLGBOX: T {L}{COMMENT}{110,11,25,11}{}\n) print flush
+ (!PSV_DLGBOX: B {O}{OK}{25,30,35,12}{OK}\n) print flush
+ (!PSV_DLGBOX: B {C}{CANCEL}{80,30,35,12}{Cancel}\n) print flush
+ (!PSV_DLGBOX: S {}\n) print flush
+} def
+
+/M_N_PAGE_dlgbox {
+ flush
+ (!PSV_DLGBOX: I {140,50}{Set multipage view}\n) print flush
+ (!PSV_DLGBOX: E {N) print
+ multi_x val_str cvs print
+ (}{M_PAGE}{40,9,25,11}{}\n) print flush
+ (!PSV_DLGBOX: E {N) print
+ multi_y val_str cvs print
+ (}{N_PAGE}{75,9,25,11}{}\n) print flush
+ (!PSV_DLGBOX: T {R}{COMMENT}{1,11,35,11}{Horizontal}\n) print flush
+ (!PSV_DLGBOX: T {L}{COMMENT}{68,11,5,11}{x}\n) print flush
+ (!PSV_DLGBOX: T {L}{COMMENT}{104,11,35,11}{Vertical}\n) print flush
+ (!PSV_DLGBOX: B {O}{OK}{30,30,35,12}{OK}\n) print flush
+ (!PSV_DLGBOX: B {C}{CANCEL}{75,30,35,12}{Cancel}\n) print flush
+ (!PSV_DLGBOX: S {}\n) print flush
+} def
+
+/CONF_GRAPICS_dlgbox {
+ flush
+ (!PSV_DLGBOX: I {140,60}{Configure graphics parameters}\n) print flush
+ (!PSV_DLGBOX: T {C}{CIETEXT}{15,5,50,8}{CIE colors}\n) print flush
+ (!PSV_DLGBOX: L {N0|Current \() print
+ ciecolor {(on)}{(off)} ifelse print
+ (\)|On|Off|}{CIELIST}{15,15,50,25}\n) print flush
+ (!PSV_DLGBOX: T {C}{ALPHATEXT}{75,5,50,8}{Antialiasing}\n) print flush
+ (!PSV_DLGBOX: L {N0|Current \() print
+ alphabits val_str cvs print
+ (\)|Off (1)|On (4)|Medium (2)|}{ALPHALIST}{75,15,50,25}\n) print flush
+ (!PSV_DLGBOX: B {O}{OK}{25,45,35,12}{Save}\n) print flush
+ (!PSV_DLGBOX: B {C}{CANCEL}{80,45,35,12}{Cancel}\n) print flush
+ (!PSV_DLGBOX: S {}\n) print flush
+} def
+
+/CONF_LANGUAGE_dlgbox {
+ flush
+ (!PSV_DLGBOX: I {140,50}{Choose language}\n) print flush
+ (!PSV_DLGBOX: T {R}{ALPHATEXT}{5,13,30,8}{Language}\n) print flush
+ (!PSV_DLGBOX: L {N) print
+ llanguage () eq {(0) print} if
+ llanguage (en) eq {(1) print} if
+ llanguage (pl) eq {(2) print} if
+ (|System default|English \(en\)|Polish \(pl\)|) print
+ (}{LANGUAGELIST}{40,5,65,20}\n) print flush
+ (!PSV_DLGBOX: T {C}{ALPHATEXT}{2,25,136,10}{Language will be changed after PS_View reset}\n) print flush
+ (!PSV_DLGBOX: B {O}{OK}{25,35,35,12}{OK}\n) print flush
+ (!PSV_DLGBOX: B {C}{CANCEL}{80,35,35,12}{Cancel}\n) print flush
+ (!PSV_DLGBOX: S {}\n) print flush
+} def
+
+/PERMUT_dlgbox {
+ flush
+ (!PSV_DLGBOX: I {166,95}{Set multipage permutation}\n) print flush
+ %
+ (!PSV_DLGBOX: K {S}{PERM1K}{5,16,10,10}{}\n) print flush
+ (!PSV_DLGBOX: T {D}{PERM1T}{18,10,20,20}{1 2\n3 4}\n) print flush
+ (!PSV_DLGBOX: K {R}{PERM2K}{45,16,10,10}{}\n) print flush
+ (!PSV_DLGBOX: T {D}{PERM2T}{58,10,20,20}{2 1\n4 3}\n) print flush
+ (!PSV_DLGBOX: K {R}{PERM3K}{85,16,10,10}{}\n) print flush
+ (!PSV_DLGBOX: T {D}{PERM3T}{98,10,20,20}{1 3\n2 4}\n) print flush
+ (!PSV_DLGBOX: K {R}{PERM4K}{125,16,10,10}{}\n) print flush
+ (!PSV_DLGBOX: T {D}{PERM4T}{138,10,20,20}{2 4\n1 3}\n) print flush
+ %
+ (!PSV_DLGBOX: K {R}{PERM5K}{5,46,10,10}{}\n) print flush
+ (!PSV_DLGBOX: T {D}{PERM5T}{18,40,20,20}{3 4\n1 2}\n) print flush
+ (!PSV_DLGBOX: K {R}{PERM6K}{45,46,10,10}{}\n) print flush
+ (!PSV_DLGBOX: T {D}{PERM6T}{58,40,20,20}{4 3\n2 1}\n) print flush
+ (!PSV_DLGBOX: K {R}{PERM7K}{85,46,10,10}{}\n) print flush
+ (!PSV_DLGBOX: T {D}{PERM7T}{98,40,20,20}{3 1\n4 2}\n) print flush
+ (!PSV_DLGBOX: K {R}{PERM8K}{125,46,10,10}{}\n) print flush
+ (!PSV_DLGBOX: T {D}{PERM8T}{138,40,20,20}{4 2\n3 1}\n) print flush
+ %
+ (!PSV_DLGBOX: B {O}{OK}{43,75,35,12}{OK}\n) print flush
+ (!PSV_DLGBOX: B {C}{CANCEL}{88,75,35,12}{Cancel}\n) print flush
+ checked_permut /null ne {
+ (!PSV_DLGBOX: U {C}{) print
+ checked_permut /PERM_1 eq {(PERM1K) print} if
+ checked_permut /PERM_2 eq {(PERM2K) print} if
+ checked_permut /PERM_3 eq {(PERM3K) print} if
+ checked_permut /PERM_4 eq {(PERM4K) print} if
+ checked_permut /PERM_5 eq {(PERM5K) print} if
+ checked_permut /PERM_6 eq {(PERM6K) print} if
+ checked_permut /PERM_7 eq {(PERM7K) print} if
+ checked_permut /PERM_8 eq {(PERM8K) print} if
+ (}\n) print flush
+ } if
+ (!PSV_DLGBOX: S {}\n) print flush
+} def
+
+/uncheck_SET_psv_unit {
+ (CM_SET_psv_unit) normal_item
+ (MM_SET_psv_unit) normal_item
+ (IN_SET_psv_unit) normal_item
+ (PT_SET_psv_unit) normal_item
+ (DD_SET_psv_unit) normal_item
+ (BP_SET_psv_unit) normal_item
+} def
+
+/check_SET_psv_unit {
+ uncheck_SET_psv_unit check_item refresh_menu
+% picture_on {psv_unit_name psv_sh_unit} if
+} def
+
+/uncheck_SET_MEDIA {
+ (A4_SET_MEDIA) normal_item
+ (A4L_SET_MEDIA) normal_item
+ (A3_SET_MEDIA) normal_item
+ (A3L_SET_MEDIA) normal_item
+ (BB_SET_MEDIA) normal_item
+} def
+
+/check_SET_MEDIA {
+ uncheck_SET_MEDIA check_item refresh_menu
+% picture_on {page_name psv_sh_page} if
+} def
+
+
+/make_status {
+ flush
+ (!PSV_STATUS: C {}\n) print flush
+% (!PSV_STATUS: P {20ct150cb75cb100cb100cb75cb0n}\n) print flush
+ (!PSV_STATUS: P {25ct150cb75cb100cb100cb0n}\n) print flush
+} def
+
+/concat_strings {% <str1> <str2> concat_strings <res_str>
+ dup length /sl2 XD
+ exch dup length /sl1 XD
+ sl1 sl2 add string /res_str XD
+ res_str exch 0 exch putinterval
+ res_str exch sl1 exch putinterval
+ res_str
+} def
+
+/menu_shortcut {MENUCOMMANDS exch get def} def
+
+/open_help {/help_file_name XD
+ prepare_state /after_help_state XD
+ /main_file INPUT def
+ /main_page_name page_name def
+ /main_page_H page_H def
+ /main_page_W page_W def
+ /main_window_wd window_wd def
+ /main_window_ht window_ht def
+ /main_to_center to_center def
+ /main_picture_on picture_on def
+ /multi_x 1 def /multi_y 1 def /multi_z 1 def
+ /checked_permut /PERM_1 def /multi_permut [] def
+ /angle 0 def /hflip false def /vflip false def
+% /orig_x 0 def /orig_y 0 def
+ /to_center true def
+ /picture_on false def
+% /magnification 2.15246 def
+ /magnification 1 def
+ /curr_page 1 def
+ /v_tape false def
+ KEYCOMMANDS begin NORM begin /F1 {} def end end
+ (USAGE) gray_item
+ (ABOUT) gray_item
+ (CLOSE_HELP) normal_item
+ /leave /close_help LD
+ /INPUT help_file_name findlibfile {closefile} if def
+ 421 298 (BB) set_media
+ 0 0 421 298 center_rect
+ INPUT /RUN get_PS_file
+} def
+
+/close_help {
+ after_help_state restore_state
+ (USAGE) normal_item
+ (ABOUT) normal_item
+ (CLOSE_HELP) gray_item
+ KEYCOMMANDS begin NORM begin /F1 /USAGE menu_shortcut end end
+ /leave /ori_leave LD
+ /INPUT main_file def
+ /to_center main_to_center def
+ /picture_on main_picture_on def
+ /window_wd main_window_wd def
+ /window_ht main_window_ht def
+ main_page_W main_page_H main_page_name set_media
+ INPUT /RUN get_PS_file
+} def
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+/initials {
+%% Default settings
+/restart_name (!ps_rest.ps) def % name of the default restart file
+/usage_file (psv_usage.pdf) def % name of the product info file
+/usage_file_pl (psv_usage_pl.pdf) def
+/about_file (psv_about.ps) def % name of the product info file
+/about_file_pl (psv_about_pl.ps) def
+/zoom_factor 2 sqrt def % MAG for the `m' command
+/shift_factor 5 def % SHIFT coeff. for the `mul_?' commands
+/shift 1 def % SHIFT for the `l' `r' `u' `d' commands
+/max_pages 5000 def % maximal viewable pages number
+/dot_spot {dup mul exch dup mul add 1 exch sub 2 div} def
+/gs_spot {1 add 180 mul cos 1 0.08 add mul exch
+ 1 add 180 mul cos 1 0.08 sub mul add 2 div} def
+/user_printer 1 dict def % dummy definition
+/printer_name (laserjet) def % Ghostscript device name
+/printer_output (!psv_out.jep) def % printing to the file
+/printer_x_corr 0 def % printer horizontal offset correction
+/printer_y_corr 0 def % printer vertical offset correction
+/printer_x_marg 0 def % printer horizontal margin
+/printer_y_marg 0 def % printer vertical margin
+/printer_freq 46 def % screen frequency for printing
+/printer_angle 45 def % screen angle for printing
+/printer_spot /gs_spot load def % selected spot function
+/epsilon 0.001 def
+/grid_wd 10 def /grid_ht 10 def % local grid resolution
+/psv_unit 1 CM def
+/first_time true def % first attempt to run document
+/file_date 0 def % new file
+/file_length 0 def % new file
+default_gg % initialize the grid parameters
+lc % set local window-oriented coordinates
+%%%%
+%% Current settings
+/current_restart /restart_name LD
+/prev_restart /restart_name LD
+/current_output /printer_output LD
+%
+/doc_beg 0 def
+/doc_end 0 def
+/page_arr max_pages array def page_arr 0 0 put
+/page_len max_pages array def page_len 0 0 put
+/prolog_arr max_pages array def prolog_arr 0 0 put
+/prolog_len max_pages array def prolog_len 0 0 put
+/setup_arr max_pages array def setup_arr 0 0 put
+/setup_len max_pages array def setup_len 0 0 put
+%
+/PDF_file false def
+%
+/view_matrix matrix ori_defaultmatrix def
+/orig_x 0 def /orig_y 0 def
+/window_wd 0 def /window_ht 0 def
+/to_center true def
+/angle 0 def
+/hflip false def /vflip false def
+/curr_page 1 def /page_count 0 def /prolog_count 0 def /setup_count 0 def
+/curr_pos 0 def
+/overfull false def
+/document_dicts 0 def
+/magnification 1 def
+/ur_y 0 def /ur_x 0 def /dl_y 0 def /dl_x 0 def
+/bb_ht 0 def /bb_wd 0 def
+/multi_y 1 def
+/multi_x 1 def
+/multi_z 1 def
+/v_tape false def
+/vf_shift 0 def
+/vf_curr_page 0 def
+/total_chunk 0 def
+/upper_chunk 0 def
+/background true def
+currentpagedevice /UseCIEColor get /ciecolor XD
+currentpagedevice /GraphicsAlphaBits get /alphabits XD
+/in_print false def
+/multi_dist 0 def
+/multi_cycle false def
+/multi_permut [1] def
+/checked_permut /null def
+%
+userdict begin /psv_HS 0 def /psv_VS 0 def end
+%
+/scroll_v 1 def
+%
+/un_re_toggle true def
+/picture_on false def
+/menu_on false def
+/inoverlay false def
+/drawoverlay false def
+psv_init_print
+%% Command line parameters
+systemdict /LOCAL known {/LOCAL LOCAL def} {/LOCAL (null) def} ifelse
+ LOCAL findlibfile {closefile run} {pop} ifelse
+systemdict /INPUT known {/INPUT INPUT def} {/INPUT () def} ifelse
+systemdict /ONEPAGE known {/ONEPAGE true def} {/ONEPAGE false def} ifelse
+INPUT () eq {/INPUT (null) def} if
+%%
+get_info
+get_config
+prepare_locale
+make_menu
+make_status
+psv_clear_prompt
+595 842 (A4) set_media
+1 CM 10 (cm) (mm) set_psv_unit
+%1 1 multipage
+/RESIZE_no 1 def
+} def
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+/MENUCOMMANDS 300 dict def
+MENUCOMMANDS begin
+ /OPEN {/CAUSE /OPEN def OPEN_dialog} def
+ /FILE_REFRESH {start_refresh} def
+ /SAVE_RESTART {wr} def
+ /SAVE_AS_RESTART {SAVE_AS_RESTART_dialog} def
+ /LOAD_RESTART {rr} def
+ /LOAD_FROM_RESTART {/CAUSE /LOAD_FROM_RESTART def LOAD_FROM_RESTART_dialog} def
+ /PRINT {pr} def
+ /QUIT {leave} def
+ /UNDO {un} def
+ /REDO {re} def
+ /UNDO_REDO_TOGGLE {undo_redo} def
+ /REDRAW {c} def
+ /COPY_IMAGE {} def
+ /ZOOM_IN {vu} def
+ /ZOOM_OUT {vd} def
+ /FIT_BB {wbb} def
+ /FIT_WD {wwd} def
+ /FIT_HT {wht} def
+ /LEFT_KBD_MOVE {l} def
+ /RIGHT_KBD_MOVE {r} def
+ /UP_KBD_MOVE {u} def
+ /DOWN_KBD_MOVE {d} def
+ /LEFT_ALIGN {lobb} def
+ /RIGHT_ALIGN {robb} def
+ /UP_ALIGN {oubb} def
+ /DOWN_ALIGN {odbb} def
+ /LEFT_UP_ALIGN {lubb} def
+ /RIGHT_UP_ALIGN {rubb} def
+ /LEFT_DOWN_ALIGN {ldbb} def
+ /RIGHT_DOWN_ALIGN {rdbb} def
+ /ROTATE_CLOCKWISE {3 ro} def
+ /ROTATE_ANTICLOCKWISE {ro} def
+ /ROTATE_UPSIDEDOWN {2 ro} def
+ /FLIP_HORIZONTAL {hf} def
+ /FLIP_VERTICAL {vf} def
+ /CENTER {cbb} def
+ /RESET_ZOOM_&_POSITION {w} def
+ /RESET_TRANSFORMATIONS {i} def
+ /NEXT_PAGE {n} def
+ /PREVIOUS_PAGE {p} def
+ /SPECIFIED_PAGE {SPECIFIED_PAGE_dlgbox} def
+ /FIRST_PAGE {fp} def
+ /LAST_PAGE {lp} def
+ /BB_FRAME {bb} def
+ /PAGE_FRAME {pg} def
+ /PRINTER_FRAME {fr} def
+ /UNIT_GRID {gg} def
+ /FINE_GRID {ggg} def
+ /WINDOW_GRID {g} def
+ /CLEAR_GRID {cgg} def
+ /MEASURE {psv_unit_name psv_unit meas} def
+ /CM_SET_psv_unit {1 CM 10 (cm) (mm) set_psv_unit} def
+ /MM_SET_psv_unit {1 MM 0.1 (mm) (cm) set_psv_unit} def
+ /IN_SET_psv_unit {1 IN 12 (in) (1/12_in) set_psv_unit} def
+ /PT_SET_psv_unit {1 PT 1 12 div (pt) (pc) set_psv_unit} def
+ /DD_SET_psv_unit {1 DD 1 12 div (dd) (cc) set_psv_unit} def
+ /BP_SET_psv_unit {1 BP 1 12 div (bp) (12_bp) set_psv_unit} def
+ /A4_SET_MEDIA { 595 842 (A4) set_media run_file} def
+ /A4L_SET_MEDIA { 842 595 (A4 Landscape) set_media run_file} def
+ /A3_SET_MEDIA { 842 1190 (A3) set_media run_file} def
+ /A3L_SET_MEDIA {1190 842 (A3 Landscape) set_media run_file} def
+ /BB_SET_MEDIA {
+ bb_wd multi_x mul multi_dist psv_unit mul multi_x 1 sub mul add
+ bb_ht multi_y mul multi_dist psv_unit mul multi_y 1 sub mul add
+ dup 0 gt 2 index 0 gt and {(BB) set_media run_file} {pop pop} ifelse
+ } def
+ /ONE_PAGE {1 1 multipage} def
+ /TWO_ONE_PAGE {2 1 multipage} def
+ /TWO_ONE_PAGE_REVERSE {2 1 [2 1] multipage} def
+ /ONE_TWO_PAGE {1 2 multipage} def
+ /ONE_TWO_PAGE_REVERSE {1 2 [2 1] multipage} def
+ /M_N_PAGE {M_N_PAGE_dlgbox} def
+ /CYCLE_TOGGLE {/multi_cycle multi_cycle not def
+ multi_cycle {(&Cycle off) (CYCLE_TOGGLE) change_item}
+ {(&Cycle on) (CYCLE_TOGGLE) change_item} ifelse
+ refresh_menu run_file} def
+ /MULTIPAGE_BUNDLE_UP {sp} def
+ /MULTIPAGE_BUNDLE_DOWN {sn} def
+ /MULTIPAGE_BUNDLE_HOME {spf} def
+ /MULTIPAGE_BUNDLE_END {spl} def
+ /MULTIPAGE_PERMUT {PERMUT_dlgbox} def
+ /MULTIPAGE_DIST {MULTIPAGE_DIST_dlgbox} def
+ /VERTICAL_TAPE {save_state vertical_tape} def
+ /SET_ZOOM_FACTOR {SET_ZOOM_FACTOR_dlgbox} def
+ /SET_SHIFT_LENGTH {SET_SHIFT_LENGTH_dlgbox} def
+ /BACKGROUND_TOGGLE {/background background not def
+ background {(&Background off) (BACKGROUND_TOGGLE) change_item}
+ {(&Background on) (BACKGROUND_TOGGLE) change_item} ifelse
+ refresh_menu run_file} def
+ /CIECOLOR_TOGGLE {/ciecolor ciecolor not def
+ CIEcolor_set run_file} def
+ /ALPHABITS_TOGGLE {/alphabits alphabits 1 gt {1}{4} ifelse def
+ AlphaBits_set run_file} def
+ /SHOW_CONSOLE {} def
+ /USAGE {usage_file open_help} def
+ /ABOUT {about_file open_help} def
+ /CLOSE_HELP {close_help} def
+ /SHOW_CONSOLE {show_console} def
+ /CONF_PATH_DLL {/CAUSE /FINDDLL def FINDDLL_dialog} def
+ /CONF_PATH_LIB {} def
+ /CONF_PATH_FONT {} def
+ /CONF_PATH_PSVL {} def
+ /CONF_GRAPHICS {CONF_GRAPICS_dlgbox} def
+ /CONF_LANGUAGE {CONF_LANGUAGE_dlgbox} def
+
+end % MENUCOMMANDS
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+/KEYCOMMANDS 8 dict def
+KEYCOMMANDS begin
+
+ /NORM 100 dict def
+ /SHIFT 20 dict def
+ /CTRL 20 dict def
+ /SHIFTCTRL 10 dict def
+% /ALT 10 dict def
+% /SHIFTALT 10 dict def
+% /CTRLALT 10 dict def
+% /SHIFTCTRLALT 10 dict def
+
+ NORM begin
+ /PAGE_UP /PREVIOUS_PAGE menu_shortcut
+ /PAGE_DOWN /NEXT_PAGE menu_shortcut
+ /HOME /FIRST_PAGE menu_shortcut
+ /END /LAST_PAGE menu_shortcut
+ /RIGHT_ARR /RIGHT_KBD_MOVE menu_shortcut
+ /LEFT_ARR /LEFT_KBD_MOVE menu_shortcut
+ /DOWN_ARR /DOWN_KBD_MOVE menu_shortcut
+ /UP_ARR /UP_KBD_MOVE menu_shortcut
+ /ESC /QUIT menu_shortcut
+ /F1 /USAGE menu_shortcut
+ /F2 /SAVE_RESTART menu_shortcut
+ /F3 /LOAD_RESTART menu_shortcut
+ /F4 /QUIT menu_shortcut
+ /F5 /BB_FRAME menu_shortcut
+ /F6 /PAGE_FRAME menu_shortcut
+ /F7 /UNIT_GRID menu_shortcut
+ /F8 /FINE_GRID menu_shortcut
+ /F9 /PRINTER_FRAME menu_shortcut
+% /F10 /REDRAW menu_shortcut
+ /F11 /RESET_ZOOM_&_POSITION menu_shortcut
+ /F12 /FIT_BB menu_shortcut
+ /DEL /UNDO menu_shortcut
+ /INS /REDO menu_shortcut
+ /MULTIPLY /UNDO menu_shortcut
+ /RETURN /NEXT_PAGE menu_shortcut
+ end % NORM
+
+ SHIFT begin
+ /RIGHT_ARR {mul_r} def
+ /LEFT_ARR {mul_l} def
+ /DOWN_ARR {mul_d} def
+ /UP_ARR {mul_u} def
+ %
+ /PAGE_UP /MULTIPAGE_BUNDLE_UP menu_shortcut
+ /PAGE_DOWN /MULTIPAGE_BUNDLE_DOWN menu_shortcut
+ /HOME /MULTIPAGE_BUNDLE_HOME menu_shortcut
+ /END /MULTIPAGE_BUNDLE_END menu_shortcut
+ /LESS /ZOOM_OUT menu_shortcut
+ /GREATER /ZOOM_IN menu_shortcut
+ /F11 /RESET_TRANSFORMATIONS menu_shortcut
+ /F12 /FIT_HT menu_shortcut
+ /MULTIPLY /REDO menu_shortcut
+ end % SHIFT
+
+ CTRL begin
+ /PAGE_UP /RIGHT_UP_ALIGN menu_shortcut
+ /PAGE_DOWN /RIGHT_DOWN_ALIGN menu_shortcut
+ /HOME /LEFT_UP_ALIGN menu_shortcut
+ /END /LEFT_DOWN_ALIGN menu_shortcut
+ /RIGHT_ARR /RIGHT_ALIGN menu_shortcut
+ /LEFT_ARR /LEFT_ALIGN menu_shortcut
+ /DOWN_ARR /DOWN_ALIGN menu_shortcut
+ /UP_ARR /UP_ALIGN menu_shortcut
+ /BEGIN /CENTER menu_shortcut
+ /M /MEASURE menu_shortcut
+ /O /OPEN menu_shortcut
+ /R /FILE_REFRESH menu_shortcut
+ /Z /UNDO_REDO_TOGGLE menu_shortcut
+ /TAB /ROTATE_ANTICLOCKWISE menu_shortcut
+ /F7 /CLEAR_GRID menu_shortcut
+ /F8 /CLEAR_GRID menu_shortcut
+ /F9 {preview_toggle} def
+ /F11 /CENTER menu_shortcut
+ /F12 /FIT_WD menu_shortcut
+ /ADD /ZOOM_IN menu_shortcut
+ /SUBSTRACT /ZOOM_OUT menu_shortcut
+ /0 /FIT_BB menu_shortcut
+ /1 /ONE_PAGE menu_shortcut
+ /2 /TWO_ONE_PAGE menu_shortcut
+ /D {flush (!PSV_HOOK {}\n) print flush} def
+ end % CTRL
+
+end % KEYCOMMANDS
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+/MOUSECOMMANDS 8 dict def
+MOUSECOMMANDS begin
+
+ /NORM 10 dict def
+ /SHIFT 10 dict def
+ /CTRL 10 dict def
+ /SHIFTCTRL 10 dict def
+% /ALT 10 dict def
+% /SHIFTALT 10 dict def
+% /CTRLALT 10 dict def
+% /SHIFTCTRLALT 10 dict def
+
+ NORM begin
+ %
+ /MEAS {sh_meas} def
+ %
+ /MOVE {view_dict begin
+ z_conv /move_y2 XD /move_x2 XD
+ z_conv /move_y1 XD /move_x1 XD
+ %
+ save_state
+ /orig_x orig_x move_x1 move_x2 sub add def
+ /orig_y orig_y move_y1 move_y2 sub add def
+ end
+ v_tape {vertical_tape} {run_file} ifelse
+ } def
+ %
+ /ZOOM {view_dict begin
+ /zoom_yb XD /zoom_xb XD
+ /zoom_ya XD /zoom_xa XD
+ %
+ /zoom_x1 zoom_xa zoom_xb minimum def
+ /zoom_x2 zoom_xa zoom_xb maximum def
+ /zoom_y1 zoom_ya zoom_yb minimum def
+ /zoom_y2 zoom_ya zoom_yb maximum def
+ /zoom_wd zoom_x2 zoom_x1 sub def
+ /zoom_ht zoom_y2 zoom_y1 sub def
+ zoom_ht 1 lt {/zoom_ht 1 def} if
+ zoom_wd 1 lt {/zoom_wd 1 def} if
+ %
+ /screen_factor screen_W screen_H div def
+ zoom_wd zoom_ht div screen_factor lt {
+ /zoom_wdn zoom_ht screen_factor mul def
+ zoom_wdn zoom_wd sub 0.5 mul
+ dup zoom_x1 exch sub /zoom_x1 XD
+ zoom_x2 add /zoom_x2 XD
+ /zoom_wd zoom_wdn def
+ } {
+ /zoom_htn zoom_wd screen_factor div def
+ zoom_htn zoom_ht sub 0.5 mul
+ dup zoom_y1 exch sub /zoom_y1 XD
+ zoom_y2 add /zoom_y2 XD
+ /zoom_ht zoom_htn def
+ } ifelse
+ %
+ screen_W zoom_wd div /mzoom_factor XD
+ %
+ zoom_x1 zoom_y1 zoom_x2 zoom_y2
+ z_conv /zoom_y2 XD /zoom_x2 XD
+ z_conv /zoom_y1 XD /zoom_x1 XD
+ zoom_x1 zoom_x2 minimum zoom_y1 zoom_y2 minimum
+ %
+ save_state
+ /new_y0 XD /new_x0 XD
+ /magnification magnification mzoom_factor mul def
+ local {/orig_x orig_x new_x0 add def /orig_y orig_y new_y0 add def}
+ {/orig_x new_x0 def /orig_y new_y0 def} ifelse
+ end
+ %
+ v_tape {vertical_tape} {run_file} ifelse
+ } def
+ %
+ /SCROLL {pop pop pop 120 div scroll_v mul u} def
+ %
+ /POS {sh_pos} def
+ %
+ end % NORM
+
+ SHIFT begin
+ %
+ /POS {sh_pos} def
+ /MEAS {sh_meas} def
+ /SCROLL {pop pop pop 120 div scroll_v mul l} def
+ %
+ end % SHIFT
+
+ CTRL begin
+ %
+ /MEAS {pop pop pop pop hide_crosses} def
+ %
+ /SCROLL {pop pop pop 120 div scroll_v mul l} def
+ %
+ /ZOOM {view_dict begin
+ /zoom_yb XD /zoom_xb XD
+ /zoom_ya XD /zoom_xa XD
+ %
+ /zoom_x1 zoom_xa zoom_xb minimum def
+ /zoom_x2 zoom_xa zoom_xb maximum def
+ /zoom_y1 zoom_ya zoom_yb minimum def
+ /zoom_y2 zoom_ya zoom_yb maximum def
+ /zoom_wd zoom_x2 zoom_x1 sub def
+ /zoom_ht zoom_y2 zoom_y1 sub def
+ %
+ /screen_factor screen_W screen_H div def
+ zoom_wd zoom_ht div screen_factor lt {
+ /zoom_wdn zoom_ht screen_factor mul def
+ zoom_wdn zoom_wd sub 0.5 mul
+ dup zoom_x1 exch sub /zoom_x1 XD
+ zoom_x2 add /zoom_x2 XD
+ /zoom_wd zoom_wdn def
+ } {
+ /zoom_htn zoom_wd screen_factor div def
+ zoom_htn zoom_ht sub 0.5 mul
+ dup zoom_y1 exch sub /zoom_y1 XD
+ zoom_y2 add /zoom_y2 XD
+ /zoom_ht zoom_htn def
+ } ifelse
+ %
+ zoom_wd screen_W div /mzoom_factor XD
+ %
+ zoom_x1 zoom_y1 zoom_x2 zoom_y2
+ z_conv /zoom_y2 XD /zoom_x2 XD
+ z_conv /zoom_y1 XD /zoom_x1 XD
+ zoom_x1 zoom_x2 minimum mzoom_factor div neg
+ zoom_y1 zoom_y2 minimum mzoom_factor div neg
+ %
+ save_state
+ /new_y0 XD /new_x0 XD
+ /magnification magnification mzoom_factor mul def
+ local {/orig_x orig_x new_x0 add def /orig_y orig_y new_y0 add def}
+ {/orig_x new_x0 def /orig_y new_y0 def} ifelse
+ end
+ v_tape {vertical_tape} {run_file} ifelse
+ } def
+ %
+ end % CTRL
+
+end % MOUSECOMMANDS
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+/KEYCOMMAND {
+ view_dict /KEYCOMMANDS get cvx exec
+ dup 2 index known
+ {exch get cvx exec
+ dup 2 index known
+ {exch get cvx exec} {pop pop} ifelse
+ } {pop pop pop} ifelse
+} def
+
+/MOUSECOMMAND {
+ view_dict /MOUSECOMMANDS get cvx exec
+ dup 2 index known
+ {exch get cvx exec
+ dup 2 index known
+ {exch get cvx exec} {pop pop pop pop pop pop} ifelse
+ } {pop pop pop pop pop pop pop} ifelse
+} def
+
+/MENUCOMMAND {
+ pop view_dict /MENUCOMMANDS get cvx exec
+ dup 2 index known {exch get cvx exec} {pop pop} ifelse
+} def
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%/STARTSIZE {
+%% << /HWSize [ 5 -2 roll ] currentdevice putdeviceprops setdevice pop
+% pop pop pop
+% view_dict begin
+% initials
+%% rr
+%} def
+
+/RESIZE_no 0 def
+
+/RESIZE {
+ 0 index 0 gt 2 index 0 gt and
+ 1 index screen_H ne 3 index screen_W ne or
+ RESIZE_no 0 gt and and {
+ << /HWSize [ 5 -2 roll ] currentdevice putdeviceprops setdevice pop
+ get_screen_&_set_pos
+ RESIZE_no 1 eq {rr /RESIZE_no 2 def}{
+ picture_on {
+ run_file
+ } if
+ } ifelse
+ } {pop pop pop} ifelse
+} def
+
+/REFRESH {pop pop start_refresh} def
+
+/LOCALE {1 eq {
+ transl_dict 3 1 roll put
+ }{pop pop} ifelse
+} def
+
+/INFO {pop /INFO_dict XD /INFO_string XD} def
+
+/MESSAGEBOX {
+ CAUSE /LEAVE eq {
+ dup /YES eq {pop pop pop q} if
+ dup /NO eq {pop pop pop quit} if
+ dup /CANCEL eq {pop pop pop} if
+ } if
+} def
+
+/PDFFOUND {pop pop pop /PDF_file true def init_file_found} def
+
+/FILEFOUND {/FILE_end XD /DSC_addr XD pop
+ /PDF_file false def
+ init_file_found
+% psv_init_print
+% (Reading DSC) psv_print
+% FILE_end 1e7 gt {(...) psv_print} if
+% psv_flush
+ b_document
+ b_prolog
+} def
+
+/dscn 0 def
+
+/DSCCOMMENT {
+ pop /DSC_addr XD /DSC_line XD read_DSC
+} def
+
+/ENDDSC {pop pop pop
+ DSC_found {
+ /DSC_finished true def
+ PDF_file {apply_PDF_file} {
+ /DSC_addr FILE_end def
+ e_document
+ apply_PS_file
+ } ifelse
+ } {
+ psv_init_print
+ ( File not opened ) psv_print psv_flush
+ } ifelse
+} def
+
+/LIBDIALOG {
+ pop
+ /filename_system XD
+ /filename_ps XD
+ CAUSE /FINDDLL eq {
+ INFO_dict /GSDLL filename_system put
+ } if
+} def
+
+/DIRDIALOG {
+ pop
+ /dirname_system XD
+ /direname_ps XD
+ CAUSE /FIND_GS_LIB eq {
+ INFO_dict /GSDLL dirname_ps put
+ } if
+ CAUSE /FIND_PSV_LIB eq {
+ INFO_dict /GSDLL direname_ps put
+ } if
+ CAUSE /FIND_FONT eq {
+ INFO_dict /GSDLL direname_ps put
+ } if
+} def
+
+/OPENDIALOG {
+ /filename_filter XD
+ /filename_offset XD
+% dup 256 mod /filename_offset XD 256 idiv /filename_filter XD
+% /filename_length XD
+ CAUSE /OPEN eq {
+ /ONEPAGE filename_filter 2 eq {true} {false} ifelse def
+ /INPUT XD INPUT /RUN get_PS_file
+ } if
+ CAUSE /LOAD_FROM_RESTART eq {
+ dup filename_offset 1 index length filename_offset sub
+ getinterval /prev_restart XD
+ rr
+ } if
+} def
+
+/SAVEDIALOG {
+% dup 256 mod /filename_offset XD 256 idiv
+% dup 256 mod /filename_filter XD 256 idiv
+% dup 2 mod /extension_differ XD 2 idiv
+% dup 2 mod /readonly_file XD pop
+% /filename_length XD
+ pop /filename_offset XD
+ dup filename_offset 1 index length filename_offset sub
+ getinterval /prev_restart XD
+ wr
+} def
+
+/PERM_1 {% 1 2 3 4
+ [1 1 multi_y {1 sub /y_c XD 1 1 multi_x {y_c multi_x mul add} for} for]
+} def
+/PERM_2 {% 2 1 4 3
+ [1 1 multi_y {1 sub /y_c XD multi_x -1 1 {y_c multi_x mul add} for} for]
+} def
+/PERM_3 {% 1 3 2 4
+ [1 1 multi_y {1 sub /y_c XD 1 multi_y multi_x multi_y mul {y_c add} for} for]
+} def
+/PERM_4 {% 2 4 1 3
+ [multi_y -1 1 {1 sub /y_c XD 1 multi_y multi_x multi_y mul {y_c add} for} for]
+} def
+/PERM_5 {% 3 4 1 2
+ [multi_y -1 1 {1 sub /y_c XD 1 1 multi_x {y_c multi_x mul add} for} for]
+} def
+/PERM_6 {% 4 3 2 1
+ [multi_y -1 1 {1 sub /y_c XD multi_x -1 1 {y_c multi_x mul add} for} for]
+} def
+/PERM_7 {% 3 1 4 2
+ [1 1 multi_y {1 sub /y_c XD multi_x multi_y mul multi_y neg multi_y {multi_y sub 1 add y_c add} for} for]
+} def
+/PERM_8 {% 4 2 3 1
+ [multi_y -1 1 {1 sub /y_c XD multi_x multi_y mul multi_y neg multi_y {multi_y sub 1 add y_c add} for} for]
+} def
+
+/get_permut {load cvx exec /multi_permut XD} def
+
+/make_permut {/checked_permut XD
+ multi_x multi_y /checked_permut multipage
+} def
+
+/PERM1K {/PERM_1 make_permut} def
+/PERM2K {/PERM_2 make_permut} def
+/PERM3K {/PERM_3 make_permut} def
+/PERM4K {/PERM_4 make_permut} def
+/PERM5K {/PERM_5 make_permut} def
+/PERM6K {/PERM_6 make_permut} def
+/PERM7K {/PERM_7 make_permut} def
+/PERM8K {/PERM_8 make_permut} def
+
+/CHECKED {
+ dup view_dict exch known
+ {view_dict exch get cvx exec} {pop pop} ifelse
+} def
+
+/SPEC_PAGE {cvx exec pn} def
+/M_PAGE {cvx exec} def
+/N_PAGE {cvx exec multipage} def
+/MULTI_DIST {cvx exec /multi_dist XD run_file} def
+/SHIFT_LENGTH {cvx exec /shift XD} def
+/ZOOM_FACTOR {cvx exec /zoom_factor XD} def
+
+/CIELIST {
+ dup (010) eq {/ciecolor true def} if
+ (001) eq {/ciecolor false def} if
+ (!PSV_CONFIG: S {PSV_Config}{CIE}{) print
+ ciecolor {(1)}{(0)} ifelse print
+ (}\n) print flush
+ CIEcolor_set
+} def
+/PSV_Config_CIE {
+ 1 eq /ciecolor XD pop
+ CIEcolor_set
+} def
+
+/ALPHALIST {
+ dup (0100) eq {/alphabits 1 def} if
+ dup (0010) eq {/alphabits 4 def} if
+ (0001) eq {/alphabits 2 def} if
+ (!PSV_CONFIG: S {PSV_Config}{Alpha}{) print
+ alphabits val_str cvs print
+ (}\n) print flush
+ AlphaBits_set
+ run_file
+} def
+/PSV_Config_Alpha {
+ /alphabits XD pop
+ AlphaBits_set
+} def
+
+/LANGUAGELIST {
+ dup (100) eq {/llanguage () def} if
+ dup (010) eq {/llanguage (en) def} if
+ (001) eq {/llanguage (pl) def} if
+ (!PSV_CONFIG: S {PSV_Parameters}{language}{) print
+ llanguage print (}\n) print flush
+} def
+/PSV_Parameters_language {
+ pop /llanguage XD
+ llanguage (pl) eq {
+ /about_file about_file_pl def
+ /usage_file usage_file_pl def
+ } if
+} def
+
+/CONFIG {
+ dup view_dict exch known
+ {view_dict exch get cvx exec} {pop pop pop} ifelse
+} def
+
+/EDIT {
+ dup view_dict exch known
+ {view_dict exch get cvx exec} {pop pop} ifelse
+} def
+
+/LIST {
+ dup view_dict exch known
+ {view_dict exch get cvx exec} {pop pop} ifelse
+} def
+
+/COMBO {
+ dup view_dict exch known
+ {view_dict exch get cvx exec} {pop pop} ifelse
+} def
+
+/ENDDIALOG {pop pop} def
+
+/DIALOG {
+ dup view_dict exch known
+ {view_dict exch get cvx exec} {pop pop pop} ifelse
+} def
+
+end % view_dict
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+/EVENTCOMMAND {
+ dup view_dict exch known
+ {view_dict exch get cvx exec} {pop pop pop pop} ifelse
+} def
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%!PS-AdobeFont-1.0: FuturaCondLight
+%%CreationDate: Fri Jan 05 15:33:46 1996
+%%VMusage: 1024 5521
+% Generated by Fontographer 3.5
+%%EndComments
+FontDirectory/FuturaCondLight known{/FuturaCondLight findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 13 dict dup begin
+/version(1.000)readonly def
+/FullName(FuturaCondLight)readonly def
+/FamilyName(FuturaCondLight)readonly def
+/Weight(Normal)readonly def
+/isFixedPitch false def
+/ItalicAngle 0 def
+/UnderlinePosition 0 def
+/UnderlineThickness 0 def
+end readonly def
+/FontName /FuturaCondLight def
+/Encoding StandardEncoding def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+/FontBBox{0 -17 338 697}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC1B1F3F7121D1D0
+F2C60DD206B0D3C8C450620B47320CA0AEB8937511E456AADE8E66B301B1E3E9DFE17E2F79ECFE
+A709FF3DAE19B4C169DF6773EDA414D02915A6F0FAF8B24FBB0777C697BE8A37D63A390AD9DAE4
+95BB7E626721FF2FD3FB147C80D22BEAC37C2624D818D58C8DF0209F5CE76ACDDE57A303D9042B
+F0A674D095697F925F532D1814BEA8F8A5B1FD0737F362C88E00ACAED0FBD7C99D04538BF47AD1
+AC0EEF6289D64A227208CC932D86BA91B06B84F1C78BC60A9042E6B985666F15684EB454AE6C29
+DF8A9904192A40F725679F530DE4A953049751DEC70BCECE74A8E57026CEF2FDDBA1D1E7C8BF93
+66D03DCBC7205454303EEC2146BD91606462E63CFD1AEED94B578C13A70F0B1C819D80E87F808C
+E959EA32600B0E5998DA7D5A0A7C6E22F26F0BD55F3A0E290F09828D1E3EC3E119CE3000BF8D64
+5C955811468EB0AC9F444BE51D60A4D3639C10FCE22DC86F074918566634F5268E3D697B17C102
+93A68D53840037A9F547C817D763BDFC57E803DB51E5C398CBBA9DE9C16849F47364F2761B277D
+053933406E2AD6150B572A36B5A2725918339601427E64A5E96D47C614D1424B7D1449B71D4BC7
+20F615D287B9ACCB39A86126B419817F40C84FFECC431C92B995D8B1A04F16826F1B268B109BB4
+155C5D073AD546ED7362BB261B26325BB60D366F9F3A05D56FD7E0ED81DEFFCBF433DF42A1661D
+656C27C4864FF698228F64C9C22480EE51F809DBA2E131A6EF795F2F690DC37440B1AD9155E8A6
+A949A75E449A46CC5716E1BDA9EE77AD3E44DC50C53E3D232999CF429D4E3BEFAD5341A8E0A19C
+3A9D82BE797771FD3ADA7DEE0A77B08D7963706A14A40F26E417784B54ACB51E7CCAE759718414
+51A704DAAF9429EED7CBB3F9F236403E4979D2A362C440766587F7C9E2E43707530FF446F58B37
+C73CF528951E056AD6CA9054081804F5FD98DA373999C785F3E7A53037BD3215FC55E3BADB2725
+A9452350EB3A9763E830B5230E8BC76CA1F1A93A06785600D9FF31D281E130F313448EA1FA882B
+C224D1E38A99934913C792816130FD64FAD297A4A4941272C1818F6A1D30F81A5E6117720C4A8B
+1DC035E199017D8F2CD5598146862D91E878A80952F60B9F21C4A97064D194734F71C6277C3B2A
+9EAA8C7682A05FB4F5A96171389519ECE17464F3D605FFAF3420D956E6B1B3F2C988072C429719
+6B8241FDDBE9E0C6FCBDE1AD2F8A011E072DD5D16C853B6C57E2D06608398DFE0AD5C5EFF54A9B
+8CBB7C3E480ABD0E45FD188E5B47A9739A7FFA78D2CBA6C470F2DF7B5CE2A079814818A2A45343
+74A43C71D704F10071741DBF268AD761BF8AB57AEC0D773273F0A29B9EB54A68FDED44E1341BB1
+515B14377AA89B2E4A6C9911B1DA039D52C9C1CC35EE9D7011B8EA8A5706B696F924A59C6FDE05
+F9201332C578776A653975695A79E6D3518EC573FB9532E3989C57BF5D1AFFFB0650F020F996BB
+5B99BD8E5EF4A89A2578B90097EA29F2EB8FFECD25B7A82998B9D23228A4641D120E6303FE4FA1
+BEFB8CEDD0043BD669855278AA8A3CAEFB33951CE56AA3CBADABC53867A764559F25F6F6C8B0D9
+FBAC727A587B4B8EF9AAD2435F80B59DD7483CC787EF07FB837A380C4A6CD524FBD1CF5C1627B0
+16CC1A385134D4867224FEA4DDF33E03F7515938060ED08AD14EDC9740EA97C8913D5327A65293
+A939B4A33611EDBB246DF89113B2CC9A8936EF1294853EB13165286FD2A7C7713962F919E92A41
+50BB5CFAC727FADDA19E7D1C5FCFDA42EBAA13B26662CD50D02C299BC18E9DAD3C1BD025838381
+A9D1E3C93022B58A98889D18930DDEA6B0A42DBFF8845968259F2115206FFE94F83C2179C15B14
+309ED6576F771B9679B7375C319E4F889BA6067127C194B5D1346E4A65AB1C7003B13894AA835E
+E2A395FB6FE0A2D91AA73ECFCC29EC7A794FB3DEBEBE9E41D75CE873930153F444E815AB4B9A7C
+28A9A8E24E51B36445589A15A42E96C98D31259A361A006376660DC7C62652B245F6228586C346
+BA4C3C8F458531534DB349DF601BA97DB4A32EA47FDBC07FC337B8C5A3E2D975B2BDCE6E4F21BB
+479973509945DD8056FB5C3398916C3363A0C19F2B5D90A7BCBD82F087090A43F2E1FA78203B48
+455C02826682F8D7B285BA506E4E08908C11045262D0EAB75D738EF07D689A5A49A6A9CD1E2E5D
+873FA7E816D9648171F4757A68343E5F4877681ED3F0A738AB26C19DB24FCFDC97126A0B0CEADA
+C8D61402D2026819FECEC13C37256142EC3C64C0955D69D5000C761D25FACAE658BCF5CB00D80D
+6B5C650CCA49E47167052C8E6B686268EC3901B63F9130B3E2AB9D941E62DBAE73A122437A02C1
+F81C9CE111D676F5C57BF1CA67C40AD827BC8FD5F3FCC522D852435A563C724AEC6F6AE4ED3BE0
+B3A3A8087EF6A4142BECE917E0E4D378B9645B68356E41FCD9DA2CC2C4104B8F07C05DA6EAF490
+AC047E97E8EB9A41342142CD3EB2698A453A62E46945EB5630FAD396ADE7C3B3247C4110538AC8
+8352EB2D48FA29D33167181F60BF36A9DC50E61FFC99F6CA1079FC8DCC1581AD9C05014267A11F
+963F5C87A7689C6785B074F67DF1E66CCF7C81B201684FED66EDDF883964FD7239886C57DB4B04
+DBCF8E7BC1BAA23EA2176152F856C36605C05126FAFB608F26779E23C9E436907D9D7E770C079F
+9EAD9C9B0297E21B0A51DDFACCFB5E6E30292EF2F3D6312FD7647D67809C2A132166C3903C5A04
+16B5233B6867B1C8F9DF091A1BCFC373D312F447CF0DE0026B57AE7E0CEA47D81B0536C8DA4123
+B2CF44EF742A45D14EE771CCA5B3726BB9D19DE584DE547F8A8A51DA107219BDA245EDA31D066F
+5DA701D33850D31386E81BFF44A13BC5CEE1535AB8671EFCEA31F1F07D7C5126C37B72F996AABE
+3495088CEABFB13763FD71D9A04D43B9EBF18C06A4F245F561C25CA4E66DC7EB6996A507ED492E
+6C115C9556C4A9644294309DEFB0BBD379743DEEDF68997D537FE04D9791550223D9666D6869A8
+5E6615693B963FF4CE227C33C55F50548514BDCA24B1FD6D3FAEA95FD994A0A2E51A3FDE15ADBF
+9435C0595AF7A95F60C8B4826AB66AD6B881B491E506EA1EB92FDB09C3C9E572731F95957AABED
+36E18349F31CA1BDF4F1E2900E37923518D9DB78C4B3934C9B86BE3B893E7C358475AD3EA70995
+7CE23D39B6B8D57E02F1C41F24646DAAF64CB656CE318DEC46380E788270FFD1691892E94A59E6
+E7255215C9E410EE0F139A89FF2B2CBDC61A3889CBC27AD5536541D9FDA8E6E88AC6A428433616
+AE4467AB4F275F79F9B71D8B38EFE172B297994EB2144D0CA7964169F40CF14453F17252AC38A6
+7113123F86296D89D3114D7F1C84EAB1E9C02D68D5184C75DC92D89B07F0897FAF8AD89A1ADF8C
+307477783CB97A6CAD3D53373373A0DAD19BBC4D23517B78E1BC5AEA479B28166FB78004EB24D1
+FBCCC7E66605148120D6FBCE773F9D30F3D504163CC27517366A69CBB6362A9B87610EBF027EFD
+D398DE0CD80A6FB4B9E2AB44EAAAD75B27249330C923DAA048D40BE4FA0D146F14364C318F794C
+29C0F743BFE0A68E1B00D22086485BC80912BD515BDC4CAA6D12059F33DEECF9A0DE183A61F633
+3796C1A41FB921A835B68F82A33F05FE9B5C70C21302ED112E1EBBFE8005041D56CE72CB67E59E
+197BFB6D93A11744D0435B6ABD8C77A414FD723080825A9F9069EE4E93F489D29B1D16F3A6C869
+820C7C9E774A16BE8F45314E91EDE29DD0412BB2E8F2F26421385AFE39F3445FA166EE2EBC7C35
+2332074EFF0DDB3225817BAA2DA9BA9BF0EDE14CD70491485E465121B96C8F0FCF578A45B12352
+976A4E810717FE4B142D4E7AF0774768E77C146390E1D028E44156E02EA2007FA0DF1A482459A6
+8F4E038F4471209BA110D01C7EA427062A2C90EF7DCBD197F71D0971763F5AEF83C596FB661B1E
+DADB0E91764CB4769C2E1A632E14B3D25F737FC829F11115837FC1481CF4F85903FE00618AE814
+5B46569CAAFBB1417023107E679978B927759D339AF5
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+cleartomark{restore}if
+
+%%%%%%%%%%%%%%% end
+
+%!PS-AdobeFont-1.0: QDSSXX-Normal 1.000
+%%CreationDate: Tue Jun 16 10:45:12 1998
+%%VMusage: 1024 22888
+% Generated by Fontographer 3.5
+% Prepared in BOP (1998) basing on a modified CM sansserif font by D. E. Knuth.
+% ADL: 797 203 0
+%%EndComments
+FontDirectory/QDSSXX-Normal known{/QDSSXX-Normal findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 13 dict dup begin
+/version(1.000)readonly def
+/Notice(Prepared in BOP (1998) basing on a modified CM sansserif font by D. E. Knuth.)readonly def
+/FullName(QDSSXX-Normal)readonly def
+/FamilyName(QDSSXX)readonly def
+/Weight(Normal)readonly def
+/isFixedPitch false def
+/ItalicAngle 0 def
+/UnderlinePosition -215 def
+/UnderlineThickness 75 def
+end readonly def
+/FontName /QDSSXX-Normal def
+/Encoding 256 array
+dup 0/.notdef put dup 1/.notdef put dup 2/.notdef put dup 3/.notdef put
+dup 4/.notdef put dup 5/.notdef put dup 6/.notdef put dup 7/.notdef put
+dup 8/.notdef put dup 9/.notdef put dup 10/.notdef put dup 11/.notdef put
+dup 12/.notdef put dup 13/.notdef put dup 14/.notdef put dup 15/.notdef put
+dup 16/.notdef put dup 17/.notdef put dup 18/.notdef put dup 19/.notdef put
+dup 20/.notdef put dup 21/.notdef put dup 22/.notdef put dup 23/.notdef put
+dup 24/.notdef put dup 25/.notdef put dup 26/.notdef put dup 27/.notdef put
+dup 28/.notdef put dup 29/.notdef put dup 30/.notdef put dup 31/.notdef put
+dup 32/space 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/quotesingle 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/grave 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/.notdef put
+dup 128/arrowright put dup 129/arrowleft put dup 130/arrowup put dup 131/arrowdown put
+dup 132/quotedblbase put dup 133/.notdef put dup 134/.notdef put dup 135/.notdef put
+dup 136/.notdef put dup 137/.notdef put dup 138/.notdef put dup 139/.notdef put
+dup 140/Sacute put dup 141/.notdef put dup 142/.notdef put dup 143/Zacute put
+dup 144/.notdef put dup 145/quoteleft put dup 146/quoteright put dup 147/quotedblleft put
+dup 148/quotedblright put dup 149/bullet put dup 150/endash put dup 151/.notdef put
+dup 152/.notdef put dup 153/.notdef put dup 154/.notdef put dup 155/.notdef put
+dup 156/sacute put dup 157/.notdef put dup 158/.notdef put dup 159/zacute put
+dup 160/nbspace put dup 161/.notdef put dup 162/.notdef put dup 163/Lslash put
+dup 164/.notdef put dup 165/Aogonek put dup 166/.notdef put dup 167/.notdef put
+dup 168/.notdef put dup 169/copyright put dup 170/.notdef put dup 171/guillemotleft put
+dup 172/.notdef put dup 173/.notdef put dup 174/registered put dup 175/Zdotaccent put
+dup 176/.notdef put dup 177/.notdef put dup 178/.notdef put dup 179/lslash put
+dup 180/.notdef put dup 181/.notdef put dup 182/.notdef put dup 183/periodcentered put
+dup 184/.notdef put dup 185/aogonek put dup 186/.notdef put dup 187/guillemotright put
+dup 188/.notdef put dup 189/.notdef put dup 190/.notdef put dup 191/zdotaccent put
+dup 192/.notdef put dup 193/.notdef put dup 194/.notdef put dup 195/.notdef put
+dup 196/.notdef put dup 197/.notdef put dup 198/Cacute put dup 199/.notdef put
+dup 200/.notdef put dup 201/.notdef put dup 202/Eogonek put dup 203/.notdef put
+dup 204/.notdef put dup 205/.notdef put dup 206/.notdef put dup 207/.notdef put
+dup 208/.notdef put dup 209/Nacute put dup 210/.notdef put dup 211/Oacute put
+dup 212/.notdef put dup 213/.notdef put dup 214/.notdef put dup 215/multiply put
+dup 216/.notdef put dup 217/.notdef put dup 218/.notdef put dup 219/.notdef put
+dup 220/.notdef put dup 221/.notdef put dup 222/.notdef put dup 223/.notdef put
+dup 224/.notdef put dup 225/.notdef put dup 226/.notdef put dup 227/.notdef put
+dup 228/.notdef put dup 229/.notdef put dup 230/cacute put dup 231/.notdef put
+dup 232/.notdef put dup 233/.notdef put dup 234/eogonek put dup 235/.notdef put
+dup 236/.notdef put dup 237/.notdef put dup 238/.notdef put dup 239/.notdef put
+dup 240/.notdef put dup 241/nacute put dup 242/.notdef put dup 243/oacute put
+dup 244/.notdef put dup 245/.notdef put dup 246/.notdef put dup 247/divide put
+dup 248/.notdef put dup 249/.notdef put dup 250/.notdef put dup 251/.notdef put
+dup 252/.notdef put dup 253/.notdef put dup 254/.notdef put dup 255/.notdef put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+%/UniqueID 0 def
+/FontBBox{-64 -203 1017 916}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC1B1F3F7121D1D0
+F2C60DD206B0D3C8C450620B47320CA0AEB8937511E456AADE8E66B301B1E3E9DFE17E2F79ECFE
+A709FF3DAE19B4C169DF6773EDA414D02915A6F0FAF8B24FBB0777C697BE8A37D63A390AD9DAE4
+95BB7E626721FF2FD3FB147C80D22BEAC37C2624D818D58C8DF0209F5CE76ACDDE57A303D9042B
+F0A674D095697F925F532D1814BEA8F8A238428C7CFFA9AD00A69BE3AE10FA88522C2E1A6CC40C
+D7959397445AFBBFCBB40946FF99F8D415BDA1754F23B302AECAA21F8455B9095C57D4F3D00D42
+A5CB5086BB99D70142316407E4DA06B61DB9846C5ACBE2F8525E91712BF98D06C171A9987F93F3
+B4BBE6DEF3743DBBFC311605E977BB1FE846F17252D4876C2D1CF74BF15546A31F2EE591C1EB35
+DAD685E8ED96370EB4A41515D0EC44CB9A5C758033C09587FEA7504470B04FF86C54A2BDB3E79E
+4398C68C6F613498DCCE2AC418F9CC9150D156406263F8E4D5D22AB67A60BA8D85C30643D0D870
+9DB251E3FCC21DEB0221D63D909C7FF5AB89D7904E54831110ABB2D0B6618C561241FC4C817A0C
+DC8A1D9EA1A242EE210C805C29C9483523035DF4B6A42CDF12FD97BD7BAD0516B13F57D5B88BB9
+D233B5E4FB8A48544A73B77EF6811EBE41A6865032AEDFF3DADD1844BE36E421823CEEB14661CA
+7607D185D1E5941E6545F9289EFF0E14490191020C4DA4077AD4F72DEF8134F99F47891532AD52
+5190CA68D5739CF0DD5D89D8FDB3D2CCD3832F9D1B482062EAC842F209150B1CA6CCCF965BEA5B
+78ED3CC37AFCF8CBD4F22FB2FBF6B0D58157E74F451CD1FE24BBE088A6DF3EE50851FEEA89C185
+8F1F68111D921DD21A2D91C2C88736994B7237DDDD0AEB3AB19D0EFE83937474321B7E4C63295E
+9F55E134A663980C768540A8BB14D390F350DA0BA503DCE487915D0A9226ABDCDA689F202F6083
+1F7C96311F8EFB9B170587F9AD1CDFD668BC792A711875F4D86CA59CAF894036EBED2449863C38
+560F4CF0596F68B7DB18C6D3F9FD0EF0E6C5EC7FAA3A62D68785283BFF0E6663AF5D860AB2AB27
+BBC9E57C46B9B9A874B9224DCB5BABC9A05183869F677C8DC4C5D8616D5F643FFB8FC5DCBACDCB
+3524BCA2E90F0FDCFFBB3135C9D739768AC424E16588749CFD0A11A36CA9AA396C4D7582CEC03E
+A77B00040FCA30F6B96B335682C7CE2DE1E7356EC133B78480972CEE13C231951C50F259C97300
+B555D389F0A4F019504987B4DB7095DA38E222722722D31BFD70B6B8F013078728EFC9F45C88DE
+B19A25ADF996AC4F6405D127F77966BED35625930C42F2EE0EE1E463603884F05A1A7DF1BC22D2
+8F45019B219187B9689A2488502B3EF8841651AD6A44FCD24A0B3CBC3DAE467D903BA3BAA014E2
+28C132B2B51F33D1675BAECF5D83FC782EDF874A6D6E942EE2F98B11A727EDAE092D23A7EF6B94
+2C8AD02D5168149E950F93A5F3B7F7E0DF87832B92C298DF2EC7709493E1EBC311C0A47764156C
+7E7B5475EBB106355548A3A1A7B4E6525B8C3EFFB8162AAFE2C7C4FA75ACC3F852BE8FB9F9D587
+027B6402BFBA54671F721AE8DA45ED57D011D9A2356B9D2CAB9F18D3EFE45D3E7026A2C7AF1A9F
+B0475701DAF683695B0D466239A8092E6FABB11FE124ECE29D10DA5B77B2DA9C0AABE6AA417CFF
+EE315840B9D687488053602966F43AF5016324E461FE79E0A845DEF0E8FFF6FF570B49526A75D1
+0422EC1CEA8A4653081077E6A0982CC854C82DE326578E582AE46F714FE4B171E7AE87AD392B6D
+0A6FBF280C60F36FAFF8244C1AA0AAF2057B0B504BEADB9CB961ECF19DE3DA5301A13DA3DC43A1
+A21BC30DE9AF4E34BEA47E55D4F2FAD3DF397806782DE16DDEA0B8BAEE76CB05771D5B0EF33F0E
+272066FB1B6D745DEFDBCA591FF08782AEB8DA95925A9DFA77049C3EED074B538725715120DDF2
+218A5EEFEE97015A7AE6BF10D712280B8771B7BA9939D0F8E3F0C0C271A3D30FFEE6B4886E36B3
+0ADD739EB3908857A605B09030ECB8FA721050A203A618F413D4DA675EA622DF5C6FF9E210843E
+517ABB4DB23122EECAF722C4A3F681A48CCD669A58DEAFC742EFFC7D1AC2A463B51A68428B31BD
+C19748C2E1C212360F47F84AC21A8E18F4C770687845A8FA3F5A96FD2FDF5112BAD02BFDA08821
+C4BD13F7385E582673D961A43669B0888AD258014D43E45F4B992133C88C95A64C8E727AF4FBA0
+65EEA30D110B08EE9405733AEA098DED6461CFBAD3724A09EBAB4EEF60DCA57C7EC7FEDEC5E1CB
+22D66F1544582E214FB7521DA7D49058F1687BA617ACF2C1AF71F3D8DF06EDE28A451E8C3EA736
+67C44123EC9036B2186E3481D32C4A0C3BB4B55288AA63F08A0C7C5A938076249375421A0FEEF6
+09A42EA02E439F1A259DF7441491A08DF32C04F6EF0815EE6CDA24FEBA7D5AE1F0F68F9E0756F9
+90FBE598CF87D59397DCBA5270B2DB64830F1D853388601E422F27804AA6E1903476C98E2B7D4B
+57EFD4F3D36AF40F43D3ECC172F44FB80DC24AE1C30F930B93632F4D1C8CE802972CCA74FA58EB
+360D5859029543969D72BA4FF1F962E9D37D8BA78F5CF1C4C4AE9AE67923DED97B5DDB9872E4FB
+368398F74E1BA359FF34A207CE5845EFA89905F469A68DD4402FF3DB0427A95F74D6DBA367BA30
+CDCCF4B5406FB158CF279B831931EC683D056A75F9ED586B40817A3460217A59EC5278B8E88DB0
+C4E43B535395F953F58DED16EC64F0CF4968192835C1CA83B49E301548C661C97500E207CCB5FB
+4007BE830927470C587EE12993A047FBA8030168305CFF6416EE1918EB9059939D9B7219087676
+97FC7FAE660623E943DFA0932B65C1FF779C89CA7B7A546466B9C285E6F12E2660A785906B4D2D
+1574111275DBC24EAFBEDECC50A9DF8403DF6E34217ED468A0C452F9B16CBE8C7A8DEFCF43E3A3
+900291F14BA62172FFB10FA147508FA097A484D03E7415C80F01520FBAC0BAE68521AA3AE2C3EA
+76E03D679FE01692A17701E3B4B82E8C019483A7AC9752DF76FC96B0A85D275DF95809D971C746
+6081548CEFDAC6AA739D81342D24F2167A751BDC9B7CCD403FA99AD7A985E03B45448F55D000AD
+DB02EC6D7A57C351B9E32A1E285F1F2C5DE0619A3E75E6D8D3B23BF30EAE7B1749B3D2A98B9624
+2E1D9E4847FE0C98363EB6A6E91E246E4676A7A14ABC02EDD706AD8E97E3C5526FB56EBE59A497
+7D52E073E8A59124223039C93B6AA04DB5DD4AFADDCFCEBF0EA0F1A73C9B0DA246BBB9A64FD893
+91C048734F102B1F9E8919B73F34136F0DB2DE1B8027EDB8C512D2099E2FF8F52AE1FD26AEDBDD
+E6211576B517B6EF450FC2DF1CD9A5B30DF76FCD9036DCBEFB6847D49942E292D4ABE5A6BF1A87
+A9F2416D360934A0612CA3111694728DDF715343EE165CA171B928CD14780734821CA6B55AEC9B
+745DF9566CE767E30A8C3AE5981FD113F31D2FDCCEDEB54384C4B51A3A7178739B3AFFF7DB5DA2
+A15CA473EF99F8D5E5B23BD63D1DAD174CCD6AB678CA4407689EED1A61FDDFE526E616A33A26DC
+DAAB0D3B794A897A222C646474C3EC5EDAB74AC0DCB1CE940C11AFD4748B1EB9E6F1E221F21956
+7DDAED6DB33A0895B308E67FE7FFCD42495367A0742C699872CDCF4C4A160FCB7ED6BC1B3882D4
+54A44456835F5FCAC86EEB25ADDAAB7084446DA3318004CC369F68B7EE0B47644B35454C7FA8DE
+753181F5D177BC8AD5966D54EEBCC68A8A619885113AE52B63B482C3E52EF7B0B8DC46F0BD3A59
+588874502A11734CC1F0E004A51B0AFF92F017F55E5B6D45EBBC84AB262005136A491CA2D3199A
+4406404E459059BE2827D33398F8F0A81493872995DD88843B6DD0C82339CC8F4CE23019C39D17
+6DD5D4BDA201D2ED9E4C082ED6EDE06109A714E9F2DC34B842C45CA7DAB4E6224119B88EA0B7ED
+61B5E73EE3CD7A3577C159D23B4F1675AD54790EF0E08B196BC150A303EBA535D2B8A82881E711
+1A7668EB5E94D8F37C3FE24D2446AC3F58EDC8952D0509C8119226C78FA7D283DDF3F7D80AB956
+5FF5E82B36D694F34B067260E776FAA811F1148FD19D45831E8BD46C4D1CA5D4A21A63723A4FF7
+600EC58DC7ACFB1EF18BE0BA780B3C04E33CDC88E4018E7526DAA765CEBFB30C5E40CC0046552A
+F6A9A2D867C2E35D537C2AA649A923F40A33BB3331A257A3D1C15CC8CAC765CCFC3BF012052031
+3B6F46C8372404BB692B7A9756C846DC86459C0B7CD06DD23F2DB4675065F649FE81E6B3005AB3
+8B4DFA8938A9AC7FF921CC1B383A77822CDF82BAB3BC3397EE5DDA5E3CA792DAAF8ECD15E837E9
+0C838A22A198FA4CBA57B925F4691C69337F4656C99E4BDF6D79729E231F66EC3D23E60B5EE133
+0E359FB64729BDC3B399AC49D237A277655698DC7E5B11A744FB3DB0E27641274D9EBEB5243B61
+DAE95BB1FA63DD6DCA2ED6A5AD022042645FFC7FDF18411758C92647B2855E9CBCB63186F831F4
+1B3174D68456101522DEFC77A076A79CA24B4F153183391C8378567002FFECB3440BC2E69A7A36
+521C33ABA6F3606491D8387A52A1B70FDC50B7E79EEB1F06E041FDCA28B186B2E50F0DBD628315
+C749FDF2E66FCF09D1F9DA69D30E22C60EEAEF847D4ED48C9D656D83139769F56BFC50A7F356B9
+DBEFFF954F92EAF28584441E8A9E3CD3B892CB3C02B09BF1CEF93DD1DF1D4C819C45F08F3ABFC1
+422CCBADFCB84B8F0E461DD5EDC966AF46E1C31FCA2280FB55824DC0C790C4B03B622ED7D8DEB0
+EAB12052725209A771883ADFCDCB6BF7470AD7CB69430BD5534BFDC40680D52F81BEEEA5482DB0
+192CDECC59983E32C65384555ACD3765F34CCFA54911ACD0FFA79CC63DC801294D9312B83B26AC
+B316AE8893D14B9DF9C0B8F2C7B96E0D9885522F558539A4AEFF1E77C13B5D98FBB9EFCC70C9F1
+1D7131A5961CD341DFFFCE2D88D2A5EF01EFF598875FF7B06BF5139D098621D05F19645CC2D8CC
+BBCB787E0EF3A3856F5AF4F07FFA267C4D8238A27357C4697E778635C742CE3ADACA8707900D43
+3B0CFB0F762056EE5F71C73F6D0E1EE183F351542EFAAC59452435C736C010B44704F212141D29
+8494649F5DFD9424E8CEEDFEFC4CA4D4FC7A3545F07E81764507E20F4E30C016D4F5FA9F027C4A
+71C3A66A56E8D58FDF709A6D979CF8ADBB40D7BB9741EE701AEFBF68EF338A2045015F8D1A1F99
+9F9B718D9E8D52B446E390FA5252CC634440BC1D08E083BA4D310E79E378FECBF0E2C140C81ED4
+F9BC94F7A8178A62A8DD40EFDF6FB225D5DB71EC80423DF84110FDE1226CD5CF127F4651A52F36
+B4279FA1740C13290DBB340BBB3BA5A7A8E1783C85FF022EF8E01CB106A26EE41050672C9FDEE5
+98E86425FBC87794E0E26F28EF2B8B3DEB373B20C93A8875809BB5675D10BE5484E79135138B57
+CA58E53E8676527601E75D832679B0B71B80B731691056957B98A653FF3BA10051DD62BD60B096
+954EB69AEB5916A99717DB0DBB1641AD681A29E7CAC2F2CF60FB1D1ADFB1AE0DAFA5AC8ABDC9A1
+BC38C497DE2C3E392B555C9C53E0DF258E3423B0C7801F6A3D3C5E8711A905F2B7E806C02E148D
+01A02A315B3BDFE53A61F4160A54C3487B9E314D2B0D9FB95F028053657BE4BADBA11C5255BB7D
+5114BE2559F0FC2A9F61F887CA4DADB073D78364955B41CEAE3D6A938F5697ED026C990501D2CA
+77E992AA0F31C27349E6D9896C87AE53CF0720C7AB0CD67F7F2E2F12E4EDAFCE439540DA2946EA
+EA3C19B40C3798C69DE3C2ECFCDD9D609B1FB9D839CC5ED5114845EEAAE5449ADC496A3B983167
+B67FABE1B23935BF1BF0A9B4A03667A154B06C1B39AF204EDCAE6627DEF9AC9ECF898A8BB9E78C
+451BE100A0FB7FE850FBEBF26D4DC3C9CCF288F40AD1D0C8B32CE1FB79D62CD7542820803344CB
+7C63D20CB29A1F5E3BE1AFD388BD6E8CEB900432BC0D92AB5D15574BD1C96C19407E00B173F6C8
+F0392EA18A1B89AA9661F288DF1AAFD503506D77732D57BB87C3D3A2E4204745D899317784C216
+D192A31685D0C35D0A7DEE9FD65109F5438DABE0B77FA52FCF3813EBA087B1AF34DCFE07390D67
+87E86464719934B4342C3BD98209C77B81F3B368567A3CC48D129E778B4055EE76765F53248E1E
+1092282DF2CB0EB8610B5B8A727B1B1176F994C33D602DB0593AC3BBCD9D15DD5FDB31CF90E052
+D230565551902429CE97ADEDD3A5EC3F5FF83CDD9EEF3FDFD0BB5E29ED4CD255A7929663B9C583
+897864E59C1AF691D0800CC4150C0315E58DD537B671B8B38175C68E401A391EFBEF00AF8C2A17
+DCFFDA72F8FD1BAAA0F544132EC9C838003D020713EA5ED5D2F39F92F9337B9CFD877AF7266981
+E67A7A5004E38E54DC138276863890CD915ADB08F9DBB181E36E159190E3C9C3FA2851F6EED963
+06D1701C50AA80E75885C4128D2EAB0C32ED4181EDFCC1B3CF02A8DA34695AD1AEA6749866F370
+2300DCC80474A2482D6C4F07B21ABD8E85220EA75727839BD3A741A789AA585E1E1C5F4D2C469D
+2D9ED2B01E3AA2574347A276C0BF5AD194E9193907267BC2A46E3D276BA050CDCF523158657F93
+96FCDEB97E5BCB0F6043D813881ED3B1F31FF5648A9F24D82F2108F7AFB5F170F4816E738CDB25
+C28C3360C6B4E2812187F15260C2F6570D9042849FD9BB9F3229C17DD3807DF03996EA2745BF09
+6DE05F559A96A295B64BED481C467B50A303AB53ACCCD98E40BDEB3608925CC48C7900A7A1FF5A
+B310B6D11024266291103465061F61F56D9D3A159A8C3AA2DDBE49BADF568FB736D0782E8EC6D0
+9325B93565C0C0C981BFEE0B5C24BA8CB06F4FB5121A5B841A84978EAF97C690471CC280A4551E
+001F2CE371BE3599CBADC9765A5C5995B3583654F891D0E7254ABF44BDC288E943F80607130084
+87C3314685054DD5EE2782BAAD6BED2F4DEECCC89D58923B17266B7ED193065817387A2E09F21E
+1A70EEE78B1235F126AC01B6CB52E60C3014DF1EF0AF8EC567BE19047A39CAAA108A022D4C4BC0
+4EA151AF25872521D0994F70391F6C1D2EA555EA2AF398D5DE25BB57B67B770F4A333A5A1821C5
+2EFC188FC9EBB19CC68793EB33E5597DAF624DFFCF13AA1A36ABB40333794A762BDC53420471EF
+5EAA5E0DB41A65598FB87E93C74EAE6403AF5250185B741DB78D6655768F36DB89EBB4DB54D9B1
+51A641CA5DEAF53F3E84183A26894890C4F3C6273E787E791FEF2D4734D3038DDCB66F53F91BC6
+AF01773FF030E11372290031583FFF36F80E01D9462BD9F68121C111D73853D4D2004F7295D860
+7CFA4075FDBBF2FC22C949DE3B0CB90BCE82E871E4435F3F6BC007F70A92272D266A718C22E387
+5D8FF000CA83EA7C4071764305076560DB8926520B2285C1B8A9B38A8899F9547F2DF0C144EE66
+C0C06299DB31E07F14D6923F3780785D19FC10E3D2C7805344050B6A4753FF177667E9F6FC8F47
+B7EEFC26CFEB7A1DC6A7028A0A22971A5DA242C54FAEC048689B46D01A835189B5EF23DDBD2507
+FD0C2010D481B0C850627B9B4AAE5AB81B12E28F48060D991E63462FD3E99D1EE269B85F8D6A6D
+F98C77F2361BAA7B1F6FB4AEB5D6515D63233CB64586E88C1AA9BA741377A3D8166192385FB378
+5AA87A41CE89C068941DF37927BDB15A77F8190B9A545B0675C38591D92359AFA0CD40048285CE
+7E20A24E380A241F74BE1BAE53B14ADE03BDE69EB44FB2A1B57D8421E6654A64506F6482AE7952
+7B5920A5861DBBAE6A1FA8B824D7CE422530151F185F56AF581F8C5B75B2D436AC7857A7B85E8A
+B6D054BE329EFC3782D42F5E272CEABBDFA269347C3511E6FC41A6F817A1444B2D159634E5F1BC
+D162B7B7912F08654A46FB21E76C1DCFE8E030C95FC247694B470A0CE09BD561B11A18F31C1307
+EA1AA4518AA47609AC56FF77A856A9A87A47F6DDCCD2D587E9AFBBD93B27006FB440BAE861A875
+90DF57C1659E5604D906C98649FA9DB56330B9547275C6C1FCB6D747CACE2E4137D4B3F221B21A
+4C0B2725E71B2957F31B461FBBB38C21B87317AC222D65C592244E3F690F533F46AA7C48466118
+EAD41CB91B7FCEDD2235C40DBB7BC9F3F7E84A44D0A2F9256EB27DAE9F069F37FC9ABA099ED765
+1A99D87BF74447180CB93A30D4837F89EC207544060327CBD2A0A449B68ED1569BDDD6AF6324E5
+6C8418C10043BE284CEA1955AD3D71516B19A96D1D48EE4A4D681B75DDD5E61A405E0B8BA11F88
+093A3F2B7AE9CE94CAE4D20D31CD513E1131D7570CED27261C0BF5C8F6AC8C13F93C984393780F
+075E01899A4B327CE435065895D08C933A2A880F51632EA733AB4EEB1C104668EDFACB51FA8025
+54631B6697F6DDFE8358C5E8489C883DDA4AFA0CC643AE6528C24CF32E38399BF5C585AE6407A7
+E1E9A4BAFC25EE5EBF8161481A981EFE9DEEB8610532DBAA05D529BB45865069040B2F17D479DC
+3D60680ED40C14FAC2C91C4BADF8BB5AE4BB303215AB4CAD27D6776A05DE891966656568172121
+8CF08BE66E1D497C6FF825ADBCE1D098D661AEF7A532F545E0A606F2F1D6324E96E45183EBC85B
+99505F57452740968A386EA10E8506D7F2DE6934A710779C70C7DB82DFEA43922D574682F3E377
+29EBCD6A543F5786F7F88F85D84329C6730D62E9EC2D9DBA36141D62EEF6A074DFBBAA10466B5F
+D0DD37FFE57581E184C77ECAF0031313F92A306D1A7DD530A1B99498474AE7019A7D7BF5F3B14A
+5BB04063D940770EA1500B9317E81C3BD2A448C7457FAC0B5C76C6E3973A03036879441F9AEDF2
+4FAA5AE4B493B6A44955E44820D88ED4AD4CD6906EC092B0BB5ECE2B6E7D28F40362B6EDD4ECF2
+9FAB42AE3E6B3B957B4C48339C3552A733D697DCE77FEA22420131C1DEA0C9AA83C5B5B2040F6F
+EECEFB998B06D6D055FB50EA8DBE41055A508A313AB9EB6E491103124CDAA4143CD3E93D5CC1EC
+4EA082BB9155D4E64F9A5907293DCB23478E478822318EEB966EA718433F700708F35BCAC3D41D
+F0877A2C55685B6D6DAF2A063FE36F4A261C94884FA2D0541E4B22DC114802F8D8592A4FD36931
+8926469DC1918E3421675B380BDA342E0CFCD889E46B1A4106A742CC956511D6F89B3F9D78E06E
+4D69D61DB7C2993921BFC75559131B62B2D7DFCBAF38345CCA43F9AE90035F47B155D07E922E73
+4C9370815F861D86DE46704F21333542A085921D8353F87E0B68368A407799D26D1995E6D3D4AA
+C2C4EA61BAC8C932A6DF934D2F285941957748ECC62E4C11B835E3014BA0B82109A3826BD3EC47
+0B4608727981E2E50B2FA2DE23739256947D7985BB37D0621D0E539B617A62E5266D5AF11CD0B0
+DD78E18D815289C9796402E36887FCE5FA3436AA9E6FB5A47FF13ABD9CE8232484F66764A0D815
+38F87F29F90C54E8178FA40C7097CFF2294448EF93015F84BAC6AF06E5C4BD5F7912F4AA4D3288
+18561D69CCF8DA157891FB97FCA4D879AC2714D4167BC6F0485392A8C94E130C0C5A422045D333
+51EC64107F2B9ACAA94950754B4EFF6078790D59FCE323C1B82D4AB559EB4BD9B394902B987A76
+C6B2E0D118BD9247F8481466AB460A33234074823A4A275C8C30E0C11465052D0A2DCFCEEA7CB5
+E01B4A3E629A5AB9C4D707F651958F5FB4AFD075C42BC5B527D9170F2F24C3A31964C5353DF5D9
+9C2F493C21EA98C84CD89C87BF76EE6BAEA8FBB5FF9C10D9765BF6F130262A2DAE4C3705C8D849
+E92FDFF8CF65FF6E39CBC716235407C1DCA40325331E5EEE8995C10BD0241442ECB330C4FD35C1
+2F56EEE41A3E380F5B7DF3C977EE4B03A4C98BEEE658B0348CB8174AB87C48E19DDB47766A0481
+F83F322B166F4CBD3D1D1AF6BE3D2ACB5DF8F1369B4892624565FC298B70D8C0D60AF1428CAD1A
+3B5499F6F551F5DEB6749EC08D9B25CA3C814EAE8CE275AA107D2B3FE7940333765FC695D69446
+19B8F6DD65BE8053E7D09A311B327DF81CE3C3EBA3848B174C4FBCAF835632882E6D13C1FA0A08
+66F209A9ECA8725F5F61C05CCE44851589140722DFEC8A93FA0A50A883132F28DB7AF23FDDA8FD
+C887FA543D7380FC3563D88A7B243A322F4835EA96FA1D9937E352D0E19B9DE2DABB7BDCB95B24
+645CB40B7122CE2FCB811F47D02BBFF7FD7CF8EF2EAE02598AE06C27913E3DF26CCC1436F14CE4
+12CDF0500B8EE2FD3799B56C53D535DB1F33C09C11A10C0B4C6B51EFE8B4A4D2353330B3A0D631
+E601832C84CE4E3D1BE09915F816EED772DC48063612983C74999327F949FFCFA845B0BC578EA6
+82B9D3DEDA9E31C282E63A43396E4FFE9AD516E3459359173CB76975767790702D941770331302
+CE49D74F7DCF5FF11625260A1543F955EAC4A5E411014180C4D23345B4945849161881665D0823
+2C5A8E6D6615E4067EA187AFF45E42C65B628E9A23BD87A5D76224F2A148B3D2CB34BA0B6430AA
+5A65C36E29943239A8FD1942919D5936706FDEF405A68F5E15B6C6F47775CBD59ECA8CC352E5A8
+73C7B43799389CFF8548048636D455EBE24397ACAEC6E4022B38793A061FB6A434729AF1FDA482
+3E5B9B5D395CA6719EACB0A1321CFCDC9FFA40476AD6E7850D0EBA27F1D8AE8430FACB5F1EAD33
+4FB4EAE2BD44FC96A98CE3840865DA289734EE141760F2FA6BDDE04BF80E9BFB22B12CF5694FC6
+578352737A39094180813BD2E24B4AA9AF48879036A6AFCB34AABC59295D1121EFA702D368DB01
+0AECC8AA31B6B44674C01AF150C97DEAB0894A7A3A645696311DD29FD363EE2B4ECC22D2A88454
+AD179B8F5B8A59C4FE2765A276A303FB9B54B908E63963DF930D24F118B355F41707145E1C2FC6
+6046F14A283090CA40AC9B21BD6D9D884843D9CA4ACF0C4D10BC83FCAD4BCDC4323C0A0AE69489
+5AF0C57E93293F1D0D1EFF86A35BF3E722DFD1611B5CA368857C7C013561FC1E567689011EDD8B
+6A5124FF3F3FF928C5A4CFE6F152052E40F261F88FDF06E99FC4A9F5B183E06D2D0480493F0F81
+4DE0A41D2E565DCB72B2B828AA1A189B9B3488C8AA8371740771F0D7C33B34562A5AF7BB10952B
+B036AA97CCA014B7F18CE622F4BBD3901DEF158F1715703BF4E07B5840DFDE996E037B5D180578
+52EED2475B32BED7F5716531AC997CF174AA85BBC64A56B4A3980479BC5D3411976768A11EC3CC
+11384A58EA668E771C836B493088F1A572BD1C4B878882B9BE98B27E4B617F5CD96755E4DA9AE0
+1E09DC5C36CA0FE4A50388459C62C8980A136D9B99AF8B503A5C155166BA36E2A6FA87913A44AA
+FA71222F1A90E144DBF221DED568233DA86A36D717B068A30F0828633BE0C567B212BB0EBBA9D9
+F590F9D2F8FA71B084AA65BC76F01FC9221EDDB4996D777B88C8A1AE5F96AAA9157E60E7204136
+15D451FB2507AE4F95AE248353C089CB74EC50AF335994D4A9C13C918598850E482022C947D51E
+E39B062DFB3E66E23A1A3AFBE534F5022EAD863D7BC47A4FA41BBCE35BCE1E9B9D5BDF66E5B886
+DE5C37868A4333998860EDE231640BAF32ACB1B31B8CF0FBBCB9427585C213198C8ED78E0C38DB
+9D00A0B3AFBE03CFAF6204A41D5775208F5514E3DC69237C954C6D6226828B89ED66D573E8D33F
+8EDDC83B161984D3257A071492F87622B68D391215B1A8027578109E5856FDDDB367620BC0E945
+8EDF45DFD93440CBEA0D8C6DB9212701FFE13B68732F11C9D7DDDB3B4CD04D8246D27CAC0C4F89
+B1463C20FE17694CB9FB125F0C400388225D7882A48CEF7D54540C21ED0A8ABFDE45D18CFD0E5D
+B72F131597382084C40BB00E9712BA3EA15D3FEAFE1C023661F52B83B2771896F7C2783090497D
+2B348960D4FACB004B1E5EE5F1FCEEC842BD70710EE5F16DE76F7DCB69132237BE4C753BFB7D8C
+6EA19844F0707F8553B3580B7BED9F81638E19088BE87353E09A5DC20ECC57BD8EFCA710075ED0
+35D6511E3683B8683DBAB621A4EC9FB144EDB28F26AF956C74BDA72FBCB07DD57F3AF40855CF04
+CBBE004CDC32E01010CEEF07C3B7F8A8916F19DC5B9406913E49A841A8C10620BA97288221173D
+E6D6C8811592225E83D9C92A0357E3141FECE531A950C00D79C5B9CE6073719B1D978272F661DB
+4101C42138ED9EE35F31588B7EB0FA6EB42C0B05440FAC2C6A2A583AAE368D85A0C6699172441D
+938BB00A5013E90F1F4D88318A44A6D661DEC328C1D5D410D0BBF309D7AD5D89CBE7A16C2B44C8
+9589D2EC32B466D21C9B3AC0744B2F3752A1FF6FD700C6D76F997C728CC0DEAFD33B675C145D61
+75B95BDDFF9F9640E3C66EE375994F01837B38D8F0800751CADD77EEE9BCE7302F4DCE3ED9C543
+34347A339956D85119039AF08292E029199F01FEB17C82182FBB82604EAECC1F9CC32C40E73EB1
+2B63DA1C7B3D8F2990597582184A0A9D4BC8C82D5662AC1D198AFB8E603DA0F32C5E4F26AB3355
+EFE976AF2558393A1D83C761875D07B47590E903EB846DCCCFBE2532114BE43ADAD1230AD073B3
+113F6A9386D2AD7DE020A411334434EC8823C55E62F0F9D977726D664705E5358FDC4D7F3D59E5
+74A10FF03618490620440E8CDDBAA83F7F5FF77A057D1350183124A4EEC3FC6756195DF22315C9
+6429DCFAEBFA465A54F1E2751701F0549AF666970B1F2993B25F0059410D9F9BF71652182797A2
+87564970E198D1A625AE44F42F5A9AB7B2D8A601D341A030A6709379235D1CBE5327DBAFAE6BCB
+5F4F3FCFCE928A3B7A62E15F43CC5502E0A13C16273A711045A454151A1E5BF01850DF3A0D79DD
+24D767C8C1BA70011FCCE02A3BC5F7AC72A5832763629CB662D1850184552927EDB95B3F1B6505
+C6D97BB7E043E1DD3A93412C820E6384A33B4DEF4143005AF5ECE6ECC9B38EF5D524E99E79982B
+156086B2D3DC8575087B94DF858130B8BC92EFD289EBC7A965A3A8AC4DBF0377061C9103431479
+96E3D1A4D70AC332DF024BDB0ED428DC142FB6060D11842DAAEBBB8006F0562526873D3EC79270
+6E4B4DD0222AB2376544080135673B00E08A8A6176D3E593F45D9FD0FAF05C9DCA343FC31A6C44
+9BB1A4E14E61228684349EB0A3AB81FA898240445E30E44DD774BE7250E289D5E95D7847798F82
+CAEAFB5DBE478FEAB432EF59C454E167BA9876D4C9C7D4050A7116F098A1221FC9ADB3EB96C14F
+418208D9FA72ABECBECFF2064769893B48B1CD8B717E2FF6CF0DF32F0A27B7EC89C31C5652E783
+4F0ECBA2CC75007627664EC859B06A7791F95701E64067550B2F4DAA60AD6C5EF219086BA19E7E
+559BF132BCAB712887B9C8D9B73CFE1CA214000AF80B507441B553653F5A2A984E0F9E20A084C2
+C30ABA034D5F3C0203983538A40C43C085F6EA2AC3A5116289A5437D2EAFE6A870D2A6F7621C3B
+86A8C3F56F1BE23D9AD3885E8EDFC2F67FDFFC3B66B5B89A40CBB09221339DA7D9AAAD83A63F3C
+911430C4783C18FEF7F8453433350A86318750ABDF11FF1CA70EF03C9CD3043A856A2147B31A45
+EA2503DD92A7F54E9B303039534655F1A27BCCD8B3067266CF9F0E6F6842D09D8380E96C8E898C
+24856A05246E7CD800052A197429C33F75C8BD077272C65345F8BAF4B03F3D8C482018012621D4
+19F45D01B13A011AE1826675A5F7CC816E19F23DCDE8EB537A582BBDF856452D3422C0A49FDA98
+387565432867C1260BAC27B48222808C0CC6491FE4E650AB3687B5D945CC174B62605BC021B9D0
+35A04A007175BBE4DD0DBD10B593EE9EE52F39E07DFFDBDAC32B1CA6A5D0BC839952614DA47AC6
+2CB97FE17F3A2C8376A415EDCDEEA25E802F1379C701EC26F6EACAB439F441E2670D2E1C8F43DC
+C32331D3F5C028ED991B1366C397A42BC1EBC0A62D61B47A29BF72EC6D6678AC219B66ACA8BD92
+EE42CA7E42C6E45144FFF34440E202ECC5E5126D3E9AA508476A98B5C6C6A010FFDE519C38E487
+856449477B95E55B5DF590B5238D125E1CE8F46EE2C89877E2A870BB11FF39C6739D6FB62BB432
+8DBE9BAFCE60D73EA64CC2A3A8042FEF481A2706B97AF19FC8885EAD2CAB2693CBAE77261E43A0
+6EDB624679AC8D96634854DF1A3D2B9F8C080FDF3D4DB376702C711C49BDDEF38070DC124E4E22
+B4516C3B456601421678F154462F21E9A2F3C1BC18F1A784B0777536C01247C1DA885BCBD881B2
+8F54F845133874340D5DCE9EE984EE355E117CDF9A2230AEBB13BC2B1B983B7553B3031D33FBDF
+ED4930D9E1251B25CAEB69367510B6F45325D94CAD80C72EF7630E80F3EB9558BC3867FA664170
+FCD1ADF65389219FC322B74980F8DFE4EEB537887EB9540081A77CC7F89DFC1B0249555B424907
+8C0901416648B1EE12062938091111C8D628BA96DFE0E6E79F86DFBA815D1546A502889DFB617B
+EB5975963E0C8A5E11683F81E67979A153D641EE83D24D59376006A51994E06434D2C65E540CC0
+A1FF0C0225904BE1991AD2602951A149DCC3E9FCB4C32DC09886DC3CB5C1A4AC5CCCDB77B54E6B
+23F23FDDA8FDEBC0D896974F2D0A93D2E6527073B238C9F9C935FACF476F10338CBC1DDB37B4EF
+04B3FAFDE801A3CE34029C817F91480D188C5D2174B1A7B93731C0FD4C1EDD37F86AF1D27330C7
+F1F60153BB0A1961E27D92E297C0478B69653E9CCA63C5056CB4EF66525E8F15F6A8FCA480B427
+C0FF7DEEC7819D476E0994DE182BA040659FD91FD5F5D369BDFB7ECB41CB9EC0F6A9BB1D74B39E
+707F653C0B4101CB1E5F4CC8301E4711E8A85E325EF6B46602283DFAD9FC4ACF4105A0821888FE
+D1C52AC2FF53B2E7D2C866412A6DA1CC5C4C4EACE3AFDDCD930577D9062598AB0DAD02C9FB6182
+A11CFA4E8B5B9C5CD0527C4C7CF431A0FF87D88F19CCDC0EBEEF7C4679C74BCEE1E98434548A8F
+53CD70A089B16F1CAA62239D519E37F887A30BF5E3C507ECD221BFA73482667E9E81710064DD81
+10E8DDA96DE7860FD8FA0ECCD8EF063ADA63F3358BE93D239615ABB64F27D4EF3452784C5931A0
+110484481A2DEDA2DA7B540BA96C5A8E73938A2ED14F86631F0C96FEC991D0EE49FA4F2D0EF6CB
+90BAC9C0D570DDDAF6D34F95249D4A610929F0329CA85035FF2F876B779DC3E8C5F13F55FBF8C3
+119B1A0B98C6D81D162588351732EAD6697B2CA2BA681AB91E7A8A1372332E7549B3FD5FC8A008
+6B7CB0B3D11CAEA3599E67B18C7FBDF422BC83B4B51DD1B23E0B51B258759E4640F6E83CF86D90
+7E9098AB5D0AEC5FD0CF24EDC743A71E675555574BC61980BA0199BCC21EA72C9BFC1EF19A96C2
+573B6737CA7CE023ED9577E2D2134F17DE4479336F5090608119641E649117A0FDFFCD2238FAFE
+F7BB4B4FD24513C2B16E59080C81EF1E1C5706112563228ABD336F59AB155E55068D10B76867CA
+D3BD184F0C98591E4E454282753FCD50FD461780040A473A854C0085CE15EC03DAD728D930F4EA
+6DDA9DEF3201649D064891AD93335E954A1681A9F3D33F1E546E84D6A85A8601E5624051B05EA8
+1E69A739C7432B185706A7CDD5C26F0C5DA88AAFEB9A0B0FC9012A45BE03BB9C7E437B08DE5958
+C7D1141F82D2B5981D734499C0B710586D3E3D6DFD13662D38663EEA1D1F284C471500613D62E8
+3B2402A72EC256B12B668B5E4BA5206CF17810013D7107E7AFA4D9BF3FCF384BCE21A749C789C7
+5166227D590F9A349DBF283634B8BFFC4DEC6F5526359882D8E4FADE5E31677AC0C67D552DDE51
+1AEAC26410761699DF26B5C4F542B65DB8D1A10B7059771240DF26316A821797D24C86F0EAFE48
+EACA45BF173F2B304B6027476C2DC2A01F4A7322CF94A8BD4EA58F98F57A35F079A9B8DF2A3607
+E18301B62A7BA04AA6A3E02C910B514DDD61B474F7F2981E783BAE9905CC4A08BD212760E01350
+312A871126749C2149809F1C017C3D755492C0759239C72CBF2589080F911028087768E9033252
+B66B4FDF37FC4C6C7E7C6BF963836458C05926EC336836DE05804591A71E81B2896DB75007C633
+C515C3C26CAF458D701B060C0797825D7B54919C735A509827E6D167224348C93D5DE809E14D90
+DE91ABFDF86E12B703F3F57C1537832DFD7F8D76C55FE5D511884A5590DB35893A23DE9DB9E5D8
+43F2D3241E3F1FAEFBBB863AC123484E7B2216BB20E9E4D2ADDD1437B65867964DB9D97B93D033
+B09EE55CA932E29B8936B39026B53CCE01B56A7B0F34B247FE68F779C18A51B400563BA6FC334D
+617455B40C246F8880AF2B2735D4D433358C49064C9728498946CC69DE375201F25514C3837000
+20DEE11651591F3D3D6B7C21D4C59386419D4CE4AA05D10F111932DC5BFFEAD87D9922B3EE9C4D
+CFB8FED6DEE5CDE2A20675CF4C0B0DEA2D25B6D1557A1A4C89D42874B722DE4BEFA26B13143573
+174D2F7F747336D2A8C7D859A2DD71C0BE4D2EA59CB314746134B22D1F0F9743398FCD8A231936
+2AE49CD01A3E60A460B27AB7D61F5E3317E5B66083711F05418C5B677A11E72FC045C499769C98
+7D05DFBA5FD257B8F63EE3E10B02879123A74F98A368D4451BC9B9DFFE0350BDC7582AAF097C90
+07B1D66B703DF9094EDCFA74B1AE8D8FD27767696ABDAE507C3BF4C906B0A0DA5D9D2CDE896D7F
+5007BAED283E12627663C895083D3D72A7AC9476E2AE18E6F896624F94AD5ECA7375F15747A76E
+636D7795CFFD9C7E46DB4D9A515B8025BE8C8D9211CE4C3F21137710D98D28A7AA4EB784D7BFBF
+38CDF100E5A4671FD610673D38A9DE644188C636A568987B6ED2B2C28694A04AAD05B847BD9E9F
+AD7A24EA10CF6868F70FA1C2E33768FD2AB6A4D923451DC0BBFC094B4F699AE6CDCD5C71779A9B
+69AFF54E05A7C6D565F0DD6B0EC10DA15C4E2421F37DCEF1684BCFBDB2D359C73EB3C12F3C82E0
+53E35AEE44AF734322FA93589B80DEA844C25EEF7F6D2B6607164FC706474FB434DD253A91CC6A
+15492D3AF9CB1238951645B545345B31D3752DE66CB29FE9EFC9B26D18AC9C08BF0DA2D984B3B3
+C05BD0535885638502BDA5E7D32C03CB62EBC362765220F0786D46C48B5B27BF9633560FA4F56B
+D6B2B654272BBE6336C39E925EF57AB45FF6B1DF1A527152E00B1AB7C340B358C8C60A866FFAD0
+554FF408EC7289246D873B2F7BC17169EB1CAD2543E23090C3D471A84AC00739261D89DA3D4826
+A0DE18B9D1CE541C103DB304DA1F3A120EDA98BE478BF08A0FD55EDC484E80D999AE030F55CE20
+D224647BBCF94D85107C413BECA8CBFE1F62CADDC2C0D90A2B73C7860194EF688966D85DC3A0CB
+4D3C33ABEE705A6714949D6160475BBD7B45065C5AF7538DE81B5BEAC58648C70BC5D31707A4E3
+EE0DC6597236087027754BFCAF7FE0B06B278E328E32FA161813F07824A285CE0C7F3FF4ADB267
+5D8E58E2B8E75D793F3D730E58167DA6CC88E5F42210A51C6A3FF3DAF70B91B540226332AFBC48
+6DDD5498C8BB9BC9FC6E6F99432E6D0E33954C9362B7D718FE5AB48E242734F12B8F296A559B14
+DC8F2ADD1C41CFD9C35EB4884C3C31663F67E742E4FF102B30EE758C0F1EF509FA26C4697D779C
+15A617AD7F4234CC30CBA41351B749CA4B950A1A7197E48043A9D34C8DCFD395BAA9E8EE4BED28
+7499EF1F9082A734BB205CE35DBD6B36E68C61BAF7BC9DE3696015B6A2FE9FC58A582D2908D123
+C51A665B2DA20AF6EDA0B8CB5C5DD175A836C0B599C17484FB81307F5885B93EDA98E9A74F2D42
+C0CF7A4927D8413543D5D1F0AEEFC50A98B36A3C989F189B0842BB68716751883874C20CEFDFD2
+713240BD0B3AA6535A857A41D8EB7C0C21FE7EB0E8C53B2E5802C3D4FF15ED63EA26BD7266EC31
+C93F44E9221B53023F907A0935303EC1823887A24A58F4055A8602709EF5768CA72A70462D19DF
+18005C5CA20C1B4BB05A4FD95E807B5B6BC31DA5211303392669F795D11401FE70A542539AFDBF
+2594D73DDE8158CFCFBD545ACA831D1E935482BD72F3B7CEC29160258E5D7A76BC0EF7815A80E5
+CA9069888822D688C3C81A102E11767BACB5B70EDD6CA3CF1B9FC66229F4D0E8EF474C4BCE6933
+4EDCA9ECF658E4B8381DD1DEAB850AACCD54DD6426FDA1BD21CBF89D61442BEDC36AE870695F0B
+3D10B84455EFE1D55799B42B6F3C9FF671922428ABC646091B0231C98FC1C1DA83240BAEBA9253
+2E9CFD458D338878A8381A0B2DD85F967071BF3C6C5218F475F047276CDCE1AAD34E9BB16B753A
+A337600F88FFF2A4DFAC401E4E347A4969333E6F8EC225FCA37AFFF73AF88003E92B71752AB449
+EDD7114A25550ECCBA7ACEB0AC3B241513B444CFCCADA9EB4A22E0E0D10418635B4F50FC85B392
+FA58AFB0B0380A811BC41633574386D02C69B0F3111E35F464A6388FF507F8E41F197FCCD30A0C
+C99E76A9663943E0DF73BC8C39941F762DEFD0AF79A8C45CB9326F0AD43F742A05C38593B67993
+073F230E9B8AE837B7DDE865807BDC70EA18FBE6E2A6FD3F03DCA4E8F30A19ACEB398A1BE480BD
+D285D7133BA3D14DB51EF25F05F55D77E76EBBC43D366292003DA1EC7F7634D7B831A2D00150B7
+38AF7593F65FF2B285207B6429D490E01FAD17111AD9470547C71D4A597A89A990C5C725A04DFF
+E07365E928AB34127268178A992B05D834FB060281FFE2DAC887480F1A5F1B48FC163AE63D4C8B
+DA7EA1E3118D659FB0DABFFFE49686EFA4235A6011737B32B86C9F507AC005D915EC38D71A1A36
+B82699C576F419327080DE3ED109DF6DDEA394B792A2598C3EA8AA33B343E77F423EA507E81DCE
+7CD7076C724275F52AB661A53F22F14F0884EF6CDDD6CB98A1443FE8E3354D702A90143AE87573
+655879070102955A6DAAC3C026178E5EE5039E1D145FBDE91D3287B77A9A6BA0578907A138231A
+5E1C5CA4E6B1B7E27E73889102F9B47F7433BDBDAF1C7D8B1FF1A25FC0184EEC14EC17131B51E8
+FE30509B29A2FFA4B939B0DD471E898B9240ABF72282D5C999D266D0E920329F4ADC43335133B1
+8DE629DC27FFBF4BCD9DE710D2A9E76B6E098644E720644D1ADF60B8E3BD60E64D7EAC86095654
+0F59178958D38A55E3F9EE918F0D04D56EA2CA24E020A0FDDC6B95B6EA71D42FE43E52547B7C2A
+FA60F7A525192C6CD24CE9B780459E8BA2CD1D973E49B9EA463AB68BCEE8F769D05F4C0C558B9D
+0EE27DC6D8E1B5C85ED0D2952660644E4C3EEF3561F1DC4A62013C0F6D20BE98DF7D20EE5C2C86
+275379B808C7F637A160F893669019DD930264A89995901F15395A6420503FB1AF684AEE51AED7
+149682C13D71AAD45184D4C2FFBE43C08D28FB6FB7BF248E80FFB56E9C0DE57AE14ABC19D9F62E
+B9499A1307716A3C3964EDD15FA151816C247D40DCC3D4F53B7F7488D03ED6B921D7D385E0C506
+C20EA931BDEDB72A646AD6913D469DE580F71BEEDD44E552AEE8030CC260B4C0AC0DBE1276640C
+8FB29544D22847F5217ED08A4FF6DE50457BE1237B42E046D705967D50D704943748CE6754B5D9
+73EF180C39B25D67E4FD49C7F9D4B83EA879C3F511D20E41E5F6B3D79DBCC7F31469FB3590B2DB
+B4E4A3ED982DCE15FA803E7B379AAD25E6C7FC5E0F300C45DE57F5B4FF824D4080287FF17734C0
+4F34D6E54556C32C889BFCAD3E893BFE262B066A2EC8ECDEF0D73F0A32641A4B3072FDD4C125A2
+3AFD976C7F30D814AACB16B43BF85D8CDF41323AEA744785AB7AC861020E6EEF0F06B7AEFAD039
+DDC78289573425C26ACF708A9518C0D0DB29A96C7493C8F5151257663BDCF72C31F7DB3DBE9BC7
+6C4CAA6985197EA73AFEB44D50474290E2C94CCC44A38CF2824B6ED62534AF6222B9D4ED2B6C2D
+C3648291C10DBD71108E2DE28361D2DC57F9B525BC757C9DC4BCE06E70E1C2312E5E6D0F9A99EE
+F5BF71BEF695A81D9BE6B3BCEE2A6C456E8F5782A5AE75B04ED86FBAEE7AD5DF2AF741270B5836
+02E14E4F8D33A65DA39DBAB820B1E280F24F752E3E47EAB0AEF8E7387B0B3AC759E3A980578555
+1FDF5246B6F5D3587713CF623A4AD2FB7E0DD08759033184B7E004D9B1DB433910BB6F0CBC5144
+791266B0615BF0C3BD5E50D78ACE20034A76674FBC34256C9C5578F008C30411612A4FBE2FB66F
+0412E2BBE7EFB80B94AF4F5FAC48A010F452FD553886E7277AE980C26F392D8A34D76753469855
+3928FB2BC28879C962CC8CC28DF8DBE84F006A70191EB119CDE1EA43EEDB9555EC43F8B34F5519
+2FCA0D043711BBA440A398ED87F69E4B87B8D0C6DB10737A797D60B5FB1A68AA1215E68FE7E121
+5DF1A057F35BDD7A37A9B7A33A4A26D493703C788691C20309FE28C168C776AF19AD26BB72A494
+F370A732947719B17250549D1D7DEC494BE6D04E50FCD60BA0C9556FC7FB16C46D1161B0D27054
+556B1CDDEE552EED1DD77F784481BFC8E6D3224829CDE96ABF7E926A1225AD8AFB7C224D4FC96C
+8DE6A89D71835638546D5E4C7843935BD04AE04241EB57A564904E1EFD53B6349E639B01068CAE
+31E4BAE050E2BFBC7950E10A17636AD60CA2F243BC032F051C1D4C116F14BFC751921176F43C10
+F1336FBD019A9549EAA27A8212001BA6DE9ADC300F3DBA90F6F83B4EB5D4796E42070A2E126432
+658CDB585D710BD453BDA400E7BA0165FD80D72B1811F8DAAF62AA057BCDF707D6C09D0B67879B
+4FCF9B767F108929EE818747EE309363D0FD43D82A17CD46988DD59EEC3C7C9EAEB3D473487EB6
+2A726236D12E2A602E28FE1CCB895503B5B4C32CF255EF9BA8DA91F206E9D8B10F2BAF61D98B62
+2A69BA0B424714F4D4768989A15E59106ACFF2965A7084645905E151923B0154DD76C6466A9290
+EBDA330BD604DDE15EABAD4F24E07A7A8F74F728A0880519B31796F02DD72C71685470F6FBBAC0
+64ED66EE1CFB6204FC7C1FCA691508E01208419F746490FC8DF7A037E4E7C8D141E5454920DB8A
+000FEEE46058AE270F82231D7812B420028B2B3E59A490724593F5848F23BC2AE8432CE5D97423
+F17B63E67B6EBFE9345AAE08501D7EFDA518F0D2F4AC5B9DF01C1FCC1DDFEA712A5EAF9945BE40
+32D14112FC92B75C08F3DD7BF5B483599FCF1BB0F5B24D9C0E7B162CD30BD08F04034DAE7C6163
+E8D0AA810C50931E7A3B5C2AEFDC1C694BBDA5FB4CE355D34DF77A38168F14064D1459ACE6124C
+6F09501807D1B2F4AC124E22F0419E324BF0918EBC97E3439F8D38CC2558781A02B9B677567BE8
+39CE6761DF689738D509D0560E4A688B0376112BE48FE6BBA3D907788EA90F4867B92717EE8876
+9C70311116CA41EDE1F85E36465CC79387D179DF7D32F4BD512F9612446A71BE49073B10519222
+A1E01819B6E5739F35C4B14D645CC54E3B756764F7CC050C733FA651200EA68C0580D71F427940
+11C9CC3D610691D534F35E80DB9A38D2F9D507CC03D72E17A7164A287A8C8C869C41FE42F2890F
+08306371FA7381E8FA43C02F3B1682B64AE81D57EF00BB32CD0D4FCD8548AA6CE2CB03A5CBA053
+0181A109B9DBE4ED2C35582810BCB95D6188C670F166F7D7F1FE3AD02F465EE98E07D94EAFFB97
+16D4A4B17C956263FF0B9FFAA476BF9C2BAF11BEF1783C22E93EF6F210B974660961E05CE4476A
+0A04C98FC58C5ED5C43FF35CF63A850C0C1CF74C6A3AD73EBF6202E30DCC4D06A82F2DC1043E00
+193F4526AAE238D1C214837B9FAE2D16C78DB98208BCEEF5994AB1E932DE21AF37230BF1D9F12C
+DFBEE1634B9D8C2BF17528100F3EF6E71D27A503F76B0294CE0E777CB6DF0CF7D0CC53A1B89DBE
+781516416E6C344FB3F517D82A64F2EBB84790A91B79E1861F5D1DDF95247FE851E2E75B74C03A
+067C36346D141C02D3CDF3C9CC367BAC62B7B0A1A5C9B0D6A2FE5EFE4B0AB34A651FAA4E511BAB
+BDAFCD59089A9883D389CE
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+cleartomark{restore}if
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/start {view_dict begin initials} def
+%%EOF